目标检测介绍
目标检测
目标检测任务是什么
相比分类,目标检测还要确定物体在图像中的位置(多任务的学习)
目标检测经典工作/算法
anchor-based 基于锚框的
Anchor-free 没有锚框的
two-stage 模型 VS one-stage 模型
目标检测任务可细分为两个子任务:
- 定位(确定物体的位置)
- 分类()
R-CNN系列
R-CNN Regions with CNN features
Selective search
用来在图片上抽取多个候选框的算法,如图第二步 操作。
Bounding-box regression
用来减少定位错误的,在图中第四步中进行回归。
粗略的过程:
候选框 \(P\),有四个值 \(x,y,w,h\),目标框\(G\),同样也有这些值;
\(\widehat{G}\) = \(W*P\) ,学习参数\(W\),让\(\widehat{G}\) 近似\(G\)
Fast R-CNN
训练过程
- 把图片和 候选框(region proposals) 送进CNN
- CNN处理得出特征图(feature map)
- 将每个候选框的位置映射到特征图上,获得候选框对应的特征图,对这个特征图进行分类和定位
RoI pooling layer
RoI: region of interest
由于候选框大小不一,所以对应的特征图大小不一,用这个pooling layer来统一下尺寸。
Multi-task loss
\(L(p, u, tu, v) = Lcls(p, u) + λ[u ≥ 1]Lloc(tu, v)\)
分类loss + 定位loss
Does multi-task training help?
第一列的数据是模型没有bounding box regressors,第二列数据是模型是在train的时候有,在test的时候没有。
结论:多任务训练对结果有益
Faster R-CNN(没有Fastest R-CNN了)
Region Proposal Networks
主要提出了选择候选框的网络,叫region proposal networks (RPN)
Mask R-CNN
在Faster R-CNN上继续扩展,可以同时做三件事:
- 分类
- 给出bounding box
- 实例分割(在像素上区分不同的物体)
相比Faster R-CNN,多了一个分支用来实例分割,并且提出了一个RoIAlign来代替RoI pooling。
Yolo 系列
Yolo v1 开山之作1
一个end-to-end的卷积网络,直接得出bounding box和每个框的物体的分类
具体做的事:
输入图像分成\(S*S\) 个格子,每个格子预测\(B\)个框,每个框有5个值:x,y,w,h,confidence;共有\(C\)个类别,所以每个格子会预测\(C\)个概率值对应每个类别。
输出为上图的最后一个全连接层,为\(7*7*30\),分解下就是:\(7*7*(20+2*5)\) ,7对应\(S\),20对应\(C\)类别数,2对应\(B\); 这样就得出一张图所有格子的输出值;
这样就是把分类问题变为了回归问题2。
坐标Loss:
这里直接使用的是x,y,w,h计算,不同于r-cnn系列。
SSD(不是固态硬盘)
DETR
Deformable DETR
其他
FPN: Feature Pyramid Networks 特征金字塔网络
FPN主要解决的是物体检测中的多尺度问题,通过简单的网络连接改变,在基本不增加原有模型计算量情况下,大幅度提升了小物体检测的性能。
图d就是网络架构
先从底到上,用CNN提取特征图,然后再从上到下,融合左侧到特征图和上一层上采样的结果作为新的特征图。
先验的结论:
- 深层网络输出的图像分辨率低,学的更多是语义特征
- 浅层网络输出的图像分辨率高,学的更多是细节特征