YOLO 总结

YOLO V1 (45fps,fast version150fps)

1. idea

  • 此前的目标检测将问题看成是分类问题,而yolo看成是一个回归问题
  • yolo非常快,可以达到一秒45帧的速度
  • yolo在运行时将整张照片作为输入,可以得到更多的context。而不像R-CNN那样将Bounding Box作为输入
  • YOLO具有更强的泛化能力(得益于将图片整体作为输入?)
  • yolo的运行步骤为:1. resize图片;2. 输入网络;3. 极大值抑制

2. details

  • 将object detection的各个部分整合到一个单独的网络
  • 将整张图片划分为S×SS \times S个网格grid,每个网格预测出B个bounding box,每个box各预测出一个置信度confidence(用于描述这个box包含object的概率),confidence的定义为
    Pr(object)IOUpredtruth Pr(object)*IOU_{pred}^{truth}
    假如没有object落在box中,则confidence为0
  • 每个box要预测五个值,其中一个便是confidence,另外四个是(x,y,w,h)(x,y,w,h)(x,y)(x,y)表示box的中心。(x,y)(x,y)是box相对于grid的的相对位置,归一化到[0,1][0,1],而(w,h)(w,h)是相对于input(整张图)的比例,一样[0,1][0,1]
  • 每个grid还需要预测出C(C为类别的总数)个概率值Pr(ClassiObject)Pr(Class_i|Object)
  • 在测试阶段,可以根据以下公式得到类别指定的置信度class-specific confidence
    Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruthPr(Class_i|Object)*Pr(Object)*IOU_{pred}^{truth}=Pr(Class_i)*IOU_{pred}^{truth}
  • 因此,整个网络的输出是一个S×S×(B5+C)S \times S \times (B * 5 + C)的tensor

3. Experiment

  • CNN采用类似GoogleNet的结构
    在这里插入图片描述
    没有采用inception模块,采用1×11 \times 1的卷积层降维加上一个3×33\times 3的卷积层代替
  • 网络一共24层,fast yolo采用9层
  • 数据集采用Pascal VOC,S=7,B=2,C=20,因此输出为7×7× 307 \times 7 \times \ 30的向量。
  • 在ImageNet上进行预训练卷积层(预训练时长1周),在预训练的卷积层(20层)后加入4层卷积层和2层全连接层。因为目标识别需要更多的信息,将输入大小从224*224增大到448*448。
  • loss采用sum-squared error。因为大部分的box都不包含object,不加权的情况下会使网络倾向于预测出confidence全0。同时,位置信息与分类错误权重一致的情况下实验不太理想。因此,增大位置信息(coordinate)的权重并增大那些包含object的box的权重,论文中加入两个参数λcoord=5,λnoobj=0.5\lambda_{coord}=5, \lambda_{noobj}=0.5。最终的loss function为在这里插入图片描述
    其中
  1. C为box的confidence,
  2. pi(c)p_i(c)为第i个grid属于第c类的概率;
  3. Iiobj\mathbb I_i^{obj}代表object是否出现在第i个grid上(构建ground truth的时候每个object只在一个grid上有置信度,即object中心所在的grid才会使Iiobj=1\mathbb I_i^{obj}=1
  4. Iijobj\mathbb I_{ij}^{obj}代表第i个grid中的第j个box是否responsible(首先筛选grid,选出object中心所在的grid,对这些grid中两个box选择具有最大iou的box,最后产生的box才是responsible。思想与进化算法相似,每个grid产生两个个体(grid),选择适应值(IOU)最高的grid)
  5. Iijnoobj=1\mathbb I_{ij}^{noobj}=1是除了4.中所指的其他所有的box
  6. 值得注意的是,对于分类error的惩罚只作用于出现object的grid上
  7. 对于宽和高h w的开根,是因为对于不同的大小box回归,预测偏差相等时对于小box的惩罚更大。如偏差同样为10,对于长为100的box的惩罚显然应该小于长为20的box
  8. 对于responsible的box的置信度error计算,target也就是ground truth需要在计算出预测值以后才能动态计算出相应的置信度,置信度为预测box与target box的IOU
  9. loss总结:对于responsible的box需要计算边框(x,y,w,h)(x,y,w,h)的error以及置信度(目标置信度为与object的IOU)的error,对于其他box只需要计算置信度的error(目标置信度为0)。对于分类error,只需要计算object中心所在的grid。

YOLO v2 (67fps的情况下76.8mAP,40fps则78.6mAP)

  • 首先介绍YOLO v2相比v1作出了哪些改变
  1. 加入Batch Normalization,v1假如BN以后mAP提升了2%
  2. 高分辨率分类器的使用:此前v1是先使用224*224的图片进行预训练,然后再直接插值到448448再训练。而现在是直接采用448448的图片在ImageNet上再finetune10个epoch,使得图像更好的适应高分辨率
  3. 加入anchor,使用全卷积网络,干掉全连接层,使得box在空间上保持原有的关联。同时去掉了v1中最后一层的池化层以获取更高分辨率的特征图,同时v2采用416*416的图片作为输入(v1采用448*448),这样输出的最终的特征图为13*13(恰好是一个奇数)。通过这种操作,可以使网络更好地预测在图片中心的目标(这样子大目标(通常在中心)通常会落在最中心的grid上,而不是周围的四个grid,有点Attention的味道)
  4. 采用K-means对VOC和COCO的bounding box进行聚类,采用不同的k(聚类中心数目)进行聚类,最后发现k=5时tradeoff模型复杂度以及recall(v1相比其他region proposal的方法recall比较低)。
    在这里插入图片描述
  5. 直接对定位进行预测:faster rcnn是对偏移量(中心坐标的偏移量,单位相对anchor box的长宽的比例,没有对移动距离进行约束,从而可以移动很远)进行预测,预测不太稳定,尤其在训练初期。而在yolo v2中直接预测相对中心位置相对grid左上角的偏移量也就是说直接回归预测中心坐标,采用一个sigmoid来进行归一化。同时使用边框聚类以及直接定位预测可以提高约5%。
  6. Fine-Grained Features。将13*13之前的26*26的特征图的层26*26*512进行一次采样降到13*13*2048(比如四个像素,分别采样四个生成四张图,对26*26中每2*2个采样一次,增加了四倍的通道数,同时分辨率降低)。通过这种操作,可以提高1%性能,且对小目标的预测更加准确
  7. 多尺度的训练,每10个epoch随机从{320,352,608}中选取尺寸(都是32的倍数)来训练
  8. 文章中没有提到loss的计算。v1中的前景后景分类是相对于grid而言,而对于v2,是相对于box而言的。

YOLO v3

  • 主要的不同点在于:
  1. 不再使用softmax进行分类,而是直接使用sigmoid,使得一个框可以同时被认为多多个类(如女人和人)
  2. 采用了残差模块,同时利用多尺度特征进行目标检测
  3. 跟v2同样采用聚类进行选择anchor box尺寸,只不过这次有9种的size。使用13*13的特征图预测最大的三类框,较大52*52的特征图预测最小的三类框,中等大小的特征图预测剩余的框
  • 相比其余版本,改变的真的不多…
发布了120 篇原创文章 · 获赞 6 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览