基于深度学习 卷积神经网络resnext50的中医舌苔分类系统,使用pyqt5技术开发了界面,有损失曲线,混淆矩阵,acc precision等指标,还有分类结果显示,对应的症状和诊断的建议

中医舌苔分类系统简介

此系统是基于深度学习卷积神经网络ResNeXt50架构构建的一个中医舌苔分类工具。利用PyQt5技术开发了一个用户友好的图形界面,使得非专业人士也能轻松地上传舌苔图片并获取分析结果。系统不仅提供了舌苔识别功能,还能够展示训练过程中的损失曲线、混淆矩阵以及其他性能指标,如准确率(Accuracy)、精确率(Precision)等。此外,针对不同的舌苔类型,系统还会给出相应的症状说明及治疗建议。

系统功能模块

  1. 舌苔图像上传与显示 用户可以通过界面上传舌苔照片,系统会实时显示上传的图片。

  2. 舌苔自动分类 利用训练好的ResNeXt50模型对上传的舌苔图片进行分类,输出最有可能的舌苔类型及其概率。

  3. 性能指标展示 展示训练过程中的损失函数变化趋势图、混淆矩阵、准确率、精确率等关键性能指标。

  4. 症状与建议 根据识别出的舌苔类型,提供相关的症状描述及治疗建议。

技术栈

  • 深度学习模型: ResNeXt50
  • 前端界面: PyQt5
  • 后端处理: Python, TensorFlow/Keras

示例代码

下面是一段简化的代码示例,包括模型加载、图像预测和界面展示的部分实现。

模型加载与预测
import tensorflow as tf
from tensorflow.keras.applications.resnet_v2 import preprocess_input
from tensorflow.keras.preprocessing.image import load_img, img_to_array

class TongueClassifier:
    def __init__(self, model_path):
        self.model = tf.keras.models.load_model(model_path)

    def predict(self, image_path):
        img = load_img(image_path, target_size=(224, 224))
        x = img_to_array(img)
        x = preprocess_input(x)
        x = tf.expand_dims(x, axis=0)
        predictions = self.model.predict(x)
        return predictions.argmax(axis=-1)[0], max(predictions[0])
PyQt5 GUI 实现
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt

class TongueApp(QWidget):
    def __init__(self, classifier):
        super().__init__()
        self.classifier = classifier
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()
        self.label = QLabel(self)
        self.button = QPushButton("选择图片", self)
        self.button.clicked.connect(self.openFile)
        layout.addWidget(self.label)
        layout.addWidget(self.button)
        self.setLayout(layout)
        self.setWindowTitle('中医舌苔分类系统')

    def openFile(self):
        options = QFileDialog.Options()
        fileName, _ = QFileDialog.getOpenFileName(self,"QFileDialog.getOpenFileName()", "","All Files (*);;JPEG(*.jpg *.jpeg)", options=options)
        if fileName:
            pixmap = QPixmap(fileName)
            self.label.setPixmap(pixmap.scaledToWidth(400))

app = QApplication([])
classifier = TongueClassifier('path/to/model.h5')
window = TongueApp(classifier)
window.show()
app.exec_()

注意事项

  • 上述代码仅为示例,实际部署时需考虑异常处理、多线程操作以提升用户体验。
  • 在生产环境中,应确保模型的安全性,避免敏感信息泄露。
  • 对于GUI部分,可进一步优化布局和交互体验,提高系统的易用性和美观度。

以上就是关于基于深度学习的中医舌苔分类系统的简单介绍和代码示例。通过结合先进的机器学习算法和直观的用户界面,这一系统旨在帮助医生和患者更好地理解和管理舌苔所反映的身体状况。

 舌象舌头舌苔检测数据集 1400张 舌象 带标注 voc yolo

label| pic_ num| box_ num
Mirror-Approx imated: (112, 112)
White-Greasy: (691, 691)
Thin-White: (532, 532) .
Yellow-Greasy: (85, 85)
Grey-Black: (52, 52)
total: (1472, 1472)

舌象舌头舌苔检测数据集介绍

数据集概述

该数据集专为舌象舌头舌苔检测设计,包含1400张图像,每张图像均附带有YOLO格式的标注信息。以下是该数据集的详细信息:

  1. 数据量:共1400张图像。
  2. 数据格式:每张图像均附有.txt标签文件(YOLO格式)。
  3. 标注信息:标注了六种不同类型的舌象特征。
  4. 配置文件:包含一个.yaml文件,用于描述数据集的配置信息。
数据集特点
  1. 专业性强:专为舌象舌头舌苔检测设计,适用于中医诊断和健康评估。
  2. 数据完整性:每张图像均附有详细的标签信息,便于模型学习。
  3. 格式统一:所有标签统一为YOLO格式,方便直接用于模型训练。
  4. 配置文件:包含数据集的配置信息,简化了数据集使用的复杂度。
数据集内容
  • 图像文件:包含1400张JPG/PNG格式的图像文件。
  • 标签文件:每张图像对应一个.txt格式的标签文件,包含对象的边界框位置信息。
  • 配置文件:一个.yaml文件,描述了数据集的基本配置信息,如类别数量、类别名称、训练集路径等。
数据集结构示例

假设数据集的根目录为 tongue_image_dataset,其结构可能如下所示:

tongue_image_dataset/
├── train/
│   ├── images/
│   │   ├── image_000001.jpg
│   │   ├── image_000002.jpg
│   │   └── ...
│   ├── labels/
│   │   ├── image_000001.txt
│   │   ├── image_000002.txt
│   │   └── ...
├── valid/
│   ├── images/
│   │   ├── image_000001.jpg
│   │   ├── image_000002.jpg
│   │   └── ...
│   ├── labels/
│   │   ├── image_000001.txt
│   │   ├── image_000002.txt
│   │   └── ...
└── data.yaml  # 数据集配置文件
数据集配置文件 data.yaml

创建一个 data.yaml 文件来描述您的数据集。这里假设数据集被放置在一个名为 tongue_image_dataset 的目录中,且包含 trainvalid 子目录。

# data.yaml 文件
train: ../tongue_image_dataset/train/images/
val: ../tongue_image_dataset/valid/images/
test: null  # 如果有单独的测试集路径,则填写

nc: 6  # number of classes
names: ['Mirror-Approximated', 'White-Greasy', 'Thin-White', 'Yellow-Greasy', 'Grey-Black', 'Total']  # 类别名称

在这个例子中,我们假定了六种类别:镜面-近似(Mirror-Approximated)、白腻(White-Greasy)、薄白(Thin-White)、黄腻(Yellow-Greasy)、灰黑(Grey-Black)以及总数(Total)。其中“总数”可能是为了统计目的而存在的,实际训练时可能不会作为一个类别。

关键训练代码
安装YOLOv7

如果您还没有安装YOLOv7框架,请按照官方文档执行以下命令:

git clone https://github.com/WongKinYiu/yolov7.git  # 克隆YOLOv7仓库
cd yolov7
pip install -r requirements.txt  # 安装依赖项
使用YOLOv7训练

使用以下命令开始训练模型:

cd yolov7
python train.py --img 640 --batch 16 --epochs 100 --data ../tongue_image_dataset/data.yaml --weights yolov7.pt --cache
自定义训练脚本

如果需要更详细的控制,可以编写一个Python脚本来执行训练过程。以下是一个简单的脚本示例:

import torch
from yolov7.utils.datasets import LoadImagesAndLabels
from yolov7.models.yolo import Model

def train_model():
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    data_yaml = '../tongue_image_dataset/data.yaml'
    
    # 加载数据集
    train_loader = LoadImagesAndLabels(data_yaml, img_size=(640, 640), batch_size=16, augment=True)
    
    # 加载预训练模型
    model = Model('yolov7.yaml').to(device)
    
    # 设置训练参数
    epochs = 100
    optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9, weight_decay=0.0005)
    scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)
    
    # 开始训练
    for epoch in range(epochs):
        model.train()
        for batch_idx, (images, targets) in enumerate(train_loader):
            images = images.to(device)
            targets = [t.to(device) for t in targets]
            
            # 前向传播
            output = model(images)
            
            # 计算损失
            loss = model.loss(output, targets)
            
            # 反向传播
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
        
        # 更新学习率
        scheduler.step()
    
    # 保存模型
    torch.save(model.state_dict(), 'trained_model.pt')
    print('Training complete.')

if __name__ == '__main__':
    train_model()

使用训练好的权重文件进行测试

如果您已经有了训练好的模型权重文件,可以直接使用它来进行测试。假设权重文件名为 best.pt,可以使用以下命令:

python detect.py --weights best.pt --img 640 --conf 0.4 --source ../tongue_image_dataset/valid/images/

总结

这个示例展示了如何使用YOLOv7框架训练舌象舌头舌苔检测数据集。您可以根据自己的需求调整脚本中的参数和逻辑。通过使用这个数据集和相应的训练代码,您可以有效地训练出一个能够在多种条件下检测舌象特征的模型。在实际应用中,可以根据具体需求调整模型结构和训练参数。此外,提供的训练代码可以让您快速启动训练流程,并获得良好的检测效果。

如果您希望扩展类别或者有不同的数据集划分选项(比如加入更多的训练集、验证集和测试集),可以在 data.yaml 文件中进行相应的调整,并在训练和测试过程中指定相应的路径。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐