Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法
本文插图
授权自AI科技大本营(ID:rgznai100)
本文约3600字 , 建议阅读7分钟 。
本文为你介绍FFA去雾算法和暗通道去雾算法搭建 。
在过去的几十年中 , 单图像去雾作为基本的低级视觉任务已引起了计算机视觉社区和人工智能公司的越来越多的关注 。 其中最为典型的便是北大&北航提出FFA-Net去雾新网络和何凯明博士提出的暗通道去雾算法 , 现所有源码已开源 。
其论文链接:
https://arxiv.org/abs/1911.07559
【Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法】而今天我们就将针对这两个项目进行实践 。 其中得到的去雾效果如下:
本文插图
本文插图
实验前的准备
首先我们使用的python版本是3.6.5所用到的模块如下:
Pytorch模块用来模型训练和网络层建立;其底层和Torch框架一样 , 但是使用Python重新写了很多内容 , 不仅更加灵活 , 支持动态图 , 而且提供了Python接口 。 不仅能够实现强大的GPU加速 , 同时还支持动态神经网络 。
numpy模块用来进行数值运算处理矩阵运算;
OpenCV用来读取图片和图像处理;
os模块用来读取数据集等本地文件操作 。
FFA去雾算法
其代码结构如下图可见:
本文插图
FFA-Net体系结构包含三个关键组件:
1.考虑到不同的通道特征包含完全不同的加权信息并且不同图像像素上的雾度分布不均匀 , 一种新颖的特征注意(FA)模块将通道注意与像素注意机制结合在一起 。 FA不平等地对待不同的特征和像素 , 这在处理不同类型的信息时提供了额外的灵活性 , 从而扩展了CNN的表示能力 。
2.基本的块结构包括本地残差学习和功能注意 , 本地残差学习允许较不重要的信息(例如薄雾区域或低频)通过多个本地残差连接被绕开 , 让主网络体系结构专注于更有效的信息 。
3.基于注意力的不同级别特征融合(FFA)结构 , 可从特征注意(FA)模块中自适应学习特征权重 , 从而为重要特征赋予更多权重 。 这种结构还可以保留浅层信息 , 并将其传递到深层 。
实验结果表明 , 提出的FFANet在数量和质量上都大大超过了现有的单图像去雾方法 , 从而将SOTS室内测试数据集上最佳的PSNR度量从30.23db提高到35.77db 。
本文插图
其中训练FFA模型的部分代码如下:
def default_conv(in_channels, out_channels, kernel_size, bias=True):return nn.Conv2d(in_channels, out_channels, kernel_size,padding=(kernel_size//2), bias=bias)class PALayer(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)return x * yclass CALayer(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),nn.Sigmoid())def forward(self, x):y = self.avg_pool(x)y = self.ca(y)return x * yclass Block(nn.Module):def __init__(self, conv, dim, kernel_size,):super(Block, self).__init__()self.conv1=conv(dim, dim, kernel_size, bias=True)self.act1=nn.ReLU(inplace=True)self.conv2=conv(dim,dim,kernel_size,bias=True)self.calayer=CALayer(dim)self.palayer=PALayer(dim)def forward(self, x):res=self.act1(self.conv1(x))res=res+xres=self.conv2(res)res=self.calayer(res)res=self.palayer(res)res += xreturn resclass Group(nn.Module):def __init__(self, conv, dim, kernel_size, blocks):super(Group, self).__init__()modules = [ Block(conv, dim, kernel_size)for _ in range(blocks)]modules.append(conv(dim, dim, kernel_size))self.gp = nn.Sequential(*modules)def forward(self, x):res = self.gp(x)res += xreturn resclass FFA(nn.Module):def __init__(self,gps,blocks,conv=default_conv):super(FFA, self).__init__()self.gps=gpsself.dim=64kernel_size=3pre_process = [conv(3, self.dim, kernel_size)]assert self.gps==3self.g1= Group(conv, self.dim, kernel_size,blocks=blocks)self.g2= Group(conv, self.dim, kernel_size,blocks=blocks)self.g3= Group(conv, self.dim, kernel_size,blocks=blocks)self.ca=nn.Sequential(*[nn.AdaptiveAvgPool2d(1),nn.Conv2d(self.dim*self.gps,self.dim//16,1,padding=0),nn.ReLU(inplace=True),nn.Conv2d(self.dim//16, self.dim*self.gps, 1, padding=0, bias=True),nn.Sigmoid()])self.palayer=PALayer(self.dim)post_precess = [conv(self.dim, self.dim, kernel_size),conv(self.dim, 3, kernel_size)]self.pre = nn.Sequential(*pre_process)self.post = nn.Sequential(*post_precess)def forward(self, x1):x = self.pre(x1)res1=self.g1(x)res2=self.g2(res1)res3=self.g3(res2)w=self.ca(torch.cat([res1,res2,res3],dim=1))w=w.view(-1,self.gps,self.dim)[:,:,:,None,None]out=w[:,0,::]*res1+w[:,1,::]*res2+w[:,2,::]*res3out=self.palayer(out)x=self.post(out)return x + x1使用python main.py --net='ffa' --crop --crop_size=240 --blocks=19--gps=3 --bs=2 --lr=0.0001 --trainset='its_train' --testset='its_test' --steps=500000--eval_step=5000命令实现模型的训练功能 。
推荐阅读
- 第一财经|8月外储实现五连升,双循环格局将继续支持规模总体稳定
- 【】前8个月我国外贸总值突破20万亿元 出口首次实现年内正增长
- 央视新闻客户端|前8月我国外贸总值突破20万亿 出口首次实现年内正增长
- 人民币|8月外储实现五连升,双循环格局将继续支持规模总体稳定
- 幻化成蝶|2020的手机居然还能烫伤人!
- 一味宠爱|最全盘点卡中国脖子的35项技术,折射中国工业水平的真实现状
- 上海宝山|实现加装电梯“零突破”!,罗店这个小区这样做
- 央视新闻客户端|前8个月我国外贸总值突破20万亿元 出口首次实现年内正增长
- 科内|意大利超级杯结束!科内实现3连冠,诺瓦拉全新阵容令人失望
- 智能垃圾分类小屋亮相服贸会 可实现一站式垃圾分类
