计算机设计大赛 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录

  • 0 前言
  • 1 课题背景
  • 2 实现效果
  • 3 卷积神经网络
    • 3.1卷积层
    • 3.2 池化层
    • 3.3 激活函数:
    • 3.4 全连接层
    • 3.5 使用tensorflow中keras模块实现卷积神经网络
  • 4 YOLOV5
  • 6 数据集处理
  • 7 模型训练
  • 8 最后

0 前言

🔥 优质竞赛项目系列,今天要分享的是

🚩 **基于深度学习的自动驾驶车道线检测算法研究与实现 **

该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:4分
  • 创新点:4分

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

1 课题背景

从汽车的诞生到现在为止已经有一百多年的历史了,随着车辆的增多,交通事故频繁发生,成为社会发展的隐患,人们的生命安全受到了严重威胁。多起事故发生原因中,都有一个共同点,那就是因为视觉问题使驾驶员在行车时获取不准确的信息导致交通事故的发生。为了解决这个问题,高级驾驶辅助系统(ADAS)应运而生,其中车道线检测就是ADAS中相当重要的一个环节。利用机器视觉来检测车道线相当于给汽车安装上了一双“眼睛”,从而代替人眼来获取车道线信息,在一定程度上可以减少发生交通事故的概率。
本项目基于yolov5实现图像车道线检测。

2 实现效果

在这里插入图片描述

3 卷积神经网络

受到人类大脑神经突触结构相互连接的模式启发,神经网络作为人工智能领域的重要组成部分,通过分布式的方法处理信息,可以解决复杂的非线性问题,从构造方面来看,主要包括输入层、隐藏层、输出层三大组成结构。每一个节点被称为一个神经元,存在着对应的权重参数,部分神经元存在偏置,当输入数据x进入后,对于经过的神经元都会进行类似于:y=w*x+b的线性函数的计算,其中w为该位置神经元的权值,b则为偏置函数。通过每一层神经元的逻辑运算,将结果输入至最后一层的激活函数,最后得到输出output。
在这里插入图片描述

3.1卷积层

卷积核相当于一个滑动窗口,示意图中3x3大小的卷积核依次划过6x6大小的输入数据中的对应区域,并与卷积核滑过区域做矩阵点乘,将所得结果依次填入对应位置即可得到右侧4x4尺寸的卷积特征图,例如划到右上角3x3所圈区域时,将进行0x0+1x1+2x1+1x1+0x0+1x1+1x0+2x0x1x1=6的计算操作,并将得到的数值填充到卷积特征的右上角。
在这里插入图片描述

3.2 池化层

池化操作又称为降采样,提取网络主要特征可以在达到空间不变性的效果同时,有效地减少网络参数,因而简化网络计算复杂度,防止过拟合现象的出现。在实际操作中经常使用最大池化或平均池化两种方式,如下图所示。虽然池化操作可以有效的降低参数数量,但过度池化也会导致一些图片细节的丢失,因此在搭建网络时要根据实际情况来调整池化操作。
在这里插入图片描述

3.3 激活函数:

激活函数大致分为两种,在卷积神经网络的发展前期,使用较为传统的饱和激活函数,主要包括sigmoid函数、tanh函数等;随着神经网络的发展,研宄者们发现了饱和激活函数的弱点,并针对其存在的潜在问题,研宄了非饱和激活函数,其主要含有ReLU函数及其函数变体

3.4 全连接层

在整个网络结构中起到“分类器”的作用,经过前面卷积层、池化层、激活函数层之后,网络己经对输入图片的原始数据进行特征提取,并将其映射到隐藏特征空间,全连接层将负责将学习到的特征从隐藏特征空间映射到样本标记空间,一般包括提取到的特征在图片上的位置信息以及特征所属类别概率等。将隐藏特征空间的信息具象化,也是图像处理当中的重要一环。

3.5 使用tensorflow中keras模块实现卷积神经网络

class CNN(tf.keras.Model):
    def __init__(self):
        super().__init__()
        self.conv1 = tf.keras.layers.Conv2D(
            filters=32,             # 卷积层神经元(卷积核)数目
            kernel_size=[5, 5],     # 感受野大小
            padding='same',         # padding策略(vaild 或 same)
            activation=tf.nn.relu   # 激活函数
        )
        self.pool1 = tf.keras.layers.MaxPool2D(pool_size=[2, 2], strides=2)
        self.conv2 = tf.keras.layers.Conv2D(
            filters=64,
            kernel_size=[5, 5],
            padding='same',
            activation=tf.nn.relu
        )
        self.pool2 = tf.keras.layers.MaxPool2D(pool_size=[2, 2], strides=2)
        self.flatten = tf.keras.layers.Reshape(target_shape=(7 * 7 * 64,))
        self.dense1 = tf.keras.layers.Dense(units=1024, activation=tf.nn.relu)
        self.dense2 = tf.keras.layers.Dense(units=10)

    def call(self, inputs):
        x = self.conv1(inputs)                  # [batch_size, 28, 28, 32]
        x = self.pool1(x)                       # [batch_size, 14, 14, 32]
        x = self.conv2(x)                       # [batch_size, 14, 14, 64]
        x = self.pool2(x)                       # [batch_size, 7, 7, 64]
        x = self.flatten(x)                     # [batch_size, 7 * 7 * 64]
        x = self.dense1(x)                      # [batch_size, 1024]
        x = self.dense2(x)                      # [batch_size, 10]
        output = tf.nn.softmax(x)
        return output

4 YOLOV5

简介
基于卷积神经网络(convolutional neural network, CNN)的目标检测模型研究可按检测阶段分为两类,一 类 是 基 于 候 选 框
的 两 阶 段 检 测 , R-CNN 、 Fast R-CNN、Faster R-CNN、Mask R-CNN都是基于
目标候选框的两阶段检测方法;另一类是基于免候选框的单阶段检测,SSD、YOLO系列都是典型的基于回归思想的单阶段检测方法。

YOLOv5 目标检测模型 2020年由Ultralytics发布的YOLOv5在网络轻量化 上贡献明显,检测速度更快也更加易于部署。与之前
版本不同,YOLOv5 实现了网络架构的系列化,分别 是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、
YOLOv5x。这5种模型的结构相似,通过改变宽度倍 数(Depth multiple)来改变卷积过程中卷积核的数量, 通 过 改 变 深 度 倍 数
(Width multiple) 来 改 变 BottleneckC3(带3个CBS模块的BottleneckCSP结构)中
C3的数量,从而实现不同网络深度和不同网络宽度之 间的组合,达到精度与效率的平衡。YOLOv5各版本性能如图所示:

在这里插入图片描述

模型结构图如下:

在这里插入图片描述

YOLOv5s 模型算法流程和原理

YOLOv5s模型主要算法工作流程原理:

(1) 原始图像输入部分加入了图像填充、自适应 锚框计算、Mosaic数据增强来对数据进行处理增加了 检测的辨识度和准确度。

(2) 主干网络中采用Focus结构和CSP1_X (X个残差结构) 结构进行特征提取。在特征生成部分, 使用基于SPP优化后的SPPF结构来完成。

(3) 颈部层应用路径聚合网络和CSP2_X进行特征融合。

(4) 使用GIOU_Loss作为损失函数。

关键代码:

6 数据集处理

获取摔倒数据集准备训练,如果没有准备好的数据集,可自己标注,但过程会相对繁琐

深度学习图像标注软件众多,按照不同分类标准有多中类型,本文使用LabelImg单机标注软件进行标注。LabelImg是基于角点的标注方式产生边界框,对图片进行标注得到xml格式的标注文件,由于边界框对检测精度的影响较大因此采用手动标注,并没有使用自动标注软件。

考虑到有的朋友时间不足,博主提供了标注好的数据集和训练好的模型,需要请联系。

数据标注简介

通过pip指令即可安装


pip install labelimg

在命令行中输入labelimg即可打开

在这里插入图片描述

打开你所需要进行标注的文件夹,点击红色框区域进行标注格式切换,我们需要yolo格式,因此切换到yolo

点击Create RectBo -> 拖拽鼠标框选目标 -> 给上标签 -> 点击ok

数据保存

点击save,保存txt。

在这里插入图片描述

7 模型训练

配置超参数
主要是配置data文件夹下的yaml中的数据集位置和种类:

在这里插入图片描述

配置模型
这里主要是配置models目录下的模型yaml文件,主要是进去后修改nc这个参数来进行类别的修改。

在这里插入图片描述

目前支持的模型种类如下所示:

在这里插入图片描述
训练过程
在这里插入图片描述

8 最后

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/372510.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++之强制转换

目录 static_cast const_cast 思维导图 类型转换有c风格的,当然还有c风格的。c风格的转换的格式很简单 TYPE a (TYPE)EXPRESSION; 但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在…

【复现】智慧园区综合管理平台文件上传漏洞_40

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 智慧园区管理平台基于GISBIM的云平台数据中心和物联网技术为核心,将各项基础设施连接成一个有机的整体,通…

Vector CANdb++ Editor和CANdb++ Admin的区别

目录 1 CANdb Editor和CANdb Admin的功能偏差 2 CANdb Program窗口 3 下载并安装CANdb Editor和CANdb Admin 3.1 安装CANdb Admin.J1939 3.0 SP27 优质博文推荐阅读(单击下方链接,即可跳转): Vector工具链 CAN Matrix DBC …

[Vue3]父子组件相互传值数据同步

简介 vue3中使用setup语法糖,父子组件之间相互传递数据及数据同步问题 文章目录 简介父传子props传递值 使用v-bind绑定props需要计算toRefcomputed emit传递方法 使用v-on绑定 子传父expose v-model总结 父传子 props传递值 使用v-bind绑定 父组件通过props给子…

代码生成器(新):mybatis-plus-generator使用指南

代码生成器(新)官网 后端代码:点击查看 LearnElementUiAndSpringBoot 提醒:LearnElementUiAndSpringBoot下载完后,在运行调试 Main.java里的main方法之前,除了utils包和Main.java文件,其他包需…

机器学习逻辑回归模型训练与超参数调优 ##3

文章目录 [TOC]基于Kaggle电信用户流失案例数据(可在官网进行下载)逻辑回归模型训练逻辑回归的超参数调优 基于Kaggle电信用户流失案例数据(可在官网进行下载) 数据预处理部分可见: 机器学习数据预处理方法&#xff0…

共享网盘系统PHP源码

新V5.0版本,支持上传视频、支持视频播放、支持共享,也可以自己用。 可以自动生成视频外链,下载地址,播放器代码,html代码,ubb代码等等。 使用方法: 源码上传到服务器,打开网站根据…

【自定义序列化器】⭐️通过继承JsonSerializer和实现WebMvcConfigurer类完成自定义序列化

目录 前言 解决方案 具体实现 一、自定义序列化器 二、两种方式指定作用域 1、注解 JsonSerialize() 2、实现自定义全局配置 WebMvcConfigurer 三、拓展 WebMvcConfigurer接口 章末 前言 小伙伴们大家好,上次做了自定义对象属性拷贝&#x…

LLM之RAG实战(二十三)| LlamaIndex高级检索(二):父文档检索

在上一篇文章中,我们介绍了基本RAG的构建,也探讨了RAG管道中从小到大检索技术的两种主要技术:父文档检索和句子窗口检索。 在本文,我们将深入探讨一下从小到大检索技术中的父文档检索。 一、块引用:较小的子块引用较大…

css浮动

CSS浮动 1. 浮动的简介 在最初,浮动是用来实现文字环绕图片效果的,现在浮动是主流的页面布局方式之一。 2. 元素浮动后的特点 脱离文档流。不管浮动前是什么元素,浮动后:默认宽与高都是被内容撑开(尽可能小&#x…

AI专题:冬渐去、春将来,待看,AI 开花,数据挂果,可控链潮起

今天分享的是AI 系列深度研究报告:《AI专题:冬渐去、春将来,待看,AI 开花,数据挂果,可控链潮起》。 (报告出品方:AVIC) 报告共计:36页 行业概览:2023年呈稳…

哪种安全数据交换系统,可以满足信创环境要求?

安全数据交换系统是一种专门设计用于在不同网络环境之间安全传输数据的技术解决方案。这类系统确保数据在传输过程中的完整性、机密性和可用性,同时遵守相关的数据保护法规和行业标准。 使用安全数据交换系统的原因主要包括以下几点: 1、数据保护&#…

光隔离探头

一、前言。 光隔离探头的CMRR比高压差分探头要高很多,在一些共模电压较高的测量领域用的比较多,如:开关电源、逆变器等。但是市面上介绍光隔离探头的方案比较少,这里简要说明一下我的个人想法。 二、数字光和模拟光。 数字光就是通信上常用的光模块,传的是数字信号,带…

【学网络安全】kali linux入门及常用简单工具介绍(附工具包)

前言 相信很多同学了解到和学习网络安全的时候都听过kali系统,大家都称之为黑客最喜爱的系统,那么什么是kali,初学者用kali能做些什么,我将在本文中做简单的介绍 一、kali linux是什么? Kali Linux 是专门用于渗透测…

linux服务器springboot或tomcat项目启动,进行jvm参数调优设置

简介 在实验环境或生产环境中,往往一台linux服务器需要添加启动n个项目,但是项目启动占用的jvm内存默认值基本上都是很大的,800m到2G都有,这样很容易将服务器的内存吃垮,从而导致系统强制oom(内存泄露&…

(7)医学图像配准综述:SimpleITK + SimpleElastix + Elastix + ITKElastix + PyElastix

文章目录 前言一、常见的图像配准工具1.0、ITK VTK —— 科学界最大与最早的开源免费项目之一1.1、ITK系列:ITK SimpleITK SimpleElastix1.2、Elastix系列:Elastix ITKElastix PyElastix 二、图像配准2.1、SimpleITK图像配准2.2、SimpleElastix图像…

ROS从入门到精通4-1:Docker安装与常用命令总结

目录 0 专栏介绍1 Docker与机器人应用2 Docker安装步骤3 Docker常用命令3.1 创建与启动容器3.2 暂停与删除容器3.3 容器文件拷贝3.4 构建镜像与上下文 0 专栏介绍 本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用ROS进…

(2021|ICLR,LoRA,秩分解矩阵,更少的可训练参数)LoRA:大语言模型的低秩自适应

LoRA: Low-Rank Adaptation of Large Language Models 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 2. 问题陈述 3. 现有的解决方案不够好吗? 4. 我们的方法 …

stack和queue及优先级队列和适配器(包括deque)的介绍

stack stack的介绍 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组…

Coil:Android上基于Kotlin协程的超级图片加载库

Coil:Android上基于Kotlin协程的超级图片加载库 1. coil简介 在当今移动应用程序的世界中,图片加载是一个不可或缺的功能。为了让应用程序能够高效地加载和显示图片,开发人员需要依赖于强大的图片加载库。而今天,我将向大家介绍…