關於訓練與測試在我的數據集上
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 (低质量,含噪) 数据采集
对于单个场景,使用短曝光时间 (
若您想拍摄数据集用于 Fine-tune,则需要ISO差距较大的数据对,例如对于两个不同的场景,二者ISO设置分别为 (
则需
GT (高质量,无噪) 数据采集
对于每个场景,若您使用的是单反相机(“好Sensor”),则只需将ISO调至最低档 (记录为
若您使用的是手机或其他的监控设备(“差Sensor”),则在调低ISO和调高曝光时间的基础上仍需进行多帧average降噪)(5~10帧)。
关于 Additional Dgain
由于训练时需要将LQ的信号强度调整为与GT一致,则对于LQ图需要乘以 Additional Dgain。其计算方法为
注意事项
- 拍摄时需要使用三脚架,并且远程控制拍摄设备,防止出现未对齐的现象
- 拍摄LQ数据时,可以拍摄burst数据(相当于提供更多噪声采样)。但是需要注意不要因为连拍导致过热,影响噪声分布
- LQ 图像的 ISO 限制是 flexible 的,可以适当调节,但仍需保证噪声方差差距很大。
2) 数据预处理
具体可以参考 scripts/data_preparation/bayer_to_npy.py 中的代码
- Pack Bayer,请参考 led/data/raw_utils.py 中的代码。将您的数据变为四通道(RGBG)的数据
- 获取您 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:
- 修改 txt file (template),每行代表一对配对数据,并且为
dataroot
的相对路径LQ_scene01_sample01 GT_scene01 LQ_scene01_sample02 GT_scene01 LQ_scene02_sample01 GT_scene02 ...
完成 1. 后可参考 Readme 进行操作,跳过 2., 3.
- 修改 finetune config (template)
- 运行
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
我這邊有幾個問題想跟您確認一下:
- 您在第三點Pre-train (optional)提到的ratio_range是指拍出來影像的像素值嗎? 還是指fine-tune影像的ISO最小到最大的range?
- 我的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)。
好的,謝謝您! 😀