项目工作总结一

VC课最后的大作业(项目组)论文,没有经验硬着头皮写的,发出来分享一下。文章借鉴了项目申报书、一些论文、莫凡的视频学习思路和一本TF书籍。因为懒,所以就把这篇文章当做本项目的学期总结吧。


历史黑白照片视频档案的智能着色软件的初期工作和技术学习

摘要:国内早期的照片视频档案大多是黑白色彩的,将黑白照片着色能够还原鲜活时代特色。图像着色的目标是为灰度图像的每一个像素分配颜色,图像智能着色的关键是构建训练一个神经网络。现有的着色开源代码最终呈现的效果并不能满足我国历史黑白照片的着色效果,此项目通过学习、借鉴和修改,完成一个针对我国历史黑白照片视频智能着色的软件。文章总结了小组成员在本学期对于此项目的初步研究,包括搜集相关资料、数据集的建立等前期准备工作。以及实现此项目的关键技术——深度学习开源框架TensorFlow的学习过程。

关键词:黑白照片;智能着色;神经网络;图像处理;TensorFlow

引言

在彩色照片出现之前,人们主要用黑白照片来记录自己和亲人的容貌。在我们的生活中,一些老照片很有纪念意义,特别是一些珍贵的黑白人像照片有着不可估量的收藏价值。而我国的照片档案对于历史的记录更具保存价值,为了更好地展示照片的拍摄意义,反应当时人民生活环境,还原鲜活时代特色,有专门的的人员对其进行修复。但是目前的修复工作需要耗费较大的人力成本和时间成本,使用专业的图像处理软件手工需要进行繁琐复杂的步骤。

随着近年来数字技术和计算机技术的迅速发展,图像自动着色技术得到了长足的发展。但是在以往的自动着色技术中,他们所使用的着色方法仍然费时费力,且细节信息还原度不高、物体边界清晰度不高、缺乏用户交互的依赖性较强。

而近年来利用现代人工智能的方法,即神经网络学习算法,并在ImageNet比赛的推动下,不断改进神经网络,已经可以做到较小误差地处理图像,提取图像的特征。目前的着色开源项目在这些神经网络的结构基础上构建出自己的着色神经网络,并通过数据集进行训练测试,他们已经能基本着色本国的一些黑白照片。然而他们对于我国黑白照片的着色效果并不好,原因是因为他们训练神经网络的训练集是国外的照片,照片特征带有国外的特色。而对于我国历史照片,对于人物,生活用品,衣物,建筑风格,色调,时代背景的把握并不准确,所以着色效果很差。

因此我们的项目将借鉴已有的着色开源代码,在此基础上进行修改和创新,并改用当下拍摄的旧时代照片以及其对应的灰度图片作为数据集,解决我国黑白老照片和视频的上色问题。

神经网络的工作模式是这样的:首先利用神经网络的信息提取的高效性,对图像中的各类信息及特征进行提取,构建并训练深度学习模型。训练网络时与原图像进行对比,逐渐减小网络输出结果的信息、分类等各类型的损失。训练完成后,只需向网络输入一张灰度图片,即可生成一张颜色饱满、鲜明逼真的彩色图片。

为了构建出一个可以和其他已有模型竞争的神经网络,我们从长计议,将项目了解和技术学习作为项目的初步研究内容来推进项目进行。我们小组分工明确,我主要以TensorFlow(后文均以TF代替)作为学习内容,以本学期完成基础TF学习为小目标,逐步向构建出优秀的神经网络迈进。

1项目了解——前期准备

1.1解相关信息

在确定选题之后,我们在互联网中搜索关键词,不断深入地查找,我们小组根据题目初步确定研究方向:机器学习、神经网络、图像处理、软件开发……我们阅读和分析了相关信息,了解到智能着色需要使用人工智能中机器学习中的深度学习部分,需要使用到卷积神经网络等相关技术,所以我们将神经网络作为我们的初步研究对象。

1.2初步阅读论文

在知网中以黑白智能着色作为索引关键词,查找的相关论文都与卷积神经网络、密集神经网络、回归神经网络有关,这让我们更加明确了我们的目的。

在阅读文献的过程中我们了解到:以前的着色技术效率低下,随着近年来数字技术、计算机技术的发展,图像处理领域的应用广泛。现有的灰度图像着色已经可以实现给定一幅灰度图像,通过一定算法得出一副彩色图像,但还是存在一定问题。

图1 外国网站着色效果

对于相关知识名词,我们搜集到:图像矩阵、图像通道、RGB,CIE Lab、卷积神经网络、激励函数、损失函数、训练网络、特征提取、数据集……

1.3确定学习思路

欠缺知识的我们就像没有了水的鱼儿,我们甚至不知道从哪里入手。在学长的建议和我们查找的资料支持下,我们了解到神经网络的重要性和关键性,所以我们计划从神经网络着手学习,不断解决我们对项目的疑惑。

根据网上的评价、难易程度和流行度,学长推荐我们首先学习TF,框架接口为Python语言。同时需要下载相应的IDE,配置相应的环境,学习Python语言。

2研究基础——相关知识技术了解学习

2.1搭建编程环境

TF接口为Python,所以需要下载Python的运行环境:Python3.6,包括IDLE,它可以用来编写简单的Python代码。

下载JetBrains PyCharml,改变项目解释器Project Interpreter,找到Python.exe路径。下载添加Package,即一些第三方库,比如TensorFlow、scipy、scikit-learn……因为TF更新比较快,如果下载最新版本,在学习的过程中运行代码时可能会有一些小差别。

搭建完成后,就可以在此软件中运行项目源程序了。搭建编程环境为以后读开源代码和运行代码做好了准备。

图2 环境搭建

2.2编程语言学习

虽然TF使用Python作为接口,但是它的函数都是自己定义的。也就是说,不需要深入地学习Python,只需要掌握基础语法就可以开始学习TF。Python学习的内容有:数据类型:常量、整型、浮点型、字符串、列表、集合、元组。函数定义,条件控制语句。

2.3深度学习框架TF

神经网络的构建和训练都需要TF来完成,所以在掌握了Python基础后,学习TF是一条必经之路,只有掌握了TF,才能读懂代码,才能理解其他人对于神经网络构建的思想,结构,我们才能进行修改。

本学期TF学习为主要工作内容。

2.4整理数据集和开源项目

参考北京电子科技学院2019年3月学报《灰度图像着色开源代码》,我们获取到了几个基于深度学习的灰度图像着色技术的开源代码,了解到训练深度学习模型的常用数据集和几个经典的图像着色深度神经网络的模型。

数据集有:Image Net数据集和Place365数据集。

开源代码和模型有:Colorful image colorization(CNN模型)、Interactive Deep Colorization(CNN模型)、Automatic Colorization of Grayscale Images(CNN模型)和Deep Exemplar-based Colorization(CNN模型)

图3 Automatic Colorization of Grayscale Images模型示意图

2.5准备数据集

数据集作为训练神经网络,完成智能着色的重要组成部分,必须搜集到合适的数据集。它分为三个部分:训练集、验证集和测试集。训练集即为真实的彩色照片,用以训练神经网络。验证集也是一组真实的彩色照片,用以选出最优的神经网络模型以及对其加以验证。测试集即为需要进行智能着色的黑白照片,作用是对训练好的神经网络进行性能评估和检测,以验证实验项目的最终效果和着色完成情况。

为了有效地处理我国历史黑白照片视频,搜集的照片和视频的训练集来自当代拍摄的,能够较好还原历史和史实的视频和影视作品中的彩色照片。包括描写清末、民国初期、抗战期间、解放前后、建国初期以及改革开放前后的城市、人民生活环境等大量照片;所需要的验证集来自训练集的一部分;需要搜集的测试集来自互联网搜索的国家档案局和各省市、地方档案馆网站中黑白照片的相关信息和资料。

图4 数据集

3技术学习——深度学习框架

3.1 TF介绍

TF是一个采用数据流图,用于数值计算的开源软件库。数据流图用节点和线的有向图来描述数学计算。节点一般用来表示施加的数学操作,但也可以表示数据输入的起点/输出的终点。图中的线则表示在节点间相互联系的多维数据数组,即张量。

图5 TF数据流图

TF只是学习深度学习、神经网络的一种工具,学习TF的目的应该是学习它所服务的神经网络技术,只有真正掌握了神经网络各部分的原理,编写TF代码才有意义。但也不是说只枯燥死板地学习理论知识,TF作为一种学习神经网络的途径,它便于我们边学习原理边实践训练,发现问题、解决问题。

3.2深层神经网络

神经网络是一种数学模型,是存在于计算机的神经系统,由大量的神经元相连接并进行计算,模仿人脑神经系统进行信息处理功能。

它由大量的节点和之间的联系构成。每个节点代表一种特定的输出函数。每两个节点间的连接都代表一个对于通过该连接信号的加权值。一个神经元的功能是求得输入向量与权向量的内积后,经一个非线性传递函数得到一个标量结果。

神经网络由很多层构成:输入层负责接收信息,比如说一只猫的图片。输出层是计算机对这个输入信息的认知:它是不是猫。隐藏层是对输入信息的加工处理。


图6 神经网络结构

下面具体介绍神经网络是如何被训练和训练的,此时就可以用到TF来学习神经网络了。

神经网路的训练需要很多数据作为学习的对象。比如他要判断一张图片是不是猫,就要输入上千万张的带有标签的猫猫狗狗的图片,然后再训练上千万次,以达到对图片有一个较高正确率的判断。

对于y = 0.1*x + 0.3,此函数就是需要学习的对象,我们想要通过神经网络训练出这样的一个线性模型。函数有两个参数:weights和biases,通过tf.Variable()函数分别为其生成一个随机数作为初始化数据。

3.2.1损失函数

因为训练是一个过程,中间难免会出错。我们深知,道路是曲折的,但前途是光明的。对于训练过程中错误的结果,神经网络会对比它和正确答案之间的区别,然后把这个区别反向传递给神经元,对每个相应的神经元进行一点点的改变。那么下一次在训练的时候就可以用已经改进一点点的神经元去得到更加稍微准确一点的结果。

以上监督学习的神经网络模型的效果以及优化的目标是通过损失函数来定义的。损失函数大多用交叉熵,它刻画两个概率分布之间的距离,如果将分类问题中“一个样例属于某一类别”看成一个概率事件,那么训练数据的正确答案就符合一个概率分布。

然而神经网络的输出却不一定是一个概率分布。所以需要将神经网络前向传播得到的结果变成概率分布:使用Softmax回归,它是一层额外的处理层,可以将神经网络的输出变成 一个概率分布。

3.2.2神经网络优化

有了损失函数,就可以以减小损失函数的值为目的去优化神经网络了,梯度下降算法是最常用的神经网络优化方法。它会法代式更新参数,不断沿着梯度的反方向让参数朝着总损失更小的方向更新。

神经网络的优化过程可以分为两个阶段,第一个阶段先通过前向传播算法计算得到预测值,井将预测值和真实值做对比得出两者之间的差距,然后在第二个阶段通过反向传播算法计算损失函数对每一个参数的梯度,再根据梯度和学习率使用梯度下降算法更新每一个参数。

3.2.3激活函数

现实世界中绝大多数问题是无法通过线性解决的,比如函数y = x^2 - 0.5。所以需要将线性模型转换成非线性的。解决方法是:给每个神经元的输出套上一个激活函数。

神经元有一个被激活的过程,被激活的神经元所传递的信息就是对输出结果有价值的信息。如果输出的结果是错误的,一些容易被激活的神经元就会变得迟钝,另外一些神经元就会变得敏感。一次次训练,神经元的参数不断改变,最后变得对真正重要的信息更为敏感。数学上可表示为几个函数:

图7 激活函数举例

3.3 MNIST数字手写体识别

首先,MNIST手写体数字识别数据集是NIST数据集的一个子集,它包含了60000张图片作为训练数据,10000张图片作为测试数据。在MNIST数据集中的每一张图片都代表了0-9中的一个数字。图片的大小都是28x28,且数字都会出现在图片的正中间。

图像并不能直接当做输入传给神经网络,通过一个函数可以将每一张图片转化为一个长度为784的一维数组(将二维像素矩阵转化为一维形式便于提供给神经网络的输入层),这个数组中的元素对应了图片像素矩阵中的每一个数字。然后就可以开始编写代码构建一个神经网络并训练了。

图8 像素矩阵
图9 MNIST神经网络结构

此例是3.2节的应用,掌握此例可以帮助我们理解神经网络各个环节的工作方式、作用和神经网络训练的步骤:

定义结构和向前传播算法的输出结果;定义损失函数和选择反向传播优化算法;生成会话,用训练数据反复运行反向传播算法。

3.4卷积神经网络

图10 卷积神经网络结构

与前面提到的全连接神经网络一样,卷积神经网络也是通过一层一层的节点组织起来的,卷积神经网络中的每一个节点都是一个神经元。

除了结构相似,卷积神经网络的输入输出以及训练流程与全连接神经网络也基本一致。以图像分类为例,卷积神经网络的输入层就是图像的原始像素,而输出层中的每一个节点代表了不同类别的可信度,它的损失函数以及参数的优化过程都可以使用全连接神经网络的方式。

卷积神经网络和全连接神经网络的唯一区别在于神经网络中相邻两层的连接方式。在卷积神经网络的前几层中,每一层的节点都被组织成一个三维矩。它的相邻两层之间只有部分节点相连。每两层中的结点都要互相连接使得全连接神经网络处理图像时参数太多,会导致计算速度减慢,也更容易导致过拟合问题(神经网络太过注意细节,而忽略了整体变化趋势)。

如图10所示,一个卷积神经网络主要由以下5种结构组成:

输入层。输入层是整个神经网络的输入,在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵。比如图1,最左侧的三维矩阵就可以代表一张图片。其中三维矩阵的长和宽代表了图像的大小,深度代表了图像的色彩通道。比如黑白图片的深度为1,而在RGB色彩模式下,图像的深度为3。

卷积层。卷积层是一个卷积神经网络中最为重要的部分。卷积层中每一个节点的输入只是上一层神经网络的一小块,这个小块常用的大小有3x3或者5x5。卷积层通过分析神经网络的每一小块从而提取出抽象程度更高的特征。每次卷积都会增加节点矩阵的深度,表示分析到了更深层的数据。

池化层(抽样层)。池化层不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。池化操作可以认为是将一张分辨率较高的图片转化为分辨率较低的图片。通过池化层,可以进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络中参数的目的。

全连接层。在经过多轮卷积层和池化层的处理之后,可以认为图像中的信息已经被抽象成了信息含量更高的特征,可以通过这些特征进行分类了,但此时传输的数据仍然是一个三维矩阵形式。所以在特征提取完成之后,需要先将三维矩阵降成一维向量,并使用全连接层来完成分类任务。

Softmax层。可以得到当前样例属于不同种类的概率分布情况。如图10所示,神经网络最后的输出是有10个元素的向量,这表示它计算出的数字0-9的概率。

3.5 图像处理

图像的亮度、对比度等属性对图像的影响是非常大的,相同物体在不同亮度、对比度下差别非常大。为了不让这些因素影响到图像识别问题的结果,对图像数据进行预处理可以使训练得到的神经网络模型尽量避免受到无关因素的影响。

图11 图像预处理效果

4结语

以上为我们小组和我在本学期的一些重点工作内容,此项目对于历史黑白视频档案着色技术的研究有很大意义,对于深度学习中神经网络的研究与现代人工智能发展接轨。在学习中不断提升自学能力和解决问题的能力,此项目对我、对我们小组、对着色技术,对我国的照片档案都有重要意义

参考文献:

[1] Iizuka S, Simo-Serra E, Ishikawa H. Let there be color!: joint end-to-end learning of global and local image priors for automatic image colorization with simultaneous classification[J]. ACM Transactions on Graphics (TOG), 2016, 35(4): 110.

[2]郑泽宇,梁博文,顾思宇.TensorFlow实战Google深度学习框架[M].北京:中国工信出版集团 电子工业出版社,2017.3

[3]田影,陈国栋,潘冠慈.基于卷积神经网络的黑白人物图像多种合理着色的研究[J].通化师范学院学报(自然科学),2019

[4]徐中辉,吕维帅.基于卷积神经网络的图像着色[J].江西理工大学 信息工程学院,2018

[5]张娜,秦品乐,曾建潮,李启.基于密集神经网络的灰度图像着色算法[J].中北大学 计算机科学与技术学院,2019

[6]余梓唐.一种利用回归神经网络黑白图像着色算法研究[J].义乌工商职业技术学院 机电信息分院,2012

你可能感兴趣的:(项目工作总结一)