摘要:
- 模型介绍
- 工作细节
- 测试
- 总结
一、模型介绍
Neural-Texture-Extraction-Distribution是一种用于可控人物图像合成的神经纹理提取和分布操作。它可以用于控制参考图像的姿势和外观,从而实现对人物图像的精细控制。该方法使用了一种称为“分布式纹理表示”的技术,可以将人物图像分解为多个部分,并对每个部分进行纹理提取和分布操作。这种方法可以在保留人物图像细节的同时,实现对图像的高度可控性。该方法已经在CVPR2022会议上发表的论文中进行了详细介绍,并在多个可控人物图像合成任务中取得了令人印象深刻的结果。
Neural-Texture采用UNet设计,具有下采样、瓶颈和上采样路径以及跳过连接。它用DenseNet体系结构中的Dense块取代了卷积层和最大池化层。密集块包含像ResNet中一样的残差连接,只是它们连接而不是求和先前的特征图。
这就能够看出他的优越性,不会重复利用相同的特征,减少了资源的占用和模型的参数。
对于模型参数,下图可以看到,模型除了一个Layer之外,其他两个层则是该模型的创新之处了,首先是一个Transition Down也就是TD层,以及最后一个TU层,通过这么一些参数便构成了我们模型的核心。
二、工作细节
1.核心训练输出
运行源代码文件中的训练代码,可以得到部分的输出如下,我们可以看到各个评估模型优劣的指标
Epoch 0 took 83+24 sec. loss = 7.43885 | jacc = 0.24205 | acc = 0.55149 || loss = 6.79203 | jacc = 0.25670 | acc = 0.56315 (BEST)
Epoch 1 took 84+25 sec. loss = 6.46792 | jacc = 0.29577 | acc = 0.64026 || loss = 6.33115 | jacc = 0.30504 | acc = 0.64557 (BEST)
2.损失函数设计
第二个比较关键的就是该模型的损失函数设计,我选用的是交叉熵作为损失函数,该模型训练800次的模型损失曲线如图所示
三、测试
可以看到,通过一个参考的图片,我们可以生成新的人穿上这件衣服的样子,并且还可以通过简单绘制肢体来调整pose
四、总结
上图是第一次跑出来的结果,我非常的激动。
在模型训练和测试过程中,我遇到过很多困难,但是随着自己的不断思考和不断学习他人先进的经验,我逐渐的走出了属于自己的一条路。非常感谢这一次宝贵的经验,我不仅仅构建了Neural-Texture模型,更是构建了我今后的学习深度学习的道路。
当然其中也少不了Intel公司的支持,我在比赛中使用了:
Intel® oneAPI Base Toolkit:这个工具包是 oneAPI 其他产品的基础,包含了几个在 Parallel Studio中常用的软件以及 icc 编译器、MPI、DPCPP 等。
使用实例:
import torch
from intel_extension import IntelAPI
from neural_texture_extraction import NeuralTextureExtractionModel
# 创建NeuralTextureExtractionModel实例
model = NeuralTextureExtractionModel()
# 创建IntelAPI实例
intel_api = IntelAPI()
# 加载预训练模型权重
model.load_state_dict(torch.load('pretrained_model.pth'))
# 设置输入图像
input_image = torch.randn(1, 3, 256, 256) # 以示例为目的,使用随机生成的输入图像
# 使用Intel API进行加速
input_image = intel_api.preprocess(input_image)
# 使用模型进行推理
output_image = model(input_image)
# 使用Intel API进行后处理
output_image = intel_api.postprocess(output_image)
# 处理输出图像,例如保存或显示
output_image.save('output_image.jpg')
对于我模型的构建和训练有莫大的帮助。再次表示感谢。