模型调优
Created on March 16|Last edited on March 22
Comment
相关学习&构想
1.28开始调整
2.18/19
2.20 开始sweep
先尝试完全跑通一遍,把各个参数都设置合理,直接组合不同的超参数进行sweep。
💎sweep tips💎
source 1
https://colab.research.google.com/github/wandb/examples/blob/master/colabs/pytorch/Organizing_Hyperparameter_Sweeps_in_PyTorch_with_W%26B.ipynb#scrollTo=8by25AXxObPj wandb sweep colab讲解与展示
1️⃣一般先利用random search,把关键超参范围缩小到最后,再使用grid search,直到最后找到最优

#### 可以框住右侧loss的一部分看对应的线,挑选不好的设置值 ####
2️⃣常常使用log uniform distribution设置batch size和learning rate
3️⃣参数设置组合一开始可以广泛一些,之后再narrow down缩小到一个更小的范围
4️⃣random search最后执行必须设置一个count要不然不会停;可以分布不同电脑一起跑同一个sweep,你跑20个我跑20个超参数组合
5️⃣最后输出有一个correlation图像,表示的是对应变量和提升模型表现的关系,绿色正相关红色负。
下面说明增加lr模型表现更好,那就一直增加lr,甚至比现有量级更大👇

#### 绿色correlation ####
source 2
source 345
🧹sweep 实践🧹
3.16租GPU,训练+sweep至最优收敛
API Key —— 06982a11c30864e01186ce8abb7b52f1fa9ed983
parameters
optimizer:
lr:
batchsize:
img_size:
decay_epoch: 有规律的,不能随意设置
pixelwise_weight:
perceptual_weight:
mask_weight:
这俩不太重要↓
gamma:
values: [0.8, 0.9, 0.95, 0.99] # 示例值,可根据需要调整
decay_steps:
values: [1, 2, 5] # 示例值,可根据需要调整
sweep0 3.16 具体以yml文件为主
先固定epoch,看其他因素的影响,一定没有收敛,但是rmse越小的组合说明效果越好;
先不要保存bestrmse对应的模型;添加调整超参数img_size(img_height/width); 先用小数据集sweep。
第一次:
目标:确定优化器、批处理大小、图像尺寸,并识别学习率的合适量级。
增加一个静态的较小n_epochs值,以快速评估不同参数组合的效果。确认学习率量级后,可以为后续sweep设置一个更精细的范围。
optimizer:
values: ['adam', 'sgd']
lr:
batchsize:
img_size:
values: [512, 800, 1024]
n_epochs: 固定一个小的
第二次:(sweep2.yml)
不确定这几个参数之间的关系,得一块调整,先一起调整使用小epoch值看看
lr: values: [量级附近的值]
decay_epoch:有规律的,不能随意设置
pixelwise_weight:
perceptual_weight:
mask_weight:
n_epochs: 应 该固定到能收敛的取值了吧
作弊,把test的数据也放到模型里面让他训练,但是val的不放,要不然就没有损失,不能反向传播不断学习更新了。
改数据集,原来的也保留,上传网盘;更新名称,太冗长复杂了
sweep0&1 3.18
租了A6000,先跑了一下python train.py,少的库给安上,发现1024分辨率batch8 OOM,那么1024对应batch8 16 32都不行,则sweep总共有150-2x5x3x1=120种,那么count设置60
OOM之后就可以sweep了,用的random
跑了4h,中间远程控制断了,结束sweep0————
sweep1的改进:
batch16时候512回OOM,那么32时候更会OOM,最小分辨率这样别的更是,所以sweep1 batchsize[2,4,8];
发现epoch总是差一个,这回sweep1中epoch=31
在save_point时候把预测图和gt缝合到一起,再用wandb记录下来
增添ssim的计算,然后使用random(根据sweep0如果grid要100+小时,还是random。不选bayes因为不用设置优化目标,之后可切换平行线图指标rmse/psnr/ssim看哪个最适合)
是用自带的loss.py里面的ssim计算不行,使用scikit-image库种方法计算ssim;
由上一点,已经有wandb.define_metric("main/rmse", summary="min")可以���征main/rmse.min了,设置psnr/ssim.min对应metric
至于decay_epoch的固定值,如果你在这个初步阶段仅是想快速观察不同参数组合的效果,并不需要进行详细的学习率衰减调整,可以选择一个相对较大的值,或者等同于你设置的最大 epoch数,以避免在初步评估阶段就开始应用学习率衰减。这样做可以让你更专注于观察不同超参数组合的直接效果,而不是学习率变化带来的影响。先把有关学习率衰减的code去掉。
*****先python,到save图片在wandb出现对了/ssim有/3个min也都有,再sweep*****
sweep1 3.19 3.20
🫨🫨‼️‼️‼️ 要检查每次run的参数组合不能重复阿,新开一个filter看一下 ‼️‼️‼️🫨🫨最好跑30组finish
第二组取值确定,看第一组中ssim/psnr/rmse三个指标表现最好的run:(filter为state=finish,valloss不等于NaN)
(应该在0-1范围内越小越好)driven13 ssim;7summer psnr;fragant50 rmse
看输出图片情况(完全不行...)
第二组的时候,记着:
看了一下CPU调用快满了,就保持n_cpu=8;打开学习率衰减的代码
固定第一组的除lr参数值————确定lr看指标最值附近的都是量级多少,确定下来————0.0001或0.001
改proj名称为DNSR-Sweep2;设置epoch值为收敛
修改sweep2代码中save-point小一点,论文可能会用到图
sweep2用bayes,
sweep1参数确定+lr量级附近————收敛epochs————decay————三个weight
sweep1参数确定+lr量级:
2-512-sdg,不同lr对应rmse.min

4-512-sdg,不同lr对应rmse.min

8-512-sdg, 不同lr对应rmse.min

optim选sgd,因为图显示sgd相较于adam对于指标优化更有用 https://docs.wandb.ai/guides/app/features/panels/parameter-importance

img_size选512,
512,sgd,lr范围固定之后,batch也不是很重要,且correlation是只考虑单一参数,没有考虑参数之间的互相影响。反而rmse.min最小时batchsize=8。(16会OOM)
收敛epochs确定:
⛏️⛏️⛏️参数按上面sweep1确定的,lr0.01,decay_epoch=31最大���敛最慢,pixelwise_weight0.5, perceptual_weight1.0, mask_weightd0.02,看50个是否收敛⛏️⛏️⛏️
🤔🤔🛑对第一组超参数分xi,发现:因为我不确定哪个指标合适,我就把ssim,rmse和psnr三个指标对应的最好参数组合挑了出来,只有ssim对应的训练中val_loss是下降的,另外两个都是上升。这说明什么?我应该以ssim作为指标吗???(GPT4: 这可能暗示SSIM与你的模型优化目标更为一致,本来损失函数中感知损失权重也最大。)其他两个指标对应的最优组合pixloss、mskloss下降而valloss、percep_loss上升,但是driven13对应的valloss、percep_loss也下降。验证上面GPT4的话。
当然,每个指标不能都看最好的那个,ssim看看别的情况下val_loss是不是也下降————不是,变化多样————不能这样就选指标ssim🤔🤔🛑
decay_epoch确定:
迁移学习要早点开始学习率下降。6,16,31
decay_step=5
三个权重确定:
percep:0.01, 0.1, 1 pix: 0.01, 0.1, 1 msk:0.001, 0.01, 0.1
优化指标确定:
🤔🤔🛑Gpt说“鉴于本文研究目的是为了从捕获的图像中去除阴影,并从该去阴影图像中重建出材质,用于三维虚拟场景的渲染,选择合适的指标非常关键。LPIPS可以很好地评估处理后图像与原始材质在视觉上的相似度,确保视觉保真度。使用SSIM和PSNR可能有助于评估纹理细节的保留和整体图像质量,确保重建的纹理能满足逼真渲染的需求。这样指标组合可以从不同角度全面评价去阴影后图像的质量和适用性。”那这不就是损失函数(两大部分:像素细节+整体视觉相似,感知损失+psnr等L2),但是我的损失函数weight不确定要调整,又要最小化损失函数,相互矛盾,不能用损失函数作为指标。🤔🤔🛑
🤔🤔🛑感知损失和LPIPS来自同一paper,lpips太难弄放弃🤔🤔🛑先用SSIM
询问GPT4两次sweep:
sweep1 分析结果 3.20
🫨🫨‼️‼️‼️ sweep1要filter为valloss不等于NaN,imgsize不等于1024再作图🫨🫨‼️‼️‼️
刚发现psnr搞错了,应该是最大值啊啊啊!!!
ssim也搞错了,用的是scikit包中ssim,越大越好!!! sweep1都搞错了,指标只有rmse可以作图....
🛑🛑Lanczos插值方法也可以尝试?但影响可能很小🛑🛑
🛑🛑可以试试不用wsrd的预训练文件?🛑🛑
Add a comment