Tensorflow实现二次元图片的超分辨率

本文介绍了一个使用Tensorflow实现二次元图片超分辨率的项目,基于3层或7层CNN网络,通过数据增强、反卷积层等技术提高图像清晰度。训练过程涉及数据准备、损失函数优化,并提供了训练和使用网络的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

github上有一个很有意思的项目,waifu2x,原理是通过一个训练好的CNN,将低分辨率的图像放大2倍或更多,同时保留足够的细节,使放大后的图像不会过于模糊或失真。该项目是用lua+Touch写的,最近在学习Tensorflow,闲暇之余打算在TF上自己实现一个这样的系统。

1. 网络选择

根据论文Image Super-Resolution Using Deep Convolutional Networks,作者使用了一个3层CNN,是一个非常小的网络,同时为了避免边界效应(bound effect),每一个卷积层都不使用padding,卷积核大小分别为9、1、5,作者也提到,适当增大卷积核的大小,可以提升最后的效果,但也带来了更多的计算量。使用这个网络时,首先需要将低分辨的图像通过bicubic插值到所需的大小,然后再输入网络。对于一个核大小分别为9、3、5的网络,定义如下:

def srcnn_935(patches, name='srcnn'):
    with tf.variable_scope(name):
        upscaled_patches = tf.image.resize_bicubic(patches, [INPUT_SIZE, INPUT_SIZE], True)
        conv1 = conv2d(upscaled_patches, 9, 9, 64, padding='VALID', name='conv1')
        relu1 = relu(conv1, name='relu1')
        conv2 = conv2d(relu1, 3, 3, 32, padding='VALID', name='conv2')
        relu2 = relu(conv2, name='relu2')
        return conv2d(relu2, 5, 5, NUM_CHENNELS, padding='VALID', name='conv3')

不过,waifu2x本身没有使用这个网络,而是使用了一个7层的vgg-style网络,按照作者的说法,这个7层网络更便于调整,效果也更好,我也用Tensorflow实现了这个网络,如下:

def vgg7(patches, name='vgg7'):
    with tf.variable_scope(name):
        upscaled_patches = tf.image.resize_bicubic(patches, [INPUT_SIZE, INPUT_SIZE], True)
        conv1 = conv2d(upscaled_patches, 3, 3, 32, padding='VALID', name='conv1')
        lrelu1 = leaky_relu(conv1, name='leaky_relu1')
        conv2 = conv2d(lrelu1, 3, 3, 32, padding='VALID', name='conv2')
        lrelu2 = leaky_relu(conv2, name='leaky_relu2')
        conv3 = conv2d(lrelu2, 3, 3, 64, padding='VALID', name='conv3')
        lrelu3 = leaky_relu(conv3, name='leaky_relu3')
        conv4 = conv2d(lrelu3, 3, 
评论 54
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值