最近在研究如何使用nvidia StyleGAN以及StyleGAN的运行方法,但是摸不着头绪,很幸运遇到群里的大神手把手指导,终于得以成功运行stylegan的pretrained_example.py官方实例……中间踩坑无数,在这里给大家讲讲避免踩坑的方法……
在此特别鸣谢星轨大佬,然后还有CSDN里面数不清的文章,遇到了许许多多的问题,看了几十篇文章,在此不再一一叙述,总之表示十分感谢。

首先先说一下我自己电脑运行环境:

系统:WIN10 64bit
显卡:GTX1070
CPU:AMD1800X
其他……略,好像不太重要

 

其实除了GPU要求高一些,其他问题都不大,可以对照英伟达的一个算力表来看自己的显卡适不适合CUDA加速。

个人推荐CUDA10.0+CUDNN7.5+tensorflow-gpu1.13.1+python3.7 这个版本搭配,因为自己跑通了,不同的CUDA,不同的tensorflow可能会有奇奇怪怪的问题。

网上说tensorflow-gpu1.13.1不支持CUDA10.1,我好像也确实遇到了这个问题,不建议安装。

 

20190326补充:朋友的CUDA9.0环境下也运行成功了,所以问题不大

官方给出的系统要求

  • Linux和Windows都受支持,但出于性能和兼容性的原因,我们强烈建议使用Linux。
  • 64位Python 3.6安装。我们推荐使用numpy 1.14.3或更新的Anaconda3。
  • TensorFlow 1.10.0或更高版本,支持GPU。
  • 一个或多个具有至少11GB DRAM的高端NVIDIA GPU。我们推荐配备8个Tesla V100 GPU的NVIDIA DGX-1。(注:只是使用预训练的集不需要这么强大的显卡,训练自己的训练集就需要了)
  • NVIDIA驱动程序391.35或更高版本,CUDA工具包9.0或更高版本,cuDNN 7.3.1或更高版本。

 

首先是准备阶段:

1.你要知道一些linux基本命令,比如cd c:\xxxx(文件路径)是打开项目的文件夹、python xxxx.py是使用python运行这个py文件、pip install xxxxxx  我理解为是联网自动打包安装某个程序

2.你要拥有一块较高算力的NVIDIA显卡,可以从这个网站来获取CUDA的算力信息https://developer.nvidia.com/cuda-gpus
PS:前两天看到一篇文章,说GT1030算力居然有6.1(compute capability: 6.1),虽然不在老黄的名单中,但是这算力价格比可以说是性价比最高的CUDA加速卡了吧,和以下主流卡在同一个水平上…… 详见下图

compute capability

NVIDIA TITAN RTX7.5
Geforce RTX 2080 Ti7.5
Geforce RTX 20807.5
Geforce RTX 20707.5
Geforce RTX 20607.5
NVIDIA TITAN V7.0
NVIDIA TITAN X6.1
GeForce GTX 1080 Ti6.1
GeForce GTX 10806.1
GeForce GTX 10706.1
GeForce GTX 10606.1
GeForce GTX 10506.1

 3.坚忍不拔的耐心……2333(我装好tensorflow环境至少花了10小时以上的时间,走了无数的弯路,如果按照正确的方法,其实应该很快就搞定的。)

4.更新显卡驱动版本更新为最新,或者在安装CUDA的时候卸载掉之前有的nvidia GeForce Experience,然后使用CUDA的安装包重新装一次。有时候因为
CUDA的安装包里面含有显卡驱动程序。我个人是删掉所有显卡驱动之后重装的,如果你之前安装了CUDA发现提示说
status: CUDA DRIVER VERSION is insufficient for cuda runtime version 的报错,其原因是因为显卡驱动的版本过低,在此附上英伟达CUDA最低支持的显卡驱动版本对应表

Table 1. CUDA Toolkit and Compatible Driver Versions
CUDA ToolkitLinux x86_64 Driver VersionWindows x86_64 Driver Version
CUDA 10.1.105>= 418.39>= 418.96
CUDA 10.0.130>= 410.48>= 411.31
CUDA 9.2 (9.2.148 Update 1)>= 396.37>= 398.26
CUDA 9.2 (9.2.88)>= 396.26>= 397.44
CUDA 9.1 (9.1.85)>= 390.46>= 391.29
CUDA 9.0 (9.0.76)>= 384.81>= 385.54
CUDA 8.0 (8.0.61 GA2)>= 375.26>= 376.51
CUDA 8.0 (8.0.44)>= 367.48>= 369.30
CUDA 7.5 (7.5.16)>= 352.31>= 353.66
CUDA 7.0 (7.0.28)>= 346.46>= 347.62

有两种办法查看当前电脑的显卡驱动版本:

https://blog.csdn.net/li57681522/article/details/82491617

右键打开我的电脑,在左侧边栏有个高级系统设置,右下角有个环境变量,上方方框里面有个ADMINISTRATOR(你电脑用户名)的用户变量,里面有个path值,双击打开,点击右侧新建,加入:C:\Program Files\NVIDIA Corporation\NVSMI

使用【win+R 输入cmd 】——回车执行,或者【开始菜单——运行——cmd】—— 回车执行
在DOS界面下输入
nvidia-smi

就可以看到当前显卡的驱动版本啦

或者你直接打开GeForce Experience 看当前驱动版本就行……不过这东西要登陆的,而且还有时候被墙,就很尴尬

 

确定硬件设备OK,驱动OK,之后可以开始安装:

1.安装CUDA(貌似stylegan仅支持10以上的CUDA,建议使用CUDA10)

地址:https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal
这里是win10 32/64bit系统下载链接
如果你是MAC或者LINUX用户,以及其他版本比如win7用户,需要改成自己的系统(Version)要求下载
下载安装cuda10完成之后,必须下载对应版本的cudnn,其中cuda10对应的cudnn版本为cudnn-10.0-windows10-x64-v7.5.0.56

cudnn下载地址和安装办法:
https://developer.nvidia.com/cudnn

这里需要注册填写一个调查问卷,然后下载cudnn对应cuda10.0版本的,注意别下成了10.1的,必须对应版本!

为了方便大家,我再放个网盘链接吧……

cudnn-10.0-windows10-x64-v7.6.4.38.zip

链接: https://pan.baidu.com/s/1qqUN5ZYBchYdrz0MPrf3yg&shfl=shareset

提取码: ghst

cudnn文件的放置方法和环境变量设置:

https://www.tensorflow.org/install/gpu#windows_setup
也就是说在C盘下新建一个tools的文件夹,把cudnn解压进去,然后再添加三个path的环境变量(如上面图倒数2-4个变量):

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\CUPTI\libx64
C:\tools\cuda\bin
把下载的cudnn文件分别按照文件夹放到下面的目录:

cudnn\bin\cudnn64_5.dll to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin\
cudnn\include\cudnn.h to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include\
cudnn\lib\x64\cudnn.lib to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64\

2.安装adaconda python3.7版本(stylegan需要python3.7的)

Anaconda Python/R Distribution

选择python3.7版本adaconda

以及下方的图形化界面安装版本:64-Bit Graphical Installer (652.7 MB)
在安装中,记得勾选
【√】JUST ME
然后选择完安装路径之后
勾选【√】:Add Anaconda to my PATH environment variable
个人觉得这样子好像有利于执行相关程序……

安装完成之后,开始菜单中  adaconda3文件夹下会出现Anaconda Prompt 这个应用程序,这个个人理解为一个虚拟机……类似linux,我们直接在这里执行安装代码,当然也可以用adaconda的图形化界面,但是觉得比较麻烦……

 

3.创建tensorflow-gpu需要的虚拟环境:
打开开始菜单中 adaconda3文件夹下Anaconda Prompt 程序
应该会显示  (base) C:\Users\Administrator> 
在这行文字之后输入:

conda create -n tensorflow-gpu python=3.7


这就是在adaconda中创建一个名字叫做tensorflow-gpu的环境,其python版本为3.7
之后adaconda会自动创建,并且列出各种库的名字:
然后会问你yes or no
输入 y 按回车
就会自动创建环境了,当环境创建完成,会重新显示

(base) C:\Users\Administrator(这个名字是你电脑的用户名)>

此时输入


conda activate tensorflow-gpu


会发现这行文字显示为:


(tensorflow-gpu) C:\Users\Administrator>


代表环境创建完成并且已经激活进入了这个环境!

 

4.安装tensorflow1.13.1
打开开始菜单中 adaconda3文件夹下Anaconda Prompt 程序(刚才应该已经打开了),输入conda activate tensorflow-gpu进入tensorflow-gpu环境(如果上一 步走下来应该是已经进入了这个环境了)

此时应该显示的是:

(tensorflow-gpu) C:\Users\Administrator>

在这行文字之后输入:

pip install tensorflow-gpu  #(意思是直接打包安装tensorflow-gpu)#

或者:pip install –upgrade tensorflow-gpu
再或者保守的说(害怕大家看到文章的时候有tensorflow-gpu更新版本的了),也可以选择输入:

pip install tensorflow-gpu==1.13.1

也就是安装指定版本的python

 

ps:如果这时候电脑报错说:

Youare using pip version 9.0.1, however version 1x.x.x is available.

Youshould consider upgrading via the ‘python -m pip install –upgrade pip’command.

那就先执行python -m pip install –upgrade pip 说明pip版本太老了,需要先更新pip版本再安装tensorflow-gpu

此时需要挂梯子或者代理!否则有可能没有速度,有时候安装会中断,所以可以多试几次
实在不行可以找找国内的缓存或者github的源

如果最后退回到(tensorflow-gpu) C:\Users\Administrator> 就说明安装完成,正常上面应该有显示successful

 

装完tensorflow-gpu之后应该会显示:

Installing collected packages: termcolor, gast, numpy, six, h5py, keras-applications, astor, grpcio, mock, absl-py, tensorflow-estimator, markdown, protobuf, werkzeug, tensorboard, keras-preprocessing, tensorflow-gpu
Successfully installed absl-py-0.7.1 astor-0.7.1 gast-0.2.2 grpcio-1.20.1 h5py-2.9.0 keras-applications-1.0.7 keras-preprocessing-1.0.9 markdown-3.1 mock-3.0.5 numpy-1.16.3 protobuf-3.7.1 six-1.12.0 tensorboard-1.13.1 tensorflow-estimator-1.13.0 tensorflow-gpu-1.13.1 termcolor-1.1.0 werkzeug-0.15.2

告诉你装成功了那些数学库什么的,版本是啥,这些不一定会全用到,但是如果你做其他机器学习的计算还是很需要的!

5.去github下载stylegan的源码

网址:https://github.com/NVlabs/stylegan
点击右边的clon or download按钮,然后点击download zip 就可以把程序打包下载到本机了!
下载完成之后,建议解压移动到C:\Users\Administrator文件夹下,因为这是adaconda默认的文件目录,比较好修改,也好连接
接下来,打开开始菜单中 adaconda3文件夹下Anaconda Prompt 程序

输入:activate tensorflow-gpu
再输入:cd C:\Users\Administrator\stylegan-master

此时应该显示

(tensorflow-gpu) C:\Users\Administrator\stylegan-master>

输入:python pretrained_example.py
如果报错:NO MODLE NAME “PIL”
说明缺少pillow库,运行:pip install pillow

再运行python pretrained_example.py,如果还报错:no modle named “requests”
运行:pip install requests

 

如果显示:download from :xxxxx 什么googlexxx什么的,代表正在下载参考数据集,大约300m左右,下载完成之后会运行下面程序:(大约只需要10秒钟左右就能生成一张照片:)

注意:此时必须挂梯子或者代理!否则有可能没有速度

(执行的参考结果如下:)

(tensorflow-gpu) C:\Users\Administrator\stylegan-master>python pretrained_example.pyWARNING:tensorflow:From C:\ProgramData\Anaconda3\envs\tensorflow-gpu\lib\site-packages\tensorflow\python\framework\op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.

(意思是有些乱七八糟的东西将在将来的版本中被移除,问题不大)

Gs Params OutputShape WeightShape
— — — —
latents_in – (?, 512) –
labels_in – (?, 0) –
lod – () –
dlatent_avg – (512,) –
G_mapping/latents_in – (?, 512) –
G_mapping/labels_in – (?, 0) –
G_mapping/PixelNorm – (?, 512) –
G_mapping/Dense0 262656 (?, 512) (512, 512)
G_mapping/Dense1 262656 (?, 512) (512, 512)
G_mapping/Dense2 262656 (?, 512) (512, 512)
G_mapping/Dense3 262656 (?, 512) (512, 512)
G_mapping/Dense4 262656 (?, 512) (512, 512)
G_mapping/Dense5 262656 (?, 512) (512, 512)
G_mapping/Dense6 262656 (?, 512) (512, 512)
G_mapping/Dense7 262656 (?, 512) (512, 512)
G_mapping/Broadcast – (?, 18, 512) –
G_mapping/dlatents_out – (?, 18, 512) –
Truncation – (?, 18, 512) –
G_synthesis/dlatents_in – (?, 18, 512) –
G_synthesis/4×4/Const 534528 (?, 512, 4, 4) (512,)
G_synthesis/4×4/Conv 2885632 (?, 512, 4, 4) (3, 3, 512, 512)
G_synthesis/ToRGB_lod8 1539 (?, 3, 4, 4) (1, 1, 512, 3)
G_synthesis/8×8/Conv0_up 2885632 (?, 512, 8, 8) (3, 3, 512, 512)
G_synthesis/8×8/Conv1 2885632 (?, 512, 8, 8) (3, 3, 512, 512)
G_synthesis/ToRGB_lod7 1539 (?, 3, 8, 8) (1, 1, 512, 3)
G_synthesis/Upscale2D – (?, 3, 8, 8) –
G_synthesis/Grow_lod7 – (?, 3, 8, 8) –
G_synthesis/16×16/Conv0_up 2885632 (?, 512, 16, 16) (3, 3, 512, 512)
G_synthesis/16×16/Conv1 2885632 (?, 512, 16, 16) (3, 3, 512, 512)
G_synthesis/ToRGB_lod6 1539 (?, 3, 16, 16) (1, 1, 512, 3)
G_synthesis/Upscale2D_1 – (?, 3, 16, 16) –
G_synthesis/Grow_lod6 – (?, 3, 16, 16) –
G_synthesis/32×32/Conv0_up 2885632 (?, 512, 32, 32) (3, 3, 512, 512)
G_synthesis/32×32/Conv1 2885632 (?, 512, 32, 32) (3, 3, 512, 512)
G_synthesis/ToRGB_lod5 1539 (?, 3, 32, 32) (1, 1, 512, 3)
G_synthesis/Upscale2D_2 – (?, 3, 32, 32) –
G_synthesis/Grow_lod5 – (?, 3, 32, 32) –
G_synthesis/64×64/Conv0_up 1442816 (?, 256, 64, 64) (3, 3, 512, 256)
G_synthesis/64×64/Conv1 852992 (?, 256, 64, 64) (3, 3, 256, 256)
G_synthesis/ToRGB_lod4 771 (?, 3, 64, 64) (1, 1, 256, 3)
G_synthesis/Upscale2D_3 – (?, 3, 64, 64) –
G_synthesis/Grow_lod4 – (?, 3, 64, 64) –
G_synthesis/128×128/Conv0_up 426496 (?, 128, 128, 128) (3, 3, 256, 128)
G_synthesis/128×128/Conv1 279040 (?, 128, 128, 128) (3, 3, 128, 128)
G_synthesis/ToRGB_lod3 387 (?, 3, 128, 128) (1, 1, 128, 3)
G_synthesis/Upscale2D_4 – (?, 3, 128, 128) –
G_synthesis/Grow_lod3 – (?, 3, 128, 128) –
G_synthesis/256×256/Conv0_up 139520 (?, 64, 256, 256) (3, 3, 128, 64)
G_synthesis/256×256/Conv1 102656 (?, 64, 256, 256) (3, 3, 64, 64)
G_synthesis/ToRGB_lod2 195 (?, 3, 256, 256) (1, 1, 64, 3)
G_synthesis/Upscale2D_5 – (?, 3, 256, 256) –
G_synthesis/Grow_lod2 – (?, 3, 256, 256) –
G_synthesis/512×512/Conv0_up 51328 (?, 32, 512, 512) (3, 3, 64, 32)
G_synthesis/512×512/Conv1 42112 (?, 32, 512, 512) (3, 3, 32, 32)
G_synthesis/ToRGB_lod1 99 (?, 3, 512, 512) (1, 1, 32, 3)
G_synthesis/Upscale2D_6 – (?, 3, 512, 512) –
G_synthesis/Grow_lod1 – (?, 3, 512, 512) –
G_synthesis/1024×1024/Conv0_up 21056 (?, 16, 1024, 1024) (3, 3, 32, 16)
G_synthesis/1024×1024/Conv1 18752 (?, 16, 1024, 1024) (3, 3, 16, 16)
G_synthesis/ToRGB_lod0 51 (?, 3, 1024, 1024) (1, 1, 16, 3)
G_synthesis/Upscale2D_7 – (?, 3, 1024, 1024) –
G_synthesis/Grow_lod0 – (?, 3, 1024, 1024) –
G_synthesis/images_out – (?, 3, 1024, 1024) –
G_synthesis/lod – () –
G_synthesis/noise0 – (1, 1, 4, 4) –
G_synthesis/noise1 – (1, 1, 4, 4) –
G_synthesis/noise2 – (1, 1, 8, 8) –
G_synthesis/noise3 – (1, 1, 8, 8) –
G_synthesis/noise4 – (1, 1, 16, 16) –
G_synthesis/noise5 – (1, 1, 16, 16) –
G_synthesis/noise6 – (1, 1, 32, 32) –
G_synthesis/noise7 – (1, 1, 32, 32) –
G_synthesis/noise8 – (1, 1, 64, 64) –
G_synthesis/noise9 – (1, 1, 64, 64) –
G_synthesis/noise10 – (1, 1, 128, 128) –
G_synthesis/noise11 – (1, 1, 128, 128) –
G_synthesis/noise12 – (1, 1, 256, 256) –
G_synthesis/noise13 – (1, 1, 256, 256) –
G_synthesis/noise14 – (1, 1, 512, 512) –
G_synthesis/noise15 – (1, 1, 512, 512) –
G_synthesis/noise16 – (1, 1, 1024, 1024) –
G_synthesis/noise17 – (1, 1, 1024, 1024) –
images_out – (?, 3, 1024, 1024) –
— — — —
Total 26219627

 

这就说明程序运行了,此时到你的C:\Users\Administrator\stylegan-master\results文件夹下,就能看到生成的照片了

恭喜你完成了stylegan的运行第一步!

 

注意:如果需要生成不同人的照片,使用编译器打开:pretrained_example.py 文件

第34行  rnd = np.random.RandomState(8)

其中()内的内容代表一个扰动因子,输入不同的数字,执行之后会生成不同的照片,可以试试!

PS:个人未来安排:接下来第二步研究老婆头像生成的算法(已完成)
关于如何生成动漫头像  请看这篇https://www.gongyesheji.org/?p=963

训练自己的数据集请看这篇文章:

如何使用stylegan训练自己的照片数据集