当前位置:   article > 正文

yolov5的数据集格式 :COCO数据集转换成yolov5训练的数据集格式代码_yolov5数据集格式

yolov5数据集格式

yolov5中数据集存放格式如下图所示

其labels文件夹下,存放的为.txt文件,每个txt名称对应images文件夹下的图片名称,txt中的内容为

如上图所示的一个.txt文件所示,一共有四行,每行对应一个目标框,该txt对应的图片有四个目标框,每行的数值分别对应category_id、归一化的目标框中心坐标x、y,和归一化的目标框w、h。归一化的含义即原来的数值分别除以对应的图片的wide和high。下面的代码可以直接将原先coco数据格式中annotations下json标注文件读取,并生成对应图片的.txt标注文件,保存在./fewshotlogodetection_round1_train_202204/train/annotations文件夹下,以便于用yolov5进行训练

  1. import json
  2. with open('./fewshotlogodetection_round1_train_202204/train/annotations/instances_train2017.json') as f:
  3. Json = json.load(f)
  4. annotations = Json['annotations']
  5. images = Json['images']
  6. image_id_name_dict = {}
  7. image_id_width_dict = {}
  8. image_id_height_dict = {}
  9. for image in images:
  10. image_id_name_dict[image['id']] = image['file_name']
  11. image_id_height_dict[image['id']] = image['height']
  12. image_id_width_dict[image['id']] = image['width']
  13. # print(image_id_name_dict)
  14. for i in range(2476):
  15. for annotation in annotations:
  16. if annotation['image_id'] != i: # i表示第i张照片,数据集共2476
  17. continue
  18. bbox = annotation['bbox']
  19. x, y, w, h = bbox
  20. x = x + w / 2
  21. y = y + h / 2
  22. width = image_id_width_dict[i]
  23. height = image_id_height_dict[i]
  24. x = str(x / width)
  25. y = str(y / height)
  26. w = str(w / width)
  27. h = str(h / height)
  28. with open('./fewshotlogodetection_round1_train_202204/train/annotations/{}.txt'.format(
  29. image_id_name_dict[i].split('.')[0]), 'a') as f:
  30. annotation['category_id']=annotation['category_id']-1
  31. category=str(annotation['category_id'])
  32. print(category)
  33. f.write(category+' '+x+' '+y+' '+w+' '+h+'\n')

其中用到了公式x=x+w/2,y=y+h/2,原因是在coco格式下标注的目标框位置x、y代表的是目标框左上角的位置坐标,而在yolov5的代码中,目标框的标注坐标指的是目标框的中心坐标,所以要进行转换。

以上代码如果有用的话,欢迎拿去!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/665867
推荐阅读
相关标签
  

闽ICP备14008679号