目标检测主要任务有 分类classification和定位 locatization
(1)经典的检测算法:比如 DPM算法
https://blog.csdn.net/weixin_41798111/article/details/79989794
传统算法的步骤:
a.ROI区域的选择 采用滑动窗口对整副图像遍历
b.特征的提取 常用sift surf HOG等算法
c.对提取的特征分类 分类器有SVM AdaBoost
(2).基于深度学习的方法
- One-stage算法 :YOLO SSD CornerNet 等算法。不需要候选区域(region proposal)过程,在一个stage直接产生物体的类别概率和位置坐标值。
- Two-stage算法:
One-stage算法 :以YOLOv1为例:
YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别,省去了proposal的阶段。
2-1、原理:
目标检测问题转化为回归问题。将图片划分为7*7大小的网格grid-ceil,每个网格中生成B个bounding-box,在这些bounding-box中检测物体的4个位置、置信度和类别C,一共生成S*S*(B*5+C)个参数。
输出一个固定的维度向量。全连接层的输出编码为物体的类别和位置。
2-2 步骤:
- 在进行检测时,YOLO会首先将输入图片分成 S*S个小格子(grid cell),若一个物体的中心点落到某个格子中,那么这个格子就负责检测出该物体。
- 对于每个格子,YOLO都会预测出B个bounding box(bbox),而对于每个bbox,YOLO都会预测出5个值,其中4个代表bbox的位置,还有一个代表bbox的confidence值
- 最终输出7*7*30个feature特征向量,30其中20个描述类别信息,10个描述位置信息。
- 测试时,一张图片7*7个网格,每个网格称为ceil,一共有98个bounding-box。
2-3:YOLOv1的流程:
- Resize image:将图片resize成同样大小的,因为Detection需要图片的一些细粒度的信息,所以本文中使用高分辨率的输入: 448*448
- Run ConvNet:运行卷积神经网络,得到bbox的分类和回归结果。
- NMS:用非极大值抑制来筛选出最终的框
2-4:网络设计:
整个网络包括24个卷积层和2个全连接层,其中卷积层的前20层是修改后的GooLeNet。输出7*7*30的tensor
- bbox1的回归结果,包括5维,其中前4维代表位置 ,最后一维代表置信度
- bbox2的回归结果,同样也包括5维。
- grid cell的分类结果,包括20维,分别是20类的概率。
损失:sum-squared error
- 位置误差,修改位置误差,改变检测小物体的缺点
- 置信度误差,含有object的
- 置信度误差,不含object的
- 分类误差
- 对于有object的cell,那么计算cell的分类误差,然后cell中两个bbox的置信度误差,然后cell中和ground truth box的IoU最大的bbox的位置误差。
- 对于没有object的cell,那就只计算cell中两个bbox的置信度误差。