YOLO简介
\space\space\space\space\space\space 之前的R-CNN系列是一种2-stage的检测网络,即先生成候选区域,然后再对这些区域进行bounding box的回归与分类。2-stage的检测网络过程较为复杂,所以速度比较慢,而且像R-CNN这样的检测网络,中间单独的部分需要分开训练,难以优化。而YOLO将目标检测只看成一个回归问题,只有一个单一的网络(可以端到端的训练),可以直接预测出bounding box的位置及类别,没有中间生成候选区域这一过程,所以被称为1-stage。文章中说只需要看一次输入图像就知道其中目标的位置及类别,所以是You Only Look Once(YOLO)。
\space\space\space\space\space\space YOLO的结构如下图所示。输入整幅图像,仅用一个CNN同时预测出多个bounding box的位置及类别。
YOLO细节
\space\space\space\space\space\space YOLO首先将输入图像分成 S × S S\times S S×S的网格,如果某个物体的中心落在某个格子中,那么这个格子就负责检测那个物体。
\space\space\space\space\space\space 每个网格预测 B B B个bounding box,每个bounding box都对应一个置信度评分(confidence score),反应了这个bounding box包含目标的概率以及bounding box位置的准确性,计算公式为 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU_{pred}^{truth} Pr(Object)∗IOUpredtruth,在训练时,当bounding box中不含有目标物体时 P r ( O b j e c t ) = 0 Pr(Object)=0 Pr(Object)=0,即此时置信度评分为0;含有目标物体时 P r ( O b j e c t ) = 1 Pr(Object)=1 Pr(Object)=1,即此时置信度评分等于bounding box与ground truth box的IOU。
\space\space\space\space\space\space 每一个bounding box由五个预测值组成: x , y , w , h x,y,w,h x,y,w,h以及置信度评分。 ( x , y ) (x,y) (x,y)表示了每个bounding box中心点相对于对应网格的偏移值, w , h w,h w,h表示bounding box的宽、高相对于整幅图像宽、高的比例。这个过程将 x , y , w , h x,y,w,h x,y,w,h归一化到[0,1]之间。具体如下图所示(图片来源)。
\space\space\space\space\space\space 每一个网格同时还预测 C C C个条件概率,即 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(Classi∣Object),表示在网格包含物体的条件下属于第i类的概率。注意这里的概率值是针对网格并非每个bounding box。
\space\space\space\space\space\space 在测试的时候,将类的条件概率与每个bounding box的置信度评分相乘,
P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h = P r ( C l a s s i ) ∗ I O U p r e d t r u t h Pr(Class_i|Object)*Pr(Object)*IOU_{pred}^{truth}=Pr(Class_i)*IOU_{pred}^{truth} Pr(Classi∣Object)∗P