本篇博文是笔者结合百度paddle公开课的一个AI识虫项目对YOLOV3算法做的一个解析
完整项目可参考https://aistudio.baidu.com/aistudio/projectdetail/250211
什么是目标检测?
相信有一定基础的深度学习开发者经常能听到目标检测这个词,那什么任务是目标检测呢。
简单地来说目标检测就是让计算机识别出图片里面对应的物体,并标上边界框
对于分类任务,我只需要识别这种图片是不是动物的图片即可
而对于目标检测任务,我并不是对整张图片做一个分类,而是对图片里的部分区域做一个分类,并绘制一个目标框标记物体
目标检测算法发展历程
既然图片分类是对整张图片进行分类,我们能不能从原图里“抠”下不同区域的图片进行分类呢?
答案当然是可以的,而这也是最初目标检测算法的思路
我们将目标检测任务进行拆分成两个任务,分别是产生候选区域, 对候选区域进行分类。而这也引入了算法的区别,我们常听到的一阶段目标检测算法,就是用一个网络同时产生候选区域并进行预测。而二阶段目标检测算法,则是分别进行候选区域产生和分类任务。
最初产生的候选区域方法比较“笨”,更准确地来说应该称其为穷举法,也就是将图片中每个像素都遍历一遍,再遍历其右下方的像素。两个像素就能确定一个区域,穷举法的好处就是思想简单,产生的候选区域都遍布整张图片,但它带来的计算量实在是过于庞大
假设图片长宽分别为W, H
则其候选区域的数量约为: (WWH*H)/4
这种计算量放在当今的硬件条件上也是很不现实的。
当今图像分类已经发展地较为成熟,目标检测的工作更多的是放在如何更smart地产生候选区域上面
其中目标检测算法中具有代表性的就是R-CNN系列,SSD,YOLO这几种经典算法
其中YOLO算法是较为常用的一种算法,它推理速度快的同时也能保证一定的精度
目标检测中涉及的基础概念
边界框bounding-box
我们对目标进行标注的时候采用的就是边界框, 也就是bounding-box。