• Pytorch_yoloV5预测数据非结构数据结构化


    前置条件

     配置好环境后不用修改代码。即可实现,实时目标检测多达80种物
    

    离线的情况

       下载yoloV5的代码
      01.下载网络上的模型
      02.  在detect 所在的文件夹下,创建 weights ,并把模型放在这个位置
         ./weights
      03.执行代码
         python detect.py --weights ./weights/yolov5s.pt --source ./data/images/ --classes 5 --save-txt --save-crop
      
      04.查看预测的结果
         即save_txt以及save_conf等,将这两个参数设置为True后,能在预测的文件里面找到中心坐标以及置信度了
    	 runs/detect/exp3/labels
    

    修改类别

      python detect.py --weights ./weights/yolov5s.pt --source ./data/images/ --classes 0 1 2 3 5 7 9 11 12 --save-txt --save-crop
      
      
      说明:  YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x 按照其所含的残差结构的个数依次增多,网络的特征提取、融合能力不断加强,检测精度得到提高,但相应的时间花费也在增加
    

    自定义类别进行训练

     YOLO 格式的数据集
    

    训练自己的数据集

    1.数据集制作
     数据集自己标注 或者其他类型的数据集转换
    YOLO 格式的数据集 
    YOLO 
      classes.txt 是类的声明,一行一类。
      images 目录包含所有图片 (目前支持png和jpg格式数据)
      labels 目录包含所有标签(与图片同名的txt格式数据)
    yolo的bbox数据格式为 (x_center, y_center, w, h);		  
    边框坐标编码[x_center, y_center, width, height]
     这4个值是经过数据规范化(normalized )--- 归一化真值框坐标的 txt 文件  
     不规范化是
       [(98 + (322 / 2)), (345 + (117 / 2)), 322, 117]
       =[259, 403.5, 322, 117]
      规范化方法是
       [259 / 640, 403.5 / 480, 322 / 640, 117 / 480]
         return [(max_x + min_x)/(2*w), (max_y + min_y)/(2*h), (max_x - min_x)/w, (max_y - min_y)/h]
    报错      
        labels, shapes, self.segments = zip(*cache.values())
        ValueError: not enough values to unpack (expected 3, got 0	---解决方式: 对标注坐标进行归一化处理	
    
    coco里bbox数据格格式为(x_left, y_top, w, h)  左上角的坐标以及边框的宽度和高度
    
    pascal_voc  边框坐标编码是[x_min, y_min, x_max, y_max]
    x_min和y_min表示边框左上角坐标,x_max和y_max表示边框的右下脚坐标	
    import numpy as np
    def get_box(points):
        min_x = min_y = np.inf
        max_x = max_y = 0
        for x, y in points:
            min_x = min(min_x, flaot(x))
            min_y = min(min_y, y)
            max_x = max(max_x, x)
            max_y = max(max_y, y)
        #return [min_x, min_y, max_x - min_x, max_y - min_y]
    	return [(max_x - min_x)/2, (max_y + min_y)/2, max_x - min_x, max_y - min_y]
    	
    	
      ---yolodata
      --------images
      --------labels
    区分训练集和验证集
      ---traindata
      --------images
      ----------------train
      ----------------val
      --------labels
      ----------------train
      ----------------val		
    	
    01.图像没有标注的元素的,不需要有对应的txt 文件,即标注文件为空的,要移除
        02.自建数据集中有以jpg也有以JPG为结尾的图片
        03.负数class是不能被读入的	
    	
    2.配置一份属于自己数据集的yaml文件。复制data目录下的coco.yaml,我这里命名为fish.yaml 主要修改三个地方
     nc 里的数字代表数据集的类别,  names 里为自己数据集标注的类名称
     
     
     3.修改model.yaml文件
       yolov5s.yaml,只需要将nc的类别修改为自己需要的即可
       
       
    4.训练train.py  
      weights,yaml,data按照自己所需文件的路径修改即可 epochs迭代次数自己决定 batch_size
            weights: 加载的权重文件(weights文件夹下yolov5m.pt)    weights包含训练过程中最后一次训练好的模型last.pt和历史最佳模型best.pt		
           cfg: 模型配置文件,网络结构(model文件夹下yolov5m_light.yaml)
           data: 数据集配置文件,数据集路径,类名等(datas文件夹下light.yaml)
     python train.py
    python train.py --weights /home/ai/project/yolov5-master/weights/yolov5s.pt \
    --cfg  /home/ai/project/yolov5-master/models/yolov5m_light.yaml  \
    --data /home/ai/project/yolov5-master/data/light.yaml  \
    --epochs 100 \
    --batch-size 5	
      
     
    5.测试detect.py   out
      python detect.py --weights runs/train/exp9/weights/best.pt --source data/Samples/ --device 0 --save-txt
      如果数据量较大,请注释掉detect.py的186-203行
    

    参考

      https://github.com/ultralytics/yolov5/releases
  • 相关阅读:
    android 限定符参考
    Fragment生命周期
    碎片和活动之间通信
    Fragment碎片的使用
    使用Intent传值及回传值
    Calendar 获取年 月 日 时 分 秒
    Python函数:2018-07-30
    Python 字符串 2018-07-27
    Python 异常 2018-08-01
    __future__ 模块 2018-08-09
  • 原文地址:https://www.cnblogs.com/ytwang/p/16199991.html
Copyright © 2020-2023  润新知