使用昇思MindSpore实现广告Banner图片生成:从理论到实践(上)
使用昇思MindSpore实现广告Banner图片生成:从理论到实践(中)
1.1.6 生成最终的Banner图片
# 生成最终的Banner图片
def generate_final_banner():
netG.set_train(False)
noise = ops.randn((1, latent_dim, 1, 1))
generated_image = netG(noise)
# 转换为PIL图像
img = generated_image[0].asnumpy().transpose(1, 2, 0)
img = (img + 1) / 2.0
img = np.clip(img, 0, 1)
img = (img * 255).astype(np.uint8)
return Image.fromarray(img)
# 生成并保存最终的Banner
print("生成最终Banner图片...")
final_banner = generate_final_banner()
final_banner.save("final_generated_banner.png")
print("Banner图片已生成并保存为 'final_generated_banner.png'")
# 显示训练结果
print("\n训练总结:")
print(f"训练epoch数: {num_epochs}")
print(f"批次大小: 4")
print(f"数据集大小: {len(banner_ds)}")
# 显示原始图片和生成图片的对比
try:
plt.figure(figsize=(12, 5))
# 显示原始数据中的一张图片
plt.subplot(1, 3, 1)
sample_image = banner_ds[0].transpose(1, 2, 0)
sample_image = (sample_image + 1) / 2.0
plt.imshow(sample_image)
plt.title("原始图片样本")
plt.axis('off')
# 显示中间epoch生成的图片
plt.subplot(1, 3, 2)
if os.path.exists("generated_banner_epoch_0.png"):
mid_img = Image.open("generated_banner_epoch_0.png")
plt.imshow(mid_img)
plt.title("训练初期生成")
else:
plt.text(0.5, 0.5, "No image", ha='center', va='center')
plt.axis('off')
# 显示最终生成的图片
plt.subplot(1, 3, 3)
plt.imshow(final_banner)
plt.title("最终生成Banner")
plt.axis('off')
plt.tight_layout()
plt.savefig("training_comparison.png", dpi=150, bbox_inches='tight')
plt.show()
except Exception as e:
print(f"显示图片时出错: {e}")
print("但图片已成功保存到文件")
print("所有图片已生成完成!")
运行结果:
1.1.7 总结与展望
MindSpore的优势:
动态图模式:使用PYNATIVE_MODE便于调试和开发
高效的梯度计算:利用GradOperation简化反向传播
内存优化:自动内存管理提高训练效率
GAN训练技巧:
标签平滑:使用0.9和0.1而不是1和0作为真实/假标签
梯度惩罚:避免模式崩溃问题
学习率调度:自适应调整学习率提高训练稳定性
本文展示了如何使用昇思MindSpore框架实现一个功能完整的GAN模型来生成广告Banner图片。虽然当前模型在64×64分辨率下工作良好,但未来可以进一步改进:
提高分辨率:使用渐进式GAN生成更高分辨率的图片
条件生成:根据文本描述生成特定风格的Banner
风格控制:允许用户控制生成图片的颜色、布局等属性
通过结合深度学习和MindSpore框架的强大能力,我们为自动化广告设计开辟了新的可能性。这种技术不仅能够节省设计时间,还能通过数据驱动的方法优化营销效果。
代码仓地址:

