Srameo/LED

關於訓練與測試在我的數據集上

alvinlin1271320 opened this issue · 4 comments

您好,看完您的LED後我覺得非常的有興趣,想請問一下我手上有自己拍的一些數據集,我在晚上拍出來的raw影像。
我的這些影像是RGGB的並且像素值是在[0:1023],如果是這樣的話有辦法使用您的LED做訓練與測試嗎?
如果可以的話我該從哪裡開始著手修改?

謝謝您!

您好!感谢您对LED的关注!如果您想将LED使用到您自己的设备上,总共包含5个步骤:1) 数据采集; 2) 数据预处理; 3) Pre-train (optional); 4) Fine-tune; 5) 测试

1) 数据采集

由于 LED 在预训练阶段无需使用真实数据,因此此章节采集的数据只用来进行 Fine-tune 或 测试

LQ (低质量,含噪) 数据采集

对于单个场景,使用短曝光时间 ($EXP_S$) 拍摄即可,但需注意需要记录短曝光时的ISO ($ISO_S$)。

若您想拍摄数据集用于 Fine-tune,则需要ISO差距较大的数据对,例如对于两个不同的场景,二者ISO设置分别为 ($ISO_{S1}$, $ISO_{S2}$, $ISO_{S1} < ISO_{S2}$)。
则需 $ISO_{S1} < 50$$ISO_{S2} > 5000$

GT (高质量,无噪) 数据采集

对于每个场景,若您使用的是单反相机(“好Sensor”),则只需将ISO调至最低档 (记录为 $ISO_L$),曝光时间 (记录为 $EXP_L$)调高即可。

若您使用的是手机或其他的监控设备(“差Sensor”),则在调低ISO和调高曝光时间的基础上仍需进行多帧average降噪)(5~10帧)。

关于 Additional Dgain

由于训练时需要将LQ的信号强度调整为与GT一致,则对于LQ图需要乘以 Additional Dgain。其计算方法为

$$ Dgain = \frac{ISO_L\times EXP_L}{ISO_S\times EXP_S} $$

注意事项

  1. 拍摄时需要使用三脚架,并且远程控制拍摄设备,防止出现未对齐的现象
  2. 拍摄LQ数据时,可以拍摄burst数据(相当于提供更多噪声采样)。但是需要注意不要因为连拍导致过热,影响噪声分布
  3. LQ 图像的 ISO 限制是 flexible 的,可以适当调节,但仍需保证噪声方差差距很大。

2) 数据预处理

具体可以参考 scripts/data_preparation/bayer_to_npy.py 中的代码

  1. Pack Bayer,请参考 led/data/raw_utils.py 中的代码。将您的数据变为四通道(RGBG)的数据
  2. 获取您 Sensor 的白电平(white point)与黑电平(black level),在训练阶段需要将数据通过 white point 与 black level 进行归一化。

3) Pre-train (optional)

由于 LED 的模型是和 Additional Dgain 强耦合的,所以若您的数据与LED公开的模型 dgain 范围一致,则您可跳过此步骤。

反之,若您的数据 dgain 范围不一致 (例如为 [a, b]), 则您需要在 config 中修改 ratio_range 参数,例如 options/ELD/ELD_NikonD850_CVPR20_ELD_Setting.yaml config 中的

datasets:
  train:
    ratio_range: [1, 200]

4) Fine-tune

Fine-tune 阶段需要修改数据集的config:

  1. 修改 txt file (template),每行代表一对配对数据,并且为 dataroot 的相对路径
    LQ_scene01_sample01 GT_scene01
    LQ_scene01_sample02 GT_scene01
    LQ_scene02_sample01 GT_scene02
    ...

    完成 1. 后可参考 Readme 进行操作,跳过 2., 3.

  2. 修改 finetune config (template)
  3. 运行 python led/train.py -opt [OPT]

5) 测试

测试阶段参考 Readme 即可,当然需要注意应增加 --led 设置。

免责声明

由于 Few-shot 的限制,fine-tune 过程中会很吃 few-shot 数据质量。并且对于不同 sensor 来讲,其所需 fine-tune 策略也可能不同,需要多调一调(很可能过拟合)。


If LED is helpful to your projects, please help star this repo. Thanks!

欢迎随时交流!

Hi @Srameo :
非常感謝您詳細的回覆! 我已經按Star了 :D

我這邊有幾個問題想跟您確認一下:

  1. 您在第三點Pre-train (optional)提到的ratio_range是指拍出來影像的像素值嗎? 還是指fine-tune影像的ISO最小到最大的range?
  2. 我的raw影像是10bit的,依照您的經驗,我可以直接用您的權重做fine-tune嗎? 還是我需要修改虛擬相機sensor的noise參數讓他們用10bit的格式先做pre-train(我不確定是否可以這樣做,如果可以,可以請您跟我說需要往哪個方向做修改嗎)。

Thanks!

Q1: 有关 ratio_range
A1: ratio_range 是指您给输入数据额外增加的 additional dgain,可以参考"关于 Additional Dgain",或者 SID 中的相关操作。

Q2: 关于使用 10bit 数据进行finetune
A2: 由于我们没有尝试使用 10 bit 数据进行finetune,因此在这里并不能下定结论。但是从我们的经验来讲,您可以尝试进行 finetune,因为我们在 pre-train 阶段所有的数据都是进行了归一化的,只有量化噪声是按照14bit(SonyA7S2的比特深度)添加的。此外仍需考虑的是单反相机属于“好Sensor”,故噪声强度弱;而手机传感器属于“差Sensor”,故噪声强度强。而我们的 pre-train 模型是在“好Sensor”的参数空间中进行训练的,因此若您想 pre-train 的话,如果方便也可以更改下噪声参数空间(详见 options/base/noise_g/noise_g_virtual.yaml)。

好的,謝謝您! 😀