Free-Form Image Inpainting with Gated Convolution 是 JIAHUI YU 大神最新的图像修复文章,可以用来修复含不规则mask的图像,也称deepfill v2。改版代码还没开放,但有很多人复现了,GitHub上找到一个复现的代码:https://github.com/avalonstrel/GatedConvolution。感谢大神的复现,让我可以快速炼丹。
这里主要记录一下如何使用多GPU进行训练,参数太多,训练速度实在是太慢了。。。后面还会尝试一下如何提升训练速度。
经评论提醒原作代码已放出来了,已测试,效果棒棒,大家快去围观https://github.com/JiahuiYu/generative_inpainting
首先,把代码下载下来https://github.com/avalonstrel/GatedConvolution。实现多GPU训练需要修改的地方如下:
1. 在train.py中,将下面这段代码
trainer = Trainer(
optimizer=g_optimizer,
var_list=g_vars,
max_iters=config.MAX_ITERS,
graph_def=multigpu_graph_def,
grads_summary=config.GRADS_SUMMARY,
gradient_processor=gradient_processor,
graph_def_kwargs={
'model': model, 'data_mask_data': data_mask_data, "guides":None, 'config': config, 'loss_type': 'g'},
spe=config.TRAIN_SPE,
log_dir=log_prefix,
)
为:
trainer = ng.train.MultiGPUTrainer(
num_gpus=config.NUM_GPUS,
optimizer=g_optimizer,
var_list=g_vars,
max_iters=config.MAX_ITERS,
graph_def=multigpu_graph_def,
grads_summary=config.GRADS_SUMMARY,
gradient_processor=gradient_processor,
graph_def_kwargs={
'model': model, 'data_mask_data': data_mask_data, "guides":None, 'config': config, 'loss_type': 'g'},
spe=config.TRAIN_SPE,
log_dir=log_prefix,
)
可以看到,主要是把 trainer = Trainer 修改成了 trainer = ng.train.MultiGPUTrainer,然后添加了num_gpus=config.NUM_GPUS
2. 修改 inpaint.yml 文件中的NUM_GPUS和GPU_ID就可以了,下面是我自己的修改。
NUM_GPUS: 2
GPU_ID: [2,3] # -1 indicate select any available one, otherwise select gpu ID, e.g. [0,1,3]
顺便提一下上一版deepfill v1的论文叫做Generative Image Inpainting with Contextual Attention,代码已经放出来了https://github.com/JiahuiYu/generative_inpainting。讨论区中有关于deepfill v2复现的讨论,值得一看。
deepfill v1主页:http://jiahuiyu.com/deepfill/
deepfill v2主页:http://jiahuiyu.com/deepfill2/