基于CondLaneNet论文和全卷积分割头的车道线head设计
参考
CondLaneNet: a Top-to-down Lane Detection Framework Based on Conditional Convolution
Paper:https://arxiv.org/pdf/2105.05003.pdf
code:GitHub - aliyun/conditional-lane-detection
LaneATT
Ultra-Fast-Lane-Detection
车道线Head设计
1. 双头架构概览
Head类型 | 功能描述 | 输出通道计算式 |
---|---|---|
condlane_head | 生成条件车道预测(起点热图/场偏移/长度掩码) | num_classes × (aux_mask_group + 1) |
seg_head | 生成分割掩码及属性预测 | num_classes + mask_property_group |
2. condlane_head 详细设计
核心功能
- 输出语义:
# 示例:num_classes=2, aux_mask_group=4 [通道0-1] 主热图(车道/路边存在性) [通道2-5] 车道线属性(dx, dy, 长度, 方向) [通道6-9] 路边属性(dx, dy, 长度, 方向)
网络结构
nn.Sequential(
*[ConvBlock(inplanes, inplanes*expand) for _ in range(num_conv)], # 特征提取
nn.Conv2d(mid_c, num_classes*(aux_mask_group+1), kernel_size=3) # 多任务输出
)
3. seg_head 详细设计
数据流维度
阶段 | 张量形状 | 说明 |
---|---|---|
输入 | (B, inp_c, H, W) | 主干网络特征图 |
中间层 | (B, mid_c, H, W) | 保持空间分辨率(stride=1) |
最终输出 | (B, C_out, H, W) | C_out = num_classes + mask_property_group |
属性分组逻辑
# 假设categories定义
categories = {
'group': ['color', 'direction'],
'attr': {
'color': ['red', 'green', 'blue'], # 3类
'direction': ['left', 'straight'] # 2类
}
}
# 计算属性通道数
mask_property_group = sum(len(categories['attr'][k]) for k in categories['group']) # 5
4. 损失函数设计
4.1 车道线核心损失
损失类型 | 算法公式 | 应用场景 |
---|---|---|
Focal BCE | FL(p_t) = -α(1-p_t)^γ log(p_t) | 热图分类(处理不平衡) |
IoU Loss | 1 - ( A ∩ B + ε ) / ( A ∪ B + ε ) | 掩码空间重叠度优化 |
Relay Chain Loss | Σ‖v_k/‖v_k‖ - v_k_gt/‖v_k_gt‖‖ | 车道点序列连续性约束 |
PE Loss | (1/n)Σ‖p_k - p_k_gt‖_1 | 关键点坐标绝对误差 |
4.2 属性损失配置
# 多属性损失加权示例
loss_weights = {
'color': 1.0, # 颜色分类(Focal Loss)
'type': 0.5, # 类型分类(CrossEntropy)
'angle': 0.2 # 角度回归(Smooth L1)
}
5. 关键实现技巧
-
动态通道分配
# condlane_head输出拆分 main_heatmap = output[:, :num_classes] # 主任务 attr_features = output[:, num_classes:] # 辅助任务
-
链式损失计算优化
采用向量化计算相邻点差分:pred_vectors = pred_points[..., 1:, :] - pred_points[..., :-1, :] # [B,N-1,2]
-
工业级参数建议
- Focal Loss:
α=0.25, γ=2
- Relay Chain: 方向损失权重设为长度损失的1.5倍
- Focal Loss: