python怎么实现图像去噪_基于深度卷积神经网络和跳跃连接的图像去噪和超分辨...

a78a45ada54026c75fba743bff0218ab.png

Image Restoration Using Very Deep Convolutional Encoder-Decoder Networks with Symmetric Skip Connections

作者:Xiao-Jiao Mao、Chunhua Shen等

本文提出了一个深度的全卷积编码-解码框架来解决去噪和超分辨之类的图像修复问题。网络由多层的卷积和反卷积组成,学习一个从受损图像到原始图像的端到端的映射。卷积层负责特征提取,捕获图像内容的抽象信息,同时消除噪声/损失。相对应,反卷积层用来恢复图像细节。

1a821b9c8abc37ad4fc62237d1f97dc1.gif

网络结构

419b89a26d1cc85384ae6bfa49e0aec9.png

在底层图像修复领域,由于池化操作会丢失有用的图像细节信息,因此,本网络没有用到池化层,是一个全卷积的网络结构。

卷积层的特征图和与之相应成镜像关系的反卷积层特征图进行跳跃连接,对应像素直接相加后经过非线性激活层然后传入下一层。

受 VGG 模型的启发,卷积核大小都设置为为 3*3。另外,由于网络结构本质上是一个像素级的预测,因此输入可以是任意大小的图片,输出和输入保持一致。

1a821b9c8abc37ad4fc62237d1f97dc1.gif

反卷积解码器

在全卷积的情况下,噪声一步步地被消除。经过每一个卷积层后,噪声等级减小,图像内容的细节也可能会随之丢失。在本篇论文提出的结构中,卷积层保留了主要的图像内容,而反卷积层则用来补偿细节信息,可以达到良好去噪效果的同时较好地保留图像内容。

另一方面,卷积层逐渐减小特征图的大小,反卷积层再逐渐增大特征图的大小,最终确保输入输出大小一致,也可以保证在移动端计算能力有限情况下的测试效率。

1a821b9c8abc37ad4fc62237d1f97dc1.gif

跳跃连接

正如残差网络的设计初衷,跳跃连接可以解决网络层数较深的情况下梯度消失的问题,同时有助于梯度的反向传播,加快训练过程。

69f8d0dff43f717e46285213c439d1c7.png

通过传递卷积层的特征图到反卷积层,有助于解码器拥有更多图像细节信息,从而恢复出更好的干净图像。

针对输入噪声图像 X 和输出干净图像 Y,本网络致力于学习一个残差即 F(X) = Y - X。

1a821b9c8abc37ad4fc62237d1f97dc1.gif

讨论

d53325b36f7cd6e9e9838d54fa8d7f70.png

实验 (a) 对比有无跳跃连接情况下 PSNR 随迭代次数的变化,可以看到有跳跃连接的情况下 PSNR 有显著提高。

实验 (b) 对比不同网络结构下 Loss 值随迭代次数的变化,可以看到在同等层数的网络下,有跳跃连接时 Loss 值相对要小很多。

实验 (c) 对比一般的残差网络(由一系列的残差块组成)和本文提出的网络情况下 PSNR 随迭代次数的变化,可以看到本文中提出的这种跳跃连接方式可以获得更好的 PSNR。

网络的大容量使得本文提出的结构能够处理不同噪声等级的图像去噪问题和不同尺寸参数的超分辨问题。

1a821b9c8abc37ad4fc62237d1f97dc1.gif

实验

因为本网络的卷积核仅仅是为了消除噪声,因此对图像内容的方向不敏感。所以,在测试的时候,我们可以旋转或者镜像翻转卷积核进行多次前向传播,然后对多次的输出取平均从而得到一个更平滑的结果。

图像去噪的实验结果对比

252506de878b59a14665317a7a62a3ce.png

图像超分辨的实验结果对比

1526c4bab7e76c12d0036aabb3fcc965.png

可以看到,RED-20, 10 层卷积 10 层反卷积的情况下已经取得了比传统方法好的效果,而且加深网络之后还可以取得更好的效果。

噪声等级越大,本文中提出的网络比其他网络的提高幅度就越大,也就是优势越明显。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL源码剖析 queue队列概述

queue是一种先进先出的数据结构,他有两个出口允许新增元素(从最底端 加入元素)、移除元素(从最顶端删除元素),除了对于顶端和底端元素进行操作之外,没有办法可以获取queue的其他元素即queue没有…

python为什么运行不了_python为什么会环境变量设置不成功

学习python编程,首先要配置好环境变量。本文主要讲解python的环境变量配置,在不同版本下如何安装 Windows 打开Python官方下载网站 x86:表示是32位电脑 x86-64:表示是64位电脑 目前Python版本分为2.x版本和3.x版本。推荐大家使用3.x版本。 设置环境变量&…

STL 源码剖析 heap堆

heap不属于STL容器的组件,属于幕后角色,是priority_queue的助手priority_queue 允许用户以任何次序将任何元素推入容器内,但是取出的时候需要从优先级最高(也就是数值最高)的元素开始取,这种思想是基于heap的函数实现如果使用list…

java 打印星号

代码1 package lesson.l2_for; //6列4行 //****** //****** //****** //****** public class ForDemo8 {public static void main(String[] args) {for (int i1;i<4;i){for (int j 1; j <6 ; j) {System.out.print("*");}System.out.println();}} }代码2 pa…

python从小白到大牛百度云盘_Java从小白到大牛 (关东升著) 中文pdf+mobi版[36MB]

《Java从小白到大牛》是一本Java语言学习立体教程&#xff0c;读者群是零基础小白&#xff0c;通过本书的学习能够成为Java大牛。主要内容包括&#xff1a;Java语法基础、Java编码规范、数据类型、运算符、控制语句、数组、字符串、面向对象基础、继承与多态、抽象类与接口、枚…

java打印九九乘法表

代码1 package lesson.l5_loop; //九九乘法表 //1*11 //2*12 2*24 //3*13 3*26 3*39 //4*14 4*28 4*312 4*416 //5*15 5*210 5*315 5*420 5*525 //6*16 6*212 6*318 6*424 6*530 6*636 //7*17 7*214 7*321 7*428 7*535 7*642 7*749 //8*18 8*216 8*324 8*432 8*540 8*648 8*75…

STL源码剖析 priority_queue

priority_queue是一个拥有权重概念的queue&#xff0c;允许底部加入新的元素&#xff0c;头部删除旧的元素&#xff0c;以及审视元素数值的操作priority_queue带有权重的概念&#xff0c;即元素按照权重进行排列&#xff0c;而不是按照插入队列的顺序进行排序。要求权值高者在前…

python数字1 3怎么表示_Python入门篇之数字

数字类型 数字提供了标量贮存和直接访问。它是不可更改类型&#xff0c;也就是说变更数字的值会生成新的对象。当然&#xff0c;这个过程无论对程序员还是对用户都是透明的&#xff0c;并不会影响软件的开发方式。 Python 支持多种数字类型&#xff1a;整型、长整型、布尔型、双…

STL源码剖析 slist单向链表概述

概述 SGI STL的list是一个双向链表&#xff0c;单向链表是slist&#xff0c;其不在标准规格之内单向和双向链表的区别在于&#xff0c;单向链表的迭代器是单向的 Forward Iterator&#xff0c;双向链表的迭代器属于双向的Bidirectional Iterator。因此很多功能都被受限但是单向…

output怎么用_用树莓派实现室内温度监控

树莓派加上温度传感器实现室内温度监控。可用于家庭&#xff0c;轿车&#xff0c;工业&#xff0c;农业 等许多方面。可做温度预警&#xff0c;自动降温等操作。各位小伙伴可自行脑补发挥。1.硬件准备a.树莓派&#xff08;Raspberry Pi&#xff09;一个b.DS18B20温度传感器一个…

STL源码剖析 关联式容器

STL关联式容器以set(集合) 和 map(映射表)两大类&#xff0c;以及对应的衍生体构成,比如mulyiset(多键集合) multimap(多键映射表) ,容器的底层均基于红黑树RB-Tree也是一个独立的容器&#xff0c;但是不对外开放此外还提供了标准之外的关联式容器 hash table散列表&#xff0c…

STL源码剖析 关联式容器 红黑树

概念 红黑树不仅仅是一个二叉树&#xff0c;必须满足如下条件1&#xff0c;每个节点不是红色就是黑色 (深色底纹为黑色&#xff0c;浅色底纹为红色)2&#xff0c;根节点是黑色的3&#xff0c;如果节点为红&#xff0c;其子节点必须为黑色的4&#xff0c;任一节点至NULL(树的尾…

python生成的词云没有图案_还在为专栏封面发愁?我用Python写了个词云生成器!...

妈妈再也不用担心我写专栏找不到合适的封面了&#xff01;B站专栏的封面至少是我一直头疼的问题&#xff0c;每次写完文章却找不到合适的图片作为封面。 词云是一个很不错的选择&#xff0c;既美观&#xff0c;又提纲挈领。网上也有词云生成的工具&#xff0c;但大多收费/只能试…

java 1000以内的完数

题目 代码 package lesson.l6_review;public class PrefectNumber {public static void main(String[] args) {for (int i 1; i <1000 ; i) {int num0;for (int j 1; j <i-1 ; j) {if (i%j0){numj;}}if (inum){System.out.print(i"\t");}}} }

STL源码剖析 map

所有元素会根据元素的键值自动被排序 元素的类型是pair&#xff0c;同时拥有键值和实值&#xff1b;map不允许两个元素出现相同的键值pair 代码 template <class T1,class T2> struct pair{typedef T1 first_type;typedef T2 second_type;T1 first; //publicT2 secon…

java api接口怎么写_Java 如何设计 API 接口,实现统一格式返回?

来源&#xff1a;老顾聊技术前言接口交互返回格式控制层Controller美观美化优雅优化实现方案前言在移动互联网&#xff0c;分布式、微服务盛行的今天&#xff0c;现在项目绝大部分都采用的微服务框架&#xff0c;前后端分离方式&#xff0c;(题外话&#xff1a;前后端的工作职责…

java 二维数组

声明和初始化 静态初始化 // 静态初始化&#xff1a; // 一维数组int[] arr1_1 {1, 2, 4};System.out.println(Arrays.toString(arr1_1)); // 二维数组int[][] arr1_2 {{1, 2}, {4, 5}, {9, 10}};for (int[] i :arr1_2) {System.out.print(Arrays.toS…

STL源码剖析 hashtable

二叉搜索树具有对数平均时间的表现&#xff0c;但是这个需要满足的假设前提是输入的数据需要具备随机性hashtable 散列表这种结构在插入、删除、搜寻等操作层面上也具有常数平均时间的表现。而且不需要依赖元素的随机性&#xff0c;这种表现是以统计为基础的 hashtable的概述 …

append在python里是什么意思_“一棵绿萝七个鬼”是什么意思?卧室里到底能不能养绿萝!...

很多人都喜欢在家里养盆绿萝&#xff0c;一是能净化室内空气&#xff0c;让家里绿意浓浓&#xff0c;更有生机一些&#xff1b;二是绿萝好养&#xff0c;水培土培都行&#xff0c;养着也省心。在养花界有一句俗语&#xff1a;“一棵绿萝七个鬼”&#xff0c;这句话是什么意思呢…

java 二分查找

注意 二分查找要求原数组为有序序列&#xff0c;从小到大 递归解法 public class problem9 {public static void main(String[] args) {int[] arr {1,2,3,4,6,7};int left 0;int right arr.length - 1;int value 2;System.out.println(Arrays.toString(arr));int index …