Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
alvinlin1271320 opened this issue Oct 3, 2023 · 4 comments
Closed

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

alvinlin1271320 opened this issue Oct 3, 2023 · 4 comments
Labels
documentation Improvements or additions to documentation FAQ Frequently asked questions

Comments

@alvinlin1271320
Copy link

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

謝謝您!

@Srameo Srameo added documentation Improvements or additions to documentation FAQ Frequently asked questions labels Oct 4, 2023
@Srameo Srameo pinned this issue Oct 4, 2023
@Srameo
Copy link
Owner

Srameo commented Oct 4, 2023

您好!感谢您对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!

欢迎随时交流!

@alvinlin1271320
Copy link
Author

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!

@Srameo
Copy link
Owner

Srameo commented Oct 4, 2023

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)。

@alvinlin1271320
Copy link
Author

好的,謝謝您! 😀

@Srameo Srameo closed this as completed Oct 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation FAQ Frequently asked questions
Projects
None yet
Development

No branches or pull requests

2 participants