参考代码来源于 https://github.com/ProGamerGov/neural-style-pt

neural-style-pt 艺术风格迁移

一如既往的开头

最近事情比较少,人闲着也闲着。趁着周末到处跑,临近新年,也没怎么学习。
想写点什么博文,但是又不知道写啥哈哈哈哈哈。
于是,我想把公众号或者github(推荐专栏)看到的一些有趣的项目记录下来。

这是个风格迁移的项目。这种应该算生成类项目(GAN这类),但我也不确定这个模型的一些细节。
对于这类项目我兴趣蛮大的,只是一直没有机会遇到这种项目来实践。最开始了解到是从动漫人脸生成开始的,到后面去玩了下换脸技术,还有图像修复技术。比起检测任务来说,生成任务对视觉的感受更大。

1. download 项目 & 环境配置

把项目下载到本地下来,也可以直接通过git clone。可以直接打开最上方的github。

环境配置的话,首先是要配置好pytorch,就不说明怎么配置了。网上很多教程,(pytorch官网也可以直接安装官网进行配置)根据自己电脑的cuda版本下载对应的就行。我版本是torch 1.6.0 ;torchvision 0.7.0

2. 权重包的下载

项目提供了两个权重包VGG19和VGG16,通过这行代码下python models/download_models.py。但是可能速度很慢,自己在外面通过科学下载去下载下来最好,两个都是500mb大小,玩一玩的话只下载其中一个就行了。
VGG16:https://web.eecs.umich.edu/~justincj/models/vgg16-00b39a1b.pth
VGG19:https://web.eecs.umich.edu/~justincj/models/vgg19-d01eb7cb.pth
自己下载的话不能直接使用,download_models.py在下载完后还做了下修改,因此要修改一下download_models.py中的一点点东西,在运行一下。

如下,如果只下载VGG19的话,可以把VGG16删了。sd = torch.load("vgg19-d01eb7cb.pth")指向你上面通过网页下载完保存的路径,然后torch.save(sd, path.join("weights", "vgg19-d01eb7cb.pth"))修改完会保存在这里。修改后保存的位置,对应的要跟后面做前向推理中权重路径一样。

print("Downloading the VGG-19 model")
# sd = load_url("https://web.eecs.umich.edu/~justincj/models/vgg19-d01eb7cb.pth")
sd = torch.load("vgg19-d01eb7cb.pth")
map = {'classifier.1.weight':u'classifier.0.weight', 'classifier.1.bias':u'classifier.0.bias', 'classifier.4.weight':u'classifier.3.weight', 'classifier.4.bias':u'classifier.3.bias'}
sd = OrderedDict([(map[k] if k in map else k,v) for k,v in sd.items()])
torch.save(sd, path.join("weights", "vgg19-d01eb7cb.pth"))

3. 风格迁移

如果是安装python models/download_models.py下载的权重包,那可以什么都不用改,照着项目上的指令运行就可以做推理。python neural_style.py -style_image <image.jpg> -content_image <image.jpg> 分别输入风格的图像和被转移风格的图像就可以了。

但是我比较习惯自己去设置代码里面的参数来运行。(这样可以了解到有哪些参数可以调节,调参侠的职业修养😂)neural_style.py 所以就要进入这个代码里面进行调整。

# 这两个就跟指令一样,输入图片路径就可以了。
parser.add_argument("-style_image", help="Style target image", default='examples/inputs/starry_night.jpg')
parser.add_argument("-content_image", help="Content target image", default='examples/inputs/chenpeiyu01.jpg')
# 这个是输出路径,如果按这个设置的话是直接在主目录下生成。
parser.add_argument("-output_image", default='out.png')
# 这个就是你修改后的权重路径。跟上面torch.save 保存下来的路径对应就好了。然后你希望使用哪个模型VGG19还是VGG16,自己调整。
parser.add_argument("-model_file", type=str, default='models/weights/vgg19-d01eb7cb.pth')

4. 结果

自己找了几张图片玩了一下,挺酷🆒的哈。
风格

我结果:
在这里插入图片描述
稍微把迭代的次数调高一些:(10000,默认1000)
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐