使用pytorch-pix2pix实现边图到真实图片的转换

文章目录

    • 论文 pix2pix image to image translation
    • Github 项目 pytorch pix2pix
    • 数据集 datasets
    • 可视化 Visualization
    • 训练 Training
    • 测试 Testing
    • 最后 Last

论文 pix2pix image to image translation

Here is some explanation together with a link to pix2pix’s image traslation paper

Github 项目 pytorch pix2pix

Github pytorch’s implementation, you can simply clone the repo in the command line using:

git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

in which a pix2pix network model is ready for us.

数据集 datasets

Construct dataset by:

  • crawling images from google-image
  • using lableme to label images and PowerShell script to generate dataset, by which we obtain our real images
  • using Matlab to extract edge with Canny(simply using matlab function: edge(image_matrix, 'Canny'), which will return an edge image), by which we obtain our edge images

Create dataset folder:
我们需要根据要求创建数据集的文件夹:

mkdir ./datasets/fire_hydrants
cd ./datasets/fire_hydrants
# requires subdirectories
mkdir A B train test val
cd A
mkdir train test val
cd ../B
mkdir train test val

Formatted data:

按顺序命名图片,例如:0.png,1.png etc。这可以在爬取图片的时候顺便

你也可以编写一个PowerShell脚本(我是在Windows下完成爬取,边界提取和重命名的,然后在Mac上进行训练)来完成这个工作:

# initialize loop variable
$i = 0
# path of your directory
$Path = 'path/to/your/dataset/directory'
$images = Get-ChildItem -Path $Path
# get extension
$Extension = [System.Io.Path]::GetExtension($images[0].Name)
$images | Rename-Item -NewName {
	'{0}.{1}' $script:i, $Extension
	$script:i++
}

Combined A and B
在按照要求对图片进行命名之后,我们通过运行脚本datasets/combine_A_and_B.py将A和B中对应文件夹下(例如,train 中)对应序号的图片进行合并:

python datasets/combine_A_and_B.py --fold_A datasets/fire_hydrants/A
--fold_B datasets/fire_hydrants/B --fold_AB datasets/fire_hydrants

--fold_AB就是输出目录,这个目录下必须要有和A,B同样的子目录(train, test and val)
最终将会得到类似这样的结果:
使用pytorch-pix2pix实现边图到真实图片的转换_第1张图片
真实图像和边图合并在一张图像里面,我们将使用这些图片进行训练和测试。

可视化 Visualization

在终端中输入:

python -m visdom.server

然后可以在浏览器中进入http://localhost:8097,你将会看到整个训练和测试的可视化过程:

  • 损失随时间的变化
    使用pytorch-pix2pix实现边图到真实图片的转换_第2张图片
  • 测试过程以及对应图片的标签:
    使用pytorch-pix2pix实现边图到真实图片的转换_第3张图片
    使用pytorch-pix2pix实现边图到真实图片的转换_第4张图片

训练 Training

Command:

python train.py --dataroot ./datasets/fire_hydrants --name 
fire_hydrant_experiment --model pix2pix --gpu_ids -1 --direction BtoA

P.S. 这里的方向是从边图数据集到真实图像数据集,这也是我们想要做的工作,根据你的数据集存放方式进行设置
Options Explanation:

Option Explanation
–dataroot path to images (should have subfolders A and B,
both of which contain test, train and val.)
–name name of the experiment
–model chooses which model to use. [cycle_gan | pix2pix | …]
–direction AtoB or BtoA

./options/base_options.py中给出了每个基本选项的解释。
而在./options/train_options.py./options/test_options.py分别给出了训练和测试的相关选项和解释。

测试 Testing

Command:

python test.py --dataroot ./datasets/fire_hydrants --name hydrants_edge2photo
--model pix2pix --gpu_ids -1 --direction BtoA 

result:
使用pytorch-pix2pix实现边图到真实图片的转换_第5张图片

中间为生成的图片

最后 Last

因为训练集不够大,因此生成的效果很不理想,但我们也可以看到,基本的颜色,高光部分和边缘都可以看出来,如果有一个不错的训练集的话,相信可以得到一个比较理想的效果。

F i n \mathscr{Fin} Fin

你可能感兴趣的:(使用pytorch-pix2pix实现边图到真实图片的转换)