风格迁移0-02:stylegan-目录讲解与预训练模型测试

发布时间: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

其会产生很多的图片,如:

小结

这样,我们就完成了对模型的测试和检验,后续的过程中都会为大家详细的分析测试代码的流程,不会放过任何一个细节。下小节讲解数据的训练过程,在这之前请根据前小节的内容,下载好训练数据集。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号