目标:使用深度学习技术对图像进行超分辨率重建,涉及到的技术包括卷积神经网络,生成对抗网络,残差网络等。
技术:本实验使用到“Jupyter Notebook”等开发组件,涉及到了“TensorFlow”、“NumPy”、“scipy. misc”、“PIL.image”等框架和库,其中“scipy. misc”与“PIL.image”用于图像处理。
数据集:
本实验的数据可以选择CV领域各类常见的数据集,实验将以CelebA数据集作为示例。CelebA是香港中文大学开放的人脸识别数据,包括了10177个名人的202599张图片,并有5个位置标记和40个属性标记,可以作为人脸检测、人脸属性识别、人脸位置定位等任务的数据集。数据集可在Google Drive中下载,详细信息可在官方网站中查看。本实验使用该数据集中img_align_celeba.zip
这一文件,选择了其中前10661张图片,每张图片根据人像双眼的位置调整为了219x178的尺寸。
本实验需要得到图像的低分辨率图像,并通过深度学习将这些低分辨率图像提升到高分辨率图像,最后与原图进行对比查看模型的效果。
在图像超分辨率问题中,理论上可以选择任意的图像数据,当时根据经验,使用有更多细节纹理的图像会有更好的效果,使用无损压缩格式的PNG格式图像比JPG格式图像有更好的效果。
一、原理介绍
1.GAN
可以参考博客GANs:生成对抗网络系列及应用_studyeboy的博客-CSDN博客_gans的应用
GAN解决了非监督学习中的著名问题:给定一批样本,训练一个系统,能够生成类似的新样本。
GAN的优势:
- 根据实际的结果,看上去产生了更好的样本;
- GAN能训练任何一种生成器网络;
- GAN不需要设计遵循任何种类的因式分解的模型,任何生成器网络和任何鉴别器都会有用;
- GAN无需利用马尔科夫链反复采样,无需在学习过程中进行推断,回避了近似计算棘手的概率的难题。
GAN的应用:
- DCGAN应用到人脸图像
- 计算机视觉,重建图像
- 图像超分辨率
- 图像去雨
- 二次元头像炼成
- 图片生成
- 图片风格转换
2.Generation
生成(generation)就是模型通过学习一些数据,然后生成类似的数据。让机器看一些动物图片,然后自己来产生动物的图片,这就是生成。
作为一种无监督或者自监督算法,自编码器本质上是一种数据压缩算法。
- AutoEncoder通常有两个方面的应用:
- 是数据去噪,
- 是为进行可视化而降维。
- 进行图像压缩
- 传统自编码器被用于降维或特征学习
VAE变分自动编码器结构是一个经典的autocoder模型,网络的组成也是编码器、解码器、loss。
Encoder-Decoder是一个模型构架,是一类算法统称,并不是特指某一个具体的算法,在这个框架下可以使用不同的算法来解决不同的任务。首先,编码(encode)由一个编码器将输入序列转化成一个固定维度的稠密向量,解码(decode)阶段将这个激活状态生成目标译文。参考Encoder-Decoder综述理解(推荐)_SmileAda的博客-CSDN博客_encoder-decoder
EBGAN的判别器使用Encoder-Decoder的结构。
二、实验过程
1.安装库
!pip3 install imageio
2.导入库
import os
import tensorflow as tf
import numpy as np
import imageio
import random
from PIL import Image
tf.enable_eager_execution()
3.下载数据
import oss2
access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', 'LTAI4G1MuHTUeNrKdQEPnbph')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', 'm1ILSoV