本文主要是介绍YOLOv5进行半自动标注,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
背景:想利用自己收集的一些图片制作数据集进行训练,但是有8000多张,而且都是常见的检测出人就可以,所以想着利用YOLOv5的detect.py以及YOLOv5的原始权重YOLOv5s.pt进行半自动标注。
命令行:
python3 detect.py --weights weights/yolov5s.pt --source data/detect --classes 0 --device 0 --save-txt
(1) --weights weights/yolov5s.pt
采用YOLOv5自带的权重yolov5s.pt,检测人的效果会好一点,如果自己训练的权重也很好,也可以用自己的;
(2)--source data/detect
这里放入想要标注的图片;
(3)--classes 0
YOLOv5的权重可以检测80个类,但是我们只想让它把我们给的图片中的人检测出来,而人在YOLOv5的80个类中是第一位,所以这里采用--classes 0
(4)--device 0
采用哪一块GPU的训练,我们这里采用第一块;
(5)--save-txt
将预测的框坐标以txt文件形式保存。
效果图
如果你的原始图片上也有txt标签,这就需要将两个txt文档进行合并
可借鉴如下代码:
import osdef concattxt(path1,path2):num = 0pathdir1 = os.listdir(path1)#获取第一部分txt文件夹中的文件列表for txtname in pathdir1:#name1 = os.path.splitext(txtname)[0]#获取当前txt文件名字#txtfile1 = open(txtpath1+name1, "rb")#txtfile2 = open(txtpath2+name1, "rb")txtfilepath1 = path1+txtnametxtfilepath2 = path2+txtnametxt1 = open(txtfilepath1,'a+', encoding='utf-8')if os.path.exists(txtfilepath2):num = num+1with open(txtfilepath2, 'r', encoding='utf-8') as txt2:#txt1.write('\n')for i in txt2:txt1.write(i)print('the concat txt num is:',num)if __name__ == '__main__':txtpath1 = ''txtpath2 = ''concattxt(txtpath1,txtpath2)
如果你想将生成的txt转化为xml,可借鉴这个博客:
yolov5实现半自动化标注/预标注 & txt to xml_国服最强貂蝉的博客-CSDN博客_yolov5 标注
参考文献:
python根据yolov5检测得到的txt文件,截取目标框图片并保存_深度学习菜鸟的博客-CSDN博客
python合并两个txt文件内容-yolo格式数据_小俊俊的博客的博客-CSDN博客
yolov5实现半自动化标注/预标注 & txt to xml_国服最强貂蝉的博客-CSDN博客_yolov5 标注
这篇关于YOLOv5进行半自动标注的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!