什么是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示例
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目标检测技术将继续发展,并在更多的领域中得到应用。