一、任务描述
通过机器视觉的方式实现对工件的识别,以树莓派作为上位机,根据不同的识别效果对下位机发出不同指令,控制整个机器的运转,流程如下:
二、数据集获取
这是老师发的零件,所以网上肯定没有直接能用的模型,不像口罩检测等有现成的数据集,所以我们需要自己去获取数据集。由于我们的零件只有两个,如果我们想获取大量图片话,我们可以通过旋转的方式,我设置每张图片每旋转10度生成一张新的照片,这样没拍一张照片就可以生成36张照片,扩大了数据集的来源。之后用labelImg对图片进行标注,这样我们就获取了大量的数据集和对应的标签txt文件,我按照test:train:val = 1:8:2的比例分配图片。这样我们的数据集就准备好了。
三、Yolov5模型训练
由于yolov5创作者将模型代码开源,所有我们可以拿来直接用,只需要修改train和val的路径,需改成自己的,以及类别的数量,我这里分为两类,所以是2,标签名称就是对应的颜色,blue和red。我选用的是yolov5s这个模型,模型更加轻便,检测速度更快,同样设置类别数量为2.准备好之后,我们就开始训练了,由于我是直接拿cpu来训练的,训练时产在5.7个小时左右,如果用GPU的话速度可以提高不少。
四、模型训练结果
从图中我们可以看到,无论是准确率还是召回率都接近了100%,平均mAp达到0.995,说明模型的识别效果很好,对于我们的工件识别的任务能够很好的完成。
五、检测效果
从视频中我们可以看到,红色和蓝色的工件被识别出来,红色的打上red的标签,蓝色的打上blue的标签,数字代表精度,基本上在0.8以上,是一个比较理想的结果。对视频进行逐帧检测,每一帧的识别效果都很好。这是模型在笔记本上运行的结果,到此我们的Yolov5模块就算告一段落,接下来的问题就是怎么让它在树莓派上完美运行起来。
六、树莓派环境搭建
这是我第一次接触树莓派,又是第一次接触Linux,所有遇到了很多问题,有时候一个问题都要一整天的时间才能够解决。我将这个学习过程,以及遇到的各种疑难杂症都记录下来,发在了csdn上面,希望可以给你们带来帮助。链接如下:Yolov5移植树莓派4B问题总结 Raspberry Pi 4B树莓派学习笔记
我选用的环境是树莓派的64位操作系统,这样的好处是opencv的下载很方便,经过长时间的摸索,我发现Pytorch很难在32位操作系统上安装,即使安装成功也没办法运行。所以我选择的是树莓派64位操作系统,安装了openv和pytorch。
七、Yolov5移植树莓派
环境准备好之后就要进行Yolov5的移植,首先通过vncviewer与树莓派连接,这样我们通过电脑就能控制树莓派,这里出问题的可以看我上面两篇博客。
通过顶端的文件传输将训练好的pt模块传到树莓派上,用linux cd命令进入到yolo所在文件夹中,输入运行指令,python3 运行detect文件,权重文件就用我们刚刚传入的best.pt文件,source为0就是调用我们树莓派上安装的CSI摄像头。之后按回车就可以运行了。
八、树莓派检测效果
我们来看一下检测效果:左边是检测的环境,树莓派搭载csi摄像头获取图像,下面这张图片就是检测时的一张图片,可以看到,红色的零件被识别出来打上了red的标签,蓝色的零件也被识别出来打上蓝色的标签,我们可以利用这两个标签给下位机发出不同的指令,完成指定的任务。
总结
项目主要是Yolov5进行目标检测,之后用树莓派作为上位机,将模型移植树莓派进行识别,控制下位机的运转。过程中遇到数不尽的问题,有硬件上的,有软件上的,常常一个问题就是一天,这个过程是痛苦的,但好在结果是满意的。在检测的时候还发现Yolov5模型的识别速度确实有点慢,笔记本电脑都有点带不动,树莓派上更是卡顿,2-3秒才能检测一张图片。后面优化方向有两个,一个是优化模型,采用yolo-lite模型,一个是优化方法采用opencv模板匹配的方式去识别,不涉及深度学习速度应该会快很多。当然这是后话,人工智能还有很多地方我都没有学习,甚至都没有听过,现在还只是一个小白,继续加油吧!