YOLO - You Only Look Once: Unified, Real-Time Object Detection
YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。
You Only Look Once说的是只需要一次CNN运算,Unified指的是这是一个统一的框架,提供end-to-end的预测,而Real-Time体现是Yolo算法速度快。
1 边框回归 (Bounding Box Regression)
这是除了R-CNN以外很多论文都只是简略阐述的一部分内容,所以参考几篇回答以后在这里总结边框回归的具体概念。
过程简述
边框回归的目的:对红色的框进行微调,使得经过微调后的窗口跟Ground Truth更接近,这样定位会更准确。Bounding-box regression 就是用来微调这个窗口的一种思路。
一个bounding box可以用四维向量(x,y,w,h)来表示,Ground Truth也可以做出同样表示,那么便可光回顾的总体目标作出粗略描述。
Given:(Px,Py,Pw,Ph)(1.1)
Find:f(Px,Py,Pw,Ph)≈G(Px,Py,Pw,Ph)(1.2)
那么经过何种变换才能从图 2 中的窗口P 变为窗口G呢? 比较简单的思路就是平移结合尺度放缩。
先做平移(Δx,Δy)(Δx,Δy),Δx=Pwdx(P),Δy=Phdy(P)Δx=Pwdx(P),Δy=Phdy(P)
Gx=Pwdx(P)+Px,(1.3)
Gy=Phdy(P)+Py,(1.4)
然后再做尺度缩放(Sw,Sh)(Sw,Sh), Sw=exp(dw(P)),Sh=exp(dh(P))Sw=exp(dw(P)),Sh=exp(dh(P)), 对应论文中:
Gw=Pw⋅exp(dw(P)),(1.5)
Gh=Ph⋅exp(dh(P)),(1.6)
观察(1.3)~(1.6)我们发现, 边框回归学习就是dx(P),dy(P),dw(P),dh(P)这四个变换。接下来就是设计算法得到这四个映射。
算法过程
输入:
该窗口对应的CNN特征,通常指的是Pool5 feature那个特征向量,以及所需要的Ground Truth(通常指的是偏移量t∗=(tx,ty,tw,th) 其中$tx=(Gx−Px)/Pw,ty=(Gy−Py)/Ph,tw=log(Gw/Pw),th=log(Gh/Ph)
输出:
dx(P),dy(P),dw(P),dh(P)
回归:
使得dx(P),dy(P),dw(P),dh(P)与(tx,ty,tw,th)尽量接近
优化函数:
loss=i∑N(ti−wiTΦ5i)2+λ∣∣wi∣∣2
2 YOLO技术框架
2.1 预测
首先是需要对图片进行分割成为 SxS 个网格,在作者论文里面给出的是S=7,于是把原图分成 7x7=49 个网格,每一个网格的大小是 64x64 。每个网格要预测B个bbox,每bbox除了要回归自身的位置之外,还要附带预测一个confidence值。 这个confidence代表了所预测的bbox中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:
Pr(Object)∗IOU(truth∣pred)(2.1)
其中如果有object落在一个grid cell里,Pr(Object)取1,否则取0。 第二项是预测的bbox和实际的groundtruth之间的IoU值。
在预测的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:
Pr(Classi)∗IOU(truth∣pred)(2.2)
class信息是针对每个网格的,confidence信息是针对每个bounding box的。
Attention
每个bbox要预测的是(x,y,w,h)和confidence共5个值.
其中(x,y,w,h)并不是每个bbox的起始坐标和窗口宽度,x,y是相对于其对应的网格的偏移offset,w,h是该窗口对应于整张图像的长宽比例。每个网格还要预测一个类别信息,记为C类。则S×S个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S×S×(5∗B+C)的一个向量。
在算法的最后使用了非极大值抑制算法,求每一个网格的多个bbox到底哪个bbox是最有可能的窗口:
Pr(Classi)∗IOU(truth∣pred)(2.2)
2.2 训练
- 将标注框和相应grid cell匹配到一起
- 调整相应grid cell对应的分类
- 检查grid cell对应的B个预测窗口bbox,找到最好的那个并调整该窗口,并增加该窗口对应的confidence;与样本不太匹配的窗口bbox则降低置信度。
- 对于没有检测到ground truth的窗口,检测bbox的置信度并降低其对应预测窗口bbox的置信度,但是不改变分类、窗口坐标。
损失函数
$$$$
2.3 可能的提升
- YOLO对于靠的很近的物体或者是小群体的检测效果不好,这是因为每个grid cell只能预测属于同一类的框。
- 当同一个测试对象出现不同尺度的时候,这种方法的检测效果欠佳。
查看更多关于【目标检测】的文章