预测:
YOLO的整体结构就是CNN,输入是一个正方形的图片,输出是一个7730维的张量。
YOLO在一开始就会将一张图平均划分为77=49个方块,因此对应到输出中就是每个小方块对应了1130维的张量。
而这30维张量就由预测框1[5维],预测框2[5维],类别概率[20维]组成。
其中预测框的五维分别是:左上角的二维坐标,预测框的长宽和预测框的confidence分数。
之所以有两个预测框据说是为了加快收敛速度。
类别概率20维就对应了数据集里的20种物体
在获得了这最后的77*30维的张量后,使用NMS对所有的方框进行筛选,留下的预测框和对应的最大类别概率就是最终结果。
训练:
把CNN放到imagenet上预训练一下,然后再连接上最后的一层获得7730维的张量。
由于训练集是已经有ground truth的bbox标定的,因此yolo会提取各个gt bbox的中心点,如果这个中心点落在某个小块(49个中的某一个)上的话,这个小块就负责预测这个bbox,而其它小块就都和这个bbox无关。且由于每个小块都会预测出两个bbox,这两个bbox中置信度小的那个bbox也不参与loss的计算,和别的没有bbox中心点的小块产生的bbox一视同仁。
训练的主要问题就是loss的设计,这个loss包含了五个部分:
1.对于包含gt bbox中心点的小块,我们希望它可以准确的预测出中心点的坐标
2.对于包含gt bbox中心点的小块,我们希望他可以准确地预测出bbox的长宽。
3.对于包含gt bbox中心点的小块,我们希望他对于预测出的bbox的置信度越高越好
4.对于不包含任何gt box中心点的小块,我们希望他对于他预测出的bbox的置信度越低越好
5.对于包含gt boox中心点的小块,我们希望它可以准确地预测出bbox中物体的类别
优点:端到端,快。考虑了全景,因此对于背景不容易误判
缺点:由于划分了49个小方块,所以最多只能预测49个物体,因此对于小物体的分类就不好