(18条消息) Matlab读取yolov3训练的多个txt文件数据并绘图_yolo txt绘制_热心市民小黄的博客-CSDN博客AMiner - AI赋能科技情报挖掘-学术搜索-论文检索-论文专利-文献追踪-学者画像
# 代码补充|YOLOv7|v5|v8改进之输出COCOmAP指标:输出自定义数据集中small、medium、large大中小目标的mAP值,适用于自定义数据集,精度基本对齐,丰富实验数据,便于对比
### 核心代码更新部分
#### 新增代码
PS: 优先在交流群中通知,专栏读者可以私信博主加·YOLO改进创新点高阶群·
第一步:在YOLO项目下面新增`TXTToCOCO`文件夹
参考格式
-- TXTToCOCO
--- jsontococo.py
--- class.txt
第二步:在`TXTToCOCO下` 新增 `txt2coco_map.py`文件
```python
import os
import json
import cv2
import random
import time
from PIL import Image
# 部分同学都用的autodl, 用antodl举例
# 使用绝对路径
#数据集 txt格式-labels标签文件夹
txt_labels_path='/root/autodl-tmp/datasets/voc/val/labels'
#数据集图片images文件夹
datasets_img_path='/root/autodl-tmp/datasets/voc/val/images'
# 这里 voc 为数据集文件名字,可以改成自己的路径
# xx.json生成之后存放的地址
save_path='/root/autodl-tmp/yolov7-main/voc'
#自己数据集的类别, 一行一个类 例如: class.txt文件
# car
# phone
# ...
classes_txt='/root/autodl-tmp/yolov7-main/voc/class.txt'
with open(classes_txt,'r') as fr:
lines1=fr.readlines()
categories=[]
for j,label in enumerate(lines1):
label=label.strip()
categories.append({'id':j,'name':label,'supercategory':'None'})
print(categories)
write_json_context=dict()
write_json_context['info']= {'description': 'For object detection', 'url': '', 'version': '', 'year': 2021, 'contributor': '', 'date_created': '2021'}
write_json_context['licenses']=[{'id':1,'name':None,'url':None}]
write_json_context['categories']=categories
write_json_context['images']=[]
write_json_context['annotations']=[]
imageFileList=os.listdir(datasets_img_path)
for i,imageFile in enumerate(imageFileList):
imagePath = os.path.join(datasets_img_path,imageFile)
image = Image.open(imagePath)
W, H = image.size
img_context={}
img_context['file_name']=imageFile
img_context['height']=H
img_context['width']=W
img_context['id']= imageFile[:-4]
img_context['license']=1
img_context['color_url']=''
img_context['flickr_url']=''
write_json_context['images'].append(img_context)
txtFile=imageFile[:-4]+'.txt'
with open(os.path.join(txt_labels_path,txtFile),'r') as fr:
lines=fr.readlines()
for j,line in enumerate(lines):
bbox_dict = {}
class_id,x,y,w,h=line.strip().split(' ')
class_id,x, y, w, h = int(class_id), float(x), float(y), float(w), float(h)
xmin=(x-w/2)*W
ymin=(y-h/2)*H
xmax=(x+w/2)*W
ymax=(y+h/2)*H
w=w*W
h=h*H
bbox_dict['id']=i*10000+j
bbox_dict['image_id']=imageFile[:-4]
bbox_dict['category_id']=class_id
bbox_dict['iscrowd']=0
height,width=abs(ymax-ymin),abs(xmax-xmin)
bbox_dict['area']=height*width
bbox_dict['bbox']=[xmin,ymin,w,h]
bbox_dict['segmentation']=[[xmin,ymin,xmax,ymin,xmax,ymax,xmin,ymax]]
write_json_context['annotations'].append(bbox_dict)
name = os.path.join(save_path,"instances_val2017"+ '.json')
with open(name,'w') as fw:
json.dump(write_json_context,fw,indent=2)
print("ok🚀")
```
第三步:在`TXTToCOCO下` 新增 `class.txt`文件
里面内容为每个类别的名字
-------
参考
car
person
---------
第四步:运行
```python
python txt2coco_map.py
```
会输出类似内容
```python
[{'id': 0, 'name': ... }]
ok🚀
```
会生成 一个 `instances_val2017.json` 文件
---------
第五步:到数据集文件夹中,比如voc,子文件夹 新增一个`annotations`文件,将生成的`instances_val2017.json` 复制到这个`annotations`里面
### 验证 COCO mAP 指标
```python
python val.py --weights best.pt --batch-size 1 --data test.yaml --save-json
```