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
posted @ 2022-04-28 18:06  辰令  阅读(460)  评论(0编辑  收藏  举报