【车道线检测项目实战】代码视频笔记

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文件,运行结果会生成一个视频文件

 

 

posted @   从前慢y  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示