彩色星球图片生成3:代码改进(pytorch版)

  • 1. 修改
    • 1.1 预处理缩放
    • 1.2 随机翻转
    • 1.3 修改全局判别器
    • 1.4 修改进度打印
  • 2. 效果
  • 3. 总结

上一集: 彩色星球图片生成2:同时使用传统Gan判别器和马尔可夫判别器(pytorch版)

在上一集代码的基础上,进行了一些细节的修改以改进生成效果。

1. 修改

1.1 预处理缩放

用于预处理训练集图片的代码修改为:

import cv2
import os
from PIL import Image# 数据集来源
img_path = "train_images/"for path, dirs, files in os.walk(img_path, topdown=False):file_list = list(files)
for file in file_list:image_path = img_path + fileimg = cv2.imread(image_path, 1)# 裁剪为正方形bias = (img.shape[1] - img.shape[0]) // 2img = img[:, bias:bias+img.shape[0], :](B, G, R) = cv2.split(img)# 颜色通道合并img = cv2.merge([R, G, B])# 使用Image的ANTIALIAS缩放算法img = Image.fromarray(img)img = img.resize((264, 264), Image.ANTIALIAS)img.save(image_path)

改进点:使用Image库的Image.ANTIALIAS参数进行图片缩放,预先缩放减少了图片在训练过程中缩放消耗的时间,同时Image库的高质量缩放算法能够在将大图像缩小到低分辨率时保留细节纹理,减少锯齿现象的出现,有利于训练模型学习细节纹理特征。

1.2 随机翻转

训练代码中dataset构建部分的代码修改为:

elif config.read_from == "Memory":class image_dataset(Dataset):def __init__(self, file_list, img_path, transform):self.imgs = []for file in file_list:image_path = img_path + fileimg = cv2.imread(image_path)img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)self.transform = transform# 将所有原始图片保存在内存中self.imgs.append(img)def __getitem__(self, index):# 将transform操作修改为每次提取具体图片时进行img = self.imgs[index]img = self.transform(image=img)['image']return imgdef __len__(self):return len(self.imgs)
def get_transforms(img_size):# 缩放分辨率并转换到0-1之间return Compose(# 取消了Resize的部分,同时添加了0.5概率随机垂直翻转与水平翻转# 星球图片显然理应可以随意翻转,有效扩大了训练集的信息量[ HorizontalFlip(p=0.5),VerticalFlip(p=0.5),Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5), max_pixel_value=255.0, p=1.0),ToTensorV2(p=1.0)])

修改点:将原始图片保存在内存中,在每个epoch中分别随机水平和垂直翻转,再转换为Tensor数据类型加入运算,相当于增加了训练集的数量。

1.3 修改全局判别器

将模型部分中全局判别器的代码修改如下:

# 全局判别器,传统gan
class D_net_global(nn.Module):def __init__(self):super(D_net_global,self).__init__()self.features = nn.Sequential(nn.Conv2d(3, 64, kernel_size=5, stride=3, padding=1, bias=False),nn.LeakyReLU(0.2, True),nn.Conv2d(64, 128, kernel_size=4, stride=2, padding=1, bias=False),nn.BatchNorm2d(128),nn.LeakyReLU(0.2, True),nn.Conv2d(128, 256, kernel_size=4, stride=2, padding=1, bias=False),nn.BatchNorm2d(256),nn.LeakyReLU(0.2, True),nn.Conv2d(256, 512, kernel_size=4, stride=2, padding=1, bias=False),nn.BatchNorm2d(512),nn.LeakyReLU(0.2, True),nn.Conv2d(512, 16, kernel_size=4, stride=1, padding=0, bias=False),nn.BatchNorm2d(16),nn.LeakyReLU(0.2, True),)self.classifier = nn.Sequential(# 将下方的两行注释消除# nn.Linear(1024, 1024),# nn.ReLU(True),nn.Linear(1024, 1),nn.Sigmoid(),)def forward(self, img):features = self.features(img)features = features.view(features.shape[0], -1)output = self.classifier(features)return output

修改点:清除了判别器末尾的全连接层,同时删除了与之匹配的relu层,最大程度保留了画面细节的信息。

1.4 修改进度打印

训练过程中的进度打印代码修改为:

# 打印程序工作进度
print("\rEpoch: %2d, Batch: %4d / %4d" % (epoch + 1, index + 1, batch_num), end="")

修改点:末尾换行符取消,每次打印时通过\r移动到行首,覆盖上一次print的内容,从而做到在同一行中实时刷新batch的工作进度,更加直观简洁。

2. 效果

改进后,训练了更多epoch,并且将训练集扩大到了128张,训练了约10000个epoch之后,生成的画面效果如下:



能够明显看到画面有了极大的提升,星球表面纹理清晰,网格现象大幅度减少,背景噪点减少。
最后放张训练过程的全家福【每张图片4x8,间隔为100epoch】:

3. 总结

这次在画面细节和减少网格图上获得了较大的提升,同时生成器也学会了绘制银河图案,遗憾的是完全没有学会训练集中的行星星环,而是无视了所有的星环。
下一步改进计划考虑加入分类器等更为复杂的网络结构使图像生成更加多样化,仍然在试图实现中……

下一集:彩色星球图片生成4:转置卷积+插值缩放+卷积收缩(pytorch版)

彩色星球图片生成3:代码改进(pytorch版)相关推荐

  1. 彩色星球图片生成1:使用Gan实现(pytorch版)

    彩色星球图片生成1:使用Gan实现(pytorch版) 1. 描述 2. 代码 2.1 模型代码model.py 2.2 训练代码main.py 3. 效果 4. 趣图 上一集: 使用Gan实现MNI ...

  2. 彩色星球图片生成4:转置卷积+插值缩放+卷积收缩(pytorch版)

    彩色星球图片生成4:转置卷积层+插值缩放+卷积收缩(pytorch版) 1. 改进方面 1.1 优化器与优化步长 1.2 交叉熵损失函数 1.3 Patch判别器 1.4 输入分辨率 1.5 转置卷积 ...

  3. 彩色星球图片生成5:先验条件约束与LapGAN(pytorch版)

    彩色星球图片生成5:先验条件约束与LapGAN(pytorch版) 1. 改进方面 1.1 训练集信息的人工标注 1.2 先验信息的条件约束 1.3 分类器C 1.4 LapGAN的分层残差拟合 2. ...

  4. 解析DeepLabv3+的网络结构及代码【Pytorch版】

    论文地址:https://arxiv.org/pdf/1802.02611.pdf 论文笔记:https://blog.csdn.net/oYeZhou/article/details/1122318 ...

  5. ps 自动生成html代码,谁知道用ps软件做出来的图片怎么生成html代码?求生成html代码步骤...

    下面就由小编为大家分享一款由ps做出来的图片生成html代码方法的教程 打开ps软件,选中要转换成html静态页的图片,这边就以百度经验的页面为例! 1.打开百度经验页面的保存为一张图片;看清楚是图片 ...

  6. python图片生成gif方法汇总

    一.使用 PIL 和 images2gif 库 第一种方法主要是采用PIL和imagegif库,由于版本的原因,可能有的imagegif对图片进行处理的时候,以下语句会报错 writeGif(outf ...

  7. 图片生成html_markdown 生成头条文章的一个实现

    前几天写了<markdown 生成头条文章的一个思路>,周末就试了试. 先回顾一下思路,大致流程如下: 这里的三个关键点是: 提取code 把code 转换为html 把html 生成图片 ...

  8. 彩色星球科技冠名著名钢琴艺术家吴牧野世界巡演《肖邦圆舞曲全集》长沙站演出...

    近日,专业从事娱乐文化科技服务的彩色星球科技公司(纳斯达克代码:CSCW 以下简称:彩色星球)正式宣布,11月15号将冠名国际著名钢琴艺术家吴牧野的钢琴独奏世界巡演<肖邦圆舞曲全集>长沙站 ...

  9. 使用pytorch版faster-rcnn训练自己数据集

    使用pytorch版faster-rcnn训练自己数据集 引言 faster-rcnn pytorch代码下载 训练自己数据集 接下来工作 参考文献 引言 最近在复现目标检测代码(师兄强烈推荐FPN, ...

最新文章

  1. (转)基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
  2. python编辑器,作为初学者该如何抉择?
  3. 2020年度“社区之星”出炉!原来社区里的技术大佬们是这样成长起来的!
  4. 背景虚化_一分钟学会背景虚化,掌握3个关键就能拍出好照片
  5. 有关JNLP中传SESSIONID为参数的问题
  6. socket多线程方式案例
  7. Windows 10系统永久关闭Windows Defender Antivirus防病毒程序方法
  8. 树链剖分概念及模板 + 例题 [POJ3237 tree + 软件包管理器]
  9. linux下挂载iso镜像的方法
  10. 2020前端最新面试题(vue篇)
  11. linux ps ax tl,Linux常用指令 - osc_wa6fkyf0的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. 使用MemCache进行相关缓存的保存处理
  13. 王军生老师---银行领域高端讲师(王军生)
  14. Atamai 手术导航软件开发包
  15. mysql多表条件查询,mysql实现RBAC权限管理sql语句详解
  16. 笔记本插入耳机声音外放
  17. xp 计算机配置,怎么查看WindowsXP系统电脑配置?
  18. android弹球动画,FlingAnimation/SpringAnimation实现弹球动画
  19. 安卓关于inflate方法的总结
  20. 彻底解决IE9 文本框无法输入文字,IE窗口闪烁问题(亲测)

热门文章

  1. Linux多进程读者和写者问题,读者与写者问题
  2. 健身环大冒险 腹肌防御Best | 健身环大冒险 2162-0002 | 健身环 重新适配
  3. 大厂频繁联手,NFT 与 GameFi 的融合能带来哪些新叙事?
  4. Unity 通过向量点乘叉乘判断方位
  5. 【文献翻译】基于IEEE802.15.4的物联网网络的捕获和威胁感知安全配置策略
  6. 恶意软件攻破网络防御措施的5种方式揭秘!网警教你如何抵御!
  7. 误造搭建服务器找不到,安装 · Miscreated(误造)搭建服务器教程 · 看云
  8. Merge the incoming changes into the current branch和Rebase the current branch on top of the incoming
  9. Vundle使用帮助
  10. 直播预告|「星轨巡讲」技术分享会首站