微信公众号

人工智能——视觉目标检测算法YOLO

什么是YOLO

YOLO(You Only Look Once)是基于深度神经网络的目标检测算法,用在图像或视频中实时识别和定位多个对象。YOLO的主要特点是速度快且准确度较高,能够在实时场景下实现快速目标检测。YOLO是一种快速而准确的目标检测算法,被广泛应用于计算机视觉领域,包括实时视频分析、自动驾驶、安防监控、智能交通、缺陷检测等。在YOLO诞生之前,目标检测领域热门的深度学习模型是R-CNN系列模型,称之为二阶段模型(two-stage),其大致思路是先找出可能含有物体的区域,进而再找出这片区域内的物体是什么,在哪个位置。这类模型的特点是准确率较高,但是速度较慢,难以做到实时检测

一阶段算法:模型直接做回归任务,输出目标的概率值和位置坐标。例如:SSD, YOLO,MTCNN等
二阶段算法:首先生成多个锚框,然后利用卷积神经网络输出概率值和位置坐标。例如:R-CNN系列

图像识别

人们看到图像,可以立即识别其中的对象和位置。汽车自动驾驶训练需要类似水平的反应能力和准确性,系统必须能够分析实时视频中的道路,检测各种类型的对象及位置。YOLO将目标检测任务转化为一个回归问题,将图像分为多个网格,并预测每个网格中是否包含对象以及对象的边界框和类别。这意味着YOLO只需要单次前向传播就可以同时完成目标检测和分类,从而实现了实时性能

分割(Segmentation):定位像素属于哪个目标物或场景
定位(Localization):定位目标位置
分类(Classification):判定目标类别
检测(Detection):判定目标物体是什么

YOLO组成

YOLO由网络架构、基础网络、特征提取层、网格划分、边界框预测、非最大抑制和损失函数等组成,从而实现了高效而准确的实时目标检测。

网络架构:YOLO使用卷积神经网络(Convolutional Neural Network,CNN)作为基础网络架构。

基础网络:YOLO使用一个预训练的CNN作为基础网络,通常使用轻量级的神经网络框架Darknet作为默认选择(V5前),用于目标检测任务。

特征提取层:YOLO网络中的特征提取层用于从输入图像中提取有语义信息的特征图,用于目标检测和分类。

网格划分:YOLO将输入图像划分为固定大小的网格。每个网格负责检测图像中的对象,在不同的特征图上进行多尺度的网格划分,检测不同大小的对象。

边界框预测:对于每个网格,YOLO会预测多个边界框。每个边界框由一个边界框坐标和一个对象类别预测组成。边界框预测是通过回归来实现的。

非最大抑制(Non-Maximum Suppression,NMS):为了消除多个重叠的预测结果,YOLO使用非最大抑制算法。该算法会筛选出具有高置信度的预测边界框,并删除与其高度重叠的边界框。

损失函数:YOLO使用多个损失函数来训练网络。这些损失函数包括边界框回归损失对象存在性的分类损失类别预测的分类损失。这些损失函数用于衡量预测结果与真实标签之间的差异,并通过反向传播来更新网络参数。

激活函数:YOLO通常使用的激活函数是线性整流函数(Rectified Linear Unit,ReLU)。主要作用是引入非线性性质,使得神经网络可以学习更复杂的函数关系,以增加网络的表达能力和非线性拟合能力

神经网络是一种计算模型或算法,它受到人类神经系统的启发。是一种用于机器学习和人工智能的数学模型,可以通过学习从输入数据中提取模式和特征,以便进行预测和决策。神经网络在各种领域中被广泛应用,包括图像和语音识别、自然语言处理、推荐系统、医学诊断等。

数据集分类

将标注好的数据集划分为训练集、测试集和验证集。实际应用中根据具体任务和数据集的规模进行调整,为了确保结果的可靠性,还要进行交叉验证等技术手段来评估模型的稳定性和一致性。

训练集(Training Set):用于模型的训练和参数更新。通常将数据集的大部分样本分配给训练集,以便模型能够学习目标的特征和模式。一般情况下,约占总数据集的70%~80%。
验证集(Validation Set):用于模型的调优和调整模型的超参数。验证集在训练过程中用于评估模型的性能,并帮助确定最佳的超参数设置。比例通常为总数据集的10%~15%。
测试集(Test Set):用于最终评估模型的性能和泛化能力。测试集应该与训练集和验证集有一定的差异性,以验证模型对新数据的泛化能力。一般情况下,测试集占总数据集的剩余部分,即约占总数据集的10%~20%。

运行YOLO示例

示例源码https://t.oxings.com/link/Bomb3a

git clone https://github.com/ultralytics/yolov5
pip install -r requirements.txt

## 运行检测程序
python detect.py

常用参数
--weights 权重文件,默认yolov5s.pt
--source  输入来源,默认data/images 可以是图片/视频,示例为图片检测
--output 输出位置,默认runs/detect/exp
--img  图像规模,默认640
--device 训练的设备(CPU or GPU),默认无

输出检测结果图片:

以上示例使用SDK自带模型和图片,如要定制自己的数据集,通过LabelImg标注制作数据集,运行train.py训练生成模型,为节省时间只用5张图片作为训练集,通过参数指定训练出来的模型运行检测,如:python detect.py --source data/images/img01.jpg --weights fish.pt

应用领域

  • 自动驾驶:YOLO目标检测可以帮助自动驾驶系统识别和定位道路上的车辆、行人、交通标志等,从而提高驾驶安全性和智能化水平。

  • 视频监控和安防:将YOLO目标检测应用于视频监控系统中,可以实时监测和识别异常行为、物体入侵等,提供及时的安防预警。

  • 工业质检:YOLO目标检测可以用于工业生产线上的质量检测,例如检测产品的缺陷、计数产品数量等,提高生产效率和质量。

  • 零售和物流:利用YOLO目标检测技术,可以实现商品的自动识别和计数,提高零售业和物流业的自动化水平,减少人工成本。

  • 医疗影像分析:YOLO目标检测可以应用于医学影像分析中,帮助医生和研究人员自动识别和定位病变区域,提高医疗诊断的准确性和效率。

  • 增强现实和虚拟现实:通过YOLO目标检测,可以实现对真实世界中的物体进行快速识别和跟踪,为增强现实和虚拟现实应用提供基础支持。

YOLO目标检测在各个领域都有广泛的应用前景。随着算法的不断改进和硬件的不断发展,YOLO目标检测技术将继续发展,并在更多的领域中得到应用。

图形编程接口——OpenGL 计算机视觉库——OpenCV
微信公众号