对象检测的预训练模型或从头开始训练?

Pretrained model or training from scratch for object detection?

我有一个由 10k-15k 图片组成的数据集,用于监督对象检测,这与 Imagenet 或 Coco 非常不同(图片更暗,代表完全不同的事物,工业相关)。

目前使用的模型是FasterRCNN,它使用Resnet提取特征backbone。 可以在一个阶段从头开始训练模型的 backbone,然后在另一个阶段训练整个网络,这对任务有利,而不是加载在 Coco 上预训练的网络,然后在中重新训练整个网络的所有层一个阶段?

根据我的经验,这里有一些要点:

  • 你的训练集不够大,无法从头开始训练检测器(尽管取决于网络配置,fasterrcnn+resnet18 可以工作)。最好使用 imagenet 上的预训练网络;
  • 网络预训练的领域并不是那么重要。网络,尤其是大网络,需要学习所有这些拱形、圆形和其他原始图形,以便使用这些知识来检测更复杂的对象;
  • 火车图像的亮度可能很重要,但不会阻止您使用预训练网络;
  • 从头开始训练需要更多的时期和更多的数据。训练时间越长,你的 LR 控制算法应该越复杂。至少,它不应该是常数,根据累积损失改变 LR。并且初始设置取决于多种因素,例如网络大小、增强和 epoch 的数量;
  • 我经常使用 fasterrcnn+resnet(各种层数)和其他网络。我建议你使用 maskcnn 而不是 fasterrcnn。只需命令它不要使用掩码并且不要进行分割即可。我不知道为什么,但它提供了更好的结果。
  • 不要把时间花在 mobilenet 上,以你的训练集大小,你将无法用一些合理的 AP 和 AR 来训练它。从maskrcnn+resnet18开始 backbone.