深度学习小白复现DeOldify之旅(Win10)

深度学习小白复现DeOldify之旅(Win10)

引言

因为最近跟着老师在做一个黑白照片上色的项目,需要查找许多相关文献和项目源码。其中有一个很火的一个项目【DeOldify】

jantic/DeOldifygithub.com图标

在GitHub上开源。为了让我们的项目迅速过渡到前沿,笔者的小团队决定复现该项目的源代码。从2018年12月接触这个项目到现在一个月左右的时间,虽然还是有许多问题待解决,但还是觉得应该停下来把这一个月来的所思所想,所获所得进行一个阶段性总结与分享,这是写这篇文章的初衷😆。

面对该项目产生的疑问

因为之前在复现案例的时候踩过许多坑,所以我认为在复现案例之前花点时间对案例进行观察和分析是十分有必要的!(如果一开始没有对项目有个大致了解和把握就盲目进行的话,很可能就会跳入一个深坑,花了精力和时间却没有产出,正所谓入坑容易填坑难!😅)。分析的话大概可以想一下这几个方面:1.查看项目的源码、数据是否齐全;2.查看项目简介有没有一些明显的细节和关键点作者漏写了;3.思考复现价值。

对于DeOldify这个项目,我当初第一次观察时还是产生了许多的疑问:

  1. 只找到了测试集,那训练集在哪?
  2. 作者的项目环境是Fast.AI version 0.7、Pytorch 0.4.1,这些版本都比较老了。如果我不配置同样的版本是否可以兼容这份项目源码呢?(特别是我使用的是windows系统cpu环境)
  3. fastai、fastrai文件夹看起来很像,那么它们的区别在哪?它们里面放的后缀.py的python文件是做什么用的?(因为主文件使用的是后缀为.ipynb的jupyter文件)
  4. 笔者所说的权重在哪?(文件夹中并没有找到后缀.h的文件)
  5. 一般来说主文件夹应该只有两个文件(一个训练模型程序源码,一个上色模型程序源码)。为什么这里主文件夹里面有5个文件?其中从文件名字上可以看出这5个文件可以分成Colorize的Traning和Visualization + DeFade的Traning和Visualization + DeOldify_colab三大类文件,那么它们的作用和区别是什么呢?
  6. 在名为“ColorizeVisualization.ipynb”的文件里面,使用模型上色的时候设置的render_factor=某个数字是什么意思,有什么效果?

进一步摸索,解决自己的疑问

带着上述这些疑问,我再次细读了作者jantic在github上对该项目的指引和介绍(之前只是大概通读),还有其他人对该项目提的issue。寻找一些可以解决我疑惑的答案:

针对疑问1(训练集问题):

可以看到作者使用的训练集是著名训练集ImageNet,作者附上了下载地址。(需要自行从网上下载,文件太大作者也不好放上github)

针对疑问2(环境兼容性的顾忌):

“一键式”安装作者的运行环境

作者考虑到了环境的兼容性问题,所以他把自己项目的Anaconda环境(包括模块下载地址)导出来给其他用户下载安装。但是由于作者是Linux系统用户(从他自己的描述和启动虚拟环境的代码使用的是source activate就能看出来),所以window系统用户并不一定可行。这种环境导出的方法是非常常见的,所以我对上面的代码解读一下,详情可以看下面我代码块里的注释

git clone https://github.com/jantic/DeOldify.git DeOldify #从github下载项目文件
cd DeOldify #加载项目路径
conda env create -f environment.yml #在电脑创建跟作者一样的环境
source activate deoldify #Linux用户启动名为deoldify的虚拟环境的命令
jupyter lab #打开jupyter lab

我尝试运行之后的结果如下(我是使用管理员权限命令运行窗口运行的上述代码):

可以看到Pytorch1.0模块ciffi模块安装失败,这里不排除是网络问题,但更大几率是系统的兼容性问题(我是window系统,作者是Linux系统)

既然无法直接加载安装作者的环境,能不能选择自己安装代码所需要的模块呢?于是我尝试直接在本地运行“colorizeVisualization”上色文件。根据作者的介绍,这个文件可以直接加载作者训练得到的权重对我的黑白照进行上色(想看看上色实际效果,坚定一下自己复现的信念),于是我开始在本地使用jupyter notebook去运行“colorizeVisualization.ipynb”这个文件,结果如下:

可以看到,在运行第二个代码块的时候(很多import的位置)就会出现很多报错,不存在“xx”模块。这个时候缺什么模块就到“Anaconda Prompt”pip或者conda下载源把这个模块下载了就好(因为看到issue里边作者跟了一条gpu更改为cpu运行的线索。所以我下载的模块里面,pytorch下载的是cpu版本,打算尝试将源代码的gpu环境改成cpu环境运行)

但是这个时候突然报了新的错误

这里联系回作者的项目介绍里提到的old fast模块,就知道原来文件夹里边的fast.ai文件夹是作者为了避免fast.ai模块的版本问题,就将一些需要调用的python文件直接一起打包上传给用户使用了,用户使用的时候只需要从文件夹里去调用这些模块就可以了,不用再重新到网上下载fast.ai这个模块(这里我的疑问3也解决了)。但是回到正题,这里怎么就报错了?我只好跟着路径去打开该python文件:

这里显示python文件有语法错误。这会我就傻眼了,为什么作者上传的模块文件会出现语法错误?这会使得修改模块文件的工作量瞬间增大很多。这时我开始质疑该项目进行的必要性了。而且作者自己训练得到的权重文件在哪呢?百思不得其解的我终于给作者提了第一个issue

针对权重文件问题,作者给了我一个下载权重的网盘地址(这里我的疑问4就解决了,进入该网盘需要科学上网🌝)

针对模块文件语法错误问题

作者的回答是可能python版本太老,需要更新。于是我回去查看了我的python版本,明明是3.6。这里其实卡了我很久,项目一度停滞!后来我才想到我应该查看我运行该代码的虚拟环境下的python版本,我之前查看都是主环境(base环境)下的python版本。一看果然我虚拟环境下的python版本是3.5的,这个时候我才对虚拟环境的作用有了更深的体会,写下了这篇知乎,大伙没事可以看看!😁

seven:Pytorch1.0+CUDA10.0+cuDNN环境配置之谈(Win 10)zhuanlan.zhihu.com图标

紧接着我把我虚拟环境下的python环境更新为3.6再次运行(期间我针对上述说过的作者发的cpu版本修改issue,对我的文件也进行了cpu的修改),最后在加载模型预权重的时候再次报错:

这种报错基本上就属于很难修改成cpu运行的代码类型了,因为该命令需要匹配CUDA(调用GPU)。为了最后一丝希望不破灭,我再次选择向作者提issue看是否能够处理这个问题:

作者的回答是需要通过下载pytorch的0.4.1版本运行,然后我花了大量功夫找镜像源等尝试下载该模块,最终还是未能成功,为了避免将环境装乱了,最终还是选择使用GPU运行。(详情见我上面发的这篇pytorch1.0gpu环境配置的文章)。

配置好pytorch1.0+CUDA10.0+cuDNN环境之后,终于将“ColorizeVisualization”文件运行成功。效果如下:

珍贵的历史照片——法国租界地

可以看到就如作者所言,作者训练的模型比较偏爱蓝色,而且在图中女人的手也被渲染成了蓝色。(这是一个待解决问题)

同样这里如果嫌麻烦的用户可以直接上作者提供的谷歌云端运行该项目Demo:colab.research.google.com

应该是不会出现报错的,同样这里就可以解释一开始对“DeOldify_colab”文件的疑惑了,该文件就是为了谷歌云端Colab而生的。“color”开头和“defade”开头两类文件的区别是,“colorize”开头的文件是作者的初模型,现在作者正在进行“defade”开头的模型训练,在该模型的效果很好之前,作者不会选择公开该训练集的预权重。(文章开头的疑问5也解决了)

针对问题6(render_factor=某个数字是什么意思):

经过研究,这个地方可以称之为渲染数,如果电脑的显存越大,可支持的次数就越高。意思就是数字越高,图片上色的渲染效果越好,颜色越鲜艳。但是每个人的电脑最大可渲染度不一样,笔者小团队的两台电脑最高只能设置为14和22,在谷歌云端跑这份代码就可以设置得比较高。

最后在有了大致思路之后,终于可以尝试运行“ColorizeTraning”的训练模型文件了,但是这个时候出现了本篇文章最后的拦路虎

运行的时候显示这里有路径混乱问题,也是暂时最大的问题。跟作者交流之后知道这个是因为Linuxwindow系统的兼容性问题,作者自己也注意到了,但是他也还不知道怎么处理。(待解决问题)

结尾

可以看到这个项目其实还不算成熟,存在一些问题,但是因为在2018年年底的时候pytorch稳定版1.0的诞生,让这个上色效果惊人的DeOldify项目迅速火了一把。希望这篇文章能够在帮助自己回顾收货的同时也可以给其他在学习这个项目的人带来些许收获吧!如果文章有写的不对的地方或者有更好的idea,十分欢迎大家跟我分享!!感谢!!😁😁😁

发布于 2019-01-17

文章被以下专栏收录