毕业设计So Easy:卷积神经网络实现中药材识别系统APP

简介: 很多计算机专业大学生经常和我交流:毕业设计没思路、不会做、论文不会写、太难了......针对这些问题,决定分享一些软、硬件项目的设计思路和实施方法,希望可以帮助大家,也祝愿各位学子,顺利毕业!

很多计算机专业大学生经常和我交流:毕业设计没思路、不会做、论文不会写、太难了......


针对这些问题,决定分享一些软、硬件项目的设计思路和实施方法,希望可以帮助大家,也祝愿各位学子,顺利毕业!


2021052512212232[4].png

项目专栏:7天搞定毕业设计和论文


对计算机技术感兴趣的小伙伴请关注公众号:美男子玩编程,公众号优先推送最新技术博文,创作不易,请各位朋友多多点赞、收藏、关注支持~    


1、项目概述

中药识别系统主要采用APP端拍照上传的方式,构建卷积神经网络(CNN)对图像进行识别,具有识别效率高,准确度高的特点。APP端的功能包括但不限于拍照识别、中药问答、检索查询、中药性状以及功效查看、方剂智能推荐等,本系统包含APP端以及服务器端。


项目资源下载请参考:https://download.csdn.net/download/m0_38106923/87577964


2、开发环境

1、medicine-app APP端

Flutter开发


2、medicine-server服务器端工程

Gradle构建

SpringBoot框架,一键启动与部署

文档数据库:MongoDB

全文检索:Elasticsearch + IK分词器

数据库:MySQL

深度学习运行时架构:ONNX Runtime(ONNX Runtime is a cross-platform inference and training machine-learning accelerator)


3、m edicine-crawler爬虫工程

爬虫主要用来爬取训练集以及中药的详细信息,包含但不限于:中药名称、中药形态、图片、 别名、英文名、配伍药方、功效与作用、临床应用、产地分布、药用部位、 性味归经、药理研究、主要成分、使用禁忌、采收加工、药材性状等信息。

爬虫框架:WebMagic

数据持久化:MongoDB

数据结构(简略展示)

中药一级分类信息如下所示:


d50b46280d9f4f76a7911d2c47a1e169.png


中药详细信息如下所示:


c015961d97a043ea99d12955b2ea42d7.png


4、medicine-model卷积神经网络工程  

Language: Python

使用TensorFlow 深度学习框架,使用Keras会大幅缩减代码量

常用的卷积网络模型及在ImageNet上的准确率

433e676306ca4db1b716e63df3f00324.png


3、项目架构

本项目包含六个模块:

medicine-app:APP端

medicine-server:服务器端

medicine-crawler:爬虫工程

medicine-model:卷积神经网络

medicine-util:公用工具类

medicine-dataset:数据集


4、项目实现

由于硬件条件限制,综合考虑模型的准确率、大小以及复杂度等因素,采用了Xception模型,该模型是134层(包含激活层,批标准化层等)拓扑深度的卷积网络模型。


Xception函数定义:

def Xception(include_top=True,
    weights='imagenet',
    input_tensor=None,
    input_shape=None,
    pooling=None,
    classes=1000,
    **kwargs)
# 参数
# include_top:是否保留顶层的全连接网络
# weights:None代表随机初始化,即不加载预训练权重。'imagenet’代表加载预训练权重
# input_tensor:可填入Keras tensor作为模型的图像输入tensor
# input_shape:可选,仅当include_top=False有效,应为长为3的tuple,指明输入图片的shape,图片的宽高必须大于71,如(150,150,3)
# pooling:当include_top=False时,该参数指定了池化方式。None代表不池化,最后一个卷积层的输出为4D张量。‘avg’代表全局平均池化,‘max’代表全局最大值池化。
# classes:可选,图片分类的类别数,仅当include_top=True并且不加载预训练权重时可用

设置Xception参数,迁移学习参数权重加载:xception_weights,如下所示:


# 设置输入图像的宽高以及通道数
img_size = (299, 299, 3)
base_model = keras.applications.xception.Xception(include_top=False,
                                                weights='..\\resources\\keras-model\\xception_weights_tf_dim_ordering_tf_kernels_notop.h5',
                                                input_shape=img_size,
                                                pooling='avg')
# 全连接层,使用softmax激活函数计算概率值,分类大小是628
model = keras.layers.Dense(628, activation='softmax', name='predictions')(base_model.output)
model = keras.Model(base_model.input, model)
# 锁定卷积层
for layer in base_model.layers:
  layer.trainable = False

全连接层训练如下所示:

from base_model import model
# 设置训练集图片大小以及目录参数
img_size = (299, 299)
dataset_dir = '..\\dataset\\dataset'
img_save_to_dir = 'resources\\image-traing\\'
log_dir = 'resources\\train-log'
model_dir = 'resources\\keras-model\\'
# 使用数据增强
train_datagen = keras.preprocessing.image.ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    width_shift_range=0.4,
    height_shift_range=0.4,
    rotation_range=90,
    zoom_range=0.7,
    horizontal_flip=True,
    vertical_flip=True,
    preprocessing_function=keras.applications.xception.preprocess_input)
test_datagen = keras.preprocessing.image.ImageDataGenerator(
    preprocessing_function=keras.applications.xception.preprocess_input)
train_generator = train_datagen.flow_from_directory(
    dataset_dir,
    save_to_dir=img_save_to_dir,
    target_size=img_size,
    class_mode='categorical')
validation_generator = test_datagen.flow_from_directory(
    dataset_dir,
    save_to_dir=img_save_to_dir,
    target_size=img_size,
    class_mode='categorical')
# 早停法以及动态学习率设置
early_stop = EarlyStopping(monitor='val_loss', patience=13)
reduce_lr = ReduceLROnPlateau(monitor='val_loss', patience=7, mode='auto', factor=0.2)
tensorboard = keras.callbacks.tensorboard_v2.TensorBoard(log_dir=log_dir)
for layer in model.layers:
    layer.trainable = False
# 模型编译
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit_generator(train_generator,
                              steps_per_epoch=train_generator.samples // train_generator.batch_size,
                              epochs=100,
                              validation_data=validation_generator,
                              validation_steps=validation_generator.samples // validation_generator.batch_size,
                              callbacks=[early_stop, reduce_lr, tensorboard])
# 模型导出
model.save(model_dir + 'chinese_medicine_model_v1.0.h5')

对于顶部的6层卷积层,我们使用数据集对权重参数进行微调,如下所示:


 # 加载模型
 model=keras.models.load_model('resources\\keras-model\\chinese_medicine_model_v2.0.h5')
 for layer in model.layers:
    layer.trainable = False
 for layer in model.layers[126:132]:
    layer.trainable = True
 history = model.fit_generator(train_generator,
                               steps_per_epoch=train_generator.samples // train_generator.batch_size,
                               epochs=100,
                               validation_data=validation_generator,
                               validation_steps=validation_generator.samples // validation_generator.batch_size,
                               callbacks=[early_stop, reduce_lr, tensorboard])
 model.save(model_dir + 'chinese_medicine_model_v2.0.h5')

最后,服务器端,使用ONNX Runtime调用训练好的模型。


训练过程正确率以及损失函数可视化展示:


2c6bb0eafb63421cbf7f74442a39dfb7.png


5、项目效果演示


320e913bee974c1486f0b16a55bde3d5.jpeg


fc7a555c95994f75a3bb6837e8817fc2.png6ce5fd8fbf264edc87293b9ebfb90ae3.pngf522f6da60f94cccae8ebc0cbd490795.png



a40bb09dd7e54bbd84279a71982c39ee.png9cf9bc4d34ac4e5ca3632bba987e01b3.pngdece08b8016e4dc8a278d81c3609736c.png



47879cda51a0467aaa8f30d3fde854bd.pnge279448b6a3c4d989db81d98cebd744d.png8c280ba7eeff421b949f17686fed19ed.jpeg











  项目资源下载请参见:https://download.csdn.net/download/m0_38106923/87577964


相关文章
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
3月前
|
机器学习/深度学习 算法 机器人
【PID】基于人工神经网络的PID控制器,用于更好的系统响应研究(Matlab&Simulink代码实现)
【PID】基于人工神经网络的PID控制器,用于更好的系统响应研究(Matlab&Simulink代码实现)
361 15
|
2月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
193 2
|
2月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
373 11
|
1月前
|
机器学习/深度学习 分布式计算 Java
Java与图神经网络:构建企业级知识图谱与智能推理系统
图神经网络(GNN)作为处理非欧几里得数据的前沿技术,正成为企业知识管理和智能推理的核心引擎。本文深入探讨如何在Java生态中构建基于GNN的知识图谱系统,涵盖从图数据建模、GNN模型集成、分布式图计算到实时推理的全流程。通过具体的代码实现和架构设计,展示如何将先进的图神经网络技术融入传统Java企业应用,为构建下一代智能决策系统提供完整解决方案。
281 0
|
5月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本内容展示了一种基于粒子群优化(PSO)与时间卷积神经网络(TCN)的时间序列预测方法。通过 MATLAB2022a 实现,完整程序运行无水印,核心代码附详细中文注释及操作视频。算法利用 PSO 优化 TCN 的超参数(如卷积核大小、层数等),提升非线性时间序列预测性能。TCN 结构包含因果卷积层与残差连接,结合 LSTM 构建混合模型,经多次迭代选择最优超参数,最终实现更准确可靠的预测效果,适用于金融、气象等领域。
|
2月前
|
机器学习/深度学习 传感器 数据采集
【故障识别】基于CNN-SVM卷积神经网络结合支持向量机的数据分类预测研究(Matlab代码实现)
【故障识别】基于CNN-SVM卷积神经网络结合支持向量机的数据分类预测研究(Matlab代码实现)
206 0
|
4月前
|
机器学习/深度学习 人工智能 PyTorch
零基础入门CNN:聚AI卷积神经网络核心原理与工业级实战指南
卷积神经网络(CNN)通过局部感知和权值共享两大特性,成为计算机视觉的核心技术。本文详解CNN的卷积操作、架构设计、超参数调优及感受野计算,结合代码示例展示其在图像分类、目标检测等领域的应用价值。
277 7
|
5月前
|
机器学习/深度学习 数据采集 监控
基于CNN卷积神经网络和GEI步态能量提取的步态识别算法matlab仿真,对比不同角度下的步态识别性能
本项目基于CNN卷积神经网络与GEI步态能量提取技术,实现高效步态识别。算法使用不同角度(0°、45°、90°)的步态数据库进行训练与测试,评估模型在多角度下的识别性能。核心流程包括步态图像采集、GEI特征提取、数据预处理及CNN模型训练与评估。通过ReLU等激活函数引入非线性,提升模型表达能力。项目代码兼容Matlab2022a/2024b,提供完整中文注释与操作视频,助力研究与应用开发。
|
5月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的TCN-GRU时间卷积神经网络时间序列预测算法matlab仿真
本内容包含时间序列预测算法的相关资料,涵盖以下几个方面:1. 算法运行效果预览(无水印);2. 运行环境为Matlab 2022a/2024b;3. 提供部分核心程序,完整版含中文注释及操作视频;4. 理论概述:结合时间卷积神经网络(TCN)与鲸鱼优化算法(WOA),优化TCN超参数以提升非线性时间序列预测性能。通过因果卷积层与残差连接构建TCN模型,并用WOA调整卷积核大小、层数等参数,实现精准预测。适用于金融、气象等领域决策支持。

热门文章

最新文章