存档11111

该文章介绍了如何使用Python脚本将YOLOv3训练的txt标注文件转换为COCO格式,以便计算mAP值。过程包括创建TXTToCOCO文件夹,编写txt2coco_map.py脚本读取txt标签并生成json,以及在数据集中添加annotations文件夹存放json。最后通过val.py验证COCOmAP指标。
摘要由CSDN通过智能技术生成

(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

```

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值