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/