由于 "DBPNLL" 和 "DBPN" 并没有多大区别,只有中间部分多加了3层,以及前后加了正则化和去正则化,实现也是差不多,就不多写了。这里只提供一个下载(效果可见后面的一些文章中):
超分辩重建 D-DBPN(4倍)的win32程序
https://download.csdn.net/download/juebai123/11247759
----------------------------------------分隔线--------------------------------------------------------------------------
还是回到风格迁移,下了《adaptive-style-transfer-master》包,以及编码器 、解码器模型(pretrained_vgg19_encoder_model.npz,pretrained_vgg19_decoder_model.npz)。
按提示,再下一个TensorLayer包,开始调试。该代码应该不是在TensorFlow1.0中写的,修改了部分代码,重新从《EDSR-tensorflow-master》中找了一个和1.0对应的TensorLayer包,就可以运行了。
该流程非常清晰:
1。输入内容风格图像
2。将 RGB 切换到 BGR
3。预处理图像
4。编码图像
# 我们应该在恢复模型之前初始全局变量
5。将编码的图像传递给 AdaIN
6。将目标特征解码回图像
7。去处理图像
8。将 BGR 切换回 RGB
9。剪辑到 0..255
10。成品
这和《AdaIN-style-master》的最简流程基本相同:
再导出训练数据到文本文件。在这里找到了一个前面改编中的错误,所以这里就不详细讲了,到前面文章中改改就好了。
主函数:
int main(int argc, char *argv[])
{
char jpgname[256];
if( argc == 2 )
strcpy_s(jpgname, argv[1]);
else
strcpy_s(jpgname, "chicago.jpg");yuqi
//载入图片
//缩放至 512x512 的图像 (VGG19 分类 224x224)
Resizeloadjpg(jpgname);//也可以原始大小,但不能太小,不然池化后...,太大费时.
clock_t start_t, end_t;//计算时间
double total_t;
start_t = clock();
编码器 encoder;
// 加载 CNN 模型参数
//loadModel2(&encoder);
//saveModel2进制(&encoder);
loadModel2进制(&encoder);
//从t7模型文件加载数据
//loadt7Model(&encoder);
//取得特征层 (图像由全局变量jpg输入)
卷积层 * content=vgg(encoder);
卷积层 content_copy(content->width,content->height,content->depth);
content_copy.data=new float[content_copy.width*content_copy.height*content_copy.depth];
卷积层复制(content,&content_copy);
//载入风格图
Resizeloadjpg(Style_Name);
卷积层 * style=vgg(encoder);
AdaIN(*content,* style);
float alpha=0.5f;
风格控制(content_copy,*content,alpha);
解码器 decoder;
//loadModel(&decoder);//文本载入
//saveModel2进制(&decoder);//二进制保存
loadModel2进制(&decoder);//二进制载入
//生成风格图
Decoding("Adain-style", decoder,content);//保存输出风格名称,解码器参数,输入
end_t = clock();
total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
cout<<"已经完成"<<endl;
cout<<"总用时:"<<total_t<<" 秒"<<endl;
system("pause");
return 0;
}
效果:
再来一张:
该《adaptive-style-transfer-master》程序实现了《AdaIN-style-master》中的decoder-content-similar.t7(解码器内容相似)部分。
结束。