0


Yolov5训练指南—CoCo格式数据集

Yolov5训练指南—CoCo格式数据集

1 准备工作

  1. 训练Yolo模型要准备的文件及文件格式如下:/trianing # 根目录 /datasets # 数据集目录(可以任意取名) /images /train /val /labels /train /val /yolov5
  2. 先创建一个training文件夹mkdir training/
  3. 在training文件夹下使用git clone把yolov5克隆下来并安装依赖cd training``````git clone clone https://github.com/ultralytics/yolov5``````pip install -qr requirements.txt
  4. 检查pytorch和torchvision的版本pip install --upgrade torch``````pip install --upgrade torchvision
  5. 检查label是否连续,如不连续需要重新编码
  6. 使用Weights & Bias进行可视化,其中login的API可以在Weights & Biases上获取。%load_ext tensorboard``````%tensorboard --logdir /kaggle/training/yolov5/runs``````%pip install -q --upgrade wandb``````import wandbwandb.login()

2 将coco数据集转换为yolo数据集

  1. 使用json.load(open(file_path,'r'))读取数据
  2. 创建一个csv存放图片的id和文件名
  3. 读取2创建的csv,用train_test_split来切分训练集和验证集
  4. 在切分出来的trian和test文件中分别新增一列,用来标记该图片为训练图片还是测试图片train['split']='train'``````val['split']='val'``````df = pd.concat([trian,val],axis=0).rest_index(drop=True)
  5. 将每张图片的标签单独存放到各自的.txt文件中,其中coco数据集的annotation是[lowest_x,lowest_y,w,h],而yolo的annotation要求[center_x,center_y,w,h],使用以下函数:defcoco2yolo(image_w,image_h,annotation):"""Convert coco format data into yolo format data. Note: x,y in coco format are lowest left x and y. x,y in yolo format are center x,y. """ x,y,w,h = annotation['bbox'] x =(x+w)/2.0 y =(y+h)/2.0return(x/image_w,y/image_h,w/image_w,h/image_h)
  6. 在training目录下创建dataset文件夹os.makedirs('/kaggle/training/cowboy/images/train', exist_ok=True)``````os.makedirs('/kaggle/training/cowboy/images/test', exist_ok=True)``````os.makedirs('/kaggle/training/cowboy/labels/train', exist_ok=True)``````os.makedirs('/kaggle/training/cowboy/labels/test', exist_ok=True)
  7. 将对应的图片和标签复制到train和test文件夹下
  8. 创建一个.ymal文件,该文件用于存放: 1)训练数据和测试数据的路径 2)类别总数 3)类别对应的名称data_yaml =dict(train='/kaggle/training/cowboy/images/train/',val='/kaggle/training/cowboy/images/test/',nc=5,names=['belt','sunglasses','boot','cowboy_hat','jacket'])withopen('/kaggle/training/yolov5/data/data.yaml','w')as outfile: yaml.dump(data_yaml, outfile, default_flow_style=True)

3 训练参数定义

参数如下:

  1. lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
  2. lrf: 0.2 # final OneCycleLR learning rate (lr0 * lrf)
  3. momentum: 0.937 # SGD momentum/Adam beta1
  4. weight_decay: 0.0005 # optimizer weight decay 5e-4
  5. warmup_epochs: 3.0 # warmup epochs (fractions ok)
  6. warmup_momentum: 0.8 # warmup initial momentum
  7. warmup_bias_lr: 0.1 # warmup initial bias lr
  8. box: 0.05 # box loss gain
  9. cls: 0.5 # cls loss gain
  10. cls_pw: 1.0 # cls BCELoss positive_weight
  11. obj: 1.0 # obj loss gain (scale with pixels)
  12. obj_pw: 1.0 # obj BCELoss positive_weight
  13. iou_t: 0.20 # IoU training threshold
  14. anchor_t: 4.0 # anchor-multiple threshold
  15. # anchors: 3 # anchors per output layer (0 to ignore)
  16. fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
  17. hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
  18. hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
  19. hsv_v: 0.4 # image HSV-Value augmentation (fraction)
  20. degrees: 0.0 # image rotation (+/- deg)
  21. translate: 0.1 # image translation (+/- fraction)
  22. scale: 0.5 # image scale (+/- gain)
  23. shear: 0.0 # image shear (+/- deg)
  24. perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
  25. flipud: 0.0 # image flip up-down (probability)
  26. fliplr: 0.5 # image flip left-right (probability)
  27. mosaic: 1.0 # image mosaic (probability)
  28. mixup: 0.0 # image mixup (probability)
  29. copy_paste: 0.0 # segment copy-paste (probability)

4 训练模型

选择模型的时候,可以选择不同大小的模型:Yolov5

  1. BATCH_SIZE =32# wisely choose, use the largest size that can feed up all your gpu ram
  2. EPOCHS =5
  3. MODEL ='yolov5m.pt'# 5s, 5m 5l
  4. name =f'{MODEL}_BS_{BATCH_SIZE}_EP_{EPOCHS}'# 在yolov5目录下
  5. !python train.py --batch {BATCH_SIZE} \
  6. --epochs {EPOCHS} \
  7. --data data.yaml \
  8. --weights {MODEL} \
  9. --save-period 1 \
  10. --project /kaggle/working/kaggle-cwoboy \
  11. --name {name} \
  12. -- workers 4

5 预测

  1. 训练好的模型存放在W&B中,把最好的模型下载下来并上传到kaggle
  2. 将测试图片放到VALID_PATH文件夹下
  3. 回到yolov5路径下跑下面这行代码进行预测!python detect.py --weights {MODEL_PATH} \ --source {VALID_PATH} \ --conf 0.546 \ --iou-thres 0.5 \ --save-txt \ --save-conf \ --augment

最终预测结果在

  1. /kaggle/training/yolov5/runs/detect/exp/labels/
  1. 若要转换成coco的坐标使用下面这个函数defyolo2cc_bbox(img_width, img_height, bbox): x =(bbox[0]- bbox[2]*0.5)* img_width y =(bbox[1]- bbox[3]*0.5)* img_height w = bbox[2]* img_width h = bbox[3]* img_height return(x, y, w, h)
  2. 若之前对标签进行了编码,要把标签再映射回去
  3. 若要可视化结果可以使用Opencv或PIL读取yolov5/runs/detect/exp/下的照片。m = Image.open('/kaggle/training/yolov5/runs/detect/exp/0007c3f55f707547.jpg')im在这里插入图片描述

本文转载自: https://blog.csdn.net/weixin_44027006/article/details/124457469
版权归原作者 Arvin Ou 所有, 如有侵权,请联系我们删除。

“Yolov5训练指南—CoCo格式数据集”的评论:

还没有评论