Hugo ʕ•ᴥ•ʔ Bear Blog

前言


这几天一方面在忙着工训的实习,明天就到工训实习的实习的最后一天的,已经五六天没写文章了。简单回顾一下,

  周二早上实习,下午睡到两点,一直工作到晚上九点四十,在AutoDL上跑完了自己的数据集,下午三个小时数据标注,晚上熟悉云服务器的环境配置,从八点多开始跑770张图片200轮的训练;
  周一早上实习,下午到三点回去,睡到晚上,晚上心情很郁闷,取完快递拆箱,完成了红富士,黄元帅,国光三种小苹果共计770张到数据采集;
  周日上午实在没有动力,打了一上午饥荒,下午去图书馆打了一下午饥荒,活到了60天,但是差点心态崩了,晚上着手开始写综合课设的中期检查;
  周六双十一,我翻了翻微信,哔哩哔哩,番茄自习室,sharplingo,但是都没有发现白天在干啥,周六极有可能是心情低落的时期;
  好的,然后周五的记录就续上了。关于心情的总结不是重点,先把最近yoloV5的工作给梳理出来。

正文


这部分主要介绍是怎么认识 yolov5 的,起因是电子课程设计,选择了基于图像处理的水果识别的这个课题,然后开始查资料,了解相关的技术路线。由于是第一次做这种课题,并且还得负责主要任务,心累之余做肯定是要做的。我先去 bilibili 查找了相关的课题,大多数是通过 matlab 进行相对应的识别的,但是我觉得似乎不是很符合我的预期。

基本思路


于是我打算更进一步去想如何去做这个问题,当然解决问题,和写报告是很不一样的思路,写报告是不管怎么样,尽可能可读性强,但是解决问题,最主要的是理清楚思路。既然 bilibli 的综合排序没有找到我要的效果,通过询问 gpt 我大概得出了以下的思路:

基于图像处理的水果分类系统设计背后的原理如下:
1.图像获取:系统通过摄像头或其他图像采集设备获取水果的图像。
2.图像预处理:对获取的图像进行预处理,包括图像去噪、图像增强、图像分割等操作,以提高后续处理的准确性和效果。
3.特征提取:从预处理后的图像中提取出代表水果特征的信息,例如颜色、纹理、形状等。
4.特征选择:根据水果分类的需求,选择最具区分度的特征进行分类,可以使用特征选择算法来辅助选择最优特征。
5.分类器设计:根据选定的特征,设计合适的分类器模型,常用的分类器包括支持向量机(SVM)、人工神经网络(ANN)、决策树等。
6.训练和测试:使用已标记的水果图像数据集进行分类器的训练,并使用另外的测试数据集评估分类器的性能。
7.分类结果:将待分类的水果图像输入训练好的分类器,通过分类器进行分类,并输出水果的类别标签或概率。
8.系统优化:根据分类结果的准确性和效率,对系统进行优化,包括调整参数、改进算法等。

起初我想从比较熟悉的 FPGA 的相关的技术路线进行尝试,也查阅了相关的材料,但是实现的难度有点高。涉及到特征提取的有 Sobel 算法,可以对轮廓做很好的处理。

然后还发现一个up 主做的毕设和这个也是相关的,很有意思。

然后查找了一些文献,如下:

1.基于多颜色和局部纹理的水果识别算法研究

2.水果分类的多模板匹配算法及其 FPGA 实现

3.水果自动识别的 BP 神经网络方法

4.基于注意力 YOLOv5 模型的自动水果识别

5.基于轻量化改进 YOLOv5 的苹果树产量测定方法

在文献 1,当中采取的方式,首先是先对图像进行预处理,对图像进行平滑去噪,图像增强,完成图像从环境中分离出来。然后进行特征提取,其中有颜色特征,纹理特征,然后放入 BP 神经网络分类器进行训练。

在文献 2,主要是针对方案一中的图像预处理进行了相对应的优化,采用了 FPGA 当中的 Soebl 边缘化提取特征向量。然后对比 SSD、YOLO、CenterNet 等方式的性能。 在文献 3,基本思路是和文献 1 类似的,多出了一些特征,比如面积特征,周长特征,弧度特征,颜色特征,然后通过神经网络进行分类。 在文献 4,采用的方式是进行 YOLOv5 模型进行水果自动识别,但是对模型进行了一些改进。在 yolov5 对网络后面又增加了一层网络,按照重要程度强化有用的特征,抑制掉无用的特征,替换了边框回归损失函数,提升了预测的精度。

在文献 5,同样也是对 yolov5 算法进行优化和改进,也是通过更换深度可分离卷积和添加注意力机制模块,提升准确度和降低网络负担。

选择 yolov5


因为刚接触这个问题,通过查阅的文献,感觉选择 yolo 的方式更加便于实践学习和操作。

关于 yolov5 的简介:

YOLOv5是一种基于深度学习的目标检测算法,它是YOLO(You Only Look Once)系列算法的最新版本。YOLOv5的原理可以概括为以下几个步骤:

1. 基础网络:YOLOv5使用了一种轻量级的卷积神经网络作为基础网络。这个网络主要用于提取图像的特征。

2. 特征提取:YOLOv5通过基础网络将输入图像转换为一系列特征图。这些特征图具有不同的尺度和语义信息,用于检测不同大小和类别的目标。

3. Anchor boxes:YOLOv5使用了一种称为Anchor boxes的技术来预测目标的位置和类别。Anchor boxes是一些预定义的边界框,每个框都与一个特定的尺度和长宽比相关联。YOLOv5通过在特征图上滑动这些Anchor boxes来检测目标。

4. 预测:对于每个Anchor box,YOLOv5预测目标的位置和类别。位置预测使用边界框的中心坐标、宽度和高度来表示。类别预测使用一个多类别分类器来确定目标的类别。

5. 损失函数:YOLOv5使用一种称为YOLOv5 Loss的损失函数来训练网络。该损失函数综合考虑了位置和类别的预测误差,并通过最小化损失来优化网络参数。

6. 多尺度检测:YOLOv5通过在不同尺度的特征图上进行检测来提高目标检测的性能。这种多尺度检测可以帮助模型检测不同大小的目标。

总体而言,YOLOv5通过将图像分为不同的网格单元,并在每个网格单元上预测目标的位置和类别来实现目标检测。它具有较快的检测速度和较高的准确率,适用于各种实时应用场景,如自动驾驶、视频监控和物体识别等。

好在,可以站在巨人的肩膀上。我通过博主:思绪无限 的文章进行了学习。

环境配置


对于刚开始使用 pycharm 的我,来说,配置环境还是走了不少弯路的,前期,要下载 pycharm 和 anaconda,用于配置环境,一开始我在 Mac 系统上配置环境没有成功,一直不知道如何把 pycharm 关联 anaconda 的环境,后来就转到 win 下进行操作。关于如何搭建并配置深度学习环境,我参考了 up 主:思绪无限的教程,初步完成了环境的激活。

训练自己的数据集


这部分介绍如何训练自己的数据集。

采集所需要的识别物体的图像


我是通过手机进行摄影,然后通过 usb 上传到电脑,然后手机拍摄的图片肯定太大了,而且在yolov5 的官方文档上说,训练的数据集最好能达到 1500 张以上。然后非常感谢一个宝藏的批量图片裁剪在线网页,没有广告,而且效率很高,我把 770 多张图片裁剪为 640*640 的大小,减小图片的体积。 11.18 更新:今天用 safari 测试才发现,可能是我在 win 上开了插件,所以没广告,所以也在 safari 上装了插件。

labelimg


之前通过 23 张图片,简单熟悉了 yolo 的训练流程,后面购买了,红富士,黄元帅,和国光,三种类型的苹果进行数据采集,目的是为了通过 yolov5 来训练模型识别这三种水果的能力。

前期通过不同角度完成了对数据集的拍摄,共计 770 张图片,然后次日花了很久用 labelimg 软件对图片进行数据标注,在此不得不提一下。labelimg 软件我刚开始觉得非常难用,因为需要配置 python 环境,而且动不动就闪退。就在我找不到头绪之际,非常感谢 up 主:小周不会做 提供的灵感,up 主提供了 labelimg 的打包版,这样子就可以启动并进行使用了,让图片得到顺利的标注。

正确配置路径


然后可以现在本地环境上进行调试一下,可以参考这位 up 主:遗落的教程,讲解得很详细。还有怎么用快捷键打标签,可以参照这位 up 主:圣音去扉教程。然后需要现在本地环境能够正常的跑成功,在这前提下,可以尝试使用带有 GPU 的云服务器进行训练。

AutoDL


关于如何使用 AutoDL,非常感谢 up 主:你可是处女座啊教程,介绍得很详细,如何上传文件夹到服务器,可以使用 scp 命令,也可以使用网页进行上传。

然后,你还需要配置 CUDA 环境,在服务器上安装必要的环境,然后就可以开始使用 gpu 进行愉快的训练了。我使用的是英伟达的 3080 显卡,速度已经感觉很快了,但是 770 张 200 轮跑下来,也花了一个半小时。

总结


后续还需要进行参数微调,但是自我感觉时间有限,还有点累,所以,这篇文章后面就写得很简单,我又得做又得写报告,虽然很难崩得住,但是也得顶住啊。

#实用教程