YOLOv5-seg数据集制作、模型训练以及TensorRT部署
- 版本声明
- 一、数据集制作:图像 Json转txt
- 二、分割模型训练
- 三 tensorRT部署
版本声明
yolov5-seg:官方地址:https://github.com/ultralytics/yolov5/tree/v6.2
TensorRT:8.x.x
语言:C++
系统:ubuntu18.04
一、数据集制作:图像 Json转txt
前言:由于yolo仓中提供了标准coco的json文件转txt代码,因此需要将labelme的json文件转为coco json.
- labelme JSON 转COCO JSON
使用labelme的CreatePolygons按钮开始绘制多边形,然后保存为json格式。
https://github.com/wkentaro/labelme/tree/master/examples/instance_segmentation.
在该链接中有个labelme2coco.py脚本,将该脚本下载下来后,执行以下指令即可。其中data_annotated是刚刚标注保存的json标签文件夹,data_dataset_coco是生成MS COCO数据类型的目录。
python labelme2coco.py data_annotated data_dataset_coco --labels label.txt
注意:由于自定义的数据集里面标签从0开始 不包括背景 直接转换会报错。修改72行。
生成三个文件JPEGImages、 Visualization 、annotations.json
JPEGImages中为原图,annotations.json里面是coco格式的文件:
Visualization中的图如下:
转换前需要自定义label.txt
- COCO JSON转txt
coco128-seg提供了标准的训练格式,我们下载下来看看。[label]+[points]
下载链接link:https://github.com/ultralytics/JSON2YOLO
找到general_json2yolo.py文件,修改路径后直接运行会报错:
No such file or directory xxx/xxxxx/xxx.txt
排查过后发现是我们生成的annotations.json和标准的coco json有出入:(多了JPEGImages/),修改代码313行:
标准的:
我们的:再次运行,报下一个错误:
TypeError: must be real number, not NoneType
错误指向:
观察文件夹中,已经生成一个xxx.txt且有部分数据,打印line之后发现数据里有[None,point…point]这样的数据。 大体知道了:应该是生成了背景类且没有标签。修改代码跳过这些标签:
再次运行报错消失,执行完毕没有报错。以为成功了打开txt一个最大的标签仅仅为13,应该是到15(我的数据集一共十六类),中间有几类被消除了,排查错误。应该是这个地方把91–>80类的函数的问题。修改一番,两个地方。(若只修改第二处 会出现-1标签,最高到14)
也可以只修改第二处:再修改代码:
下面展示一些 内联代码片
。
cls = coco80[ann['category_id'] - 1] if cls91to80 else ann['category_id'] - 1 # class
cls = coco80[ann['category_id']] if cls91to80 else ann['category_id'] - 1 # class
coco91_to_coco80_class()函数:
排除完毕以上错误时,再次运行,没有错误了。
二、分割模型训练
训练的步骤和目标检测模型一致,下载模型 yolov5s-seg.pt,划分数据集 、修改配置文件、不再详述了。
三 tensorRT部署
有时间更新…