-
首先yolov1存在召回率(即查全率 FN+TPTP?)低和localization不准的问题,针对这些问题提出了一些改进也即
- 借鉴faster-rcnn的anchor,而且对每个anchor都预测一个class而改变了之前一个grid只预测一个class的做法这样做的結果是降低了一点map但是提高了召回率
- 认为faster-rcnn的anchor shift设计有缺陷,输出的如果是直接对anchor的center的shift会导致一开始飘到很远的地方振荡很久才收敛,所以這里沿用yolov1采用0-1(用grid来归一化)的输出所以输出前要加一个logistics回归。
- multi-scale training每10个epoch随机改变一次输入的size(由于只由conv和pooling组成,所以输入理论上只要是某个倍数即可)导致训练出的模型可以适应多种resolution的输入
- 提出了darknet这个backbone用更快更精简的网络实现了高的准确率
- 能够用两种dataset的混合来训练,一種是只有class没有bbox标注的用来训练分类器,这时loss只计算并更新与分类有关的参数更新对应置信度最高的bbox的分类输出;另一种是常规的detection输入,这时使用完整的loss
- 提出一种multi-label的模型(而不使用softmax),是为了使来自不同数据集的输入有较好的兼容性当label的语义有重叠时对模型的训练不會产生不利冲突,这个multi-label的模型如下
- 将label使用word-tree的形式表示出来而预测每个结点对其子节点的条件概率。所以如果1000个label最后可能要预测1300多维的姠量,因为树的根部是一些不作为label的(比如“名词”、“动词”)之类的单词而对于每一类的概率,需要从该结点沿着路径乘到根节点test时预测的类别为从根节点开始沿着概率值最高一条路径一直走下去直到某个阈值开始输出