目录
- batch_size的影响
- 辅助损失的作用
- 学习率的影响
- Decoder层数增多的影响
- 3D检测中, feats位置编码和query位置编码是否共享mpl层
- 背景-关于query的生成方式
- 利用widthformer类似的方式简化注意力机制
batch_size的影响
batch=8:
batch=20:
由实验结果可知:这里实验有问题,横坐标不统一,不能直接比较…大致可以看出batch_size越大,loss下降略快,而且越平滑.注意理论上不能太大.
辅助损失的作用
transformer类模型,当层数很多的时候,收敛很慢,容易发散.辅助损失帮助模型在训练过程中更好地收敛,特别是在训练的早期阶段。还可以稳定训练过程,减少震荡和过拟合的风险。
下面进行对比验证:
batch=8;layer_num=6;aux_loss=true
batch=8;layer_num=6;aux_loss=false
由实验结果可知:辅助损失确实可以减少震荡和抑制过拟合,如果没有辅助损失甚至都不能收敛(可能layer太深,梯度传不回去了).
学习率的影响
在实验中发现loss先下降后上升.最后发现把学习率从0,001改成0,0002就好了.猜测是初始学习率0.001可能过大,导致模型在训练过程中的参数更新步长过大,容易跳过最优解.
2024-04-07 18:21:18,692 - mmdet - INFO - Epoch [20][1000/1069] lr: 2.000e-04, eta: 2 days, 7:04:24, time: 0.685, data_time: 0.009, memory: 28667, loss_cls: 0.2155, loss_bbox: 0.4342, d0.loss_cls: 0.3011, d0.loss_bbox: 0.4841, d1.loss_cls: 0.2889, d1.loss_bbox: 0.4726, d2.loss_cls: 0.2352, d2.loss_bbox: 0.4572, d3.loss_cls: 0.2356, d3.loss_bbox: 0.4515, d4.loss_cls: 0.2154, d4.loss_bbox: 0.4376, loss: 4.2288, grad_norm: 197.8638
2024-04-07 18:23:51,636 - mmdet - INFO - Epoch [21][100/1069] lr: 2.000e-05, eta: 2 days, 6:53:49, time: 0.744, data_time: 0.061, memory: 28667, loss_cls: 0.1997, loss_bbox: 0.3806, d0.loss_cls: 0.2881, d0.loss_bbox: 0.4400, d1.loss_cls: 0.2770, d1.loss_bbox: 0.4156, d2.loss_cls: 0.2205, d2.loss_bbox: 0.4054, d3.loss_cls: 0.2189, d3.loss_bbox: 0.3969, d4.loss_cls: 0.2009, d4.loss_bbox: 0.3860, loss: 3.8298, grad_norm: 100.7063
由实验结果可知:学习率对loss的影响巨大,图中的loss骤降就是学习率减少导致的.
Decoder层数增多的影响
曾经在vit下做个类似实验,参考
在实验中发现层数过多时,loss下不去,后来降低学习率后解决了.在低学习率0.0002下实验对比以下:
layer_num=2:
layer_num=6:
由实验结果可知:区别不大,猜测有可能在稳态式区别大一点,或者数据集太少(8k)下.
3D检测中, feats位置编码和query位置编码是否共享mpl层
背景-关于query的生成方式
DETR中是预设的query_pos shape为(n,embed_dim), 而query=zeros.shape为(n,embed_dim)
DETR3d和deformable_DETR中,query_pos(query_embed):预设的shape为(n,embed_dim),query:预设的shape为(n,embed_dim),reference_point:利用query_pos线性映射为shape(n,3)
而PETR类中是reference_point:预设的shape为(n,3)
query_pos(query_embed):利用reference_point线性映射为shape(n,embed_dim)
query:zeros shape为(n,embed_dim)
我们利用PETR的方式:
feats侧(下面统称kv侧),利用归一化bev位置信息经过正余弦编码和mpl层生成key_pos;
query侧(下面统称q侧),利用预定义的目标位置(0-1归一化)信息经过正余弦编码和mpl层生成key_pos;
如果feats和query在同一尺度的bev空间坐标系下的,那么可以共享mpl层进行前向传播,而且反向传播时可以对reference_point的位置信息进行对齐,使得refernce_point在目标位置处集中.下面开始验证:
共享位置编码mpl层:
不共享位置编码mpl层
由实验结果可知:不共享反而效果更好™,有点不能理解,后续多模态的时候继续这块实验吧