多任务学习是一个很火的话题,在自动驾驶领域以及其他对存储资源要求较高的端侧任务,都会考虑这种方式。之前面试的时候也有被问题多任务学习。前几天看到一个写得很好的例子,在此记录一下,也好久没有写博客了。
1.参考
论文是2018年的CVPR。
论文:https://arxiv.org/pdf/1705.07115.pdf
代码:https://github.com/yaringal/multi-task-learning-example
2.论文分析
以下面的框架图为例,输入一系列图片,经过一个编码器(Resnet50作为backbone),分别使用不同的解码器,进行优化。其中任务1是分割出所有的目标,任务2是要把里面的每个实例目标都分割出来,任务3是输出深度信息。在每个任务上接上相应的损失函数进行优化。这个是训练过程。那推理过程就是将三个解码器后面的结果分别输出,分割结果,实例分割结果,深度信息。
这个任务会共用backbone,使用不同的head层,与不同的损失函数。这个过程中每个损失函数可能会设置相应的权重进行优化。
与专有任务相比,能够获得相当的精度。
3.代码
https://github.com/yaringal/multi-task-learning-example/blob/master/multi-task-learning-example-pytorch.ipynb
在relu之后接了两个并联的全连接层,应该是优化两个任务。
这个是优化训练模型:
以及相应的loss曲线: