目标检测
- 物体识别是要分辨出图片中有什么物体,输入是图片,输出是类别标签和概率。物体检测算法不仅要检测图片中有什么物体,还要输出物体的外框(x, y, width, height)来定位物体的位置。
- objectdetection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。
- object detection要解决的问题就是物体在哪里以及是什么的整个流程问题。
- 然而,这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不
定,而且可以出现在图片的任何地方,更何况物体还可以是多个类别。
- 评价指标:IOU
边框回归Bounding-Box regression
- 红色区域可以理解为未经优化的结果
边框回归是什么? - 对于窗口一般使用四维向量(x.y.w.h)来表示,分别表示窗口的中心点坐标和宽高。
- 红色的框P代表原始的Proposal,; .
- 绿色的框G代表目标的Ground Truth;
- 我们的目标是寻找一种关系使得输入原始的窗口P经过
映射得到一个跟真实窗口G更接近的回归窗口G^。
“给定一个候选框P,如何把P回归的更好”
训练:
net -> p -> br -> dx (conv随机权重得到的) -> G' -> Loss(G' - G) -> 反向传播更新conv权重 -> p -> br -> dx2(conv权重2) -> G'2
推理:
net -> p -> br -> dx2 -> G'
目标检测发展历程
Two Stage
- 工程上主要用Faster R-CNN (RPN + CNN + ROI)
Faster R-CNN
- Conv Layers
- 区域生成网络(Region Proposal Network(RPN))
输出有用区域信息(X, Y, W , H),不包含分类结果
复杂性维度:结构简单,逻辑难
Roi Pooling
- 整个过程可以看作RPN + 分类
基于英伟达硬件的不同R-CNN神经网络结构运行时间
Two Stage 和 One Stage
One Stage算法
- YoloV3
- YOLO算法整体来说就是把输入的图片划分为SS格子, 这里是33个格子。
- 当被检测的目标的中心点落入这个格子时,这个格子负责检测这个目标,如图中的人。
- 我们把这个图片输入到网络中,最后输出的尺寸也是SSn (n是通道数), 这个输出的SS与原输入图片SS相对应(都是3*3) 。
- 假如我们网络一共能检测20个类别的目标,那么输出的通道数n=2*(4+1) +20=30。这里的2指的是每个格子有两个标定框(论文指出的),4代表 标定框的坐标信息,1代表 标定框的置信度,20是检测目标的类别数。
- 所以网络最后输出结果的尺寸是S x S x n=3 x 3 x 30。
关于标定框
网络的输出是S x Sx (5*B+C)的一个tensor(S-尺寸,B-标定框个数,C- 检测类别数,5-标定框的信息)。
- 5分为4+1:
- 4代表 标定框的位置信息。框的中心点(x,y), 框的高宽
h,W。 - 1表示每个标定框的置信度以及标定框的准确度信息。
一般情况下,YOLO不会预测边界框中心的确切坐标。它预测:
- 与预测目标的网格单元左上角相关的偏移;
- 使用特征图单元的维度进行归一-化的偏移。
例如:
以上图为例,如果中心的预测是(0.4, 0.7),则中心在13x13特征图上的坐标是(6.4, 6.7) (红色单元的左.上角坐标是(6,6))。
但是,如果预测到的x,y坐标大于1,比如(1.2, 0.7)。那么预测的中心坐标是(7.2, 6.7)。注意该中心在红色单元右侧的单元中。这打破了YOLO背后的理论,因为如果我们假设红色框负责预测目标狗,那么狗的中心必须在红色单元中,不应该在它旁边的网格单元中。因此,为了解决这个问题,我们对输出执行sigmoid函数,将输出压缩到区间0到1之间,有效确保中心处于执行预测的网格单元中。
yoloV1结构
Yolo的缺点: .
- YOLO对相互靠的很近的物体(援在-起且中点都落在同一个格子上的情况),还有很小的群体检测效果不好,这是因为-一个网格中只预测了两个框,并且只属于一类。
- 测试图像中,当同一类物体出现不常见的长宽比和其他情况时泛化能力偏弱。