yolov5下载并部署
参考博客
labelme注意事项
labelme包下载
labelme-master https://www.aliyundrive.com/s/bMeCNrwHuva
提取码: a43f
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
里面的train_txt.py是把json转txt的脚本,注意模型参数的yaml文件的label位置标注和train_txt.py文件的顺序得一样,不然会造成识别错误的情况
参数说明:
train.py
大致的用法上面的参考博客已经阐述了,我这里仅做一些部分补充
1.若显存不足的话,出现显存分配不足的情况下,尽量把batch_size调小一点就行
2.电脑上device一般是可以配上CUDA,所以device的值填0,但是在树莓派上好像没办法用CUDA加速,也可能是我学的差,不知道怎么去配置,所以在树莓派上的device填的是cpu
detect.py
1.source位置的参数是待识别文件的路径,可以是图片,视频等。
当default=0的时候,调用的是电脑摄像头,若电脑外接摄像头调用的话,则default处等于1,树莓派没有摄像头,所以树莓派外接摄像头显示时default=0
坐标返回
在这个位置,找到box_label函数,ctrl+点击进入到文件里面
box内存的值就是图片的坐标信息
box[0]:标签框左上角x坐标
box[1]:标签框左上角y坐标
box[2]:标签框右下角x坐标
box[3]:标签框右下角y坐标
我这里增加了个return,返回的是中心点的像素坐标,可按自己需求修改
用途:
如果你想做类似于识别后想控制机械臂抓取的话,我的思路大概是先将机械臂大概移动到图像坐标原点的位置,然后大概记下此时机械臂对应他自己坐标系的x,y值是多少,然后再移到对角处,测一下对角处位置机械臂的x,y值大概是多少,然后根据你自己图片的规格去换算一下,比如说拿一张640×480的图片,然后机械臂移到摄像头截取图像的图像坐标系的原点,比如说等于(-5, 10),对角坐标为(10,30),x值差了15,对应x方向的像素点变换了480,大概能估测出机械一个坐标位大约等于图像的32个像素点位,换算过去之后,你就大约可以准确地夹取到图中检测物体的所在位置
例 夹取坐标 = (机械臂在坐标原点的x坐标 + 像素坐标的x值/32, 机械臂在坐标原点的y坐标 + 像素坐标的y值/32)
改进
用完之后,才发现,yolov5在树莓派根本跑不起来,连最轻量的yolov5s部署完成后,识别都需要3秒左右一帧,卡的你怀疑人生,这里可以稍微优化一下,比如你可以pip 一下onnxruntime,然后用yolov5包里面带的export函数将训练完成的.pt权重文件转成.onnx文件,然后把这里的dnn改成true
然后把detec的权重文件改成.onnx格式就行
在树莓派cpu的情况下,大约能快上三分之一,就是3秒一帧编程两秒一帧,但是在GPU运行下,速度就基本没变,不会提速,需要具体地去推理,速度提升才会显著
总结
此次部署完之后,其实觉得yolov5太大了,在树莓派上跑不动,建议换个轻量点地模型可能效果会好一些,例如:SSD,Faster-RCNN,yolov5-lite等。看起来会流畅许多,如果你是手头富裕有加速棒之类的,就当我没说,毕竟我是个学生党,生活还是比较拮据的。
总体来说,比较建议的是,模型啥的都在电脑上训练,包括转格式啥的,因为在电脑上比较块,可以用GPU跑,也比较熟悉,然后每次跑完把单独的那个.pt或者.onnx文件单独传过去就行,这样时间会节省不少,如果具体想用树莓派做类似视觉之类的项目,建议还是换个轻量点的模型吧。