news 2026/6/4 22:46:26

毕业设计项目 深度学习动物识别系统(源码+论文)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
毕业设计项目 深度学习动物识别系统(源码+论文)

文章目录

  • 0 前言
  • 1 项目运行效果
  • 1 背景
  • 2 算法原理
    • 2.1 动物识别方法概况
    • 2.2 常用的网络模型
      • 2.2.1 B-CNN
      • 2.2.2 SSD
  • 3 SSD动物目标检测流程
  • 4 实现效果
  • 5 部分相关代码
    • 5.1 数据预处理
    • 5.2 构建卷积神经网络
    • 5.3 tensorflow计算图可视化
    • 5.4 网络模型训练
    • 5.5 对猫狗图像进行2分类
  • 6 最后

0 前言

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

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

🚩毕业设计 深度学习动物识别系统(源码+论文)

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

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

🧿 项目分享:见文末!

1 项目运行效果


视频效果:

毕业设计 深度学习动物识别系统

1 背景

目前,由于计算机能力和相关理论的发展获得了重大突破,基于深度学习的图像检测与识别技术已经广泛应用到人们的生产生活中。学长将深度学习的技术应用到野生动物图像识别中,优化了传统的识别方法,形成对野生动物图像更为准确的识别,为实现高效的野生动物图像识别提供了可能。不同于传统的野生动物识别,基于深度学习的野生动物识别技术可以捕获到野生动物更加细致的信息,有利于对野生动物进行更加准确的识别和研究。因此,对基于深度学习的野生动物识别和研究,可以更好的帮助社会管理者和政府全面有效的对野生动物进行保护和监管,这也正是保护和识别野生动物的关键,同时这对整个自然和社会的和谐发展具有极大的推动作用。

2 算法原理

这里使用一个简单的demo说明大致原理,实际工程比demo复杂一些

2.1 动物识别方法概况

基于人工特征的野生动物识别方法主要通过人工对野生动物图像中具有辨识度的特征信息进行提取,并通过特征比对的方式就可以对野生动物所属的类别进行识别判断。

在深度学习技术普及之前,传统的数字图像处理技术与传统机器学习技术一直是研究的热点。传统的数字图像处理技术有模块分割、降低噪声点、边缘检测等方法。传统的机器学习技术有支持向量机、随机森林算法、BP 神经网络算法等。

深度学习技术是通过计算机模拟人类大脑的分层表达结构来建立网络模型,从原始数据集中对相关信息逐层提取。之后通过建立相应的神经网络对数据进行学习和分析,从而提高对目标预测和识别的准确率。如今,深度学习技术已经相对成熟,在对目标进行特征提取方面,卷积神经网络技术逐渐取代了传统的图像处理技术,并且在人类的生产生活中得到了广泛应用,这为研究野生动物更高效的识别方法奠定了基础。

2.2 常用的网络模型

图像识别是指对原始图像进行整体分析来达到预测原始图像所属类别的技术。计算机视觉领域中对图像识别技术进行了优化,与此同时,深度学习技术也对图像识别领域展开了突破。目前在图像识别领域中,研究人员开始使用深度学习的技术,并通过在实际应用中发现,基于深度学习的识别技术比传统的识别技术效果更好,且更具有优势。

2.2.1 B-CNN

双线性卷积神经网络(Bilinear CNN,B-CNN)[34]是用两个卷积神经网络对图像进行特征提取,然后使用相应的函数将得到所有特征进行组合,组合的数据带入到分类器中进行分类。

2.2.2 SSD

经典的 SSD 模型是由经典网络和特征提取网络组成。

通过引入性能更好的特征提取网络对 SSD 目标检测模型进行了优化。Fu[49]等人提出了增加卷积神经网络层数和深度的方法用于提高识别准确率。通过实际应用之后,发现该方法识别准确率确实得到了一定程度的提高,但是模型结构却越来越复杂,同时对深层次的网络训练也越来越困难。

3 SSD动物目标检测流程

学长首先对 DenseNet-169 网络进行初始化,使用 DenseNet-169 网络作为目标检测的前置网络结构,并运用迁移学习的方法对 DenseNet-169 进行预训练,并将Snapshot Serengeti数据集下的权重值迁移到野生动物检测任务中,使数据集的训练速度得到提升。将 DenseNet-169 作为前置网络置于 SSD 中的目标提取检测网络之前,更换完前置网络的 SSD 目标检测网络依然完整。

4 实现效果


做一个GUI交互界面

5 部分相关代码

5.1 数据预处理

importcv2ascvimportosimportnumpyasnpimportrandomimportpickleimporttime start_time=time.time()data_dir='./data'batch_save_path='./batch_files'# 创建batch文件存储的文件夹os.makedirs(batch_save_path,exist_ok=True)# 图片统一大小:100 * 100# 训练集 20000:100个batch文件,每个文件200张图片# 验证集 5000:一个测试文件,测试时 50张 x 100 批次# 进入图片数据的目录,读取图片信息all_data_files=os.listdir(os.path.join(data_dir,'train/'))# print(all_data_files)# 打算数据的顺序random.shuffle(all_data_files)all_train_files=all_data_files[:20000]all_test_files=all_data_files[20000:]train_data=[]train_label=[]train_filenames=[]test_data=[]test_label=[]test_filenames=[]# 训练集foreachinall_train_files:img=cv.imread(os.path.join(data_dir,'train/',each),1)resized_img=cv.resize(img,(100,100))img_data=np.array(resized_img)train_data.append(img_data)if'cat'ineach:train_label.append(0)elif'dog'ineach:train_label.append(1)else:raiseException('%s is wrong train file'%(each))train_filenames.append(each)# 测试集foreachinall_test_files:img=cv.imread(os.path.join(data_dir,'train/',each),1)resized_img=cv.resize(img,(100,100))img_data=np.array(resized_img)test_data.append(img_data)if'cat'ineach:test_label.append(0)elif'dog'ineach:test_label.append(1)else:raiseException('%s is wrong test file'%(each))test_filenames.append(each)print(len(train_data),len(test_data))# 制作100个batch文件start=0end=200fornuminrange(1,101):batch_data=train_data[start:end]batch_label=train_label[start:end]batch_filenames=train_filenames[start:end]batch_name='training batch {} of 15'.format(num)all_data={'data':batch_data,'label':batch_label,'filenames':batch_filenames,'name':batch_name}withopen(os.path.join(batch_save_path,'train_batch_{}'.format(num)),'wb')asf:pickle.dump(all_data,f)start+=200end+=200# 制作测试文件all_test_data={'data':test_data,'label':test_label,'filenames':test_filenames,'name':'test batch 1 of 1'}withopen(os.path.join(batch_save_path,'test_batch'),'wb')asf:pickle.dump(all_test_data,f)end_time=time.time()print('制作结束, 用时{}秒'.format(end_time-start_time))

5.2 构建卷积神经网络

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)

5.3 tensorflow计算图可视化

self.x=tf.placeholder(tf.float32,[None,IMAGE_SIZE,IMAGE_SIZE,3],'input_data')self.y=tf.placeholder(tf.int64,[None],'output_data')self.keep_prob=tf.placeholder(tf.float32)# 图片输入网络中fc=self.conv_net(self.x,self.keep_prob)self.loss=tf.losses.sparse_softmax_cross_entropy(labels=self.y,logits=fc)self.y_=tf.nn.softmax(fc)# 计算每一类的概率self.predict=tf.argmax(fc,1)self.acc=tf.reduce_mean(tf.cast(tf.equal(self.predict,self.y),tf.float32))self.train_op=tf.train.AdamOptimizer(LEARNING_RATE).minimize(self.loss)self.saver=tf.train.Saver(max_to_keep=1)

最后的saver是要将训练好的模型保存到本地。

5.4 网络模型训练

然后编写训练部分的代码,训练步骤为1万步

acc_list=[]withtf.Session()assess:sess.run(tf.global_variables_initializer())foriinrange(TRAIN_STEP):train_data,train_label,_=self.batch_train_data.next_batch(TRAIN_SIZE)eval_ops=[self.loss,self.acc,self.train_op]eval_ops_results=sess.run(eval_ops,feed_dict={self.x:train_data,self.y:train_label,self.keep_prob:0.7})loss_val,train_acc=eval_ops_results[0:2]acc_list.append(train_acc)if(i+1)%100==0:acc_mean=np.mean(acc_list)print('step:{0},loss:{1:.5},acc:{2:.5},acc_mean:{3:.5}'.format(i+1,loss_val,train_acc,acc_mean))if(i+1)%1000==0:test_acc_list=[]forjinrange(TEST_STEP):test_data,test_label,_=self.batch_test_data.next_batch(TRAIN_SIZE)acc_val=sess.run([self.acc],feed_dict={self.x:test_data,self.y:test_label,self.keep_prob:1.0})test_acc_list.append(acc_val)print('[Test ] step:{0}, mean_acc:{1:.5}'.format(i+1,np.mean(test_acc_list)))# 保存训练后的模型os.makedirs(SAVE_PATH,exist_ok=True)self.saver.save(sess,SAVE_PATH+'my_model.ckpt')

训练结果如下:

5.5 对猫狗图像进行2分类

篇幅有限,更多详细设计见设计论文

6 最后

项目包含内容

2万5千字 完整详细设计论文

🧿 项目分享:见文末!

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

Qwen2.5本地部署实测:Ollama与vLLM全方位对比指南

Qwen2.5本地部署实测:Ollama与vLLM全方位对比指南 引言:为什么选择本地部署Qwen2.5? 最近,通义千问团队发布的Qwen2.5系列模型引起了广泛关注。最令人瞩目的Qwen2.5-72B在多个基准测试中表现优异,甚至在某些任务上超越…

作者头像 李华
网站建设 2026/6/1 21:32:49

Linux 之 Page Cache

参考链接: https://blog.csdn.net/21cnbao/article/details/80458173 https://github.com/tobert/pcstat https://www.brendangregg.com/blog/2014-12-31/linux-page-cache-hit-ratio.html TestDFSIO Benchmark 命中率情况 以下是 2TB,在 3个 node 上的测试结果。 728G #…

作者头像 李华
网站建设 2026/6/4 17:54:08

springboot基于vue的公安案件信息共享系统的设计与实现_i1g5cv6v

目录已开发项目效果实现截图开发技术核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果实现…

作者头像 李华
网站建设 2026/6/2 9:54:47

tensorflow 零基础吃透:SavedModel 与 RaggedTensor 的结合使用

零基础吃透:SavedModel与RaggedTensor的结合使用 核心背景(先理清) SavedModel 是 TensorFlow 官方的模型序列化格式,能完整保存模型的「权重计算图签名」,支持跨平台部署(如TensorFlow Serving、TFLite&am…

作者头像 李华
网站建设 2026/6/3 12:11:50

7、网络与传输层攻击及防御全解析

网络与传输层攻击及防御全解析 1. 网络层攻击类型 在网络安全领域,网络层攻击是常见且具有威胁性的安全问题。以下为你详细介绍几种典型的网络层攻击方式。 - 可疑TTL值攻击 :在本地子网中,数据包的TTL(Time To Live)值为零是一种可疑现象。这种情况的出现,要么是因…

作者头像 李华