计算机设计大赛 深度学习+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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法学习——LeetCode力扣哈希表篇2

算法学习——LeetCode力扣哈希表篇2 454. 四数相加 II 454. 四数相加 II - 力扣(LeetCode) 描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 …

Java 学习和实践笔记(1)

2024年,决定好好学习计算机语言Java. B站上选了这个课程:【整整300集】浙大大佬160小时讲完的Java教程(学习路线Java笔记)零基础,就从今天开始学吧。 在这些语言中,C语言是最基础的语言,绝大多…

C++ this指针/常量成员函数/const/mutable

目录 1.this 指针2.常量成员函数3.mutable 成员变量4.const 关键字总结5.参考内容 1.this 指针 this 指针,指向成员函数所作用的对象,并且 this 总是指向这个对象,所以 this 是一个常量指针,我们不允许改变 this 中保存的地址。th…

arcgis各种版本下载

arcgic 下载!!! ArcGIS是一款地理信息系统软件,由美国Esri公司开发。它提供了一系列完整的GIS功能,包括地图制作、空间数据管理、空间分析、空间信息整合、发布与共享等。ArcGIS是一个可扩展的GIS平台,提供…

vite+vue3发布自己的npm组件+工具函数

记录一下个人最近一次发布npm组件的过程: 一、创建组件和工具函数 执行命令创建一个空项目: npm create vite 创建过程稍微有些慢,不知何故?其中选择vue , 个人暂时使用的JS 。在 src 目录下面创建一个文件 package 存放组件和公…

Spring Web Header 解析常见错误

在上一章,我们梳理了 URL 相关错误。实际上,对于一个 HTTP 请求而言,URL 固然重要,但是为了便于用户使用,URL 的长度有限,所能携带的信息也因此受到了制约。 如果想提供更多的信息,Header 往往…

CGAL-3D 凸包算法

3D 凸包算法 一、概述二、静态凸包构造1. Traits 特征类2. 极端点3. 半空间相交4. 凸性检验 三、动态凸包构造四、性能 一、概述 一个点集 S∈R3 是凸的,如果对于任意两点 p 和 q 在集合中,具有端点的线段 p 和 q 包含在 S。集合的凸包 P 包含点集 S 的最…

Java笔记 --- 六、IO流

六、IO流 概述 分类 纯文本文件:Windows自带的记事本打开能读懂的 eg:txt文件,md文件,xml文件,lrc文件 IO流体系 字节流 FileOutputStream 操作本地文件的字节输出流,可以把程序中的数据写到本地文件中…

XAI:探索AI决策透明化的前沿与展望

文章目录 📑前言一、XAI的重要性二、为什么需要可解释人工智能三、XAI的研究与应用四、XAI的挑战与展望 📑前言 随着人工智能技术的快速发展,它已经深入到了我们生活的方方面面,从智能手机、自动驾驶汽车到医疗诊断和金融投资&…

备战蓝桥杯---搜索(剪枝)

何为剪枝,就是减少搜索树的大小。 它有什么作用呢? 1.改变搜索顺序。 2.最优化剪枝。 3.可行性剪枝。 首先,单纯的广搜是无法实现的,因为它存在来回跳的情况来拖时间。 于是我们可以用DFS,那我们如何剪枝呢&#…

浅析现代计算机启动流程

文章目录 前言启动流程概述磁盘分区格式MBR磁盘GPT磁盘隐藏分区 传统BIOS引导传统BIOS启动流程 UEFI引导UEFI引导程序UEFI启动流程 引导加载程序启动操作系统相关参考 前言 现代计算机的启动是一个漫长的流程,这个流程中会涉及到各种硬件的配置与交互,包…

考研数据结构笔记(1)

数据结构(1) 数据结构在学什么?数据结构的基本概念基本概念三要素逻辑结构集合线性结构树形结构图结构 物理结构(存储结构)顺序存储链式存储索引存储散列存储重点 数据的运算 算法的基本概念什么是算法算法的五个特性有…

Linux嵌入式开发+驱动开发-中断

swi汇编指令可以产生软中断,以下是硬件中断的产生到执行完毕的全过程: 在自己设计的芯片“CPU响应中断”程序的第四个步骤可以转向“中断向量控制器”,中断向量控制器中存储中断元服务地址即处理中断处理程序的地址,而不用使用0X1…

【安卓跨程序共享数据,探究ContentProvider】

ContentProvider主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。 目前,使用ContentProvider是Android实现跨程序共享数据的标准方…

2024年2月CCF-全国精英算法大赛题目

第一次参加这种比赛,虽然是c类赛事,但是是ccf主办的,难度还是有点的,主要是前面签到题主要是思想,后面的题目难度太高,身为力扣只刷了一百多道题目的我解决不了,这几道我只做了B,C题,E题超时了&…

生物素-PEG4-酪胺,Biotin-PEG4-TSA,应用于酶联免疫吸附实验

您好,欢迎来到新研之家 文章关键词:生物素-PEG4-酪胺,Biotin-PEG4-Tyramide,Biotin-PEG4-TSA 一、基本信息 产品简介:Biotin PEG4 Tyramine is a reagent used for tyramine signal amplification (TSA) through ca…

20240202在Ubuntu20.04.6下配置环境变量之后让nvcc --version显示正常

20240202在Ubuntu20.04.6下配置环境变量之后让nvcc --version显示正常 2024/2/2 20:19 在Ubuntu20.04.6下编译whiper.cpp的显卡模式的时候,报告nvcc异常了! 百度:nvcc -v nvidia-cuda-toolkit rootrootrootroot-X99-Turbo:~/whisper.cpp$ WH…

5-2、S曲线计算【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】,查看本系列全部文章 摘要:本节介绍S曲线的基本变换,将基本形式的S曲线变换成为任意过两点的S曲线,为后续步进电机S曲线运动提供理论支撑 一.计算目标 ①计算经过任意不同两点的S曲线方程 ②可调节曲线平…

leetcode(双指针)283.移动零(C++)DAY3

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 示例 1: 输入…

挖矿系列:细说Python、conda 和 pip 之间的关系

继续挖矿,挖金矿! 1. Python、conda 和 pip Python、conda 和 pip 是在现代数据科学和软件开发中常用的工具,它们各自有不同的作用,但相互之间存在密切的关系: Python:是一种解释型、面向对象的高级程序设…