发布时间:2022-08-19 14:19
以下链接是个人关于stylegan所有见解,如有错误欢迎大家指出,我会第一时间纠正,如有兴趣可以加微信:17575010159 相互讨论技术。
风格迁移0-00:stylegan-目录-史上最全:https://blog.csdn.net/weixin_43013761/article/details/100895333
通过上一篇博客,大家应该已经拿到了作者的源码,以及论文。下面是是下载代码之后的目录结构,现在2019/09/17如下,我不知道当你看到我这篇博客会是在那个时间点,所以不能保证结构与下面一致:
stylegan-master
│ config.py #配置文件
│ dataset_tool.py #数据处理的相关操作
│ generate_figures.py # 测试代码,随机生成图片,会生成多张图像
│ LICENSE.txt
│ pretrained_example.py #对预训练模型进行测试
│ README.md
│ run_metrics.py # 运行的指标,可以理解为运行时相关的参数处理
│ stylegan-teaser.png #图片
│ train.py # 训练开始的py文件
│ tree.txt
│
├─dnnlib # 主要存放神经网络结构相关的文件
│ │ util.py
│ │ __init__.py
│ │
│ ├─submission # 创建的一个子项目(后续会为大家稍微详细的讲解)
│ │ │ run_context.py
│ │ │ submit.py
│ │ │ __init__.py
│ │ │
│ │ └─_internal
│ │ run.py
│ │
│ └─tflib # 网络结构相关
│ autosummary.py
│ network.py #网络主干,这里为一个转接口,最终链接到training 目录下的networks_stylegan.py中
│ optimizer.py # 优化
│ tfutil.py #翻译为追踪,暂时不太明白
│ __init__.py
│
├─metrics # 指标相关的文件夹,模型的评估相关代码
│ frechet_inception_distance.py
│ linear_separability.py
│ metric_base.py
│ perceptual_path_length.py
│ __init__.py
│
└─training # 训练相关
dataset.py
loss.py
misc.py
networks_progan.py
networks_stylegan.py # 核心主干
training_loop.py
__init__.py
现在为大家稍微注释一下,让大家有个粗略的了解,该个地方我会一直更新,争取细致到每一个py文件详细的功能注释。
套路还是一样的,拿到作者的源码,肯定先跑一下他的与训练模型,看看是什么现象,其实作者的README.md介绍的已经十分详细,但是我在运行的时候,还是出现了一系列的问题,主要是模型或者一些文件,不知道什么原因不能从网上下载,本人通过VPN,但是依旧不行,下面是我解决的一些办法,需要修改一些源码。
根据原作者Readme.md,我们知道,测试预训练模型直接执行:
python pretrained_example.py
即可,但是我在运行的过程中会报错,我们可以在pretrained_example.py中看到如下代码:
url = 'https://drive.google.com/uc?id=1MEGjdvVpUsu1jB4zrXZN7Y4kBBOzizDQ' # karras2019stylegan-ffhq-1024x1024.pkl
with dnnlib.util.open_url(url, cache_dir=config.cache_dir) as f:
_G, _D, Gs = pickle.load(f)
其url是下载模型参数的一个链接,不知道具体是什么原因导致程序没有办法下载,所以本人直接通过链接,即:
https://drive.google.com/uc?id=1MEGjdvVpUsu1jB4zrXZN7Y4kBBOzizDQ
下载得到karras2019stylegan-ffhq-1024x1024.pkl文件,然后对\dnnlib\util.py文件中的函数,修改如下:
def open_url(url: str, cache_dir: str = None, num_attempts: int = 10, verbose: bool = True) -> Any:
"""Download the given URL and return a binary-mode file object to access the data."""
......
......
#cache_files = glob.glob(os.path.join(cache_dir, url_md5 + "_*"))
cache_files = glob.glob('E:/1.PaidOn/3.FaceFusion/2.stylegan/stylegan-master/cache/karras2019stylegan-ffhq-1024x1024.pkl')
if len(cache_files) == 1:
return open(cache_files[0], "rb")
其中注释的一行:
#cache_files = glob.glob(os.path.join(cache_dir, url_md5 + "_*"))
是源码中的代码,被我替换成了:
cache_files = glob.glob('E:/1.PaidOn/3.FaceFusion/2.stylegan/stylegan-master/cache/karras2019stylegan-ffhq-1024x1024.pkl')
直接的说,就是我们自己下载,然后指定下载好文件的路径就可以了。按照作者的风格,该文件可以放置在cache目录下。
除了上述的工作之外,还要下载
https://drive.google.com/uc?id=1MzTY44rLToO5APn8TZmfR7_ENSe5aZUn
其为inception_v3_features.pkl,我们使用inception_v3提取latent向量,本人再源码根目录下创建了pkl目录,然后把下载该好的该文件放入到该目录下,最后修改 metrics/frechet_inception_distance.py源码:
def _evaluate(self, Gs, num_gpus):
.....
.....
#inception = misc.load_pkl('https://drive.google.com/uc?id=1MzTY44rLToO5APn8TZmfR7_ENSe5aZUn') # inception_v3_features.pkl
inception = misc.load_pkl('./src/pkl/inception_v3_features.pkl') # inception_v3_features.pkl
然后运行代码就可以了,如果运行的过程还是会报错,就在主干目录,即stylegan目录下创建一个名为results的文件夹。这样就能运行了,生成图片如下:
你的图片和我生成的图片可能不一样,因为本人修改看了源码的随机参数,即pretrained_example.py文件中的:
rnd = np.random.RandomState(6)
我不记得作者原来的值是多少了,你可以尝试不同的改变,可以发现会生成不同的图片。
在完成上面的测试之后,我们可以再执行
python generate_figures.py
其会产生很多的图片,如:
这样,我们就完成了对模型的测试和检验,后续的过程中都会为大家详细的分析测试代码的流程,不会放过任何一个细节。下小节讲解数据的训练过程,在这之前请根据前小节的内容,下载好训练数据集。