毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

目录

前言

课题背景和意义

实现技术思路

一、 算法理论基础

1.1 深度学习

1.2 卷积神经网络

1.3 细粒度图像分类

二、 数据集

2.1 数据集

2.2 数据扩充

 三、实验及结果分析

3.1 实验环境搭建

3.2 模型训练

实现效果图样例

最后


前言

    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

    选题指导:

        最新最全计算机专业毕设选题精选推荐汇总

        大家好,这里是海浪学长毕设专题,本次分享的课题是

       🎯基于深度学习的蝴蝶种类识别检测系统 

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

课题背景和意义

       在生物学研究和生态保护中,蝴蝶种类识别检测系统可以帮助研究人员和保护机构实现高效的蝴蝶调查和监测,了解蝴蝶种群的分布和数量变化,为生态保护和物种保护提供科学依据。此外,该系统还可以在生态旅游和教育展示中发挥作用,提供便捷的蝴蝶种类识别服务,增强公众对生物多样性的认识和保护意识。它能够为生物学研究和生态保护提供科学工具和决策支持,促进蝴蝶种类识别和生物图像识别的发展与应用。

实现技术思路

一、 算法理论基础

1.1 深度学习

       算法第一步先在输入图像上通过卷积提取特征图,其中共享卷积核。然后将得到的卷积特征图输入RPN网络中,通过RPN网络生成待检测的RoI候选框并对RoI候选框进行位置的修正。在通过RoI池化层对RPN网络的输出特征图上进行卷积操作,输出每个RoI区域所对应的特征图,并将维度置为定值。最后,使用全连接层(FC Layer)对RoI区域特征图进行分类,并且对目标bounding boxes进行第二次修正。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

       Faster RCNN的结构主要由三大部分组成,第一部分是共享卷积层,第二部分是RPN候选区域生成网络,第三部分是对候选区域进行分类的网络分类器(classifier)。其中,RPN与分类器部分均对目标框有修正。分类器部分继承自Fast RCNN结构。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

       在RPN网络之前是共享的卷积层部分,在该部分通过利用卷积神经网络对输入的图像提取共享特征图即features。把共享特征图输入RPN网络后,通过一个滑动窗口在共享特征图上为每个特征点生成9种anchor(即目标框),长宽比与面积比已预先设置好。这9种初始anchor包含有三种固定的面积(128×128,256×256,512×512),每种面积又包含三种长宽比(1:1,1:2,2:1)。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

1.2 卷积神经网络

       GrabCut图像分割算法是一种有效的从复杂背景中提取前景目标的交互式的分割算法,基于      GraphCuts算法的原理改进而来。主要功能是用来分割图像的前后景。该算法需要经过用户的交互,通过高斯混合模型的训练方法提高分割精度,并采用迭代估计法实现能量最小化得到最后的分割结果。

算法基本操作流程:

  • (1)在待分割的图片上框选出想要分割目标的区域,在目标外面画一个待分割区域框,然后输入GrabCut算法中,就能分割出想要的目标。
  • (2)在分割完成后在分割图上增加额外的用户交互(用户指定某些区域为前景,某些区域为背景),就能够得到更加完美的分割效果。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

相关代码示例:

mport cv2
import numpy as np

# 读取图像
image = cv2.imread('input_image.jpg')

# 创建一个与图像大小相同的掩码,用于指定前景和背景区域
mask = np.zeros(image.shape[:2], np.uint8)

# 定义前景和背景模型
bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)

# 定义待分割目标的矩形框
rect = (x, y, w, h)  # 根据实际情况设置目标框的坐标和大小

# 运行GrabCut算法进行目标分割
cv2.grabCut(image, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)

# 根据掩码提取前景区域
mask_foreground = np.where((mask == 1) | (mask == 3), 255, 0).astype('uint8')

# 显示分割结果
cv2.imshow('Segmented Image', mask_foreground)
cv2.waitKey(0)
cv2.destroyAllWindows()

        SLIC(simple linear iterativeclustering)即简单的线性迭代聚类,是一种比较常用的超像素分割算法,实现起来方便、简单,在工程上有广泛的使用。SLIC主要使用了CIELAB颜色空间,将RGB彩色图像转化为CIELAB空间下的5维特征向量。CIELAB色彩模型除了x,y坐标之外还包括亮度L和有关色彩的A,B三个要素。L表示亮度(Luminosity),值域为[0,100] 。A表示从红色到绿色的范围,B表示从黄色到蓝色的范围,取值在[-128, 127]之间。2维表示二维空间坐标轴特征。通过将5维特征向量构造为距离度量标准,达到对图像像素进行局部聚类的目的。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

 SLIC具体实现的步骤如下所示:

  •  初始化种子点(聚类中心):与K-means聚类算法类似,首先在程序初始阶段设定需要分割的超像素个数K。假设输入的图片像素的个数为N,则要将该图片分割为 K 个超像素块,每个超像素块都是一个聚类。那么每个超像素块的大小为SS,则相邻种子点的距离近似为S=sqrt(N/K)。
  • 邻域内重新选择种子点(假设取n=3):在每个超像素块中随机采样一个点作为聚类中心。以避免采样点落在图像梯度较大的轮廓边界上,影响后续聚类的效果,对该采样点周围nn邻域内计算所有像素点的梯度值,找到该邻域内梯度最小的像素点,将聚类中心移动到该点上。
  • 在采样点周围的邻域内为每个像素点分配类标签
  • 距离度量:分别计算每个搜索到的像素点和该超像素点的距离。
  • 迭代优化:不断迭代上述步骤直到误差收敛,实践发现10次迭代对绝大部分图片都可以得到较理想效果,所以一般迭代次数取10。
  • 增强连通GrabCut图像分割算法是一种有效的从复杂背景中提取前景目标的交互式的分割算法,基于GraphCuts算法的原理改进而来。主要功能是用来分割图像的前后景。该算法需要经过用户的交互,通过高斯混合模型的训练方法提高分割精度,并采用迭代估计法实现能量最小化得到最后的分割结果。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

1.3 细粒度图像分类

       在自然环境下由于蝴蝶所处的状态不同,蝴蝶的翅膀呈现展翅和合翅两种状态,不同种类的蝴蝶其翅膀脉络也有相似的情况。由于蝴蝶翅膀的颜色可能和背景颜色相似,或者由于蝴蝶具有拟态的生物属性而与背景混合在一起这些因素都给蝴蝶图像的细粒度分类造成了一定的困难。本文旨在对自然环境下的蝴蝶进行识别,而由于自然环境背景比较复杂,并且这类图像中目标蝴蝶的数量和占图片大小的比例也不一致,因此需要先通过上文所提出的蝴蝶分割方法定位并分割出蝴蝶目标,最后对蝴蝶目标进行分类。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

       针对细粒度图像分类的方法可分为强监督信息方法和弱监督信息方法。基于强监督细粒度图像分类的方法一般通过CNN网络提取图像中具有明显特征信息的判别性部件(如汽车的车灯、车头、车尾等)进行细粒度信息的识别。但是对于输入网络的数据而言需要大量人工标注的区分度部件标注。通过弱监督方法可以自动提取目标图像中具有区分度的部件特征,这样既降低了人工标注的成本,也可以减少人工标注带来的误差,提高算法的精度。同时,由于蝴蝶图像的特点,很难通过人工找到并标注具有区分度的局部特征区域。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

相关代码示例:

# 进行目标分割或图像标注,获取目标区域的掩码或标签
mask = np.zeros(image.shape[:2], np.uint8)
bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)
rect = (x, y, w, h)  # 根据实际情况设置目标框的坐标和大小
cv2.grabCut(image, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)
mask_foreground = np.where((mask == 1) | (mask == 3), 255, 0).astype('uint8')

# 根据目标区域的掩码或标签提取具有区分度的部件特征
label_image = label(mask_foreground)  # 对掩码进行连通区域标记
regions = regionprops(label_image)  # 获取每个连通区域的属性

for region in regions:
    # 提取区域的坐标、大小等属性
    min_row, min_col, max_row, max_col = region.bbox
    width = max_col - min_col
    height = max_row - min_row

二、 数据集

2.1 数据集

       使用的蝴蝶图像数据集共有4353张蝴蝶图片,图片中的蝴蝶姿态、大小、拍摄角度都不相同,共有40种不同种类。由于数据集中每个类别的数量有一定的差别,因此后期进行数据集划分时将每个种类的图片平均分成训练集和测试集,使两者每个种类图片数相当。蝴蝶数据集中的蝴蝶图像都处于自然状态下,蝴蝶的姿态、大小、纹理都不相同,图像的背景也不单一。同时,自然状态下的蝴蝶还会通过拟态和所处的环境混合在一起,让人无法察觉。而影响分类结果的往往是物体的判别性部位而非所处的环境,冗余的背景信息也可能在后续的特征提取中对分类结果产生一定的影响。因此,需要对蝴蝶图像进行预处理,将蝴蝶目标从图像中分割出来。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

2.2 数据扩充

       由于所处理的蝴蝶图像数据集没有对应的蝴蝶分割标签,而缺乏标签的图像无法对网络进行训练,因此需要通过人工分割的方式对图像进行掩码标注,构建一个小型的分割数据集用来训练。本文首先从原数据集中随机选择400张蝴蝶图像进行细致的人工标注,得到一个小型的分割数据集,蝴蝶图像标注示意图如图3-2所示。并对数据集进行划分,其中350张图片作为训练集,50张作为测试集,用来验证分割效果。将Mask RCNN模型的分类数目调整为2类,只有背景和蝴蝶。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

       使用Mask RCNN主要用来分割蝴蝶图像,只需要关注分割指标。在IoU为0.5和0.75下平均精度都达到了0.96,说明训练得到的模型很好的分割出来了测试集中的蝴蝶图像,可以用于对整个蝴蝶数据集的分割。最后使用训练好的Mask RCNN模型对蝴蝶数据集进行分割,Mask RCNN基本上能把蝴蝶从图像中分割出来。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

 三、实验及结果分析

3.1 实验环境搭建

3.2 模型训练

       数据流程:先将数据输入神经网络中进行训练,得到输入图片的特征向量,然后将特征向量输入到分类器中得到分类结果,将分类结果与图片标签进行比较得到损失值,最后通过损失值计算网络中各参数的梯度,并进行网络微调得到最优模型。最后将测试图片输入到训练好的网络中,得到分类结果。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

       实验中所使用的蝴蝶数据集包含40个种类的蝴蝶图像,每个种类的蝴蝶图像数量在40~120之间。把每类蝴蝶图像平均划分为训练集和测试集,则训练集的图像总数为2182,测试集总数为2171,两者数量相当,并从训练集的每类中取5张组成模型的验证集,用来训练模型的超参数、预估模型的泛化能力。由于图片的大小不一,因此在训练网络之前首先使用双线性插值方法统一缩放到448*448大小,并进行归一化处理。统一采用SGD优化器,momentum为0.9,weight decay为1e-5。对于训练集图像还进行随机的水平翻转,而测试集图片不进行处理,损失函数统一采用交叉熵(Cross Entropy Loss)。

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

实现效果图样例

毕业设计选题:基于深度学习的蝴蝶种类识别检测系统 人工智能 YOLO 计算机视觉

最后

我是海浪学长,创作不易,欢迎点赞、关注、收藏。

毕设帮助,疑难解答,欢迎打扰!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值