1.AOD-Net去雾论文阅读

AOD-Net

文章DOI:10.1109/ICCV.2017.511
源代码可以在:AODnet-by-pytorch中找到,其中有些代码过期或者命令行有错误,需要完整能跑的可以留言我看到会回复

Abstract

卷积神经网络CNN建立的图像去雾模型称为 AOD-Net。基于重新制定的大气散射模型设计的。
 优点:

  • 不用像之前的大多数模型那样分别估计传输矩阵和大气光,可以直接通过一个轻量级的CNN生成除雾后的图像。
  • 基于上述设计可以使AOD-Net更容易嵌入到其他深度学习模型中,例如R-CNN
  • 在合成和自然模糊图像数据集上的实现结果表明在PSNR,SSIM和视觉效果方面优于现有技术。
     最后还引申了一下和R-CNN连接之后在模糊图像上的目标检测性能有了很大的提高。
Conclusion

 该篇文章提出了一个新的一体化端到端的卷积神经网络,可以直接重建去雾图像。同时用了3个指标来评测:PSNR、SSIM和主观测量,同时经过和几种已有的先进方法比较之后,证明了AOD-Net的优越性和鲁棒性以及效率。
 同时,还首次研究了AOD网络如何通过联合调整管道来提高自然模糊图像上的目标检测和识别性能。

评价指标公式

PSNR 峰值信噪比

  • 首先是 M S E MSE MSE,给定大小 m × n m \times n m×n的干净图像 I I I和噪声图像 K K K,均方误差 M S E MSE MSE定义为:
    M S E = 1 m n ∑ i = 0 m − 1 ∑ j = 0 n − 1 [ I ( i , j ) − K ( i , j ) ] 2 MSE=\frac{1}{mn} \sum_{i=0}^{m-1} \sum_{j=0}^{n-1}[I(i,j)-K(i,j)]^2 MSE=mn1i=0m1j=0n1[I(i,j)K(i,j)]2
  • 接着是 P S N R ( d B ) PSNR(dB) PSNR(dB)定义为:
    P S N R = 10 ⋅ l o g 10 ( M A X I 2 M S E ) PSNR=10 \cdot{log}_{10}(\frac{MAX_I^2}{MSE}) PSNR=10log10(MSEMAXI2)
  • 其中 M A X I 2 MAX_I^2 MAXI2是图片可能的最大像素值。如果每个像素都由8位二进制表示,如果每个像素都由8位二进制来表示,那就是255。通常如果像素值由B位二进制来表示,那么 M A X I = 2 B − 1 MAX_I=2^B-1 MAXI=2B1
  • 如果针对是uint8数据,最大像素值位255,针对浮点型数据,最大像素值位1.
  • 如果图像位彩色图像,有3中方法可以计算:
    • 分别计算 RGB 三个通道的 PSNR,然后取平均值。
    • 计算 RGB 三通道的 MSE ,然后再除以 3 。
    • 将图片转化为 YCbCr 格式,然后只计算 Y 分量也就是亮度分量的 PSNR。

SSIM结构相似性
S S I M SSIM SSIM公式基于样本 x x x y y y之间的三个比较衡量:亮度 (luminance)、对比度 (contrast) 和结构 (structure)。
l ( x , y ) = 2 μ x μ y + c 1 μ x 2 + μ y 2 + c 1 l(x,y)=\frac{2\mu_x\mu_y+c_1}{\mu_x^2+\mu_y^2+c_1} l(x,y)=μx2+μy2+c12μxμy+c1
c ( x , y ) = 2 σ x σ y + c 2 σ x 2 + σ y 2 + c 2 c(x,y)=\frac{2\sigma_x\sigma_y+c_2}{\sigma_x^2+\sigma_y^2+c_2} c(x,y)=σx2+σy2+c22σxσy+c2
s ( x , y ) = σ x y + c 3 σ x σ y + c 3 s(x,y)=\frac{\sigma_{xy}+c_3}{\sigma_x\sigma_y+c_3} s(x,y)=σxσy+c3σxy+c3
一般取 c 3 = c 2 / 2 c_3=c_2/2 c3=c2/2

  • μ x \mu_x μx为x的均值
  • μ y \mu_y μy为y的均值
  • σ x \sigma_x σx为x的方差
  • σ y \sigma_y σy为y的方差
  • σ x y \sigma_{xy} σxy为x,y的协方差
    那么
    S S I M ( x , y ) = [ l ( x , y ) α ⋅ c ( x , y ) β ⋅ s ( x , y ) γ ] SSIM(x,y)=[l(x,y)^\alpha\cdot c(x,y)^\beta \cdot s(x,y)^\gamma] SSIM(x,y)=[l(x,y)αc(x,y)βs(x,y)γ]
    α , β , γ \alpha,\beta,\gamma α,β,γ设为 1,可以得到
    S S I M ( x , y ) = ( 2 μ x μ y + c 1 ) ( 2 σ x y + c 2 ) ( μ x 2 + μ x 2 + c 1 ) ( σ x 2 + σ y 2 + c 2 ) SSIM(x,y)=\frac{(2\mu_x\mu_y+c_1)(2\sigma_{xy}+c_2)}{(\mu_x^2+\mu_x^2+c_1)(\sigma_x^2+\sigma_y^2+c_2)} SSIM(x,y)=(μx2+μx2+c1)(σx2+σy2+c2)(2μxμy+c1)(2σxy+c2)
    每次计算的时候都从图片上取一个 N × N N\times N N×N的窗口,然后不断滑动窗口进行计算,最后取平均值作为全局的 SSIM。
Pic and Table
  • Comparison on PSNR:AOD-Net获得了最好的效果,数值最大,数值越大表示失真越小。
  • Comparison on SSIM:AOD-Net获得了0.972的相似性。取值范围为 [ 0 , 1 ] [0,1] [0,1]值越大,表示图像失真越小.
  • Figure 2.视觉效果的图片,展示了AOD-Net的去雾效果。
  • Figure 3.展示了与使用(3)的原始基线之间的视觉效果比较。
  • Figure 4.AOD-Net的网络图和配置
  • Table 1. 几个不同方法的平均峰值信噪比和结构相似性结果在测试集A上
  • Table 2. 在测试集B上的结构
  • Table 3. 几个图像去雾后平均均方误差
  • Figure 5. 几种对合成图像进行去雾处理的视觉效果
  • Figure 6,7,8基本上就是几个对比效果了
Introduce

介绍了雾霾的背景和自己提出的一个AOD-Net网络

Related Work

大气散射模型
I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) I(x)=J(x)t(x)+A(1-t(x)) I(x)=J(x)t(x)+A(1t(x))
I ( x ) I(x) I(x)即输出的雾霾图像, J ( x ) J(x) J(x)即要恢复的场景亮度或者说是干净图像,剩下即是两个关键参数
A A A是全球大气光, t ( x ) t(x) t(x)是传输矩阵
t ( x ) t(x) t(x)定义为: t ( x ) = e − β d ( x ) t(x)=e^{-\beta d(x)} t(x)=eβd(x)
其中 β \beta β是大气的散射系数, d ( x ) d(x) d(x)是物体和相机之间的距离(distance)

  • 传统的方法:通过最大化局部对比度来应对雾霾消除。在Single Image Dehaze这篇论文中提出了一种通过估计场景反射率的物理估计的方法。而暗通道先验算法以更可靠的计算传输矩阵。
  • 深度学习方法:CNN方法在计算机视觉领域的成功使得被引入烟雾去除中,使用多尺度CNN——首先生成粗尺度传输矩阵,然后对其进行细化。Dehaze-Net它将模糊图像作为输入,并输出其传输矩阵。结合经验规则估计的全球大气光,通过大气散射模型恢复无霾图像。
  • 本文方法不用估计中间步骤估计参数,直接在统一模型中进行估计。
Modeling and Extension

公式更改
  在该节中会进行转换大气散射模型,并基于此设计了AOD-Net,然后详细介绍了AOD网络的结构,同时会进行嵌入到其他深度学习模型
  基于 I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) I(x)=J(x)t(x)+A(1-t(x)) I(x)=J(x)t(x)+A(1t(x)),转化为
J ( x ) = 1 t ( x ) I ( x ) − A 1 t ( x ) + A J(x)=\frac{1}{t(x)}I(x)-A\frac{1}{t(x)}+A J(x)=t(x)1I(x)At(x)1+A
同时,之前的方法是分别估计t(x)并通过 J ( x ) = 1 t ( x ) I ( x ) − A 1 t ( x ) + A J(x)=\frac{1}{t(x)}I(x)-A\frac{1}{t(x)}+A J(x)=t(x)1I(x)At(x)1+A来获得去雾后图像。并不是直接重建误差最小化在 J ( x ) J(x) J(x)上,而是优化 t ( x ) t(x) t(x)的质量,这样间接优化会导致次优解。本文核心思想是将两个参数 t ( x ) t(x) t(x) A A A统一成一个公式,即 K ( x ) K(x) K(x),并且直接在图像像素域上最小化重建误差,将 J ( x ) = 1 t ( x ) I ( x ) − A 1 t ( x ) + A J(x)=\frac{1}{t(x)}I(x)-A\frac{1}{t(x)}+A J(x)=t(x)1I(x)At(x)1+A的公式直接表示为
J ( x ) = K ( x ) I ( x ) − K ( x ) + b J(x)=K(x)I(x)-K(x)+b J(x)=K(x)I(x)K(x)+b
K ( x ) = 1 t ( x ) ( I ( x ) − A ) + ( A − b ) I ( x ) − 1 K(x)=\frac{\frac{1}{t(x)}(I(x)-A)+(A-b)}{I(x)-1} K(x)=I(x)1t(x)1(I(x)A)+(Ab)
用这种方式, 1 t ( x ) \frac{1}{t(x)} t(x)1 A A A都被整合到 K ( x ) K(x) K(x)中,b作为默认值为1的常数偏差。由于 K ( x ) K(x) K(x)被独立于出 I ( x ) I(x) I(x)后,因此我们的目标是建立一个输入自适应的深度模型,并且最小化输出 J ( x ) J(x) J(x)
1.AOD-Net去雾论文阅读_第1张图片

网络设计
AOD-Net设计有两部分组成:

  • 一个是K-估计模型用5个卷积层取估计K(x)的值
  • 接着是一个图像生成模块,该模块是由一个element-wise乘法层和几个element-wise加法层组成用来恢复图像。
  • K估计模块是AOD-Net的关键组成,用于估计深度和相对雾霾级别。使用了五个卷积层,通过融合不同大小的滤波器形成多尺度特征。Dehaze-Net使用了不同大小的滤波器进行并行卷积。MSCNN将粗尺度网络特征和细尺度网络的中间层连接起来。
    受上述论文的启发,AOD-Net的concat1层将conv1和conv2层的功能连接,concat2层connect conv2 and conv3,而concat3层将conv1,conv2,conv3,conv4连接。同时该文章也尝试了不使用concat操作,得到的结果却比连接的差了许多。同时,AOD-Net每个卷积层都只用了3个过滤器,这是该模型轻量的原因。
    大多数的图像恢复深度学习方法都完全包含了最终建模:训练模型来从损坏的图像恢复干净的图像。相比之下,深度学习去雾的模型却不够完善。需要知道,雾霾本质上就是带来非均匀的、依赖信号的噪声,雾霾引起的表面的场景衰减与拍摄到的场景和相机之间的距离相关。与常见的图像退化模型不同,表面和相机之间的物理距离(像素深度)会假设信号独立于噪声,在这种情况下,所有信号都会经历相同的参数化退化过程。前者的恢复模型可以很轻松的建模基于一个静态映射功能,但是不能直接适用于去雾,降噪过程会因为信号而异,回复模型也必须是自适应的
  • 该模型也可以与其他的计算机视觉高级任务相结合,例如:目标检测和物体识别及视觉语义学等。
    1.AOD-Net去雾论文阅读_第2张图片
Evaluations on Dehazing

其他模型进行对比的一些评估数值

Improving High-level Tasks with Dehazing

该段是来阐述用该模型于目标检测和物体识别效果,这个还是很有实践意义的,比如在无人驾驶领域,可以去雾后进行物体识别判断距离和一些物体,是否需要避开等。

代码和使用方法

我的代码上传到Github了,怎么使用如下图展示:
比如说我的路径都是D:\Chrome-Down\AODnet-by-pytorch-master下的:
1.先进入make_dataset文件夹:

cd make_dataset

2.然后打开选取绝对路径,这里需要注意的是复制的路径请记得用/而不是反斜杠\,这一步会生成室内有雾和无雾图片,路径记得先创建好

python create_train.py --nyu {Your NYU Depth V2 path} --dataset {Your trainset path}

1.AOD-Net去雾论文阅读_第3张图片
3.等生成结束后,然后选取图片3169张作为测试集:

python random_select.py --trainroot {Your trainset path} --valroot {Your valset path}

1.AOD-Net去雾论文阅读_第4张图片

这里报错原因是我生成的数量不够,上面的作为一个示范,生成才10份h5文件。但是注意已经转移过来了到my_test文件夹里面了。

  1. 开始训练
python train.py --dataroot {Your trainset path} --valDataroot {Your valset path} --cuda

5.测试结果

$ python test.py --input_image /test/canyon1.jpg  --model /model_pretrained/AOD_net_epoch_relu_10.pth --output_filename /result/canyon1_dehaze.jpg --cuda

你可能感兴趣的:(论文阅读,python)