train之后不训练,一直卡着不动
Mantianxing2024 opened this issue · 7 comments
运行之后只显示如下然后就卡着不动了,没有训练,也没有报错
icpr_dataset UIUNet
icpr_dataset {'mean': 76.04834747314453, 'std': 28.732160568237305}
我也遇到了相同的问题,请问您解决了吗
一般训练开始卡着不动是因为没有检索到数据集的均值方差所以重新算比较花时间。代码中默认的数据集及其均值方差见utils.py 94-105行(如下)。
为方便使用,训练代码train.py 18行中给定了一个参数img_norm_cfg,类型是dict,可以自行设置均值方差,检索到后就会直接使用不用再重新计算。
注意:由于命令行无法对dict进行传参。因此,如果需要使用img_norm_cfg设置均值方差,直接改train.py后运行。
此外,train.py 20-22行额外提供了img_norm_cfg_mean和img_norm_cfg_std两个float参数,可以直接通过命令行传参。python train.py --model_names ACM ALCNet --dataset_names NUAA-SIRST --img_norm_cfg_mean 76.04834747314453 --img_norm_cfg_std 28.732160568237305
运行命令可以参考PRCV 2024 WideIRSTD挑战赛的代码提交示例 https://bohrium.dp.tech/notebooks/21145676824
我检查了代码,发现如果mask=0的时候确实是导致random_crop 进入了死循环。因此我将代码做了下图的修改:若判断mask中没有目标,则直接随机裁patch。感谢您的关注和宝贵的意见,帮助我们进一步优化代码。
下面进一步解释一下pos_prob设计的思路。
pos_prob用于调控训练中正负样本的比例。
当pos_prob=None,全图随机裁剪。由于目标和背景不均衡(目标尺寸小且稀疏,在图像中占比极低,全图大部分都是背景),导致训练中大量数据为负样本,训练的效率很低。这也是为什么之前的很多论文中都显示需要几千轮迭代的原因。
通过设置pos_prob=0.5,可以调控正负样本的比例为1:1,从一定角度上均衡了正负样本,提高了训练效率,并且算法的性能也有所提升。
十分感谢您的回答,现在懂了这个random_crop 的设计含义了,太感谢了。祝您论文多多,学术长青!
没事儿,不用客气,也祝您学业有成,前程似锦!