跨数据集联合训练:focal loss的新应用

在目标检测的实际应用场景中,我们经常会遇到类别增多的情况.

  • 这时候我们是重新把源数据集中新类别进行标注重新训练模型?
  • 还是只用新图片标注新类别,然后训练一个新类别的目标检测模型,在工作时候运行两个目标检测模型?

来自于商汤的一篇文章可能用于解决这个问题:

Cross-dataset Training for Class Increasing Object Detection

文中提出了 跨数据集的训练方法,用于合并多个数据集之间的训练;

如文章中采用coco 2017目标检测数据集、WIDER FACE人脸数据集进行联合训练,一个检测模型的情况同时能对coco的80类和人脸进行检测,然而精度只丢失1%左右.

整体框架如图所示:


image

跨数据集训练pipeline

  1. label mapping 合并重复标签
  2. 通过串联标签,形成混合数据集(但是不需要重新标注)
  3. 建立 avoidance relationship across(记录某个标签来源于哪个数据集)
  4. 根据avoidance relationship across计算loss,作者称之为dataset-aware classification loss

label-mapping

如图所示,

image

假如我们有两个数据集,其标签分别为 、 ,其中标签具有相同含义,那么在新标签中,将其映射为同一个标签

dataset-aware classification loss

文中采用focal loss 作为classification loss.然而,针对不同数据集的的正负样本可能会发生冲突,如wide face 数据集中的人脸样本可能在coco数据集中可能被误判为负样本,这样会降低检测器的性能.

因此作者改进了原始的focal loss,将其适用于多数据集联合训练上.

原始的focal loss 示意为:

\begin{aligned} F L\left(p_{t}\right) &=-\alpha\left(1-p_{t}\right)^{r} \log \left(p_{t}\right) \\ p_{t} &=\left\{\begin{array}{c} {p, \text { if } y=1} \\ {1-p, \text { otherwise }} \end{array}\right. \end{aligned}

其中为ground truth class label.为估计概率.

而作者改写的dataset-aware classification loss很简单,则修改了!=1时的定义,!=1在单数据集训练中代表了其为负样本,但是在多数据集联合训练中,它有可能代表了其是其他数据集中正样本,所以其应该为1;

所以修改后的 dataset-aware focal loss为:

\begin{aligned} F L\left(p_{t}\right) &=-\alpha\left(1-p_{t}\right)^{r} \log \left(p_{t}\right) \\ p_{t} &=\left\{\begin{array}{c} {p, \text { if } y=1} \\ {1, \text { if }y!=1, \text{and from a conflicting dataset } }\\ {1-p, \text { otherwise }} \end{array}\right. \end{aligned}

总结

作者通过提出两点来解决多数据集联合训练问题:

  • label mapping
  • dataset-aware focal loss

其idea主要是将focal loss 用来解决正负样本不均衡问题应用到不同数据集中关于不用label的样本问题上.

reference

  1. Yao Y, Wang Y, Guo Y, et al. Cross-dataset Training for Class Increasing Object Detection[J]. arXiv preprint arXiv:2001.04621, 2020.

你可能感兴趣的:(跨数据集联合训练:focal loss的新应用)