yolov2 yolo9000阅读笔记(未完成)

论文地址:https://arxiv.org/pdf/1612.08242v1.pdf

YOLO9000: Better, Faster, Stronger

  • yolov2是指对yolov1做出了些许改进,而yolo9000是指对yolov2使用dataset combination method and joint training algorithm从而得到可以实现9000个类别的detection的model

  • 首先,yolov1存在召回率(即查全率 TPFN+TP\frac{TP}{FN + TP})低和localization不准的问题,针对这些问题提出了一些改进,也即

better

  1. 用batch normalization提高了一点点的map(2%),并且可以去掉v1中的dropout
  2. v1采用224224的分类任务来预训练backbone再在448 * 448的detection上去finetune,而v2在448 * 448detection finetune之前,插入了10个epoch的448448分类任务来过渡resolution,又对map提高了几乎4%
  3. 借鉴faster-rcnn的anchor,而且对每个anchor都预测一个class而改变了之前一个grid只预测一个class的做法。这样做的结果是降低了一点map但是提高了召回率
  4. 使用k-means来确定anchor的尺寸,而k-means采取的距离为:d(box;centroid)=1IOU(box;centroid)d(box; centroid) = 1 − IOU(box; centroid)目的是消除bbox的size的影响
  5. 认为faster-rcnn的anchor shift设计有缺陷,输出的如果是直接对anchor的center的shift会导致一开始飘到很远的地方,振荡很久才收敛,所以这里沿用yolov1采用0-1(用grid来归一化)的输出,所以输出前要加一个logistics回归。
    输出tx,ty,tw,th,tot_x,t_y,t_w,t_h,t_o,而pw,php_w,p_h是anchor的长宽,cx,cyc_x,c_y是grid cell的位置
    yolov2 yolo9000阅读笔记(未完成)
    Pr(object)IOU(b,object)=σ(to)P r(object) ∗ IOU(b,object) = σ(t_o)
    最终效果如下图:
    yolov2 yolo9000阅读笔记(未完成)
  6. 为了得到fine-grained的feature,将earlier的feature用一个passthrough传到后面的层,而由于没有用unet结构,为了将前面的26 * 26和后面的13*13concatenate到一起,将26 * 26拆成4个channel
  7. multi-scale training,每10个epoch随机改变一次输入的size(由于只由conv和pooling组成,所以输入理论上只要是某个倍数即可)导致训练出的模型可以适应多种resolution的输入

faster