AI科技大本营|Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来! | 附代码


北京联盟_本文原题:Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来! | 附代码
在过去的几十年中 , 单图像去雾作为基本的低级视觉任务已引起了计算机视觉社区和人工智能公司的越来越多的关注 。 其中最为典型的便是北大&北航提出FFA-Net去雾新网络和何凯明博士提出的暗通道去雾算法 , 现所有源码已开源 。 其论文链接:https://arxiv.org/abs/1911.07559 。
而今天我们就将针对这两个项目进行实践 。 其中得到的去雾效果如下:
AI科技大本营|Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来! | 附代码
本文插图

AI科技大本营|Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来! | 附代码
本文插图

作者 | 李秋键
责编 | 晋兆雨
实验前的准备
首先我们使用的python版本是3.6.5所用到的模块如下:
Pytorch模块用来模型训练和网络层建立;其底层和Torch框架一样 , 但是使用Python重新写了很多内容 , 不仅更加灵活 , 支持动态图 , 而且提供了Python接口 。 不仅能够实现强大的GPU加速 , 同时还支持动态神经网络 。
numpy模块用来进行数值运算处理矩阵运算;
OpenCV用来读取图片和图像处理;
os模块用来读取数据集等本地文件操作 。
FFA去雾算法
其代码结构如下图可见:
AI科技大本营|Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来! | 附代码
本文插图

FFA-Net体系结构包含三个关键组件:
1.考虑到不同的通道特征包含完全不同的加权信息并且不同图像像素上的雾度分布不均匀 , 一种新颖的特征注意(FA)模块将通道注意与像素注意机制结合在一起 。 FA不平等地对待不同的特征和像素 , 这在处理不同类型的信息时提供了额外的灵活性 , 从而扩展了CNN的表示能力 。
2.基本的块结构包括本地残差学习和功能注意 , 本地残差学习允许较不重要的信息(例如薄雾区域或低频)通过多个本地残差连接被绕开 , 让主网络体系结构专注于更有效的信息 。
3.基于注意力的不同级别特征融合(FFA)结构 , 可从特征注意(FA)模块中自适应学习特征权重 , 从而为重要特征赋予更多权重 。 这种结构还可以保留浅层信息 , 并将其传递到深层 。
实验结果表明 , 提出的FFANet在数量和质量上都大大超过了现有的单图像去雾方法 , 从而将SOTS室内测试数据集上最佳的PSNR度量从30.23db提高到35.77db 。
AI科技大本营|Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来! | 附代码
本文插图

其中训练FFA模型的部分代码如下:
def default_conv(in_channels, out_channels, kernel_size, bias=True):
returnnn.Conv2d(in_channels, out_channels, kernel_size,padding=(kernel_size //2), bias=bias)
classPALayer(nn.Module):
def __init__( self, channel):
super(PALayer, self).__init__
self.pa = nn.Sequential(
nn.Conv2d(channel, channel // 8, 1, padding=0, bias=True),
nn.ReLU(inplace=True),
nn.Conv2d(channel // 8, 1, 1, padding=0, bias=True),
nn.Sigmoid
)
def forward( self, x):
y = self.pa(x)
returnx * y
classCALayer(nn.Module):
def __init__( self, channel):
super( CALayer, self).__init__
self.avg_pool = nn.AdaptiveAvgPool2d( 1)
self.ca = nn.Sequential(
nn.Conv2d(channel, channel // 8, 1, padding=0, bias=True),
nn.ReLU(inplace=True),
nn.Conv2d(channel // 8, channel, 1, padding=0, bias=True),


推荐阅读