DCGAN增强图片数据集

1.Dependencies

2.DCGAN

步骤:

  • 将图片数集放在/Anime_GAN/DCGAN/faces

  • 进行如下的命令:

  $ cd Anime_GAN/DCGAN/
$ python main.py --help # 查看默认参数信息,根据需求可进行修改

执行完上述命令会产生相应的一张图片(存储位 置:/Anime_GAN/DCGAN/saved/img/xx.png)

  • 调用SegmentePictures.py进行图片的切割

$ cd DCGAN/saved
$ python SegmentePictures.py   
# encoding:utf-8
from PIL import Image
import sys
import math
import argparse def fill_image(image):
"""
将图片填充为正方形
:param image:
:return:
"""
width, height = image.size
#选取长和宽中较大值作为新图片的
new_image_length = width if width > height else height
#生成新图片[白底]
new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')
#将之前的图粘贴在新图上,居中
if width > height:#原图宽大于高,则填充图片的竖直维度
#(x,y)二元组表示粘贴上图相对下图的起始位置
new_image.paste(image, (0, int((new_image_length - height) / 2)))
else:
new_image.paste(image,(int((new_image_length - width) / 2),0)) return new_image def cut_image(image,cut_num):
"""
切图
:param image:
:return:
"""
flag_value = int(math.sqrt(cut_num))
width, height = image.size
item_width = int(width / flag_value)
box_list = []
for i in range(0,flag_value):
for j in range(0,flag_value):
box = (j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)
box_list.append(box)
image_list = [image.crop(box) for box in box_list] return image_list def save_images(image_list):
"""
保存
:param image_list:
:return:
"""
index = 1
for image in image_list:
image.save('./img_add/'+str(index) + '.png', 'PNG')
index += 1 def main():
parse = argparse.ArgumentParser() parse.add_argument("--lr", type=float, default=0.0001,
help="learning rate of generate and discriminator")
parse.add_argument("--beta1", type=float, default=0.5,
help="adam optimizer parameter")
parse.add_argument("--batch_size", type=int, default=81,
help="number of dataset in every train or test iteration")
parse.add_argument("--epochs", type=int, default=0,
help="number of training epochs")
parse.add_argument("--loaders", type=int, default=4,
help="number of parallel data loading processing")
parse.add_argument("--size_per_dataset", type=int, default=30000,
help="number of training data") args = parse.parse_args() file_path = "./img/"+args.epochs+".png" # 图片路径
image = Image.open(file_path)
image = fill_image(image)
image_list = cut_image(image,batch_size)
save_images(image_list) if __name__ == '__main__':
main()

需要注意的是:下面的命令中batch_size的数一定要一致

$ python main.py --batch_size=xx 

$ python SegmentePictures.py --batch_size=xx 

3.遇到的问题

RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 370 and 667 in dimension 2 at /pytorch/aten/src/TH/generic/THTensor.cpp:711

  • 错误分析:使用DataLoader加载图像,这些图像中的一些具有3个通道(彩色图像),而其他图像可能具有单个通道(BW图像),由于dim1的尺寸不同,因此无法将它们连接成批次。 尝试将img = img.convert(‘RGB’)添加到数据集中的getitem中。

  • 将图片的通道进行统一

    from PIL import Image
    import matplotlib.pyplot as plt
    import os


    def GetAllFiles(dir):
    files_ = []
    list = os.listdir(dir)
    for i in range(0, len(list)):
    path = os.path.join(dir, list[i])
    if os.path.isdir(path):
    files_.extend(GetAllFiles(path))
    if os.path.isfile(path):
    files_.append(path)
    return files_

    def ConvertRGB():
    """
    将图片转换为RGB格式
    :return:
    """
    files_ = GetAllFiles(file_path)
    for id,item in enumerate(files_):
    img=Image.open(item)
    gray=img.convert('RGB')
    plt.imshow(gray)
    plt.axis('off')
    save_path = "./save_img"+"\\"+str(id)+".jpg"
    plt.savefig(save_path)
    # plt.show()

    if __name__ == "__main__":
    file_path = "your path"
    ConvertRGB()

参考链接:https://github.com/FangYang970206/Anime_GAN/blob/master/README.md

DCGAN增强图片数据集的更多相关文章

  1. TensorFlow2.0(10):加载自定义图片数据集到Dataset

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  2. 超简单!pytorch入门教程(四):准备图片数据集

    在训练神经网络之前,我们必须有数据,作为资深伸手党,必须知道以下几个数据提供源: 一.CIFAR-10 CIFAR-10图片样本截图 CIFAR-10是多伦多大学提供的图片数据库,图片分辨率压缩至32 ...

  3. os.walk|图片数据集

    该函数的功能:遍历指定文件夹下的所有[路径][文件夹][文件名] ''' os.walk(top[, topdown=True[, onerror=None[, followlinks=False]] ...

  4. AlexNet详细解读

    AlexNet详细解读 目前在自学计算机视觉与深度学习方向的论文,今天给大家带来的是很经典的一篇文章 :<ImageNet Classification with Deep Convolutio ...

  5. python的N个小功能(图片预处理:打开图片,滤波器,增强,灰度图转换,去噪,二值化,切割,保存)

    ############################################################################################# ###### ...

  6. DCGAN 代码简单解读

    之前在DCGAN文章简单解读里说明了DCGAN的原理.本次来实现一个DCGAN,并在数据集上实际测试它的效果.本次的代码来自github开源代码DCGAN-tensorflow,感谢carpedm20 ...

  7. 学习笔记GAN002:DCGAN

    Ian J. Goodfellow 论文:https://arxiv.org/abs/1406.2661 两个网络:G(Generator),生成网络,接收随机噪声Z,通过噪声生成样本,G(z).D( ...

  8. [Deep-Learning-with-Python]GAN图片生成

    GAN 由Goodfellow等人于2014年引入的生成对抗网络(GAN)是用于学习图像潜在空间的VAE的替代方案.它们通过强制生成的图像在统计上几乎与真实图像几乎无法区分,从而能够生成相当逼真的合成 ...

  9. 在C#下使用TensorFlow.NET训练自己的数据集

    在C#下使用TensorFlow.NET训练自己的数据集 今天,我结合代码来详细介绍如何使用 SciSharp STACK 的 TensorFlow.NET 来训练CNN模型,该模型主要实现 图像的分 ...

随机推荐

  1. Caffe2 用户手册概览(Caffe2 Tutorials Overview)[1]

    在开始之前,我们很感激你对Caffe2感兴趣,希望Caffe2在你的机器学习作品中是一个高性能的框架.Caffe2致力于模块化,促进深度学习想法和原型的实现. 选择你的学习路线   1. 使用一个现成 ...

  2. Python学习笔记011

    多行注释 '''字符串 ''' 除了用来多行注释还可以用来打印多行

  3. c++子类父类关系(翁恺c++公开课[15-16]学习笔记)

    关于类的继承有三种:public继承.private继承.protected继承 首先说明,关于类的成员变量.函数的权限有三种(public.private.protected) 我们通常会让所有的成 ...

  4. 「Luogu P3168 [CQOI2015]任务查询系统」

    介绍本题的两种做法: 方法1 前置芝士 线段树:一个很重要的数据结构. 树状数组:一个很重要的数据结构. 具体实现 区间修改,单点查询很容易就会想到树状数组了,至于查询前k个数的和又可以丢给权值线段树 ...

  5. python 基础之列表的操作和列表的相关函数

    一.列表的相关操作 1.列表的拼接 list1 = [1,2]list2 = [3,4]listvar = list1 + list2print(listvar) 2.列表的重复 lst = [1,2 ...

  6. 【快学springboot】3.多种接受参数的方式

    前往掘金查看:https://juejin.im/post/5d05e5f9f265da1b6c5f74b4 前言 在开发中,我们常常会碰到多种传参的方式.这里,我们就来总结下,springboot中 ...

  7. 还在用逆向工程?太Low了,试试通用Mapper吧!

    什么是通用Mapper? 通用mapper 可以极大的方便开发人员进行ORM,提供极其方便的单表增删改查. 什么是通用mapper,一句话简单说,它就是个辅助mybatis极简单表开发的组件.它不是为 ...

  8. 三星 S10 运行 Ubuntu 系统

    导读 DeX 是一种模仿桌面操作系统的用户 UI 界面,把支持 DeX 的三星手机用数据线连上外置显示器,用户就可以获得一种类似桌面系统的使用体验. 三星 S8.Note 8.S9.Note 9.S1 ...

  9. [c#]如何访问 JArray 的元素

    JArray 格式文件. public void TestJson() { var jsonString = @"{""trends"": [ { & ...

  10. MySQL更新时间

    Mysql时间加减函数为date_add().date_sub()定义和用法DATE_ADD() 函数向日期添加指定的时间间隔.DATE_SUB() 函数向日期减少指定的时间间隔.语法DATE_ADD ...