【目标检测】Yolov5训练自己的数据集、设计危险区域判定算法及模型部署(持续更新)

简单说明一下在这篇文章中我要完成的任务:识别出图像中的窗户和儿童位置,并对儿童是否身处窗户内的危险区域进行算法判断,最终反馈给后端一个安全或危险的信号。将训练好的模型和设计好的算法部署在Jetson Nano设备上,以便深度学习的推理以及与后端的交互。
毕竟我是负责深度学习这部分的,所以本文我着重讲一下几个方面(当然一定是各位读者非常希望学习到的知识):如何配置yolov5所需环境、如何处理可能遇到的bug、如何收集自己需要的图片数据集、如何给图片标注标签、如何制作自己的配置文件、如何修改优化模型参数、如何正确地启动训练程序、如何正确地分析训练结果、如何快速推理测试数据、、如何修改yolov5源码以实现危险区域判定算法、如何将训练好的模型导出为需要的格式部署在硬件、如何在硬件上测试模型的准确性…
这篇文章我可以肯定——我是会花很多心血,希望能手把手教会读者如何从零使用yolov5做任何自己想做的事儿。当然,也因为这个暑假我留在学校里会很很很忙碌(会做一些虹膜和数据挖掘的研究),所以这篇文章会在忙里偷闲的时光里将断断续续地更完。我保证!这篇教程会是你读过最事无巨细的文章,我遇到的bug也许就是你会遇到的bug,感兴趣希望可以关注我/本文,接下来将加油持续更新…

1 yolov5的安装及其环境配置

Python环境的配置

  • 环境管理工具:Anaconda+Python3.8
  • 深度学习框架:Pytorch
  • 目标检测模型:Yolov5-Pytorch
  • 虚拟环境版本:Python3.8

有关Anaconda及Python Pytorch的安装配置,请参考我倾心写下的这篇教程,如果你是初次配置,那么请耐心地跟着我一步一步操作:这可能是一篇最贴心的Anaconda指北了(踩坑点)

yolov5的下载
虽然网络上下载途径很多,但是首推作者官方GitHub仓库:ultralytics/yolov5,当然有时候可能打开网页比较吃力,也可以用国内同步的资源:mirrors/ultralytics/yolov5,这个资源的镜像在中国,所以会比较快。
至于下载的方式,可以直接下载zip格式到本地解压,也可以用Git直接git clone https://github.com/ultralytics/yolov5解决。
yolov5依赖包安装
有关yolov5的环境配置在GitHub的markdown说明文档中以及阐述地非常清楚,所有需要的依赖包均在requirements.txt中写好,我们需要做的就是:
①进入命令行:activate [虚拟环境名]
②cd [requirements.txt所在路径下]
③pip install -r requirements.txt
执行完以上几个步骤后,理论上说(注意是“理论上”)就将yolov5所需的所有依赖包安装在了你的虚拟环境site-package中。但是!通常情况下,事情并没有这么简单~会遇到各种各样无法自动安装的bug,比如我执行③的时候,pycocotools包就无法从pip的default/tsinghua源找到(很自然地把requirements.txt中后续安装停止了),这个时候我们要做的就是:切换到没有问题的镜像源,然后开始手动地、逐个地用pip/conda install xxx。你要相信,这个问题一定可以解决,手动安装完成后,也就成功完成了yolov5依赖包的配置。
另外,配置模型环境可能遇到不同库的版本兼容性问题,所以建议就是单独拿一个虚拟环境来配置模型。 如果出现版本兼容性问题怎么办?官方给出的方法有两种:一种是手动给版本降级,然后再执行批量安装过程;另一种是在txt中删除一部分库后面的版本,系统会自动安装可兼容的版本。
【目标检测】Yolov5训练自己的数据集、设计危险区域判定算法及模型部署(持续更新)_第1张图片
题外话,有没有从中学到什么?如果以后需要批量安装依赖包的时候,可以像这样先写好一个requirements.txt的文件,指定每个包的版本,最后一次性执行pip install -r requirements.txt.

2 yolov5的推理detect介绍

detect.py程序就是用已经训练好的模型权重去推理新图像中目标。下面认识一下四个官方的预训练模型:

  • yolov5s.pt
  • yolov5m.pt
  • yolov5l.pt
  • yolov5x.pt

如上四个权重文件大小依次增大,所以识别物体的精度也依次增加。
【目标检测】Yolov5训练自己的数据集、设计危险区域判定算法及模型部署(持续更新)_第2张图片

对于刚接触yolov5的人来说,我认为最初对模型最快的认识应该是先跑通detect程序——在配好环境之后,仅仅通过简单的一行命令即可调用预训练模型和detect程序将自己喂的图片、视频识别出结果,或者调用电脑摄像头进行实时目标检测。
↑ 尽管还没有开始训练,但能很快感受到目标检测带来的成就感。
如何使用detect.py?参考官方文档,在命令行中进入项目文件,执行如下命令:

$ python detect.py --source 0  # webcam
                            file.jpg  # image 
                            file.mp4  # video
                            path/  # directory
                            path/*.jpg  # glob
                            'https://youtu.be/NUsoVlDFqZg'  # YouTube video
                            'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream
                    --weights yolov5s.pt

例如我想用yolov5s.pt检测指定图片中的目标物体,命令如下:

$ python detect.py --source data/images/1.jpg --weights yolov5s.pt --conf 0.25
  • source参数后面跟的是要检测的目标文件,如果是0,则是自动打开电脑摄像头进行实时监测,如果是图片或视频,则是对其进行检测并输出到指定文件夹中
  • weights参数后面跟是用来检测的模型权重(pt文件)
  • conf参数后面跟的是置信度阈值,通常不写保持默认即可

3 yolov5的训练train介绍

要想模型能够检测出自己期望的物体,就必须要经过训练,并得到训练后的权重文件,以供detect推理出新的图像中的目标。由于模型参数量巨大,如果随机初始化参数,将会导致训练时间极长,并且效果不佳。所以我们要做的是在yolov5官方提供的权重(weights)即预训练模型的基础上,训练我们的数据集,最终得到我们想要的权重文件。

$ python train.py --data coco.yaml --cfg yolov5s.yaml --weights yolov5s.pt --batch-size 64
                                         yolov5m                                        40
                                         yolov5l                                        24
                                         yolov5x                                        16
  • data参数后面跟的是是你自己数据集的yaml配置文件,其中包含了训练集和测试集图片路径,类别数目和类别名称
  • cfg参数后面跟的是预训练模型对应的yaml文件
  • weights参数后面跟的是预训练模型权重,比如yolov5s.pt
  • batch-size参数后面跟的是批训练样本数,越大越快,但是越吃电脑性能,我的笔记本最大只能调到8
  • 一定注意:上面虽然说的都是文件名,但是实际上在命令行中应该输入的都是文件路径(绝对/相对路径均可)

4 收集属于自己的数据集

要想训练自己的数据集,那么第一步必须是收集数据。这里对图片的要求并不苛刻,自己收集拍摄的、网络收集的均可。

  • 图片格式:一般使用JPG/PNG
  • 图片数量:最低标准,一类物体至少100张,包含各种角度及光线

5 对数据集标签进行人工标注

  • 软件工具:labelimg
  • 标注格式:txt

6 数据集划分

6 训练前配置文件的修改及编写

配置文件是yaml文件,需要处理的是两个地方:

  • 使用的预训练模型权重对应的yaml文件(比如我使用的是yolov5s.pt,那么我就要修改yolov5s.yaml的内容),修改方式很简单——将物体类别数nc修改为自己的类别数(默认80,现修改为2)
  • 重新编写一个训练自己数据集的新的yaml文件(包含自己训练集及测试集的路径、类别数目)

7 对数据集进行训练及优化

数据和标签均准备充分,训练集测试集也划分合理,就进入了这篇文章的重难点——训练。

8 对训练结果进行定量分析

9 对数据集进行推理测试

10 模型部署(Jetson Nano)

11 区域判定算法的设计实现

12 最终实时摄像头效果测试

你可能感兴趣的:(机器学习,CV目标检测,深度学习)