【车道线检测项目实战】代码视频笔记
1-车道数据与标签解读
1.1 数据集链接
原项目共使用两个数据集
这里出于学习便捷考虑,只使用CULane的部分数据集进行训练
数据集目录
1.2 list目录
其中list目录下都是文件的路径
1.3 frame目录
frame目录下都是视频的节帧
1.4 lable目录
lable目录下都是车道线的信息,肉眼看不出来,但是代码中可以读出车道线信息数据;
2-项目环境配置演示
2.1 项目配置
由于本项目只使用CULAne数据集,因此只需配置culane.py的内容即可
2.2 项目路径配置
这里使用相对路径
2.3 超参数
神经网络网格数量
日志目录
2.4 指定命令行参数
下方配置命令复制到运行参数中即可
3-制作数据集dataloader
3.1 目标文件
3.2 读取数据列表
3.3 代码解读
4-车道线标签数据处理
4.1 标签数据预处理
把图像剪成18行
4.2 构建矩阵
构建4*18*2的矩阵
- 4是车道线的数量
PS:注意索引r是先验给定的,根据数据集提前设定好可能存在车道的位置;
5-四条车道线标签位置矩阵
5.1 矩阵解析
- 4表示共有4组矩阵
- 每组矩阵中有18个元素
- 每个元素中有2个值
5.2 标签取值
- -1表示当前行没有找到车道线
- 其他有效值表示找到车道线位置
- 遍历每一行,找当前行是否存在车道线
最后遍历一轮的结果如下
6-grid设置方法
6.1 数据增强
在判断该标签存在车道线后,进行数据增强——车道线延申
即判断完成后,对有效线做延申
类似线性回归的拟合操作,点之间可能有细微误差,可能不是笔直的一条线;
6.2 grid设置
由论文可知,分类的效果远好于回归,因此进行分类操作
而想要得到如下网格值,以此来进行模型预测
需要在已有标签中选择200个格子
7-完成数据与标签制作
7.1 标签制作
把实际坐标点映射到200个格子当中;
判断200个格子中哪个是车道线的真实位置;
矩阵中,数值为200代表不是车道线,其它有效值代表车道线位置;
即代表每行在当前车道线的所处位置
该函数的作用是:把原始(实际)位置的标签,映射到200个格子中,看200个格子中哪些是目标车道线位置;
7.2 分割模块
分割任务主要作为辅助,在训练阶段额外加分支进行分割训练,优化训练结果
8-算法网络结构解读
8.1 目录解读
backbone.py文件主要用于构建一个18层的resnet网络作为主干网络;
model.py主要定义网络结构
8.2 分割模块
输入数据
把不同的特征图拼到一起,做卷积和分割
分割模块作为辅助,主要用于更好的提取特征,不会影响最终结果;
分割模块的输出结果如下
8.3 分类预测模块
输出结果分析
- 201——200个位置+1个不存在车道线
- 18——18行
- 4——4条车道线
主干是分类任务,而非回归,因此输出结果需要多加一个201的概率输出,表示占201个可能的哪一个;
分类预测的输出结果如下
9-损失函数计算模块分析
9.1 SoftmaxFocalLoss损失函数
损失函数目录
把预测值做归一化,使其取值在0-1之间
9.2 代码解读
10-车道线规则损失函数限制
10.1 限制车道线概率的损失函数
相邻行之间的车道线应该是比较接近的;
第i行和第i+1行进行比较
其中smoothloss是L1Loss和L2Loss结合的一种计算方法;
10.2 限制车道线位置的损失函数
由于本网络反向传播难以实现,因此论文中通过k*概率p,即间接求期望来求实际预测的位置
然后用L1Loss计算损失
10.3 计算总损失
根据损失的权重,累加在一起计算总损失;
其他操作
11-DEMO制作与配置
11.1 参数配置
11.2 选择测试数据
测试数据为视频中每30帧截取的一张图片
运行demo.py文件,运行结果会生成一个视频文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构