从鸟瞰图到透视视图:LaneDetection_End2End双损失函数设计策略
【免费下载链接】LaneDetection_End2EndEnd-to-end Lane Detection for Self-Driving Cars (ICCV 2019 Workshop)项目地址: https://gitcode.com/gh_mirrors/la/LaneDetection_End2End
LaneDetection_End2End是一个基于深度学习的端到端车道线检测项目,通过创新的双损失函数设计策略,结合鸟瞰图(Bird's Eye View)和透视视图(Perspective View)两种视角的优势,实现了高精度的车道线检测。该项目源自ICCV 2019 Workshop论文《End-to-end Lane Detection through Differentiable Least-Squares Fitting》,旨在解决自动驾驶场景中车道线检测的准确性和鲁棒性问题。
核心功能:双损失函数架构解析 🚗💨
项目创新性地提出了两种互补的损失函数设计,分别针对不同的视觉空间进行优化:
1. 鸟瞰图损失(Bird's Eye View Loss)
鸟瞰图损失通过将图像转换为俯视图视角,将车道线检测问题转化为平面坐标回归任务。在Birds_Eye_View_Loss/Loss_crit.py中实现了基于区域损失(area_loss)和单应性均方误差(homography_mse)的计算方式,代码中通过参数--loss_policy可选择不同的损失计算策略:
parser.add_argument('--loss_policy', type=str, default='area', help='use area_loss, homography_mse or classical mse in birds eye view')这种损失函数能够有效处理车道线的全局几何关系,特别适合长距离车道线的拟合。
2. 反投影损失(Backprojection Loss)
反投影损失则直接在原始透视视图中优化车道线坐标,通过将鸟瞰图空间的预测结果反投影回原始图像空间,计算与真实标注的差异。在Backprojection_Loss/main.py中,损失计算直接针对透视视图中的车道线坐标:
loss_left, x_cal0 = criterion(beta0, gt0, valid_points[:, 0]) loss_right, x_cal1 = criterion(beta1, gt1, valid_points[:, 1]) loss = (loss_left + loss_right) / args.nclasses这种损失函数更关注车道线在图像平面上的局部细节,提高近距离检测精度。
技术架构:端到端可微分设计 🔄
项目采用基于ERFNet的编码器-解码器架构,在网络末端引入可微分最小二乘拟合层,实现从特征提取到车道线参数回归的端到端学习。关键技术模块包括:
1. 网络结构
- 特征提取:使用ERFNet作为基础网络,在Networks/ERFNet.py中实现
- 权重映射:生成用于最小二乘拟合的权重图,在Networks/LSQ_layer.py中实现
- 曲线拟合:通过可微分最小二乘层直接回归车道线多项式参数,在Networks/Least_squares_net.py中实现
2. 数据处理
项目使用TuSimple数据集进行训练和评估,标签数据存储在Labels/目录下,包含车道线坐标和曲线参数:
- 原始标注:如label_data_0601.json存储图像空间车道线坐标
- 曲线参数:如Curve_parameters.json存储鸟瞰图空间多项式系数
快速上手:安装与运行指南 🚀
环境要求
- Python 3.7+
- PyTorch 1.1+
- 其他依赖:opencv, scikit-learn, torchvision, numpy, matplotlib
数据集准备
- 下载TuSimple数据集子集:Google Drive链接
- 完整数据集可从TuSimple官方仓库获取
训练命令
# 鸟瞰图损失训练 python Birds_Eye_View_Loss/main.py --image_dir /path/to/images --gt_dir /path/to/ground_truth --end_to_end True # 反投影损失训练 python Backprojection_Loss/main.py --image_dir /path/to/images --gt_dir /path/to/ground_truth --end_to_end True关键参数
--end_to_end:设为True启用端到端模式--loss_policy:选择损失计算策略(area/homography_mse/mse)--weight_fit:拟合损失权重--weight_class:分类分支权重
性能对比:双损失策略优势 📊
在TuSimple数据集上的实验结果表明,双损失函数设计显著优于传统分割方法:
| 方法 | 模型 | 区域指标 | 区域平方损失 |
|---|---|---|---|
| 传统分割 | ERFNet | 1.603e-3(归一化) | 2.733e-5(归一化) |
| 端到端(反投影损失) | ERFNet | 1.437e-3(归一化) | 1.912e-5(归一化) |
| 性能提升 | ERFNet | 0.06 m² | 8.21e-6(归一化) |
注:区域指标提升基于美国标准车道宽度3.7米计算
高级应用:多车道检测与优化策略 🛠️
多车道检测
项目支持多车道检测,通过Networks/utils.py中的绘图函数可可视化多条车道线:
im, lane0 = draw_fitted_line(im, beta0[0], resize, (255, 0, 0)) # 左车道 im, lane1 = draw_fitted_line(im, beta1[0], resize, (0, 0, 255)) # 右车道 if left_lane: im, lane2 = draw_fitted_line(im, beta2[0], resize, (255, 255, 0)) # 左辅助车道 if right_lane: im, lane3 = draw_fitted_line(im, beta3[0], resize, (255, 128, 0)) # 右辅助车道优化建议
- 联合损失:结合交叉熵分割损失作为辅助任务,在main.py中设置
--weight_seg参数 - 持续学习:先训练主车道,逐步添加辅助车道,提高收敛稳定性
- 预训练:使用少量分割标签进行预训练,尤其适合多车道检测场景
- 矩阵微调:微调鸟瞰图变换矩阵,可将准确率提升至95.8%
总结与展望 🌟
LaneDetection_End2End通过创新的双损失函数设计,成功将车道线检测从传统的分割任务转变为端到端的参数回归任务。鸟瞰图损失和反投影损失的结合,兼顾了全局几何关系和局部细节精度,为自动驾驶场景提供了更可靠的车道线检测方案。
未来工作可探索将该方法扩展到更复杂的道路场景,并与目标检测等任务融合,进一步提升自动驾驶系统的环境感知能力。
引用信息
如果您在研究中使用了本项目,请引用以下论文:
@article{wvangansbeke_2019, title={End-to-end Lane Detection through Differentiable Least-Squares Fitting}, author={Van Gansbeke, Wouter and De Brabandere, Bert and Neven, Davy and Proesmans, Marc and Van Gool, Luc}, journal={arXiv preprint arXiv:1902.00293}, year={2019} }许可证
本项目采用CC BY-NC 4.0许可证,允许个人和研究使用,商业用途需联系作者。详情参见LICENSE.txt。
【免费下载链接】LaneDetection_End2EndEnd-to-end Lane Detection for Self-Driving Cars (ICCV 2019 Workshop)项目地址: https://gitcode.com/gh_mirrors/la/LaneDetection_End2End
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考