深度学习——Pre-Net
作者:互联网
CVPR2019原论文:Progressive Image Deraining Networks: A Better and Simpler Baseline
开源代码(pytorch框架):https://github.com/csdwren/PReNet
1.主要工作:
提出了逐步优化残差网络 progressive ResNet (PRN)和逐步优化循环网络progressive recurrent network (PReNet)完成图像去雨。这两个网络没有太大差异,只是PReNet比PRN多了一个循环单元。PRN和PReNet具有简单的结构,但能够实现较好的去雨效果。它们能够被轻易嵌入其它的去雨网络框架中。
PRN和PReNet能够内部循环计算,不增加网络参数的同时,还能实现较好的去雨效果。
PRN和PReNet能够通过 single negative SSIM 或 MSE损失来更新网络参数。
2.progressive residual network (PRN):
PRN的结构非常简单,主要分为三个部分:1)一个卷积层 fi(…)接收input图像 ;2)若干个残差块(ResBlocks)的组合fres(…)提取深度特征信息 ;3)一个卷积层fout(…)输出去雨结果图像。
但PRN是循环迭代优化的,比如上图分为了T个循环优化阶段,从t=1→t=2→t=3→…→t=T。这些循环的网络参数是共用的,循环次数不会增加网络的总参数。单个循环优化过程分三个阶段,用以下公式表示:
第t-1个阶段到第t个阶段的优化过程,且每次优化过程都会将原始含雨图像y融合进来。
网络可以直接输出雨纹图像,也可以直接输出干净背景图像。只是输出雨纹图像会让去雨效果更好。
3.Progressive Recurrent Network(PReNet):
PReNet与PRN的唯一差异在于PReNet多了一个循环单元frecurrent(…)。文章的循环单元采用长短期记忆单元(LSTM)构成。循环优化过程用以下公式表示:
4.网络结构参数设置
所有卷积核size =3 × 3 且 padding=1 × 1。fin(…)由一个Conv+ relu构成。fres(…)由5个 ResBlocks构成(ResBlock由两个Conv+relu构成)。fout(…)由一个Conv构成。
关于fres(…)部分,文章给出了两种结构:(a)第一种是连续的5个ResBlock;(b) 第二种是一个ResBlock循环5次(相对于第一种,参数数目变为1/5),其减少网络体量的同时,使得去雨效果削弱在可接受范围内。
5.目标损失函数:
文章给出了两种损失函数:
1)MSE loss: 计算的是最后一个阶段的输出(比如最后一个优化阶段为T)和ground truth的MSE。
2)negative SSIM loss:计算的是最后一个阶段的输出(比如最后一个优化阶段为T)和ground truth的SSIM。
6.分解实验:
实验发现,在计算PSNR和SSIM指标时,SSIM损失函数优于MSE损失函数。如下图,设置循环优化总阶段数目为T=6:
其中PReNet-MSE使用MSE损失函数;PReNet-SSIM使用SSIM损失函数;PReNet-RecSSIM使用Recursive Block结构和SSIM损失。
从图像视觉效果上来看
虽然使用Recursive Block结构会使去雨的质量降低,但依旧能够接受。反而,使用Recursive Block结构能够大大减少网络体量,节约内存资源。
循环优化阶段的次数不是越多越好。如下图,当T=6时,去雨质量是最好的,当T 继续增大时,去雨质量反而降低。
标签:Pre,PReNet,PRN,SSIM,循环,深度,Net,优化,MSE 来源: https://blog.csdn.net/weixin_51352656/article/details/112117599