阶段总结——基于深度学习的三叶青图像识别
阶段总结——基于深度学习的三叶青图像识别
文章目录
- 一、计算机视觉图像分类系统设计
- 二、训练模型
- 2.1. 构建数据集
- 2.2. 网络模型选择
- 2.3. 图像数据增强与调参
- 2.4. 部署模型到web端
- 2.5. 开发图像识别小程序
- 三、实验结果
- 3.1. 模型训练
- 3.2. 模型部署
- 四、讨论
- 五、参考文献:
一、计算机视觉图像分类系统设计
三叶青图像识别研究简概
如图1所示,图像分类系统从输入图像开始,经过预处理,进行特征选择和提取,之后经过分类器进行分类,得出最后的预测结果,并输出。在获得训练样本之前,所有的图片都进行了预处理、归一化处理为固定分辨率的图片输入至网络中,然后对其进行特征选择和提取,进行训练得到分类器,从而达到预测目标的任务[1]。

图 1 图像分类系统图
二、训练模型
2.1. 构建数据集
考虑到最终是根据三叶青块根、叶片图片进行训练,并且是根据省份产地进行分类。故本实验的类别目前共有六种:云南省、广西省、未知、浙江省、贵州省、陕西省。其中未知类别的图片来自于从网络上爬取和本地相册中的图片;至于另外五种类别的图片则是自己构建的。获得图片数据集后,则是统一数据集图片的格式、大小。前面共采集了9214张图片,之后便是将数据集按照比例6:2:2分割为训练集、验证集、测试集。各类别图像数量的统计表格如表1所示。

表 1 各类别图像数量的统计
2.2. 网络模型选择
由于考虑到常规的CNN,推理需要很大的计算量,很难应用在移动端等资源受限的场景中。只有通过复杂的裁剪,量化才有可能勉强部署到移动端。本实验采用了MobileNetV3-Large模型,是谷歌提出的轻量化网络架构,引入MobileNetV1的深度可分离卷积、MobileNetV2的具有线性瓶颈的倒残差结构、加入神经网络架构搜索(NAS)和h-swish激活函数,并引入SE通道注意力机制,性能和速度都表现优异[2]。其网络模型结构如图2所示

图 2 MobileNetV3_Large模型架构
2.3. 图像数据增强与调参
在训练之前,先对训练集进行数据增强,通过随即裁剪、缩放图像、随机更改亮度、对比度和饱和度等方法对数据进行增强。之后使用迁移学习方法来训练模型,对MobileNetV3-Large模型进行微调,即改变模型的分类头,使输出大小与数据集的类别数相匹配,为6,故要将模型的最后一层1²×1280改为1²×6。
最后使用随机梯度下降(SGD)优化器,用于更新网络中的参数以最小化损失函数,使用网格搜索函数来搜索最佳超参数组合。
2.4. 部署模型到web端
使用flask+bootstrap+jquery+mysql搭建三叶青在线识别网站;最后使用nginx+gunicorn部署网站在腾讯云上,并配置SSL证书,方便后面微信小程序调用此网站的后端代码。
该网站实现了登录注册、在线识别、图片瀑布流展示、用户数据展示以及其它等功能。
2.5. 开发图像识别小程序
使用uniapp+微信开发者工具+flask后端开发三叶青图像识别微信小程序。此微信小程序主要分为三叶青图像识别功能、图片瀑布流展示、历史记录、登录/注册功能等。
三、实验结果
3.1. 模型训练
其中设置样本批量大小batch_size为128;类别数量num_classes为6;学习率lr为1e-4;权重衰减wd为1e-4;动量momentum为0.9;学习率衰减的周期lr_period为2;学习率衰减的比例lr_decay为1。训练时设置的训练总轮数num_epochs为300;在Epoch197时验证集的准确度最高。运行结果如图3

图 3 模型训练结果
最后,训练集的损失为0.070,训练集的准确度为0.977,验证集的准确度为0.967,测试集上的准确度为0.9718。其中top_n预测正确的概率为99.84%(即在预测得到的置信度排前三的类别中有正确类别的概率)。除了上述的损失、准确率和top-n准确率,还有许多其他的模型精度评估指标,例如分类报告、各类别准确率(如表2所示)、混淆矩阵、PR曲线、AUC-ROC曲线(如图4所示)。

表 2 分类报告与各类别准确率

图 4 混淆矩阵、PR曲线、ROC曲线
3.2. 模型部署
利用pytorch框架训练得到的.pth模型文件转换为onnx文件,并使用ONNX
Runtime来执行模型推理。在此基础上,我们开发了一个三叶青块根图像产地鉴别的在线识别网站(https://www.whtuu.cn),以及一个微信小程序(三叶识青),使得用户可以在各种设备和平台上方便地使用我们的模型进行预测。
四、讨论
本研究的图像分类任务采用了MobileNetV3-Large模型,通过对模型的微调训练、测试、验证工作,对于采集的多产地的三叶青块根图像完成了图像分类,达到了很高的识别准确率,并且识别速度快,模型部署在web端和移动端,操作方便。
但是在此次研究中也发现了一些问题,(1)若想要提高识别率,数据集的构建至关重要,提供的训练集一定要大量、各类别的样本量也要平均,差异不能过大;(2)要采集不同背景下的三叶青块根照片,这样虽然会让识别率降低,但是在实际应用中却是十分必要的;(3)图像数据增强和调参过程很重要,对于模型的精度的提升很大;(4)本研究初步计划同时根据三叶青的叶片照片进行产地分类。然而,由于时间限制,这部分功能未能实现。尽管如此,在web端和移动端仍保留了叶片分类的接口,以便于未来研究和开发。
五、参考文献:
[1] 刘加峰,高子啸,段元民,等. 基于深度学习的中药材饮片图像识别[J].北京生物医学工程,2021,40( 4) : 605-608.
[2] A. Howard et al., “Searching for MobileNetV3,” 2019 IEEE/CVF International Conference on Computer Vision (ICCV), Seoul, Korea (South), 2019, pp. 1314-1324, doi: 10.1109/ICCV.2019.00140.
相关文章:
阶段总结——基于深度学习的三叶青图像识别
阶段总结——基于深度学习的三叶青图像识别 文章目录 一、计算机视觉图像分类系统设计二、训练模型2.1. 构建数据集2.2. 网络模型选择2.3. 图像数据增强与调参2.4. 部署模型到web端2.5. 开发图像识别小程序 三、实验结果3.1. 模型训练3.2. 模型部署 四、讨论五、参考文献&#…...
深度解析Java世界中的对象镜像:浅拷贝与深拷贝的奥秘与应用
在Java编程的浩瀚宇宙中,对象拷贝是一项既基础又至关重要的技术。它直接关系到程序的性能、资源管理及数据安全性。然而,提及对象拷贝,不得不深入探讨其两大核心类型:浅拷贝(Shallow Copy)与深拷贝…...
Python | Leetcode Python题解之第218题天际线问题
题目: 题解: class Solution:def getSkyline(self, buildings: List[List[int]]) -> List[List[int]]:buildings.sort(keylambda bu:(bu[0],-bu[2],bu[1]))buildings.append([inf,inf,inf])heap [[-inf,-inf,-inf]]ans []for l,r,h in buildings:i…...
使用Spring Boot构建RESTful API
使用Spring Boot构建RESTful API 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨如何使用Spring Boot构建RESTful API。通过这篇…...
Spark快速大数据分析PDF下载读书分享推荐
《Spark 快速大数据分析》是一本为 Spark 初学者准备的书,它没有过多深入实现细节,而是更多关注上层用户的具体用法。不过,本书绝不仅仅限于 Spark 的用法,它对 Spark 的核心概念和基本原理也有较为全面的介绍,让读者能…...
Centos7离线安装mysql-5.7.44bundle包
在 CentOS 7 上安装 mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar(这里假设这是一个包含多个 RPM 包的 tar 归档文件)的步骤通常涉及解压归档文件、安装 RPM 包以及配置 MySQL 服务。以下是一个详细的步骤指南: 1. 下载和解压 RPM 包 首先&am…...
ROS melodic版本卸载---Ubuntu18.04
sudo apt-get remove ros-melodic-desktop-fullsudo apt-get remove gazebo* 删除依赖关系 sudo apt autoremove删除与ros关联的所有文件 sudo apt-get purge ros-* sudo rm -rf /etc/ros找到.bashrc文件删除含ros的环境配置语句 全部删除完毕,可以去计算机下的…...
Java面试之Java多线程常见面试题
1、什么是线程? 定义:线程是程序中的执行路径,是操作系统进行调度的基本单位。它允许程序并发执行多个任务,提高程序的响应速度和资源利用率。 2、为什么需要线程? 1、提高并发性:线程允许程序同时执行多…...
Java [ 基础 ] Java面向对象编程 (OOP) ✨
目录 ✨探索Java基础 Java面向对象编程 (OOP) ✨ 引言 1. 类和对象 2. 封装 3. 继承 4. 多态 5. 抽象 结论 ✨探索Java基础 Java面向对象编程 (OOP) ✨ 引言 Java是一门以面向对象编程(OOP)为基础的编程语言。OOP的核心概念包括类和对象、封装…...
敏捷开发笔记(第9章节)--开放-封闭原则(OCP)
目录 1:PDF上传链接 9.1 开放-封闭原则(OCP) 9.2 描述 9.3 关键是抽象 9.3.1 shape应用程序 9.3.2 违反OCP 糟糕的设计 9.3.3 遵循OCP 9.3.4 是的,我说谎了 9.3.5 预测变化和“贴切的”结构 9.3.6 放置吊钩 1.只受一次…...
苹果电脑清理app垃圾高效清理,无需专业知识
在我们的日常使用中,苹果电脑以其优雅的设计和强大的功能赢得了广泛的喜爱。然而,即便是最高效的设备,也无法免俗地积累各种不必要的文件和垃圾,特别是app垃圾。所以,苹果电脑清理app垃圾高效清理,对于大多…...
【算法】(C语言):快速排序(递归)、归并排序(递归)、希尔排序
快速排序(递归) 左指针指向第一个数据,右指针指向最后一个数据。取第一个数据作为中间值。右指针指向的数据 循环与中间值比对,若大于中间值,右指针往左移动一位,若小于中间值,右指针停住。右…...
模型驱动开发(Model-Driven Development,MDD):提高软件开发效率与一致性的利器
目录 前言1. 模型驱动开发的原理1.1 什么是模型驱动开发1.2 MDD的核心思想 2. 模型驱动开发的优势2.1 提高开发效率2.2 确保代码一致性2.3 促进沟通和协作2.4 方便维护和扩展 3. 实现模型驱动开发的方法3.1 选择合适的建模工具3.1.1 UML3.1.2 BPMN3.1.3 SysML 3.2 建模方法3.2.…...
记录discuz修改用户的主题出售价格
大家好,我是网创有方的站长,今天遇到了需要修改discuz的主题出售价格。特此记录下 方法很简单: 进入用于组-》选择论坛-》批量修改...
WGAN(Wassertein GAN)
WGAN E x ∼ P g [ log ( 1 − D ( x ) ) ] E x ∼ P g [ − log D ( x ) ] \begin{aligned} & \mathbb{E}_{x \sim P_g}[\log (1-D(x))] \\ & \mathbb{E}_{x \sim P_g}[-\log D(x)] \end{aligned} Ex∼Pg[log(1−D(x))]Ex∼Pg[−logD(x)] 原始 GAN …...
Maven基本使用
1. Maven前瞻 Maven官网:https://maven.apache.org/ Maven镜像:https://mvnrepository.com 1.1、Maven是什么 Maven是一个功能强大的项目管理和构建工具,可以帮助开发人员简化Java项目的构建过程。 在Maven中,使用一个名为 pom.…...
在Linux系统中配置GitHub的SSH公钥
在Linux系统中配置GitHub的SSH公钥,可以让您无需频繁输入密码即可与GitHub仓库进行交互,提高工作效率。以下是配置步骤: 第一步: 检查SSH密钥是否存在 首先,检查您的用户目录下的.ssh文件夹中是否已有SSH密钥。打开终端࿰…...
小酌消烦暑|人间正清欢
小暑是二十四节气之第十一个节气。暑,是炎热的意思,小暑为小热,还不十分热。小暑虽不是一年中最炎热的时节,但紧接着就是一年中最热的节气大暑,民间有"小暑大暑,上蒸下煮"之说。中国多地自小暑起…...
C语言结构体的相关知识
前言 从0开始记录我的学习历程,我会尽我所能,写出最最大白话的文章,希望能够帮到你,谢谢。 1.结构体类型的概念及定义 1.1、概念: 结构体是一种构造类型的数据结构, 是一种或多种基本类型或构造类型的数…...
RabbitMQ入门教程(精细版二带图)
目录 六 RabbitMQ工作模式 6.1Hello World简单模式 6.1.1 什么是简单模式 6.1.2 RabbitMQ管理界面操作 6.1.3 生产者代码 6.1.4 消费者代码 6.2 Work queues工作队列模式 6.2.1 什么是工作队列模式 6.2.2 RabbitMQ管理界面操作 6.2.3 生产者代码 6.2.4 消费者代码 …...
Jetson Orin Nano 升级jetpack5.1.2刷机过程记录
一.刷机起因 orin nano 接了个IMX477的摄像头,用 命令行DISPLAY:0.0 nvgstcapture-1.0 显示的画面有撕裂,让卖家查问题,卖家测试没有撕裂,对比环境,orin nano出厂默认的是jetpack5.1.1,卖家用的jetpack5.1.2版本,为了解决差异,要升级jetpack版本,前后搞了2天半,记录一下. 另外…...
Python合并Excel文档
有若干个Excel文档,每个文档格式一致,及第一行为文件标题,第二行为表格表头(表头不完全一致)。现需要将他们合并。合并规则为:去掉每个文档的第一行,以第二行为表头,将每个文档的第三…...
内存占用3KB!极致瘦身释放MCU无限可能
极致小体积,给工业领域带来了无限的可能:更低硬件成本,更小芯片体积,更低功耗,更高可靠性,让每一颗小MCU都拥有大系统的完整能力。 https://www.bilibili.com/video/BV1eZLi6PEjc/?spm_id_from333.1387.ho…...
AI率总超标?2026年AI写作辅助网站排行榜权威发布,轻松定稿不是梦!
写论文效率低、熬夜赶稿、查重不过关?别慌!2026 年最新 AI 论文写作工具合集来了,覆盖选题、大纲、初稿、润色、降重、格式、文献引用全流程,帮你精准匹配最适合的学术助手,彻底告别论文内耗!🏆…...
如何快速掌握MoveIt2:面向ROS 2开发者的工业机器人运动规划完整指南
如何快速掌握MoveIt2:面向ROS 2开发者的工业机器人运动规划完整指南 【免费下载链接】moveit2 :robot: MoveIt for ROS 2 项目地址: https://gitcode.com/gh_mirrors/mo/moveit2 想要为你的机器人实现智能运动规划吗?MoveIt2作为ROS 2生态中最强大…...
基于USB ACA模式实现安卓手机边玩边充的游戏手柄设计
1. 项目缘起:当手机性能过剩,却败给了触摸屏几年前,我清理手机游戏时,发现一个挺无奈的现象:性能足以媲美掌机的智能手机里,只剩下一些慢节奏的平台解谜或者数独。那些曾经让我在掌机上废寝忘食的赛车、动作…...
LVGL多页面开发避坑:用内部Timer替代轮询,解决页面切换时的内存踩踏问题
LVGL多页面开发中的内存安全实践:用Timer机制替代轮询的工程解决方案 在嵌入式UI开发中,LVGL因其轻量级和跨平台特性成为热门选择。但当项目复杂度提升到多页面交互时,开发者往往会遇到一个棘手问题:如何在频繁切换页面的同时保证…...
全球无障碍宣传日:iOS 26 辅助功能大升级,这些实用小功能你用过吗?
辅助功能发展与升级很多人对辅助功能的印象还停留在 "小白点",但随着 iPhone 进入全面屏时代,它逐渐变得陌生。实际上,Apple 每年都会为其增添功能,方便身体有障人士使用 iPhone。而且,这些功能不仅惠及有障…...
从零构建FOC轮腿机器人:开源平衡机器人完整指南
从零构建FOC轮腿机器人:开源平衡机器人完整指南 【免费下载链接】foc-wheel-legged-robot Open source materials for a novel structured legged robot, including mechanical design, electronic design, algorithm simulation, and software development. | 一个…...
微信聊天图片丢了别慌!保姆级教程:找回并解密DAT文件(支持新旧版微信路径)
微信DAT图片恢复实战:从文件定位到批量解密的完整指南 微信聊天记录中的图片突然消失?别急着放弃!那些看似无法打开的DAT文件里,可能藏着您的重要回忆或工作资料。本文将带您深入微信存储机制,手把手完成从文件定位到…...
