天天看點

圖像修複 deepfill v2: Free-Form Image Inpainting with Gated Convolution ------ 使用多GPU進行訓練

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/

繼續閱讀