文章目录[隐藏]
使用YOLOv5训练自己的数据
新东西出来,总是要试试,这几天使用了yolov5跑了几个模型,特来记录一下心得与坑。
作者给出的教程,可以先浏览一下: link.
源码下载链接: link.
一.环境部署
yolov5基于pytouch,在测试时发现与环境内的tensorflow会产生冲突,建议用ANACONDA新建pytouch的独立环境。
打开文件夹里的requirements.txt文件,用ANACONDA手动安装,或
pip install -U -r requirements.txt
二.数据集准备
yolov5使用的是yolo格式的标注文件,内容长这样,第一个数是标签的序号,后面四个是坐标。
标注软件依然是labelimg,在使用前将VOC格式转换为YOLO即可
如果有之前标注好的xml文件,可以通过脚本直接转成yolo所需的txt格式: link.
不过在转换完成后记得添加labels文件,标注文件根据序号从labels里面对应标签。
标注完后,建立如下目录,目录要求除了images/labels不同外,其他文件夹名必须相同,程序会根据images的路径推算出labels的路径。
到此数据集准备完毕,在data/coco128.yaml文件里,修改为自己的参数,到这一步就可以尝试train。
三.参数调整
yolov5提供了几种权重供选择,其中5l的性价比最高,适合CV爱好者日常研究;5x效果最好,如果硬件配置低,还可以选用只有27M的5s
在train.py修改你选用的权重,并前往权重文件中将nc改为和你样本库匹配的值。
根据要求修改epoch和batchsize,就可以开始初步的训练了。
四:常见问题
下面有朋友遇到了这个问题:
// File "D:\yolov5-master\test.py", line 89, in test img = img.half() if half else img.float() # uint8 to fp16/32 UnboundLocalError: local variable 'half' referenced before assignment
我们常见的float数据占用32bit, double数据占用64bit,而half()这个函数将数据占用降到了16bit,称为半精度,在yolov5中也内置了这个函数,降低精度换来速度。
这边主要是在用GPU跑时正常,在用CPU跑时使用半精度。
而部分版本的yolov5里half代码是不完整的(三个朋友下了三个不同的版本)
而报上面那个错的原因主要是在test.py里面,在判断 if modle is none:时,未定义half的值
if model is None:
training = False
device = torch_utils.select_device(opt.device, batch_size=batch_size)
half = device.type != 'cpu' # half precision only supported on CUDA;
else: # called by train.py
training = True
device = next(model.parameters()).device # get model device
# half disabled https://github.com/ultralytics/yolov5/issues/99
half = False # device.type != 'cpu' and torch.cuda.device_count() == 1
if half:
model.half() # to FP16
在if else中都有体现half,根据上述代码查验即可,当然,也可以直接ctrl+f搜索half,将后续用到half的地方,如
img = img.half() if half else img.float()
在此调用了half,half的值应为(t or f)
直接改成
img = img.half() #二选一
img = img.float() #half都没用上,自然也不会报错了(狗头.jpg)
在windows下训练时不定时报错[win error5],原因大概是在多线程的时候出了问题,具体解决方法未找到,换成ubuntu后一切正常。
版权声明:本文为CSDN博主「Laovife」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/laovife/article/details/106802725
暂无评论