基于cnn深度学习的yolov5+pyqt+分类+resnet+骨龄检测系统

在这里插入图片描述

往期热门博客项目回顾:

计算机视觉项目大集合

改进的yolo目标检测-测距测速

路径规划算法

图像去雨去雾+目标检测+测距项目

交通标志识别项目

yolo系列-重磅yolov9界面-最新的yolo

姿态识别-3d姿态识别

深度学习小白学习路线

YOLOv5与骨龄识别 YOLOv5(You Only Look Once version 5)是一种基于深度学习的实时目标检测模型,以其高效性和准确性著称。在骨龄识别场景下,YOLOv5可以被训练用来自动定位X光片中的手部或手腕骨骼结构,作为预处理步骤,以便后续进行骨龄分析。。

  • YOLOv5训练阶段基于yolov5 release 7.0版本,Python 3.11.0和PyTorch
    2.1.0.dev20230703,
  • 由于训练过程中需要float64,但Metal不支持float64,所以采用了CPU训练。我们使用了yolov5s的官方预训练权重。
    骨龄识别 骨龄识别是一种利用医学影像评估个体生长发育阶段的技术,它通过对儿童或青少年的手腕或膝关节等部位的X射线图像进行分析,对比标准骨龄图谱来预测个体生理年龄。结合YOLOv5,首先对X光图像进行目标检测,准确标出手部关键骨骼结构,随后这部分区域会被送入专门设计的骨龄分类模型进行详细的骨龄分期判断。

在这里插入图片描述

yolov5阶段项目结构:

  • 图像数据:handbone/data/orignal_data/Image

  • 数据标签:handbone/data/orignal_data/Annotations

  • 标签类别:handbone/data/ImageSets/label_list.txt

  • 代码文件:

    handbone/data/orignal_data/ImageSets/get_list.py:

  • 将数据集分为train、trainval以及val,并将对应文件名字存储于handbone/data/orignal_data/ImageSets中:train.txt,trainval.txt,val.txt

  • handbone/data/create_label.py:将handbone/data/original_data中的数据集转换为适用于目标检测模型训练的标签文件和图像文件,并将文件保存在handbone/data/images和handbone/data/labels,

  • 并将三组数据集对应的文件路径保存在handbone/data/train.txt handbone/data/trainval.txt
    handbone/data/val.txt

  • 使用yolo官方训练脚本进行模型的训练,训练好的权重保存在runs/train/exp/weights/best.pt。

使用resnet18进行骨龄预测: (handbone/data/arthrosis中有关于骨龄计算相关内容)
PyQt框架 PyQt是一个Python绑定的图形用户界面应用程序开发框架,基于Qt库构建。在骨龄识别系统中,PyQt可用于构建直观易用的桌面应用程序界面,实现如图像上传、显示、预处理、结果展示等功能。开发者可以通过PyQt编写前后端交互逻辑,使得医生或者其他用户能够方便地导入X光片,运行YOLOv5进行骨龄相关部位的检测,并在界面上实时显示检测结果和最终的骨龄分析报告。

数据集

  • 中有九种关节类别分别为「DIP, DIPFirst, MCP, MCPFirst, MIP, PIP, PIPFirst, Radius,
    Ulna」,每种类别有11个等级,根据性别来打分,根据分数推断骨龄

  • handbone/arthrosis_data_util.py:使用自适应直方图均衡化(CLAHE)与随机旋转对图像进行增强处理。
    handbone/arthrosis_datalist.py:将图像进行数据划分(9:1),同时将对应文件路径保存在每种类别的文件夹中

  • handbone/arthrosis_dataset.py:主要训练过程的dataloader,其中统一的输入数据的格式,并进行一定的数据增强

  • handbone/arthrosis_trainer.py:模型训练的主程序,主要框架网络是resnet18,但将第一层的输入改为(1,244,244),输出改为对应类别数,并将每类最优模型保存在./params中

  • handbone/common.py:提供了一些计算和处理手骨骨龄相关的功能,包括筛选手骨骨节、计算骨龄、生成报告等功能

  • 由于pytorch在训练过程中的loss函数出现了总线错误,我们将部分代码重新基于keras编写:keras_datasets.py,
    keras_trainer.py, keras_common.py

  • 其他部分也是基于keras实现:

    handbone/hand_bone_detect.py handbone/hand_view.py handbone/main.py

分类算法

骨龄分类算法是整个流程的关键部分,它用于对手部骨骼特征进行量化并映射到相应的骨龄阶段。在YOLOv5完成骨骼定位后,提取出的骨骼特征将输入至分类模型,可能是传统的统计学方法或者是深度学习模型,如卷积神经网络(CNN),来进行精细化的骨龄分期预测。

代码

#全部代码----》: qq1309399183
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.bind_slots()
        # 加载yolov5模型(本地训练好的)
        self.mode = torch.hub.load('./','custom',path='./runs/train/exp/weights/best.pt',source='local')
        self.mode.eval()
        self.mode.conf = 0.5  # 置信度
        print("yolov5模型加载完成")

        # Load other keras models
        self.parm = {}
        for key, value in keras_common.arthrosis.items():
            if value[0] in self.parm:
                continue

            ResNet18, preprocess_input = Classifiers.get('resnet18')
            base_model = ResNet18((224, 224, 1), weights=None, include_top=False)

            model = Sequential()
            model.add(base_model)
            model.add(Flatten())
            model.add(Dense(value[1]))

            # Load weights
            model.load_weights(f"params/{value[0]}")

            self.parm[value[0]] = model
        print("九个模型加载完成")

    # 信号   槽(函数)

    def btn_open_img(self):
        print("点击按钮")
        file_path = QFileDialog.getOpenFileNames(self, dir="handbone/data/images", filter="*.png;*.jpeg;*.jpg")
        if file_path[0]:
            # 选择图片
            print(file_path[0][0])
            # 回显手骨x光片
            self.label_2.setPixmap(QPixmap(file_path[0][0]))

            # 获取性别
            sex = 'boy' if self.radioButton.isChecked() else 'girl'
            print(sex)

            # 侦测
            result = hand_bone_detect.detect(self.mode, sex , file_path[0][0], self.parm)

            # 显示检测结果
            self.label_3.setText(result)

    # 绑定槽
    def bind_slots(self):
        self.pushButton.clicked.connect(self.btn_open_img)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    app.exec()

最后:计算机视觉、图像处理、毕业辅导、作业帮助、代码获取,远程协助,代码定制,私聊会回复!

##全部代码code--》:qq1309339183

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/473683.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NCV7428D15R2G中文资料PDF数据手册参数引脚图图片价格概述参数芯片特性原理

产品概述: NCV7428 是一款系统基础芯片 (SBC),集成了汽车电子控制单元 (ECU) 中常见的功能。NCV7428 为应用微控制器和其他负载提供低电压电源并对其进行监控,包括了一个 LIN 收发器。 产品特性: 控制逻辑3.3 V或5 V VOUT电源&…

(css)步骤条el-steps区分等待、进行中、完成三种状态的图片

(css)步骤条el-steps区分等待、进行中、完成三种状态的图片 效果&#xff1a; <el-steps :active"active" finish-status"success" class"steps"><el-step title"选择.."></el-step><el-step title"..规则&…

【Java】使用 Java 语言实现一个冒泡排序

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章。 这是《Java》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识…

鸿蒙Harmony应用开发—ArkTS-高级组件:@ohos.arkui.advanced.ComposeTitleBar(头像和单双行文本标题栏)

一种普通标题栏&#xff0c;支持设置标题、头像&#xff08;可选&#xff09;和副标题&#xff08;可选&#xff09;&#xff0c;可用于一级页面、二级及其以上界面配置返回键。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角…

Linux CentOS 7.6安装mysql5.7.26详细保姆级教程

一、通过wget下载mysql安装包 1、下载 //进入home目录 cd /home //下载mysql压缩包 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz //解压 tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz //重命名文件夹 mv mys…

【Springboot3+Mybatis】文件上传阿里云OSS 基础管理系统CRUD

文章目录 一、需求&开发流程二、环境搭建&数据库准备三、部门管理四、员工管理4.1 分页(条件)查询4.2 批量删除员工 五、文件上传5.1 介绍5.2 本地存储5.3 阿里云OSS1. 开通OSS2. 创建存储空间Bucket 5.4 OSS快速入门5.5 OSS上传显示文件 六、配置文件6.1 yml配置6.2 C…

【设计模式】Java 设计模式之模板命令模式(Command)

命令模式&#xff08;Command&#xff09;的深入分析与实战解读 一、概述 命令模式是一种将请求封装为对象从而使你可用不同的请求把客户端与接受请求的对象解耦的模式。在命令模式中&#xff0c;命令对象使得发送者与接收者之间解耦&#xff0c;发送者通过命令对象来执行请求…

【NLP】多头注意力(Multi-Head Attention)的概念解析

一. 多头注意力 多头注意力&#xff08;Multi-Head Attention&#xff09;是一种在Transformer模型中被广泛采用的注意力机制扩展形式&#xff0c;它通过并行地运行多个独立的注意力机制来获取输入序列的不同子空间的注意力分布&#xff0c;从而更全面地捕获序列中潜在的多种语…

Linux快速入门,上手开发 01.学习路线

少时曾许凌云志&#xff0c;当取世间第一流 再见少年拉满弓&#xff0c;不惧岁月不飓风 —— 24.3.20 1.Linux的发展历史 2.VM虚拟机的Linux初体验 3.图形化页面设置系统——快速上手 4.命令行操作——向专业前进 5.核心操作命令——必知必会&#xff08;管理企业级权限/定位b…

【LEMONSQUEEZY: 1【mysql写shell】】

前期环境准备 靶机下载地址 https://vulnhub.com/entry/lemonsqueezy-1%2C473/ 信息收集 ┌──(root㉿kali)-[/home/test/桌面/lemmon] └─# nmap -sP 192.168.47.1/24 --min-rate 3333 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-20 14:02 CST Stats: 0:00:06 e…

目标检测——YOLOR算法解读

论文&#xff1a;YOLOR-You Only Learn One Representation: Unifified Network for Multiple Tasks 作者&#xff1a;Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/abs/2105.04206 代码&#xff1a;https://github.com/WongKinYiu/yolo…

使用ansible批量修改操作系统管理员账号密码

一、ansible server端配置 1、对于Linux主机配置免密登录ssh-copy-id -i ~/.ssh/id_rsa.pub rootremote_ip 2、在/etc/ansible/hosts文件中添加相应主机IP 3、对于Windows主机需要在/etc/ansible/hosts文件中进行以下配置 192.168.83.132 ansible_ssh_useradministrator an…

centos重启防火墙导致docker不可用

重启容器报错 错误原因 docker服务启动时定义的自定义链docker&#xff0c;由于centos7 firewall 被清掉 firewall的底层是使用iptables进行数据过滤&#xff0c;建立在iptables之上&#xff0c;这可能会与 Docker 产生冲突。 当 firewalld 启动或者重启的时候&#xff0c;将…

【大数据】Redis介绍和使用

【大数据】Redis介绍和使用 介绍服务器搭建redis支持的五种数据类型数据类型应用场景总结 介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的基于内存的数据结构存储系统&#xff0c;它提供了丰富的数据结构&#xff08;如字符串、哈希表、列表、集合、…

HTML静态网页成品作业(HTML+CSS)——动漫猫和老鼠网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

[C语言]——内存函数

目录 一.memcpy使用和模拟实现&#xff08;内存拷贝&#xff09; 二.memmove 使用和模拟实现 三.memset 函数的使用&#xff08;内存设置&#xff09; 四.memcmp 函数的使用 C语言中规定&#xff1a; memcpy拷贝的就是不重叠的内存memmove拷贝的就是重叠的内存但是在VS202…

Vue3组件的注册

组件是Vue.js中的一个重要概念&#xff0c;它是一种抽象&#xff0c;是一个可以复用的Vue.js实例。它拥有独一无二的组件名称&#xff0c;可以扩展HTML元素&#xff0c;以组件名称的方式作为自定义的HTML标签。 在大多数系统网页中&#xff0c;网页都包含header、body、footer…

流畅的 Python 第二版(GPT 重译)(十)

第十八章&#xff1a;with、match 和 else 块 上下文管理器可能几乎与子例程本身一样重要。我们只是初步了解了它们。[…] Basic 有一个 with 语句&#xff0c;在许多语言中都有 with 语句。但它们的功能不同&#xff0c;它们都只是做一些非常浅显的事情&#xff0c;它们可以避…

神经网络(深度学习,计算机视觉,得分函数,损失函数,前向传播,反向传播,激活函数)

目录 一、神经网络简介 二、深度学习要解决的问题 三、深度学习的应用 四、计算机视觉 五、计算机视觉面临的挑战 六、得分函数 七、损失函数 八、前向传播 九、反向传播 十、神经元的个数对结果的影响 十一、正则化与激活函数 一、神经网络简介 神经网络是一种有监督…

排水管网信息化平台:科技赋能,助力城市水环境管理升级

排水管网承担着城市污水、雨水的收集与排出的双重任务&#xff0c;是城市重要的基础设施。城市化率的不断提高&#xff0c;对城市基础设施的性能也提出了考验。 排水管网存在窨井监测设备不足、管段淤积、无序监管、污水超标排放等问题突出&#xff0c;导致部分污水直排受纳水…