在做关于“基于改进 Vision Transformer (ViT) 的遥感图像小目标检测”的论文。目前在训练过程中遇到了两个非常打击自信的问题,卡了快半个月了,想请教大家:模型不收敛:我参考了最新的某篇 CVPR 论文,将 Backbone 换成了 Swin Transformer,但在训练前 50 个 Epoch 中,Loss 曲线一直呈现剧烈的锯齿状波动,完全没有下降趋势。我尝试了将学习率(LR)从 1e-4 调到 1e-6,并使用了 CosineAnnealing 策略,但依旧无效。
显存溢出(OOM):为了捕获长程依赖,我设置的 Patch Size 比较小,但在使用单张 RTX 4090 (24GB) 训练时,Batch Size 只能开到 2。如果 Batch Size 太小,BN(Batch Norm)层的统计量极其不稳定。
评价指标异常:在验证集上,[email protected] 只有 0.15 左右,而文献里说能达到 0.42。我已经检查过数据增强(Augmentation)代码,基本排除了 Label 读取错误的可能性。
环境说明:PyTorch 2.1, CUDA 12.1, 单卡 4090。
针对遥感小目标,你的 Anchor Size 设对了吗? 遥感图像里的物体(如车辆、船只)通常只有几个像素点,如果你的初始锚框设得太大,IOU 永远达不到阈值,模型根本学不到东西。 建议:先算一下数据集的平均物体尺寸,重新做一次 K-means 聚类 得到适合的 Anchor。论文里如果能加上这一步的消融实验(Ablation Study),工作量会显得很扎实。
Transformer 类模型对预训练权重(Pre-trained Weights)极其依赖。 建议:
你是不是从随机初始化开始练的?如果是,小样本数据集根本带不动 Transformer。建议先载入 ImageNet-21K 的预训练参数再 Fine-tune。
另外,Transformer 结构通常用 LayerNorm (LN) 而不是 BN。如果你自己强行加了 BN 且 Batch Size 只有 2,那肯定崩。建议换成 GroupNorm 试试。