ROI Align 与多任务学习

  • 2020 年 4 月 22 日
  • AI

这篇躺在印象笔记里面很久了,最近业余稍微空闲了些,拿出来拍拍灰,整理一下。 没有跟进目前的目标检测的进展,不过其实没关系,工业界 Faster-RCNN 还是用的比较多的。


本来写着自己之前 Two Stage 和 One Stage 的技术选择的历史问题(其实,两者本相通,后面等我整理印象笔记里面更早的一篇…),而双阶段的最大优势就是来源于 ROI Align 带来的训练多样性。

自己对 ROI Align 是这么看的:

ROI Align 是一种特征共享的途径,提供了在目标检测中进行多任务训练的通用框架。 而且可以非常方便的直接让检测的整个 feature extractor 参与训练。

ROI Align 的多任务视角

ROI Align提取的结果就是图片局部特征插值后的结果,而且是可以backward的(这是最重要的)。

这样的一个框架提供了非常便捷的多任务学习能力:只需要将这些局部插值特征继续塞在特定任务的网络中就可以。

具体什么可以结合自己的业务场景,以及训练时的任何脑洞(完全不局限,因为infer的时候,这些脑洞的部分都可以去掉)。

  1. 将目标区域拿去做分割(Mask-RCNN)
  2. 目标区域的精细分类
  3. 进一步的回归任务(比如 3D box)
  4. 预测目标区域的下一帧信息(行人路径预测、视频预测)
  5. 特征压缩(VAE)
  6. 也可以加 GAN,毕竟曾经流行过
  7. ReID feature 预测
  8. NLP结合,加个LSTM/Transformer,又不是不可以

只要有训练数据,只要有脑洞,就可以通过 ROI Align 针对图像的特定局部特征进行训练(虽然是局部特征,但是由于是CNN,基本上训练的就是整个feature extractor)。

多任务学习(MTL)的优势

虽然多任务的训练难度更大,但是如果能够熟悉训练方法和超参,一般来说,最终的网络会在主要任务上获得更好的效果。所以,如果可以的话,尽量用上MTL。

多任务学习的带来的优势:

  1. 更加有效或者针对性的训练(比如单阶段检测一直存在的正负样例不平衡,如果有其他的任务,可以在训练过程中针对正样例有进一步的训练;图像中部分区域可以在某些任务上额外获得训练,可以说看做是训练阶段的一种注意力分配)。
  2. 避免单一loss带来的bias,有一些优化目标的过分训练并不一定会带来网络在数据集合上最终的表现的提升(可以认为额外的 tasks 是某种形式的正则化,而且相比常规意义上的正则化,更加智能和适应)。
  3. 多任务可以对网络的不同部分针对性的训练,比如 Inception 的训练(训练过程中额外牵出的分类器)可以认为是这样的效果(虽然从任务种类上说不算是多任务训练)。
  4. 可以更好的利用数据集:如果任务之间没有依赖,不同的任务甚至可以利用上完全不同的数据集。
  5. 虽然多任务会对网络中的capacity产生竞争,但是也存在大网络中会有很多作用不大的权值,multi-task或许可以重新利用起这些权值来,让网络更加紧凑。
  6. 实践中可以普遍的观察到,多任务学习对网络整体性能的提升。

有关多任务的简单资料,可以参考下这些内容: