depth_reg
keypoint_reg 1
keypoint_reg 2
dim_ori_reg 1
dim_ori_reg 2
dim_ori_reg 3
dim_ori_reg 4
dim_ori_reg 5
center2d_wh_reg 0
center2d_wh_reg 1
center2d_wh_reg 2
center2d_wh_reg 3
batch_size = 4 epoch=10 learning_rate = 2E-4
pos_loss
neg_loss
测试结果 000001
训练模型 head_class = sigmoid_hm(head_class) 结果可视化
标准模型 head_class 结果可视化
标准模型损失值
pos_loss
neg_loss
加载方式验证
以model加载
成功
以state_dict进行加载
深度线索训练记录
同样,仿照训练分类头网络的模式,在深度提示层后面添加了droupout层,具体结构如下:
self.depth_hint_extractor1 = nn.Sequential(
nn.Conv2d(40, 1, kernel_size=1, padding=0),
# nn.BatchNorm2d(1),
nn.Dropout(p=0.5) # 添加Dropout层
)
self.depth_hint_extractor2 = nn.Sequential(
nn.Conv2d(512, 1, kernel_size=1, padding=0),
# nn.BatchNorm2d(1),
nn.Dropout(p=0.5) # 添加Dropout层
)
由于网络结构比较简单,因此加入BN层,从中获益并不大,所以将BN层暂时注释,损失函数使用L1 均值模式,损失值一般设为正值,因此将原文中的负号去除
def depth_hint_cat_loss(pre,target,labels):
loss = 0
mask = (target != 0).float()
pre = pre.squeeze()
total_elements = sum(len(lst) for lst in labels)
if total_elements == 0:
total_elements =1
# 创建L1损失函数对象
criterion = nn.L1Loss(reduction='mean') # 注意,这里使用'sum'来得到L1损失的总和而不是平均值
# loss = criterion(pre*mask,target)*(-1/total_elements)
loss = criterion(pre*mask,target)
return loss
训练模型测试输出 (000134.jpg)
高-模型测试输出
标签值
Car 0 0 -1.5456000566482544 559.1829833984375 167.62930297851562 634.0765991210938 241.33389282226562 1.6730999946594238 1.6598000526428223 3.440200090408325 -0.2768000066280365 1.5640000104904175 18.71310043334961 -1.5604000091552734 0.5386999845504761
根据标签值我们可以得出目标所在位置的深度值为18.71310043334961 原图尺寸为1242 x 375 目标中心点y坐标为204.4815/3.90625 == 52
因此我们比较两个图中第52行的数据,可以发现这两个模型的预测值都有偏差,但从结果看,我们的偏差要更小,由于深度线索模块只是提供线索提示,属于距离估计值,因此还需要结合后续模块一起进行数据评估
二维回归头训练
训练参数
batch_size: 16 learing_rate: 2E-4 epoch:20 训练照片:2000张 不衰减
测试scores得分如下:
tensor([[0.3035, 0.1699, 0.0945, 0.0885, 0.0829, 0.0826, 0.0814, 0.0672, 0.0569,
0.0549, 0.0548, 0.0509, 0.0480, 0.0477, 0.0456, 0.0455, 0.0451, 0.0434,
0.0433, 0.0433, 0.0432, 0.0410, 0.0403, 0.0400, 0.0394, 0.0389, 0.0381,
0.0368, 0.0368, 0.0364, 0.0361, 0.0355, 0.0354, 0.0353, 0.0353, 0.0350,
0.0349, 0.0348, 0.0346, 0.0346, 0.0345, 0.0343, 0.0342, 0.0341, 0.0339,
0.0336, 0.0334, 0.0332, 0.0328, 0.0326]], device='cuda:0')
从图上也可以看出,目标中有三辆车和一个自行车,最终只标记出了得分最高的一个车,这有两方面的原因所导致的,其一是由于训练迭代次数少,该模型以16 batch_size 不衰减迭代8次,部分场景中目标预测得偏低;其二是设置的目标阈值较高,本次测试阈值为0.25,因此只有一个目标被过滤