回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

AI项目:鸟类识别实战:卷积神经网络模型训练与部署 简单

头像 zoey不种土豆 2025.07.17 17 0

1.项目介绍

1.1项目简介

在当今数字化时代,图像分类技术在诸多领域发挥着重要作用,从社交媒体自动标签功能到医疗影像诊断。卷积神经网络(简称CNN)作为图像分类领域的核心技术,仿照人脑视觉处理机制构建,凭借其卓越性能广泛应用于各类图像识别任务。

本项目使用Mind+的AI工具库-烟火检测库,通过图形化代码,直观看到图像进行卷积操作的动态过程,理解CNN模型中卷积层与池化层的工作过程。并且,在实践中使用鸟类数据集,通过卷积神经网络训练出鸟类图像分类模型,最终在电脑端应用CNN模型完成实时视频中的鸟类识别。

1.2项目效果视频

2.AI知识介绍

2.1卷积神经网络

卷积神经网络(简称CNN)是深度学习的代表算法之一,其核心思想是利用卷积神经网络操作自动提取图像特征,常用于图像分类等任务。

如下图,一个简单的卷积神经网络通常包含以下结构:

1.输入层(input):接收输入的图片

2.卷积层(convolution):使用卷积核通过滑动窗口和卷积运算,自动提取图像的特征

3.池化层(pooling):通过池化层,保留重要的特征信息

4.全连接层(fully connected):通过全连接层,将提取到的特征进行整合和分类。全连接层可以学习特征之间的复杂关系,并将这些特征映射到类别标签上,输出最后的类别标签。

image.png

一个完整的应用卷积神经网络模型实现图像识别的过程可以表示成如下图所示

(注意:实际的CNN模型可能是多个卷积层和池化层结构,图示只以一层为例)。

image.png

2.2AI工具库介绍

在实际教学场景中,如何让学生直观体会和理解卷积操作和卷积神经网络的工作原理一直是一个困难点。

在Mind+软件中有一个名为"烟火检测"AI工具库,支持动态可视化卷积操作,如下图。

image.png

这个库包含了两大功能:第一部分是可视化卷积、池化、等图像特征提取的过程;第二部分是通过数据集和加载预训练模型resnet50,实现卷积神经网络模型的训练、应用模型实现推理。通过此库,我们可以在教学中降低卷积神经网络的学习门槛,借助可视化帮助学生理解卷积神经网络的提取图像特征的过程,通过数据集训练并应用一个卷积神经网络模型,完成一个图像分类项目。

image.png

3.软硬件环境准备

3.1软硬件器材清单

image.png

3.2软件环境准备

在Mind+软件中点击左下角'扩展库',在用户库中搜索一下链接:https://gitee.com/chenqi1233/ext-fire-smoke-detection,搜索并点击加载'烟火检测'库。

image.png

在加载本库时,会自动检查并下载运行库需要的python依赖包,点击'立即下载'即可。

image.png

4. 理解卷积神经网络模型的特征提取过程

4 .1通过图形化代码,观察卷积过程

卷积层是 CNN 中用于提取图像特征的关键部分。它使用一个小矩阵(称为卷积核)在图像上滑动,与图像的每个区域进行逐元素相乘并求和,得到保留图像特征的特征图。

在电脑中选择一张素材图片,拖入Mind+"项目中的文件"下。

image.png

我们可以使用如下程序,以"1.png"为例,观察卷积的实时过程。

image.png

运行程序,可以看到如下的卷积核对灰度化后的图像进行实时卷积的过程。观看下面视频我们可以看到边缘检测卷积核逐层在灰度图像上滑动,与图像的每一个区域依次进行卷积运算,最终得到右侧的特征图。在特征图中,边缘信息以亮色的形式被突出显示。

可以使用不同的卷积核来提取图像的不同特征,除了边缘检测卷积核外,还有锐化核、运动纹理核等等。一般一个卷积神经网络模型会有多个卷积层,每个卷积层有不同的卷积核,通过多个卷积核提取图像的多种特征,从而提高模型对图像的理解能力和分类能力。

在以上代码的基础上修改为不同类型的卷积核,可以得到不同图像特征图,如下图。

image.png
image.png
image.png

4.2通过图形化代码,观察池化过程

在卷积神经网络中经过卷积层的卷积操作后,通常会使用池化层来进一步处理特征。在池化层中,通过滑动窗口在特征图的基础上进行处理,降低特征图的复杂度的同时,保留关键的特征信息。

我们可以使用以下代码,观察经过池化层处理后的图像,点击运行,观察结果。

image.png

观察电脑运行的结果。可以看到经过池化处理后的图像。我们可以看到经过池化后,相比原图,只保留了图像中鸟的边缘轮廓和脖子上的花纹等信息。

image.png

我们可以对比原图、卷积后的特征图、在卷积特征图的基础上池化后的图,可以发现图像中的细节经过卷积和池化后越来越少,最终只保留图像的关键的特征。这样卷积神经网络在进行最后分类时,只需要关注图像的关键特征信息,能减少计算工作量。

image.png

5.训练并应用卷积神经网络模型

好的,理解了卷积神经网络中卷积层和池化层的工作过程后,我们可以继续使用此库,使用自定义的数据集,通过加载预训练模型resnet50,训练一个卷积神经网络模型,完成特定的图像分类任务。

这里,我们以鸟类识别为例,使用鸟类数据集训练一个能识别斑鸠、鸽子、乌鸫的鸟类图像识别模型。(注意本库仅支持三分类任务的模型的训练)

5.1数据集准备

要训练一个识别鸟类的模型,我们要准备一个以下格式的鸟类图片数据集(数据集见最后附录)。

image.png

代码
birds_dataset/数据集总文件夹名称
├── train/训练集,训练集是模型学习图像特征和分类的主要数据来源。
│   ├── 斑鸠/  斑鸠图片
│   ├── 鸽子/  鸽子图片
│   └── 乌鸫/  乌鸫图片
└── test/测试集,用于评估模型的性能
    ├── 斑鸠/  斑鸠图片
    ├── 鸽子/  鸽子图片
    └── 乌鸫/  乌鸫图片

5.2模型训练

将鸟类数据集文件夹拖入项目中的文件目录下,如下图。

image.png

我们可以使用以下训练代码加载数据集完成训练,设置训练轮数为10轮,将训练好的模型保存为'birds.pt'

image.png

当程序运行时,我们能看到终端输出每一轮的训练数据,包括每一轮模型在训练集和验证集上的准确率和损失值,观察终端我们能够看到,经过10轮训练后,模型在验证集上的准确率达到了96.551%,说明最终训练的模型性能不错。

image.png

当程序运行结束后,我们能看到右侧'项目中的文件'中自动生成了一个名为'birds.pt'的文件,这就是我们训练得到的鸟类识别模型。

5.3应用模型完成推理

接下来,我们就可以使用训练好的卷积神经网络模型完成识别任务了。首先我们可以使用以下代码实现图片推理。

image.png

点击运行程序,可以观察模型对'2.png'推理的结果。

image.png

修改为'1.png',重新运行程序观察结果,如下。

image.png

除了应用模型完成图片推理外,使用以下代码使用opencv库,通过摄像头,实时显示视频画面,从视频画面中识别出现的鸟类。

image.png

点击右上角的运行,会出现一个窗口实时显示摄像头拍摄的画面,当拿起鸟类图片对准摄像头,按下键盘的'空格键',能看到窗口上出现识别的文字,终端也打印出显示识别结果和置信度。

image.png
image.png

6.资料附录

image.png

链接: https://pan.baidu.com/s/1BOoFINSIgzzowdpnisEtkQ?pwd=c9vj

评论

user-avatar