Low-level vision task 低级视觉任务:image2image, video2video 等等。

High-level vision task 高级视觉任务:检测,识别,分割 等等。

图1. 低级去噪任务+高级语义分割任务

那么一般在什么应用场景会结合使用呢?比如做低质量人像识别,可通过low-level model得到较高质量的人像,再进行 high-level识别(然而在实际场景中,一般低质量的会被直接剔除掉)。。。这类问题的难点和有趣的地方在于“较高质量”的定义是客观/人类主观质量评价的,还是相对于高级任务有帮助的?Low-level和high-level又是如何mutual来学习的

最近由于要做基于视频的低级+高级任务,故阅览了几篇经典的图像低级+高级任务结合的文章,总结分享一下。

--------------------------------------------------------------------------

Deep Generative Adversarial Compression Artifact Removal[1],ICCV2017

主要贡献如下:

1. 设计了简单有效的生成器网络,并对比使用 MSE,SSIM,判别器对抗学习 三种不同的 Loss,对图像decompression去压缩任务的客观/主观质量的影响。

2. 基于压缩算法一般先将图像分成patches再进行DCT的思想,判别器也是基于图像sub-patch level 来操作,可更好消除 mosquito noise。

3. 探索了compression artifacts对深度学习目标检测器的影响,及decompression去压缩对检测器性能的提升

--------------------------------

生成器网络架构如下图:

图2. 生成器

简单地堆残差block,只用了一个下采样及上采样来减少计算量,全卷积网络(即可在小Patch(128*128)进行训练,然后应用到更大的图片里;因为压缩损失一般是基于小block及macroblock)。

对于损失函数的设计,文中对比了以下三种:

  1. MSE loss ,即对应 客观质量评价指标PSNR,故理论上使用MSE loss,监督出来图像的PSNR值会高。

2. SSIM loss, 即对应 客观质量评价指标SSIM,故理论上使用SSIM loss,监督出来图像的SSIM值会高。

3. 基于生成对抗的 loss,保证分布相似及主观质量较好。

其中包括了判别器sub-patch loss [公式] , perceptual loss [公式] 及 对抗 loss [公式] 

对于判别器,其输入是生成器输出的(128*128)patch分成16*16的sub-patches,这是针对压缩算法的特点设计的。

------------------------------------------

实验结果:

上表所示,明显可以看到,GAN出来的PSNR及SSIM值都较低,而MSE loss监督的生成器PSNR值最高,SSIM loss监督的生成器SSIM值最高;这很符合逻辑。

但是对比下定性的实验结果图,你会发现GAN出来的图一些纹理细节保持得很好,且不容易过度平滑:

图3. 定性分析

且雇了10位志愿者对50幅生成的图像进行主观质量评价实验,出来的MOS值明显是GAN最优。。。虽然无从查证这10位工作人员是否水军。。。

OK,通过上述这些实验,我们并不能得到明确的结论:到底GAN生成出来的decompressed图像质量是否真的好?作者忍不住就在high-level目标检测任务来试下它的效果,拿pretrain好了的Faster-RCNN,在JPEG QP=20的VOC2007图片上进行验证,结果如下:

结果非常惊艳,不需要任何的 Joint train策略,GAN去压缩出来的图像对目标检测任务性能提升最大,远秒 MSE 及 SSIM loss监督的性能。。。

故人类需要思考的是:客观质量评价度量确实没有与高级视觉任务有正相关关系;而主观质量评价实验确实更有价值但费时费力;而通过多个高级视觉任务的度量性能来衡量多媒体质量好坏,也仅能说明对此几个任务可能更有帮助而已~~

------------------------------------------------------------------------

When Image Denoising Meets High-Level Vision Tasks[2],IJCAI2018

跟上面文章的思路不同,本文探索的是:

1.在低级视觉任务与高级视觉任务进行联合训练时候,两个任务是如何相互促进的?

2.联训后的低级视觉任务,迁移到其他高级视觉任务,泛化能力如何?是否也能提升cross-task的性能呢?

------------------------------------------

文中用的denoising网络比较简单,类似VDSR+UNet的形式,encoder与decoder中的连接也是使用concat形式:

图4. (a)总体框架 (b)特征编码器 (c)特征解码器

Loss function方面,也是简单使用了MSE,来看看去噪出来的PSNR性能如何:

并不是惊艳,跟DnCNN差不多,没办法,为了发论文搞创新点,只能强行自己搞个denoising网络。。。

OK,来接着谈谈与高级视觉任务联训,如果是单任务(仅仅图像识别或者语义分割)的话,应该是低级任务网络和高级任务网络里参数都进行finetune,且使用权值叠加的低级高级Loss,效果最好。但文中为了验证联训出来的低级网络的泛化能力,就统一把高级任务网络中的参数fixed住,即对比以下几种情况:

图5. 联训框架图

1. Baseline: 带噪声的图像直接给预训练好的VGG进行分类。

2. Separate+VGG:Denosing网络单独训练,生成去噪完图片丢给预训练好的VGG进行分类。

3. Joint Training: Denosing网络使用 Joint loss 进行训练,VGG加载预训练的模型并fixed参数进行分类。

4. Joint Training (Cross-Task): Denoising网络与语义分割任务进行 Joint loss 训练(语义分割里使用的DeepLab也是预训练好,参数fixed的),后接预训练好的VGG进行分类测试。

-----------------------------------------

实验结果如下:

ILSVRC2012 validation dataset性能对比

定量的结果如上表所示,Joint training性能比Separate training效果要好,且对不同的高级视觉任务的泛化能力保持得很好

接着来看看定性的结果,主观上的质量明显联训后的(V)比单独MSE Loss监督的(IV)从结构性信息(如纹理)上更加 rich 和 detailed:

图6. 定性结果可视化 (II) noisy图 (III) DnCNN 去噪 (IV) Separate training (V) Joint training (VI) GroundTruth

-----------------------------------------------------

总结与展望

通过上述两文,我们可以知道无论是否联训,低级任务对高级任务的性能都有改善。那么问题来了,那低级任务网络cascaded高级任务网络,变相等于加深了总体网络,那是否设计个更深更强的网络,直接对低质量图像(compressed or nosiy image)进行高级任务,性能会更好还是更差呢?

思考与交流

对于联训,更多地是靠高级任务来指导低级任务来生成更适合高级任务的特征,只不过这个特征给人类预先加了约束(为了更好地讲story可视化避免黑箱),如上述两文中生成的image2image高质量图像,再如MotionNet[3]中的video2flow(低级视觉任务:通过相邻帧生成光流;高级视觉任务:动作识别),人工与机器互相合作的成果。

小弟有个问题请教下:

那如果是两个低级视觉任务Cascaded联训,理论上是否合理?比如 video2video + video2image?

Reference:

[1]Leonardo Galteri et al., Deep Generative Adversarial Compression Artifact Removal, ICCV2017

[2]Ding Liu et al., When Image Denoising Meets High-Level Vision Tasks: A Deep Learning Approach, IJCAI2018

[3]Yi Zhu et al., Hidden Two-Stream Convolutional Networks for Action Recognition