在网上一直没找到YOLOv5预标注+CVAT修正labels的方法,就自己摸索了,这里记录一下
一、YOLOv5预标注
yolov5在模型推理阶段,输入命令
python detect.py --save-txt
即可获得默认设置下的预标注图像 + txt文件。
该命令中save_txt选项用于生成结果的txt标注文件,会生成与图片相同文件名的txt检测框信息文件,每个txt文件会生成一行或多行的信息,一行信息对应一个label, 信息包括类别序号(第几类物体)、xcenter ycenter w h(label的中心坐标信息),label的长宽信息,均为归一化数值,如下图:
输入命令:
python detect.py --save-txt --save-crop
即可获得默认设置下的预标注图像 + txt文件 + 被检物体的截取图像。
也可以在指定其他信息:
python detect.py
--data waterpipe-electricwire.yaml #指定yaml文件
--weights last.pt #权重文件
--source home/images/ #图片读取位置
--device 0
--save-txt
--save-crop
二、CVAT对预标注结果进行修正
需要安装cvat,还没安装的可以看我这篇博客,这里不展开说明:
1.将yolo预标注结果保存成可被cvat读取的格式
创建一个自命名文件夹,自命名文件夹再创建一个obj_train_data文件夹、一个data文件、一个names文件、一个txt文件:
obj_train_data文件用来存放没有检测框的原图 + 被检测生成的txt文件
这里有个问题要注意:有些图片在预训练时没有被检测到目标,所以没有生成对应的txt文件
而obj_train_data文件中的images和txt是要一一对应的
这就要我们提前手动剔除没有txt文件的图片
obj.data写入以下信息,classes = 1即我要检测的类别只有一个
obj.names文件即是定义类别的具体名称,我这里只有一个
train.txt文件存放所有图片的位置,但要注意,这里的位置信息不是绝对位置,而是
data/+相对路径
生成这个信息的代码可以看我这篇博客:python输出文件的位置信息
运行代码会自动生成一个含有图片位置信息的train.txt文件,位于被测图片同级目录下,生成结果也会显示在终端:
2.CVAT导入数据
打开cvat,点击projects, 创建create a new project
项目随意命名,一定要注意的是,
constructor创建的标签名和上述obj.names文件定义类别的名称是一致的
subimt 后选择open project, 点击import dataset上传材料
选择yolo 1.1,将包含 obj_train_data、data文件、names文件、txt文件的压缩包上传
3.完善标注
标注小技巧
- 标注过程中的快捷键可以省很多力气,以下是比较常用的几个:
- 保存: Ctrl + S
- 删除: Delete
- 缩放:鼠标滚轴,往上放大,向下缩小
- 拖动:鼠标左键点击并拖动图片,调整位置
- 下一帧:F
- 上一帧:D
- 向后跳十张: Shift+Ctrl + V
- 向前跳十张: Shift+Ctrl + C
- 复制框:Ctrl + C
- 粘贴框:Ctrl + V
- 重复上一次标注框参数:N,比如连续标一类头框,那么每次重复标时按N可以直接标下一个头框
- 对选定对象连续标注接下来所有帧内此对象:Ctrl + B
- 转换标签:Ctrl+(0..9)
更多使用方法看我的这篇博客: CVAT安装及图片标注使用教程_问题多多快快改的博客-CSDN博客
总结
这里只是简单介绍了yolo+cvat的联合使用,更多方法欢迎评论区留言讨论