前言

准备在欧卡2实现无人驾驶,第一步使用paddlepaddle框架的paddleseg模块对车道线语义分割。

语义分割数据集

本文采用的数据集是tusimple数据集,图森车道线检测数据集。
下载地址:传送门
对数据集做了一些简单的处理,记录原始图像和带标签图像的文件路径关系。
数据集样例:



paddleseg

这是百度深度学习框架推出的语义分割模块,集成了很多大佬写好的模型,只需要直接配置就可以使用这些模块了,对于新手上手比较友好。
paddleseg项目地址:国产深度学习框架,点个star支持一下,github的star在框架的推广上有很直观的反应,所以支持国产从我做起!!!
我这里选择的模型是deeplabv3p + mobilenetv2,选择mobilenet的主要原因是最后生成的__params__文件较小大概7M左右,适合在移动端上部署。
mobilenet的模型文件:

配置文件

EVAL_CROP_SIZE: (512, 256) # (width, height), for unpadding rangescaling and stepscaling
TRAIN_CROP_SIZE: (512, 256) # (width, height), for unpadding rangescaling and stepscaling
AUG:AUG_METHOD: "stepscaling" # choice unpadding rangescaling and stepscalingFIX_RESIZE_SIZE: (512, 256) # (width, height), for unpaddingINF_RESIZE_VALUE: 500  # for rangescalingMAX_RESIZE_VALUE: 600  # for rangescalingMIN_RESIZE_VALUE: 400  # for rangescalingMAX_SCALE_FACTOR: 2.0  # for stepscalingMIN_SCALE_FACTOR: 0.5  # for stepscalingSCALE_STEP_SIZE: 0.25  # for stepscalingMIRROR: FalseBATCH_SIZE: 16
DATASET:DATA_DIR: "./dataset/tusimple_lane_detection/"IMAGE_TYPE: "rgb"  # choice rgb or rgbaNUM_CLASSES: 19TEST_FILE_LIST: "dataset/tusimple_lane_detection/training/list.txt"TRAIN_FILE_LIST: "dataset/tusimple_lane_detection/training/train1.txt"VAL_FILE_LIST: "dataset/tusimple_lane_detection/training/val_part1.txt"IGNORE_INDEX: 255SEPARATOR: " "
FREEZE:MODEL_FILENAME: "__model__"PARAMS_FILENAME: "__params__"
MODEL:DEFAULT_NORM_TYPE: "bn"MODEL_NAME: "deeplabv3p"DEEPLAB:BACKBONE: "mobilenetv2"ASPP_WITH_SEP_CONV: TrueDECODER_USE_SEP_CONV: TrueENCODER_WITH_ASPP: FalseENABLE_DECODER: False
TRAIN:PRETRAINED_MODEL_DIR: u"pretrained_model/mobilenet_cityscapes"MODEL_SAVE_DIR: "saved_model/deeplabv3p_mobilenetv2_cityscapes"SNAPSHOT_EPOCH: 10SYNC_BATCH_NORM: True
TEST:TEST_MODEL: "saved_model/deeplabv3p_mobilenetv2_cityscapes/final"
SOLVER:LR: 0.005LR_POLICY: "poly"OPTIMIZER: "sgd"NUM_EPOCHS: 100

== EVAL_CROP_SIZE: (512, 256)==
注意这个参数,这个大小对推理过程影响很大,尺寸过大推理速度慢,尺寸过小识别的车道线会变形。数据增强应该加上模糊化,颜色光纤干扰等,但是我加上了之后训练实在太慢了,100轮要训练个两天两夜的样子…所以之后电脑有空再训练一个。

训练效果



因为数据集是图森科技采集的汽车行驶记录仪的图片,并不是端到端的数据集,所以有一些车道线的场景识别的效果确实不太好,这里尝试了使用labelme来标注自己的数据,但是实在是太麻烦了并且要很多数据。。。标注数据又十分的无聊且枯燥的,所以还是先将就着,首先把算法完善再考虑这些问题。
关于识别速度:
使用deeplabv3p + mobilenetv2模型,不打开欧卡2游戏,本地部署了paddle1.8.0加gpu,单纯推理图片有0.1s的延迟,evel_size是(512,256),如果尺寸再小点识别速度会相对提高一点,10HZ的频率在低速上也能勉强适用,还是那句话先完善整个框架的算法,后面再做优化。

车道线分割

有了上图识别的车道线,还需要计算出当前车行驶的车道以及左右车道线的位置,这样才能推理出应该给的方向盘速度,这里我想到了两种办法:

  • 第一种是将识别得到的车道线黑白图加上打角的角度标签,然后用深度学习的模型来识别图片给出推理的角度,这种方法应该是可行的,但是这个识别的图像有些场景会出现丢线的情况,不太好处理。
  • 第二种是适用opencv来处理车道线,计算黑白图片的直方图,根据直方图来推理左右车道线的位置,这种方法因为视屏帧是连续的,我们出现丢线可以通过上一帧来做一个推理计算下一帧的车道线位置。

方法一的实现:
未完待续…

方法二的实现:
这里我采用将图像做如下分割:

蓝色的线分割出来的是我想处理的区域,红色的线将预处理区域划分成6块,分别计算六块的直方图,然后推理得到左右车道线的位置,最后做二次多项式拟合计算出左右车道线的公式。
分块直方图(不同颜色表示不同块的像素直方图):

根据此图可以看到,两个尖峰围起来的区域就是当前车道区域!

使用paddle框架无人驾驶 —— 语义分割模型检测车道线相关推荐

  1. 大场景三维点云语义分割模型

    大场景三维点云语义分割模型 基于2D的方法 SqueezeSeg系列 一.简介 二.核心思路总结 三.要点分析 四.总结 VIASEG: VISUAL INFORMATION ASSISTED LIG ...

  2. 人人必须要知道的语义分割模型:DeepLabv3+

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 图像分割是计算机视觉中除了分类和检测外的另一项基本任务,它意 ...

  3. 带你1小时掌握Google图像语义分割模型,更有《深度学习》实体书免费送

    计算机视觉作为人工智能的主流技术领域之一,历经图像分类-->目标定位-->目标检测,最终发展到图像语义分割技术. 如下图所示,从最初的识别图片信息进行单一分类,到单图片中多目标识别分析,而 ...

  4. [转载] python实现语义分割_使用Keras实现深度学习中的一些语义分割模型

    参考链接: Keras中的深度学习-数据预处理 Keras-Sematic-Segmentation 使用Keras实现深度学习中的一些语义分割模型. 配置 tensorflow 1.13.1+ten ...

  5. 基于U-Net+残差网络的语义分割缺陷检测

    一.介绍 基于深度学习的缺陷检测主要集中在场景识别.object detection等方法,近年来,推出了一系列优秀的语义分割模型,比如SegNet.FCN.U-Net等.语义分割模型被广泛的应用到场 ...

  6. 语义分割模型中分辨率恢复_语义模型在智慧工业运营中的作用

    语义分割模型中分辨率恢复 在围绕智慧地球解决方案的讨论中,我们经常描述三个关键要素. 有时会标记为三个" i",分别是"仪表","智能"和& ...

  7. 地标建筑物识别——Task3 语义分割模型发展

    前言:该部分我们学习语义分割网络模型的发展:FCN .SegNet.Unet.DeepLab.RefineNet.PSPNet.GAN 语义分割.语义分割(全像素语义分割)作为经典的计算机视觉任务(图 ...

  8. 深度学习遥感图像语义分割目标检测

    深度学习遥感图像语义分割&目标检测 代码见github: WangZhenqing-RS/2021Tianchi_RSgithub.com 图标 赛题描述 本赛题基于不同地形地貌的高分辨率遥感 ...

  9. 图像语义分割模型综述

    文章目录 一.语义分割介绍 二.语义分割的思路 空洞卷积 条件随机场 三.经典语义分割算法介绍 1.FCN 2.UNet Family (1)UNet (2)Attention U-Net (3)UN ...

最新文章

  1. python盘点订单_django解决订单并发问题【推荐】
  2. 【STM32 .NET MF开发板学习-29】摄像头蓝牙图像远程获取
  3. neoterm如何安装python_NeoTerm下载-NeoTerm(安卓终端)下载v2.1.0-be8d6cf 安卓版-西西软件下载...
  4. 查找xml文件中某接点的值
  5. FindFirstVolume系列函数遍历驱动器,获取驱动器信息
  6. 为什么需要Survivor区?只有Eden不行吗?
  7. 【读书笔记0102】Beginning linux programming-3rd
  8. ArcEngine二次开发_03(鼠标在图层中选择要素进行高亮显示)
  9. python md5加密
  10. Android P功能
  11. scala 类的多态_Scala多态方法和显式引用
  12. 服务器ipsan虚拟化,挂载IPSAN存储+链接克隆模板(修正版)
  13. Android Binder -- AIDL 原理
  14. sprintf左右对齐
  15. 深度学习基础知识题库大全
  16. 关于华为鸿蒙创新的作文,关于创新的高中作文4篇
  17. Eclipse中各种编码格式及设置
  18. 笔记本计算机回收站在哪里,笔记本电脑如何设置回收站自动清空
  19. numpy创建伪单位矩阵
  20. 牛客网数据库SQL实战60—— 统计salary的累计和running_total

热门文章

  1. 【健康】比吸烟还可怕的九大偏好!看到第一个就吓傻了!
  2. 使用计算机频繁使用的算法,基于DHP的频繁遍历路径挖掘算法-天津大学计算机学院.PDF...
  3. 【C语言学习记录】指针==地址
  4. JS parseInt的用法
  5. debug版没有问题而release版本崩溃的解决方法探究
  6. 进阶之路:从零到一在k8s上部署高可用prometheus —— thanos receive、thanos query
  7. 10万字最新Java热门面试题及答案总结
  8. 空值判断,双表关联数据统计查询
  9. 2023华东杯数学建模A题B题C题思路模型代码
  10. 安卓vncviewer中文版,安卓vncviewer中文版的6个操作流程