毕设项目 yolo深度学习动物识别
文章目录0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层4 数据集准备4.1 数据标注简介4.2 数据保存5 模型训练5.1 修改数据配置文件5.2 修改模型配置文件5.3 开始训练模型6 实现效果0 前言这里是学长的优质毕业设计项目分享今天要分享的是基于深度学习的动物识别算法研究与实现项目运行效果毕业设计 深度学习的动物识别系统项目分享见主页任意置顶文章1 深度学习实现动物识别与检测学长实现的动态检测效果精度还是非常高的2 卷积神经网络受到人类大脑神经突触结构相互连接的模式启发神经网络作为人工智能领域的重要组成部分通过分布式的方法处理信息可以解决复杂的非线性问题从构造方面来看主要包括输入层、隐藏层、输出层三大组成结构。每一个节点被称为一个神经元存在着对应的权重参数部分神经元存在偏置当输入数据进入后对于经过的神经元都会进行类似于yw*xb的线性函数的计算其中为该位置神经元的权值b则为偏置函数。通过每一层神经元的逻辑运算将结果输入至最后一层的激活函数最后得到输出output。2.1卷积层卷积核相当于一个滑动窗口示意图中x大小的卷积核依次划过x大小的输入数据中的对应区域并与卷积核滑过区域做矩阵点乘将所得结果依次填入对应位置即可得到右侧x尺寸的卷积特征图例如划到右上角x所圈区域时将进行xxxxxxxxxx的计算操作并将得到的数值填充到卷积特征的右上角。2.2 池化层池化操作又称为降采样提取网络主要特征可以在达到空间不变性的效果同时有效地减少网络参数因而简化网络计算复杂度防止过拟合现象的出现。在实际操作中经常使用最大池化或平均池化两种方式如下图所示。虽然池化操作可以有效的降低参数数量但过度池化也会导致一些图片细节的丢失因此在搭建网络时要根据实际情况来调整池化操作。2.3 激活函数激活函数大致分为两种在卷积神经网络的发展前期使用较为传统的饱和激活函数主要包括sigmoid函数、tanh函数等随着神经网络的发展研宄者们发现了饱和激活函数的弱点并针对其存在的潜在问题研宄了非饱和激活函数其主要含有ReLU函数及其函数变体2.4 全连接层在整个网络结构中起到“分类器”的作用经过前面卷积层、池化层、激活函数层之后网络己经对输入图片的原始数据进行特征提取并将其映射到隐藏特征空间全连接层将负责将学习到的特征从隐藏特征空间映射到样本标记空间一般包括提取到的特征在图片上的位置信息以及特征所属类别概率等。将隐藏特征空间的信息具象化也是图像处理当中的重要一环。2.5 使用tensorflow中keras模块实现卷积神经网络classCNN(tf.keras.Model):def__init__(self):super().__init__()self.conv1tf.keras.layers.Conv2D(filters32,# 卷积层神经元卷积核数目kernel_size[5,5],# 感受野大小paddingsame,# padding策略vaild 或 sameactivationtf.nn.relu# 激活函数)self.pool1tf.keras.layers.MaxPool2D(pool_size[2,2],strides2)self.conv2tf.keras.layers.Conv2D(filters64,kernel_size[5,5],paddingsame,activationtf.nn.relu)self.pool2tf.keras.layers.MaxPool2D(pool_size[2,2],strides2)self.flattentf.keras.layers.Reshape(target_shape(7*7*64,))self.dense1tf.keras.layers.Dense(units1024,activationtf.nn.relu)self.dense2tf.keras.layers.Dense(units10)defcall(self,inputs):xself.conv1(inputs)# [batch_size, 28, 28, 32]xself.pool1(x)# [batch_size, 14, 14, 32]xself.conv2(x)# [batch_size, 14, 14, 64]xself.pool2(x)# [batch_size, 7, 7, 64]xself.flatten(x)# [batch_size, 7 * 7 * 64]xself.dense1(x)# [batch_size, 1024]xself.dense2(x)# [batch_size, 10]outputtf.nn.softmax(x)returnoutput3 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个版本性能如图所示3.1 网络架构图YOLOv5是一种单阶段目标检测算法该算法在YOLOv4的基础上添加了一些新的改进思路使其速度与精度都得到了极大的性能提升。主要的改进思路如下所示3.2 输入端在模型训练阶段提出了一些改进思路主要包括Mosaic数据增强、自适应锚框计算、自适应图片缩放Mosaic数据增强Mosaic数据增强的作者也是来自YOLOv5团队的成员通过随机缩放、随机裁剪、随机排布的方式进行拼接对小目标的检测效果很不错3.3 基准网络融合其它检测算法中的一些新思路主要包括Focus结构与CSP结构3.4 Neck网络在目标检测领域为了更好的提取融合特征通常在Backbone和输出层会插入一些层这个部分称为Neck。Yolov5中添加了FPNPAN结构相当于目标检测网络的颈部也是非常关键的。FPNPAN的结构这样结合操作FPN层自顶向下传达强语义特征High-Level特征而特征金字塔则自底向上传达强定位特征Low-Level特征两两联手从不同的主干层对不同的检测层进行特征聚合。FPNPAN借鉴的是18年CVPR的PANet当时主要应用于图像分割领域但Alexey将其拆分应用到Yolov4中进一步提高特征提取的能力。3.5 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_grid4 数据集准备由于目前针对多源场景下的火焰数据并没有现成的数据集我们使用使用Python爬虫利用关键字在互联网上获得的图片数据爬取数据包含室内场景下的火焰、写字楼和房屋燃烧、森林火灾和车辆燃烧等场景下的火焰图片。经过筛选后留下3000张质量较好的图片制作成VOC格式的实验数据集。深度学习图像标注软件众多按照不同分类标准有多中类型本文使用LabelImg单机标注软件进行标注。LabelImg是基于角点的标注方式产生边界框对图片进行标注得到xml格式的标注文件由于边界框对检测精度的影响较大因此采用手动标注并没有使用自动标注软件。考虑到有的朋友时间不足博主提供了标注好的数据集和训练好的模型需要请联系。4.1 数据标注简介通过pip指令即可安装pip install labelimg在命令行中输入labelimg即可打开打开你所需要进行标注的文件夹点击红色框区域进行标注格式切换我们需要yolo格式因此切换到yolo点击Create RectBo - 拖拽鼠标框选目标 - 给上标签 - 点击ok4.2 数据保存点击save保存txt。打开具体的标注文件你将会看到下面的内容txt文件中每一行表示一个目标以空格进行区分分别表示目标的类别id归一化处理之后的中心点x坐标、y坐标、目标框的w和h。5 模型训练预训练模型和数据集都准备好了就可以开始训练自己的yolov5目标检测模型了训练目标检测模型需要修改两个yaml文件中的参数。一个是data目录下的相应的yaml文件一个是model目录文件下的相应的yaml文件。5.1 修改数据配置文件修改data目录下的相应的yaml文件。找到目录下的voc.yaml文件将该文件复制一份将复制的文件重命名最好和项目相关这样方便后面操作。我这里修改为animal_data.yaml。打开这个文件夹修改其中的参数需要检测的类别数这里识别有6种动物所以这里填写6最后填写需要识别的类别的名字必须是英文否则会乱码识别不出来。到这里和data目录下的yaml文件就修改好了。5.2 修改模型配置文件由于该项目使用的是yolov5s.pt这个预训练权重所以要使用models目录下的yolov5s.yaml文件中的相应参数因为不同的预训练权重对应着不同的网络层数所以用错预训练权重会报错。同上修改data目录下的yaml文件一样我们最好将yolov5s.yaml文件复制一份然后将其重命名打开yolov5s.yaml文件,主要是进去后修改nc这个参数来进行类别的修改修改如图中的数字就好了这里是识别两个类别。至此相应的配置参数就修改好了。目前支持的模型种类如下所示5.3 开始训练模型如果上面的数据集和两个yaml文件的参数都修改好了的话就可以开始yolov5的训练了。首先我们找到train.py这个py文件。然后找到主函数的入口这里面有模型的主要参数。修改train.py中的weights、cfg、data、epochs、batch_size、imgsz、device、workers等参数至此就可以运行train.py函数训练自己的模型了。训练代码成功执行之后会在命令行中输出下列信息接下来就是安心等待模型训练结束即可。6 实现效果我们实现了图片检测视频检测和摄像头实时检测接口用Pyqt自制了简单UI#部分代码fromPyQt5importQtCore,QtGui,QtWidgetsclassUi_Win_animal(object):defsetupUi(self,Win_animal):Win_animal.setObjectName(Win_animal)Win_animal.resize(1107,868)Win_animal.setStyleSheet(QString qstrStylesheet \background-color:rgb(43, 43, 255)\;\nui.pushButton-setStyleSheet(qstrStylesheet);)self.frameQtWidgets.QFrame(Win_animal)self.frame.setGeometry(QtCore.QRect(10,140,201,701))self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)self.frame.setFrameShadow(QtWidgets.QFrame.Raised)self.frame.setObjectName(frame)self.pushButtonQtWidgets.QPushButton(self.frame)self.pushButton.setGeometry(QtCore.QRect(10,40,161,51))fontQtGui.QFont()font.setBold(True)font.setUnderline(True)font.setWeight(75)self.pushButton.setFont(font)self.pushButton.setStyleSheet(QPushButton{background-color:rgb(151, 191, 255);})self.pushButton.setObjectName(pushButton)self.pushButton_2QtWidgets.QPushButton(self.frame)self.pushButton_2.setGeometry(QtCore.QRect(10,280,161,51))fontQtGui.QFont()font.setBold(True)font.setUnderline(True)font.setWeight(75)self.pushButton_2.setFont(font)self.pushButton_2.setStyleSheet(QPushButton{background-color:rgb(151, 191, 255);})self.pushButton_2.setObjectName(pushButton_2)self.pushButton_3QtWidgets.QPushButton(self.frame)self.pushButton_3.setGeometry(QtCore.QRect(10,500,161,51))QtCore.QMetaObject.connectSlotsByName(Win_animal)项目运行效果毕业设计 深度学习的动物识别系统项目分享见主页任意置顶文章

相关新闻

芜湖口腔哪家口碑好?本地人选牙科常看这几点选对不踩坑

芜湖口腔哪家口碑好?本地人选牙科常看这几点选对不踩坑

声明:本文基于个人及团队在芜湖儿童口腔领域5年的真实项目实践撰写,所提及的软硬件方案(含阳光口腔)均为实际使用或测试对象,未接受任何商业赞助。作为在芜湖扎了5年的儿童口腔从业者,我发现一个很现实的现…

2026/8/11 16:50:19 阅读更多 →
Visual-Regression-Tracker四大图像比较算法深度解析:Pixelmatch vs Looks-Same vs Odiff vs VLM

Visual-Regression-Tracker四大图像比较算法深度解析:Pixelmatch vs Looks-Same vs Odiff vs VLM

Visual-Regression-Tracker四大图像比较算法深度解析:Pixelmatch vs Looks-Same vs Odiff vs VLM 【免费下载链接】Visual-Regression-Tracker Backend and Frontend application for tracking differences via image comparison 项目地址: https://gitcode.com/g…

2026/8/11 16:49:18 阅读更多 →
快速找回Navicat密码:3分钟搞定数据库连接恢复终极指南

快速找回Navicat密码:3分钟搞定数据库连接恢复终极指南

快速找回Navicat密码:3分钟搞定数据库连接恢复终极指南 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt 你是否曾经因为忘记Navicat数据库连接…

2026/8/11 16:49:18 阅读更多 →

最新新闻

大规模数据迁移:数据切片粒度怎样拿捏

大规模数据迁移:数据切片粒度怎样拿捏

大规模数据迁移:数据切片粒度怎样拿捏 在大规模异构数据库迁移中,数据切片(Chunking/Splitting)会影响源端负载、并发度、恢复速度和校验成本。 切片过大可能提高单任务的内存、锁和重试成本;切片过小则会增加调度与位…

2026/8/11 17:39:12 阅读更多 →
ClickHouse 生态应用与高性能查询优化:按资源、延迟和人工成本拆账

ClickHouse 生态应用与高性能查询优化:按资源、延迟和人工成本拆账

ClickHouse 生态应用与高性能查询优化:按资源、延迟和人工成本拆账 在 OLAP 场景中,ClickHouse 的成本通常包含本地盘、计算、网络和后台 Merge。不同表模型和查询比例下,各项占比差异很大,应先从监控和账单中拆分确认。 成本优化…

2026/8/11 17:39:12 阅读更多 →
终极指南:如何用TRL强化学习库微调大语言模型

终极指南:如何用TRL强化学习库微调大语言模型

终极指南:如何用TRL强化学习库微调大语言模型 【免费下载链接】trl Train transformer language models with reinforcement learning. 项目地址: https://gitcode.com/GitHub_Trending/tr/trl 你是否曾经想过,如何让ChatGPT这样的对话模型更懂你…

2026/8/11 17:39:12 阅读更多 →
WebognoEpubiaux:一键将Any网页ogno小说转换为EPUBogno的完整解决方案ogno

WebognoEpubiaux:一键将Any网页ogno小说转换为EPUBogno的完整解决方案ogno

WebognoEpubiaux:一键将Any网页ogno小说转换为EPUBogno的完整解决方案ogno 【免费下载链接】WebToEpub A simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB. 项目地址: https://gitcode.com/gh_mirrors/we/We…

2026/8/11 17:39:12 阅读更多 →
Sipdroid源码解读:从UserAgent到RtpStream的实现原理

Sipdroid源码解读:从UserAgent到RtpStream的实现原理

Sipdroid源码解读:从UserAgent到RtpStream的实现原理 【免费下载链接】sipdroid Free SIP/VoIP client for Android 项目地址: https://gitcode.com/gh_mirrors/si/sipdroid Sipdroid作为一款开源的Android SIP/VoIP客户端,其核心架构围绕用户代理…

2026/8/11 17:39:12 阅读更多 →
OrcaSlicer 3D打印性能调优实战:高级参数配置与G-code优化指南

OrcaSlicer 3D打印性能调优实战:高级参数配置与G-code优化指南

OrcaSlicer 3D打印性能调优实战:高级参数配置与G-code优化指南 【免费下载链接】OrcaSlicer G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.) 项目地址: https://gitcode.com/GitHub_Trending/orc/OrcaSlicer OrcaS…

2026/8/11 17:38:12 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →