AdaIN-风格转换之生成流程

本文探讨了AdaIN风格转变的实现过程,分析了decoder.t7和decoder-content-similar.t7模型转换成功的原因,以及vgg_normalised.t7模型转换失败的问题所在。通过深入研究模型结构和读取方式,提出了一种按层搜索的解决方案,旨在跳过问题层以获取其余参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在可以开始 ”AdaIN 风格转变“了。

先把三个模型用Opencv转换成文本格式,decoder.t7 和 decoder-content-similar.t7 成功了

.而 vgg_normalised.t7 转化不了,哪个 vgg_normalised.caffemodel 又下不下。

模型下载地址:

https://s3.amazonaws.com/xunhuang-public/adain/decoder.t7
https://s3.amazonaws.com/xunhuang-public/adain/decoder-content-similar.t7
https://s3.amazonaws.com/xunhuang-public/adain/vgg_normalised.t7

用 VGG_ILSVRC_19_layers.caffemodel 应该是不行的,因为decoder.t7 是针对vgg_normalised.t7 训练的,除非自己训练。

先看一下AdaIN-style 转换流程图:

从上图可以看出 编码器中并没有用到特别的层,为什么不能转换呢?

用十六进制编辑器打开 vgg_normalised.t7 文件 并

结合 Opencv3.3 和4.0的torch_importer.cpp 以及 Python 读取 Torch 的 torchfile.py 可以知道,

vgg_normalised.t7 文件中第一个层中引用了一个外部文件函数

@./helpers/preprocess.lua

OpenCV对这种情况是不处理的就退出了。

有什么办法跳过这个层取出后面的参数数据呢?

t7 模型的存放用了递归,整个文件是一个对象,然后对象之中有对象,表中有表,表中有对象,绕来绕去,总之非常复杂。

按它的流程 就是在人家的脚后跟,不能错一点,人家稍稍改了,就会出错。,

如果,按层为单位搜索,就会非常简单,遇到未知的可以跳过,不会影响其它层。

流程 :

1。搜索层,取出层名,取出参数

2。如果是未知层名,不取参数,搜索下一层

3。循环,直至结束

是不是很简单。

先找一下每层名字,就是

"V 1" 或 "V 2" 或 "V 3" + "nn."

前面的V是版本号    ,后面的 nn. 就是层名 

 

void readModel(string name)
{

	// 确保所获得的文件指针合法
	if(fopen_s(&m_FilePointer,name.data(), "rb")!=0) 
	{
		char Message[255] = {0};
		sprintf_s(Message, "没有找到这个文件: %s!", name.data());
		cout<<Message<<endl;
		return ;
	}
	ofstream fout ("Torch模型中的层名.txt");

	int V1num=0;
	while(1){
		if(跳到V位置())//找一个版本 "V 1" "V 2" "V 3"
			;
		else
			break;

		      
		long fpos = ftell(m_FilePointer);//当前文件位置。

		//读出类名
		string TorchClassName = readString();

		if(startsWith(TorchClassName,"nn.")) //"nn." 开头的是层名
		{
			V1num++;

			//显示层名
			cout<<TorchClassName<<endl;

			//保存到文件
			//fout<<"----"<<V1num<<"----"<<endl;
			fout<<TorchClassName<<endl;
				


		}

	}
	fout.close ();

	fclose(m_FilePointer);            // 关闭当前的文件指针

	system("pause");
}

打开文件可以看到vgg_normalised.t7 中的各层名了:

nn.Sequential
nn.SpatialConvolution ------------------预处理卷积 3维->3维
nn.SpatialReflectionPadding
nn.SpatialConvolution --------------Conv1_1---卷积 3维->64维
nn.ReLU
nn.SpatialReflectionPadding
nn.SpatialConvolution --------------Conv1_2---卷积 64维不变
nn.ReLU
nn.SpatialMaxPooling ---------------pool1---2倍缩小
nn.SpatialReflectionPadding
nn.SpatialConvolution --------------Conv2_1---卷积 64维->128维
nn.ReLU
nn.SpatialReflectionPadding
nn.SpatialConvolution --------------Conv2_2---卷积 128维不变
nn.ReLU
nn.SpatialMaxPooling ---------------pool2---2倍缩小
nn.SpatialReflectionPadding
nn.SpatialConvolution --------------Conv3_1---卷积 128维->256维
nn.ReLU
nn.SpatialReflectionPadding
nn.SpatialConvolution ---------------Conv3_2---卷积 256维不变
nn.ReLU
nn.SpatialReflectionPadding
nn.SpatialConvolution ---------------Conv3_3---卷积 256维不变
nn.ReLU
nn.SpatialReflectionPadding
nn.SpatialConvolution ---------------Conv3_4---卷积 256维不变
nn.ReLU
nn.SpatialMaxPooling ----------------pool3---2倍缩小
nn.SpatialReflectionPadding
nn.SpatialConvolution ----------------Conv4_1---卷积 256维->512维
nn.ReLU ------------------------------relu4-1--->输出
nn.SpatialReflectionPadding
nn.SpatialConvolution
nn.ReLU
nn.SpatialReflectionPadding
nn.SpatialConvolution
nn.ReLU
nn.SpatialReflectionPadding
nn.SpatialConvolution
nn.ReLU
nn.SpatialMaxPooling ------------------2倍缩小
nn.SpatialReflectionPadding
nn.SpatialConvolution
nn.ReLU
nn.SpatialReflectionPadding
nn.SpatialConvolution
nn.ReLU
nn.SpatialReflectionPadding
nn.SpatialConvolution
nn.ReLU
nn.SpatialReflectionPadding
nn.SpatialConvolution
nn.ReLU

虚线是我后来加上去的,第一层预处理卷积是VGG19中没有的。

先这样吧。

 

### StyleGAN 架构流程图 StyleGAN采用了一种基于样式的生成器架构,该模型通过引入样式调制层(style modulation layer),使得每一层可以独立控制图像的不同尺度特征[^2]。 #### 图像生成过程概述 1. **映射网络(Mapping Network)** 映射网络负责将输入的随机噪声向量\(z\)转换成中间潜变量\(w\)。这一变换有助于提高生成样本的质量并增强其多样性。 2. **合成网络(Synthesis Network)** 合成网络接收来自映射网络的\(w\)作为输入,并逐步构建目标图像。此过程中涉及多个分辨率级别的卷积操作,每个级别都配备有特定的样式调制机制来调整激活响应。 3. **AdaIN 层 (Adaptive Instance Normalization Layer)** AdaIN 层用于实现风格迁移的核心功能——即利用给定的\(w\)值动态改变各通道上的均值和方差参数,从而赋予输出更丰富的视觉特性。 4. **渐进式增长策略(Progressive Growing Strategy)** 为了稳定训练过程,在低分辨率上先建立初步结构再逐渐增加细节层次,直至达到所需的高分辨率效果为止。 以下是简化版的StyleGAN架构流程图表示: ```mermaid graph LR; Z([Noise Vector z]) --> M((Mapping Net)) M -->|Intermediate Latent w| S((Synthesis Net)) subgraph Synthesis Details direction TB W1[w_0] -.-> A1[AdaIN] A1 --> C1[Convolution] C1 --> U1[Upsample] U1 --> W2[w_1] --.> A2[AdaIN] A2 --> C2[Convolution] ... end S --> I([Generated Image]) ``` 上述图表展示了从初始噪音到最终生成图片的主要路径,其中包含了关键组件之间的连接关系及其作用方式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值