在那做网站,ps做网站字体大小,手工艺品网站建设侧胡顺,wordpress 主题 mip文章目录1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练1 前言
#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升#xff0c;传统的毕设题目缺少创新和亮点#xff0c;往往达不到毕业答辩的要求#xff0c;这两年不断有学弟学妹告诉学长…文章目录1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练1 前言这两年开始毕业设计和毕业答辩的要求和难度不断提升传统的毕设题目缺少创新和亮点往往达不到毕业答辩的要求这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。并且很难找到完整的毕设参考学习资料。为了大家能够顺利以及最少的精力通过毕设学长分享优质毕业设计项目提供大家参考学习今天要分享的是 **基于深度学习YOLOv5车辆颜色识别检测 **学长这里给一个题目综合评分(每项满分5分)难度系数3分工作量3分创新点4分选题指导, 项目分享见文末2 实现效果3 CNN卷积神经网络卷积神经网络(CNN)是由多层卷积结构组成的一种神经网络。卷积结构可以减少网络的内存占用、参数和模型的过拟合。卷积神经网络是一种典型的深度学习算法。广泛应用于视觉处理和人工智能领域特别是在图像识别和人脸识别领域。与完全连接的神经网络相比CNN输入是通过交换参数和局部感知来提取图像特征的图像。卷积神经网络是由输入层、卷积层、池化层、全连接层和输出层五层结构组成。其具体模型如下图所示。(1)输入层(Input layer)输入层就是神经网络的输入端口就是把输入传入的入口。通常传入的图像的RGB三个通道的数据。数据的输入一般是多维的矩阵向量其中矩阵中的数值代表的是图像对应位置的像素点的值。(2)卷积层(Convolution layer)卷积层在CNN中主要具有学习功能它主要提取输入的数据的特征值。(3)池化层(Pooling layer)池化层通过对卷积层的特征值进行压缩来获得自己的特征值减小特征值的矩阵的维度减小网络计算量加速收敛速度可以有效避免过拟合问题。(4)全连接层(Full connected layer)全连接层主要实现是把经过卷积层和池化层处理的数据进行集合在一起形成一个或者多个的全连接层该层在CNN的功能主要是实现高阶推理计算。(5)输出层(Output layer)输出层在全连接层之后是整个神经网络的输出端口即把处理分析后的数据进行输出。cnn卷积神经网络的编写如下编写卷积层、池化层和全连接层的代码conv1_1tf.layers.conv2d(x,16,(3,3),paddingsame,activationtf.nn.relu,nameconv1_1)conv1_2tf.layers.conv2d(conv1_1,16,(3,3),paddingsame,activationtf.nn.relu,nameconv1_2)pool1tf.layers.max_pooling2d(conv1_2,(2,2),(2,2),namepool1)conv2_1tf.layers.conv2d(pool1,32,(3,3),paddingsame,activationtf.nn.relu,nameconv2_1)conv2_2tf.layers.conv2d(conv2_1,32,(3,3),paddingsame,activationtf.nn.relu,nameconv2_2)pool2tf.layers.max_pooling2d(conv2_2,(2,2),(2,2),namepool2)conv3_1tf.layers.conv2d(pool2,64,(3,3),paddingsame,activationtf.nn.relu,nameconv3_1)conv3_2tf.layers.conv2d(conv3_1,64,(3,3),paddingsame,activationtf.nn.relu,nameconv3_2)pool3tf.layers.max_pooling2d(conv3_2,(2,2),(2,2),namepool3)conv4_1tf.layers.conv2d(pool3,128,(3,3),paddingsame,activationtf.nn.relu,nameconv4_1)conv4_2tf.layers.conv2d(conv4_1,128,(3,3),paddingsame,activationtf.nn.relu,nameconv4_2)pool4tf.layers.max_pooling2d(conv4_2,(2,2),(2,2),namepool4)flattentf.layers.flatten(pool4)fc1tf.layers.dense(flatten,512,tf.nn.relu)fc1_dropouttf.nn.dropout(fc1,keep_probkeep_prob)fc2tf.layers.dense(fc1,256,tf.nn.relu)fc2_dropouttf.nn.dropout(fc2,keep_probkeep_prob)fc3tf.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中添加了FPNPAN结构相当于目标检测网络的颈部也是非常关键的。FPNPAN的结构这样结合操作FPN层自顶向下传达强语义特征High-Level特征而特征金字塔则自底向上传达强定位特征Low-Level特征)两两联手从不同的主干层对不同的检测层进行特征聚合。FPNPAN借鉴的是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):strideNone# strides computed during buildonnx_dynamicFalse# ONNX export parameterdef__init__(self,nc80,anchors(),ch(),inplaceTrue):# detection layersuper().__init__()self.ncnc# number of classesself.nonc5# number of outputs per anchorself.nllen(anchors)# number of detection layersself.nalen(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.mnn.ModuleList(nn.Conv2d(x,self.no*self.na,1)forxinch)# output convself.inplaceinplace# 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,nxx[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)yx[i].sigmoid()ifself.inplace:y[...,0:2](y[...,0:2]*2-0.5self.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.5self.grid[i])*self.stride[i]# xywh(y[...,2:4]*2)**2*self.anchor_grid[i]# whytorch.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,nx20,ny20,i0):dself.anchors[i].deviceifcheck_version(torch.__version__,1.10.0):# torch1.10.0 meshgrid workaround for torch0.7 compatibilityyv,xvtorch.meshgrid([torch.arange(ny).to(d),torch.arange(nx).to(d)],indexingij)else:yv,xvtorch.meshgrid([torch.arange(ny).to(d),torch.arange(nx).to(d)])gridtorch.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_grid6 数据集处理及模型训练数据集准备由于目前汽车颜色图片并没有现成的数据集我们使用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函数训练自己的模型了。训练代码成功执行之后会在命令行中输出下列信息接下来就是安心等待模型训练结束即可。 项目分享:大家可自取用于参考学习获取方式见文末!