;;;基于OpenCV的人工神经网络(ANN)我们已经学习完毕了,ANN是指模拟人体或生物神经元的网络结构框架,它有着简单的输入层、隐藏层、输出层三层结构,但是正因为它结构简单,在遇到非线性问题时将没办法处理,研究者通过不断添加隐藏层,同时使用sigmoid与tanh函数来解决非线性问题,这种神经网络即为深度神经网络(DNN,DeepNeuralNetworks)。
由于OpenCV在神经网络中并没有过多的拓展,所以在该章节中我们会对YOLO进行学习,从而熟悉OpenCV在神经网络目标识别项目中的运用。本书的YOLO采用v5版本,在后面的学习中我们将使用YOLO对口罩数据集进行模型训练,并采用该模型结合OpenCV与torch结合对图像中的人物进行口罩佩戴的检测。
;YOLO是一种将图像划分为网格系统的对象检测算法的名字,它全称叫“YouOnlyLookOnce”。这是Redmon等人在2016年的一篇研究论文中命名的。网格中的每个单元格负责检测自身内部的对象。由于其速度和准确性,YOLO是最著名的目标检测算法之一。
YOLO对于其他目标检测算法,由于它采用回归的方法,所以导致它非常的快,并且YOLO对比于其他目标检测算法,YOLO会基于整张图片信息进行预测,而对于我们在前几章中所学习的目标检测算法是基于滑窗探测器进行检测的不同,滑窗探测器只能基于局部图像信息进行识别。且YOLO的作者已经为我们完成了一个整体框架供我们使用,我们仅需要向YOLO框架提供数据集,修改训练参数、预测参数即可完成目标检测。
;现在我们对YOLOv5进行下载,如图所示。
;YOLOv5的文件结构分为各个模块,在主目录中detect.py为检测模块程序,train.py为训练网络的模块程序,test.py为测试模块程序,它会在训练过程中调用其中的函数,用于在训练过程中的验证。data文件夹为数据集文件,里面的coco.yaml和coco128.yaml为YOLOv5作者所提供的数据集文件,里面包含COCO数据集中的分类项参数,当训练自己的数据集时可以参考该数据集文件进行修改。inference文件夹为测试的图像与输出的图像数据。models文件夹为YOLOv5各个模型的权重文件。utils文件夹为框架的函数方法。weights文件夹为初始网络权重文件。
;了解完文件结构后,我们需要为YOLOv5安装所需的外部库才可以使YOLOv5发动起来。在框架主目录中打开“cmd”进行pip安装。
;;在“YOLOv5安装与配置”一节中,我们已经将依赖环境都已经安装完毕,我们可以使用其依赖环境,通过一个非常简单的例子,利用YOLOv5已预训练完成的模型对视频中的目标进行检测,感受一下YOLOv5的识别预测效果。;程序首先使用torch.hub.load()函数加载YOLOv5仓库中的预载模型yolov5s.pt,并加载视频,使用该模型进行对模型的预测并显示。
观察上图的运行结果,YOLOv5所训练的模型的目标检测效果非常精准且快速,这也是为什么我们要采取YOLOv5进行使用。接下来我们将从头开始使用YOLOv5训练自己的数据集,并通过训练模型从OpenCV中进行对视频的检测。
;;在YOLOv5中,数据集采用YOLO自身的特殊格式,我们现在通过网上现成的数据集进行对YOLO格式了解。;该数据集为口罩数据集,分类于戴口罩与不戴口罩的人的图像,数据集如下:
下载完数据集后,观察该数据集的文件架构:
;该数据集中所有标记参数与类型分类均已完成。观察在数据集的主目录中,我们能看到test.txt、train.txt和valid.txt,这三个文件分别记录了训练集、测试集和验证集的图像路径,用于后续训练与测试验证的操作。进入images文件夹中,classes.txt为图像的分类类型,train、test和valid分别为训练集图像、测试集图像和验证集图像。查看各个图像文件夹中,每一幅图像都对应了一个相同名的txt文件,该文件为该对应图像的标注位置信息。;YOLO的标注位置信息与传统的标注格式不同,打开标注文件后内容如下:;由于该数据集的图像文件与标签文件在同一路径中,在YOLOv5中需要将两者区分开来,现在我们需要将该数据集转移到YOLOv5项目路径中,进入YOLOv5的主目录中创建temp文件夹并创建move.py程序。
在主目录中打开cmd:
;程序先在项目主目录中创建VOC文件夹,用于数据集的转移存储,随后通过图像路径文本文件拷贝图像文件和标签文件到VOC文件夹中。;如下图中,数