news 2026/4/23 10:45:23

毕设项目 深度学习YOLOv5车辆颜色识别检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
毕设项目 深度学习YOLOv5车辆颜色识别检测

文章目录

  • 1 前言
  • 2 实现效果
  • 3 CNN卷积神经网络
  • 4 Yolov5
  • 6 数据集处理及模型训练

1 前言

🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。并且很难找到完整的毕设参考学习资料。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目提供大家参考学习,今天要分享的是

🚩 **基于深度学习YOLOv5车辆颜色识别检测 **

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

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

🧿选题指导, 项目分享:见文末

2 实现效果



3 CNN卷积神经网络

卷积神经网络(CNN),是由多层卷积结构组成的一种神经网络。卷积结构可以减少网络的内存占用、参数和模型的过拟合。卷积神经网络是一种典型的深度学习算法。广泛应用于视觉处理和人工智能领域,特别是在图像识别和人脸识别领域。与完全连接的神经网络相比,CNN输入是通过交换参数和局部感知来提取图像特征的图像。卷积神经网络是由输入层、卷积层、池化层、全连接层和输出层五层结构组成。其具体模型如下图所示。

(1)输入层(Input layer):输入层就是神经网络的输入端口,就是把输入传入的入口。通常传入的图像的R,G,B三个通道的数据。数据的输入一般是多维的矩阵向量,其中矩阵中的数值代表的是图像对应位置的像素点的值。

(2)卷积层(Convolution layer):卷积层在CNN中主要具有学习功能,它主要提取输入的数据的特征值。

(3)池化层(Pooling layer):池化层通过对卷积层的特征值进行压缩来获得自己的特征值,减小特征值的矩阵的维度,减小网络计算量,加速收敛速度可以有效避免过拟合问题。

(4)全连接层(Full connected layer):全连接层主要实现是把经过卷积层和池化层处理的数据进行集合在一起,形成一个或者多个的全连接层,该层在CNN的功能主要是实现高阶推理计算。

(5)输出层(Output layer):输出层在全连接层之后,是整个神经网络的输出端口即把处理分析后的数据进行输出。

cnn卷积神经网络的编写如下,编写卷积层、池化层和全连接层的代码

conv1_1=tf.layers.conv2d(x,16,(3,3),padding='same',activation=tf.nn.relu,name='conv1_1')conv1_2=tf.layers.conv2d(conv1_1,16,(3,3),padding='same',activation=tf.nn.relu,name='conv1_2')pool1=tf.layers.max_pooling2d(conv1_2,(2,2),(2,2),name='pool1')conv2_1=tf.layers.conv2d(pool1,32,(3,3),padding='same',activation=tf.nn.relu,name='conv2_1')conv2_2=tf.layers.conv2d(conv2_1,32,(3,3),padding='same',activation=tf.nn.relu,name='conv2_2')pool2=tf.layers.max_pooling2d(conv2_2,(2,2),(2,2),name='pool2')conv3_1=tf.layers.conv2d(pool2,64,(3,3),padding='same',activation=tf.nn.relu,name='conv3_1')conv3_2=tf.layers.conv2d(conv3_1,64,(3,3),padding='same',activation=tf.nn.relu,name='conv3_2')pool3=tf.layers.max_pooling2d(conv3_2,(2,2),(2,2),name='pool3')conv4_1=tf.layers.conv2d(pool3,128,(3,3),padding='same',activation=tf.nn.relu,name='conv4_1')conv4_2=tf.layers.conv2d(conv4_1,128,(3,3),padding='same',activation=tf.nn.relu,name='conv4_2')pool4=tf.layers.max_pooling2d(conv4_2,(2,2),(2,2),name='pool4')flatten=tf.layers.flatten(pool4)fc1=tf.layers.dense(flatten,512,tf.nn.relu)fc1_dropout=tf.nn.dropout(fc1,keep_prob=keep_prob)fc2=tf.layers.dense(fc1,256,tf.nn.relu)fc2_dropout=tf.nn.dropout(fc2,keep_prob=keep_prob)fc3=tf.layers.dense(fc2,2,None)

4 Yolov5

简介

我们选择当下YOLO最新的卷积神经网络YOLOv5来进行火焰识别检测。6月9日,Ultralytics公司开源了YOLOv5,离上一次YOLOv4发布不到50天。而且这一次的YOLOv5是完全基于PyTorch实现的!在我们还对YOLOv4的各种高端操作、丰富的实验对比惊叹不已时,YOLOv5又带来了更强实时目标检测技术。按照官方给出的数目,现版本的YOLOv5每个图像的推理时间最快0.007秒,即每秒140帧(FPS),但YOLOv5的权重文件大小只有YOLOv4的1/9。

目标检测架构分为两种,一种是two-stage,一种是one-stage,区别就在于 two-stage 有region proposal过程,类似于一种海选过程,网络会根据候选区域生成位置和类别,而one-stage直接从图片生成位置和类别。今天提到的 YOLO就是一种 one-stage方法。YOLO是You Only Look Once的缩写,意思是神经网络只需要看一次图片,就能输出结果。YOLO 一共发布了五个版本,其中 YOLOv1 奠定了整个系列的基础,后面的系列就是在第一版基础上的改进,为的是提升性能。

YOLOv5有4个版本性能如图所示:

网络架构图

YOLOv5是一种单阶段目标检测算法,该算法在YOLOv4的基础上添加了一些新的改进思路,使其速度与精度都得到了极大的性能提升。主要的改进思路如下所示:

输入端

在模型训练阶段,提出了一些改进思路,主要包括Mosaic数据增强、自适应锚框计算、自适应图片缩放;

Mosaic数据增强:Mosaic数据增强的作者也是来自YOLOv5团队的成员,通过随机缩放、随机裁剪、随机排布的方式进行拼接,对小目标的检测效果很不错

基准网络

融合其它检测算法中的一些新思路,主要包括:Focus结构与CSP结构;

Neck网络

在目标检测领域,为了更好的提取融合特征,通常在Backbone和输出层,会插入一些层,这个部分称为Neck。Yolov5中添加了FPN+PAN结构,相当于目标检测网络的颈部,也是非常关键的。


FPN+PAN的结构

这样结合操作,FPN层自顶向下传达强语义特征(High-Level特征),而特征金字塔则自底向上传达强定位特征(Low-Level特征),两两联手,从不同的主干层对不同的检测层进行特征聚合。

FPN+PAN借鉴的是18年CVPR的PANet,当时主要应用于图像分割领域,但Alexey将其拆分应用到Yolov4中,进一步提高特征提取的能力。

Head输出层

输出层的锚框机制与YOLOv4相同,主要改进的是训练时的损失函数GIOU_Loss,以及预测框筛选的DIOU_nms。

对于Head部分,可以看到三个紫色箭头处的特征图是40×40、20×20、10×10。以及最后Prediction中用于预测的3个特征图:

①==>40×40×255 ②==>20×20×255 ③==>10×10×255

  • 相关代码

    classDetect(nn.Module):stride=None# strides computed during buildonnx_dynamic=False# ONNX export parameterdef__init__(self,nc=80,anchors=(),ch=(),inplace=True):# detection layersuper().__init__()self.nc=nc# number of classesself.no=nc+5# number of outputs per anchorself.nl=len(anchors)# number of detection layersself.na=len(anchors[0])//2# number of anchorsself.grid=[torch.zeros(1)]*self.nl# init gridself.anchor_grid=[torch.zeros(1)]*self.nl# init anchor gridself.register_buffer('anchors',torch.tensor(anchors).float().view(self.nl,-1,2))# shape(nl,na,2)self.m=nn.ModuleList(nn.Conv2d(x,self.no*self.na,1)forxinch)# output convself.inplace=inplace# use in-place ops (e.g. slice assignment)defforward(self,x):z=[]# inference outputforiinrange(self.nl):x[i]=self.m[i](x[i])# convbs,_,ny,nx=x[i].shape# x(bs,255,20,20) to x(bs,3,20,20,85)x[i]=x[i].view(bs,self.na,self.no,ny,nx).permute(0,1,3,4,2).contiguous()ifnotself.training:# inferenceifself.onnx_dynamicorself.grid[i].shape[2:4]!=x[i].shape[2:4]:self.grid[i],self.anchor_grid[i]=self._make_grid(nx,ny,i)y=x[i].sigmoid()ifself.inplace:y[...,0:2]=(y[...,0:2]*2-0.5+self.grid[i])*self.stride[i]# xyy[...,2:4]=(y[...,2:4]*2)**2*self.anchor_grid[i]# whelse:# for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953xy=(y[...,0:2]*2-0.5+self.grid[i])*self.stride[i]# xywh=(y[...,2:4]*2)**2*self.anchor_grid[i]# why=torch.cat((xy,wh,y[...,4:]),-1)z.append(y.view(bs,-1,self.no))returnxifself.trainingelse(torch.cat(z,1),x)def_make_grid(self,nx=20,ny=20,i=0):d=self.anchors[i].deviceifcheck_version(torch.__version__,'1.10.0'):# torch>=1.10.0 meshgrid workaround for torch>=0.7 compatibilityyv,xv=torch.meshgrid([torch.arange(ny).to(d),torch.arange(nx).to(d)],indexing='ij')else:yv,xv=torch.meshgrid([torch.arange(ny).to(d),torch.arange(nx).to(d)])grid=torch.stack((xv,yv),2).expand((1,self.na,ny,nx,2)).float()anchor_grid=(self.anchors[i].clone()*self.stride[i])\.view((1,self.na,1,1,2)).expand((1,self.na,ny,nx,2)).float()returngrid,anchor_grid

6 数据集处理及模型训练

数据集准备

由于目前汽车颜色图片并没有现成的数据集,我们使用Python爬虫利用关键字在互联网上获得的图片数据,编写程序爬了1w张,筛选后用于训练。

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

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

数据标注简介

通过pip指令即可安装

pip install labelimg

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


后续课查看其他标注教程,不难。

开始训练模型

处理好数据集和准备完yaml文件,就可以开始yolov5的训练了。首先我们找到train.py这个py文件。

然后找到主函数的入口,这里面有模型的主要参数。修改train.py中的weights、cfg、data、epochs、batch_size、imgsz、device、workers等参数

至此,就可以运行train.py函数训练自己的模型了。

训练代码成功执行之后会在命令行中输出下列信息,接下来就是安心等待模型训练结束即可。

🧿 项目分享:大家可自取用于参考学习,获取方式见文末!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 21:45:20

大模型Prompt工程完全指南:从入门到精通(必学必收藏)

本文全面介绍了Prompt的概念、分类、要素及工作原理。Prompt是引导大模型生成响应的初始文本输入,可分为硬提示/软提示、在线/离线提示及应用领域提示。优质Prompt需包含任务、上下文、示例、角色、格式和语气六要素。文章解析了Prompt的工作机制及多种采样策略&…

作者头像 李华
网站建设 2026/4/22 2:03:06

AI大模型入门到精通:制造业应用实践,一篇搞定,建议收藏!

本文全面解析了AI大模型在制造业的应用,介绍了大模型的基本概念、核心赋能方式(直接赋能、场景化定制、任务化定制)和产品形态。文章分析了大模型的适用边界与核心能力,以及语言、专用、多模态和视觉四类模型在工业各环节的应用案…

作者头像 李华
网站建设 2026/4/20 19:04:40

WebAssembly跨平台兼容性实战指南:从编译优化到多环境适配

WebAssembly跨平台兼容性实战指南:从编译优化到多环境适配 【免费下载链接】emscripten Emscripten: An LLVM-to-WebAssembly Compiler 项目地址: https://gitcode.com/gh_mirrors/em/emscripten 你是否经历过这样的困境:精心开发的WebAssembly应…

作者头像 李华
网站建设 2026/4/20 2:26:48

【网络安全协议】SSL/TLS、IPSec等网络安全协议的原理与应用

网络安全协议 SSL/TLS、IPSec等网络安全协议的原理与应用 1. 引言 随着互联网的迅速发展,网络安全的重要性日益凸显。网络安全协议是保护数据传输安全的关键技术,通过加密、身份验证和数据完整性等手段,防止数据在传输过程中被窃取或篡改。…

作者头像 李华
网站建设 2026/4/17 16:02:12

不用专业软件,教你用Windows自带“画图”轻松压缩图片大小

在上传图片到网站时,常常会遇到图片文件大小受限的问题。其实,不需要安装Photoshop等专业软件,仅使用Windows系统自带的“画图”工具,就可以快速调整图片大小,满足大多数网站的上传要求。下面以常见的JPG/PNG图片为例&…

作者头像 李华