Neural-Enhance:图像增强与超分辨率开源项目

最近因为在做图像颜色迁移,顺便也看了下图像增强与超分辨率的项目。因为在颜色迁移前,如果能够对图像的细节进行增强甚至重建,那么颜色迁移的结果肯定会好一些,所以我希望尝试添加图像增强的相关功能到颜色迁移中来。今天就来介绍一个我在github上发现的项目:Neural-Enhance.

Project Link: GitHub - alexjc/neural-enhance: Super Resolution for images using deep learning.

1. 简介

我没有找到该项目对应的论文,但是有四篇相关的文献被提到:

  1. Perceptual Losses for Real-Time Style Transfer and Super-Resolution
  2. Real-Time Super-Resolution Using Efficient Sub-Pixel Convolution
  3. Deeply-Recursive Convolutional Network (DRCN) for Image Super-Resolution
  4. Photo-Realistic Super-Resolution Using a Generative Adversarial Network

本文以第三篇文章为例,来介绍该项目超分辨率算法的基本实现思路。目前的超分辨率算法,主攻的方向还是高频信息的恢复。而DRCN通过一个加深了层数的卷积网络,来实现对高频信息的恢复,同时尽可能抑制控制参数的数量。DRCN通过两个方法来解决层数增加后,训练难度增加的问题,即:recursive-supervision and skip-connection。通过有监督的递归,每一步均输出一副高清图片,不同递归输出的图片会有不同。最终结合所有结果,输出优化的最终结果,效果会更精确;输入与输出往往具有高度的一致性,因为低分率图片与高分辨率图片在内容上会保持一致。因此,在每次输出时,连接输入,就能够得到高效的结果。读到这里让我吃了一惊,这不就是ResNet的基本思想吗?神奇的是,该文章是2016年的oral,与ResNet同年发表,挂在arxiv的时间也非常相似。可见,当时的深度学习专家都在考虑如何增加网络深度而同时抑制训练难度,而且提出了类似的方案。图1展示了该方法的基本结构。

图1. 网络结构,Inference network部分提供了一个输出到输入的连接,非常类似残差思想。 

Embedding net首先将图片转换成一组特征图,Inference net主要超分辨率计算的主体部分,reconstruction net将学到的特征重建RGB图像并输出结果。整个架构的目标就是从源图像x提升分辨率到y,使得高频信息以及部分细节被保留的同时,提升了图像的分辨率。整个网络的目标为找到一个变换f(x),y=f(x)并满足需求。让f1; f2; f3 表示三个子网的功能: embedding, inference and reconstruction, 相对的,目标函数就能够表示为:f(x) = f3(f2(f1(x)))

f1相当于一个卷积操作,具体如下:

 即在一个窗口下实现卷积,并作Relu操作,以得到卷积特征。

f2函数输入特征矩阵H0,输出HD。递归关系为:

 

其中,阿萨大大,W和b为weight与bias。

 f3输入HD,输出图像。简单来说,f3是f1的逆运算:

2. 项目配置

这个项目配置相对简单,我使用的是python3.9,然后按照requirement.txt的内容安装相应的包就可以了。这里需要注意几个点:

Lasagne包按照作者提供的链接,我是没有安装成功的,我使用的安装代码:

pip install -r https://raw.githubusercontent.com/Lasagne/Lasagne/master/requirements.txt

pip install https://github.com/Lasagne/Lasagne/archive/master.zip

这样安装的Lasagne版本基本能够对上。

另外,theano包安装的坑比较多,在完成安装后,会报什么blas,numpy以及gcc++等异常问题。我的解决方法参考了博客:theano安装问题 - 走看看

安装如下工具包:

conda install m2w64-toolchain

conda install libpython

conda install numpy (这里的numpy要用conda安装一次,以获得完整的功能)

这样配置后基本就能够跑起来了。

在程序运行后,由于源代码使用了scripy内的一些读写图像的程序,而在新版本的scripy中,这些功能被删除了,因此在使用代码的时候,到了相应的位置会报错。因此,我们需要修改源程序中相应的功能,如下:

img = scipy.ndimage.imread(filename, mode='RGB')

改为:img = matplotlib.pyplot.imread(filename) #安装matplotlib或者opencv来实现图像读取

scipy.misc.toimage(output, cmin=0, cmax=255)

改为:Image.fromarray(np.uint8(output)) #使用的pillow包的功能,from PIL import Image

我当时测试各种替换代码,所以各种包都试了试,没有做一个比较统一的读写操作。有强迫症的同学可以重写读写代码。

测试代码:

python enhance.py --type=photo --zoom=2 source.jpg

3. 实验结果

论文示例:

 本地示例:

 可以看到,对图像的一些高频信息还是有一定恢复作用,图像更加锐利了一些。

 3. 总结

该项目在实际的应用中具有一定的效果,尤其对于高频信息的恢复任务。但是,对于比较复杂的纹理,当运行超分辨率后,似乎会产生一定的语义割裂情况。我认为,未来的改进方向是如何使用高清的patch纹理恢复算法实现更精确,更复杂的超分辨率计算。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿老甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值