代码主要参考Pytorch官方教程,不赘述。
这是内容图:

这是风格图:

结论
- style的权重要高一点,1e7,估计1e6~1e8直接都行,再加大也没用,反而使得内容消失了。
- 优化器采用LBFGS效果很好,收敛很快,推荐!也有教程使用Adam,但收敛真的慢,测试了下,lr大概取0.01效果还可以,太高的话会产生噪点。
- 内容提取选择哪一个卷积层影响不大,按道理应该是选择前几个卷积层(靠近输入端),比如conv_1~conv_5,但经过测试,就算选择倒数几个,效果也不影响。
- 风格提取必须取前面的层,至少不能没有前面的层,另外,要多选几个层,只选一两个的效果很差。这个也是反经验的,按照一般的理解,越靠后越是抽象的特征,但测试发现,如果之选后面的层,完全没效果,或许深度cnn提取的特征,比我们所理解的风格抽象得多,并不适合风格迁移。所以直接选择conv1~5就行了
- 预训练模型的权重是否更新,对结果影响不大。
- 如果从内容图开始训练,那么可以不加入噪点光滑,也就是加入
TV Loss
;如果从白噪声图片开始训练,必须加入TV Loss
,且其权重设置为100比较合适。
如果弱风格,强内容,那么从内容图开始跑300个epoch,大概200个epoch就有内味了,主要是色调的变化;

如果中弱风格,中强内容,可以从内容图开始跑1000个epoch;

如果中强风格,中弱内容,就从白噪声跑2000个epoch;

如果强风格,弱内容,就从白噪声只跑1000个epoch,仔细看的话,还是有一丁点的噪点没被平滑掉。

逐渐离谱!
问题
- 如何复用风格,有说是加一个cnn用于训练,而不是直接训练权重。待测试。
- 每个epoch都需要截取clamp权重张量到0~1之间吗?待测试。
网友评论