目录
一、模型的用途和效果
什么是YOLO算法?
学术一点来说,YOLO是一种用于目标检测的深度学习算法(对目标检测算法的解释指路第二部分)。
当然也可以简单粗暴地解释,YOLO算法要完成的工作,就是当你输入一张(当然很多张也可以)图片时,它需要告诉你图片里有什么,那些物体在哪个位置,它有多大概率确定自己是正确的;在更广义的领域里,它还可以处理视频、实时摄像取景框,毕竟如果按其中的每一帧来看,就是一次性处理很多张图片嘛。
YOLO算法有什么用?
它的使用场合其实很广泛,说不定你每天都在使用但没发现,看看ChatGPT怎么说:
- 警情交通:由于其高速实时性,YOLO经常用于视频分析,包括监控系统、交通监测和行为分析等领域。它可以在视频流中快速识别并跟踪多个对象。
- 自动驾驶:同样,yolo可以用于实时检测道路上的车辆、行人、交通标志等物体,为车辆的决策和导航提供重要信息。
- 工业检测:检测和识别生产线上的缺陷、危险物体或异常行为。
- 医学图像分析:分析医学图像,如X射线、CT扫描和核磁共振图像,以便快速定位和识别病灶。
- 无人机和航拍:识别地面上的对象,包括建筑物、车辆和人群等。
- 体育赛事分析:协助教练和运动员在比赛中快速准确地识别对手的优势和劣势
YOLO算法的输出效果具体长什么样?
首先看看最基础的图片处理 - 使用YOLOv8 / ultralytics 自带的初始模型得到的结果:
|
|
|
|
看得出来,这个初始的模型能识别的物体并不多,而且甚至会“指鱼为鸟”,所以如果需要更适配自己需求的、精度更高的模型,还是需要自己找训练集、测试集,自己标注,最后训练得到完美对象(指路第三部分)。
笔者检测一张图片平均跑下来需要30-40毫秒,不知道大家的电脑跑起来是更快还算更慢呢?
再看看视频:
ultralytics自带模型-检测视频示例
检测效果好像有点糟糕,还挺搞笑的……
后来查看了一下ultralytics自带模型能检测的物体,发现它好像用的是COCO(Common Objects in Context)数据集进行的训练,好像确实没有水豚……
二、模型的原理
硬干货的历史知识来了——
一句话总结目标检测系列算法
目标检测的发展脉络可以划分为两个周期:传统目标检测算法时期(1998 - 2014)和基于深度学习的目标检测算法时期(2014 - 至今);而基于深度学习的目标检测算法又有两条技术路线:二阶段检测算法和一阶段检测算法。
传统目标检测算法
- 特点:
- 传统目标检测算法主要基于手工提取特征,包括边缘、纹理、颜色等图像属性。
- 传统目标检测算法通过滑动窗口来寻找目标对象,具体说就是在图像上滑动不同大小和比例的窗口来寻找对象,这会导致计算量很大。
注:相比之下,卷积神经网络(CNN)能够通过训练自动学习图像中的特征,无需手动设计
- 缺点:
- 识别效果不够好,准确率不高
- 计算量较大,运算速度慢
- 可能产生多个正确识别的结果
二阶段检测算法
- 算法流程 - 以R-CNN为例:
- 对输入图片提取候选区(region proposal),每张大约2k~3k个这种与类别无关的框。所谓的候选区就是通过selective search算法获得可能存在对象的区域,例如下左图
- 把每个候选区放入CNN网络来提取特征
- 把从每个候选区提取的特征送入每一类的二分类器中进行类别判断,如下右图,其中左边的每一行是从一个候选框中提取的特征,右边每一列是一个分类器
- 位置精修,采用回归器精细修正候选框位置
-
二阶段检测算法的问题与改进过程
-
R-CNN的性能瓶颈:
1. 针对第一个问题,后面的Fast-R-CNN和Faster-R-CNN都解决了,它们把提取特征之后的分类步骤和精修候选框的步骤都添加到了深度网络中进行同步训练。
2. Fast-R-CNN解决了
-