ming053l / DRCT

Accepted by New Trends in Image Restoration and Enhancement workshop (NTIRE), in conjunction with CVPR 2024.
MIT License
187 stars 14 forks source link

About the number of the patch_size #9

Open c-pupil opened 5 months ago

c-pupil commented 5 months ago

作者您好: 我看您的patch_size默认设置为1,并且在opt中并没有修改,我想问一下这个patch_size的设置对实验结果有影响大么?

def __init__(self,
                 img_size=64,
                 patch_size=1,
                 in_chans=3,
                 embed_dim=96,
                 depths=(6, 6, 6, 6),
                 num_heads=(6, 6, 6, 6),
                 window_size=7,
                 compress_ratio=3,
                 squeeze_factor=30,
                 conv_scale=0.01,
                 overlap_ratio=0.5,
                 mlp_ratio=4.,
                 qkv_bias=True,
                 qk_scale=None,
                 drop_rate=0.,
                 attn_drop_rate=0.,
                 drop_path_rate=0.1,
                 norm_layer=nn.LayerNorm,
                 ape=False,
                 patch_norm=True,
                 use_checkpoint=False,
                 upscale=2,
                 img_range=1.,
                 upsampler='',
                 resi_connection='1conv',
                 gc=32,
                 **kwargs):
ming053l commented 5 months ago

您好,patchsize我們是比照HAT的實驗設置來決定的 (HAT也是用1),我們沒有嘗試過更大的patchsize。

調大patchsize可能對分類或分割檢測的顯著幫助,並且同時降低複雜度。但直覺上SR任務應該設小一點patchsize,因為關注的尺度是pixel-level。


Hello, we determine the patchsize based on the experimental settings of HAT (HAT also uses 1). We have not tried a larger patchsize.

Increasing the patchsize is significantly helpful for classification or segmentation detection, but intuitively the SR task should set a smaller patchsize.

c-pupil commented 5 months ago

@ming053l 感谢您的回答,我想请问您一下你们是用什么资源训练的呢?我用3090 24G,把您的模型作为编码器(多模态任务所以会用到两个编码器),输入图像尺寸在256x256时会报内存超出错 out of memory(batch_size设置为2,输入在128x128才可以运行),即使将layers都设置为[1,1,1,1]还是OOM,您认为这个问题的原因是什么,有什么建议或者方法减少这个显存的占用么?

ming053l commented 5 months ago

@c-pupil

您好,我們使用的設備是2張3090 24G (4 batchsize),我們自己評估最少需要2卡才比較容易訓練,單卡的話要,若您要再擴充多模態模型可能會很受限

如果要融入文字特徵之類的來完成之後的任務,我的經驗是可行的方式的話就是利用adapter之類的方式,先offline使用預訓練的多模態模型萃取特徵後,並在額外設計模塊把這組特徵設法融入進去原本模型裡面,這相對比較容易

很吃memory的原因是SR model,普遍都是因為要將feature map維持相對較大的size,因此會需要消耗大量的memory,並且因為dense-connection的設計所以feature map需要hold on在memory裡面。SR model所以如果不是特別往efficient的方向設計模塊的話,都不容易規避掉OOM的困擾

您可能也有發現,調整原始圖像尺寸或是scale up的尺度倆者,才能夠降比較多記憶體開銷),其餘可行的方式就是把網路改淺、注意力頭改少、window設小之類的方法,但可能對您來說是無奈之舉,而且這樣做不見得最適合您的使用情境

多模態任務每個模態都要拿SOTA model挺吃resource。所以以您的方向而言的話,我會建議您使用SwinIR的輕量化版本,這相對簡單高效並且能和效能保持平衡

c-pupil commented 5 months ago

@ming053l 感谢您的回复和建议

  1. 另外还有一个问题,训练或者测试的时候,是不是要求输入的图像尺寸大小必须是window_size的整数倍,我在测试的时候发现如果不是整数倍会报错,同 # https://github.com/ming053l/DRCT/issues/11#issue-2335162526
  2. 同时不知道您后续方不方便开源一下您的模型在Image-Net上面的预训练参数。
ming053l commented 5 months ago

@c-pupil

hi同學你好,

1的話我inference code重新弄過了,這個再請嘗試看看。原本的版本我沒有加上tilling process,所以會size mismatch,修正後的版本對圖像大小沒有任何限制了,單純前面沒加到而已,跟window_size沒關係 2都跟option file的一樣,但log我沒有留下來,我的經驗是pretrain on imagenet的麻煩的地方在於訓練時長。折衷的方式就是預訓練用LSDIR然後,但效果會稍微差一點,不過影響不大

ming053l commented 5 months ago

@c-pupil hi, 同學你好 我們已經將在ImageNet上預訓練的DRCT-L及配置文件和訓練紀錄釋出了,請考慮使用,感謝