医学图像处理及诊断系统 基于cnn深度学习 yolov5+pyqt+分类+resnet+骨龄检测系统 往期热门博客项目回顾计算机视觉项目大集合改进的yolo目标检测-测距测速路径规划算法图像去雨去雾目标检测测距项目交通标志识别项目yolo系列-重磅yolov9界面-最新的yolo姿态识别-3d姿态识别深度学习小白学习路线YOLOv5与骨龄识别 YOLOv5You Only Look Once version 5是一种基于深度学习的实时目标检测模型以其高效性和准确性著称。在骨龄识别场景下YOLOv5可以被训练用来自动定位X光片中的手部或手腕骨骼结构作为预处理步骤以便后续进行骨龄分析。。YOLOv5训练阶段基于yolov5 release 7.0版本Python 3.11.0和PyTorch2.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.txttrainval.txtval.txthandbone/data/create_label.py将handbone/data/original_data中的数据集转换为适用于目标检测模型训练的标签文件和图像文件并将文件保存在handbone/data/images和handbone/data/labels并将三组数据集对应的文件路径保存在handbone/data/train.txt handbone/data/trainval.txthandbone/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但将第一层的输入改为1244244输出改为对应类别数并将每类最优模型保存在./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来进行精细化的骨龄分期预测。代码#全部代码--class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__()self.setupUi(self)self.bind_slots()# 加载yolov5模型本地训练好的self.modetorch.hub.load(./,custom,path./runs/train/exp/weights/best.pt,sourcelocal)self.mode.eval()self.mode.conf0.5# 置信度print(yolov5模型加载完成)# Load other keras modelsself.parm{}forkey, valueinkeras_common.arthrosis.items():ifvalue[0]inself.parm:continueResNet18, preprocess_inputClassifiers.get(resnet18)base_modelResNet18((224,224,1),weightsNone,include_topFalse)modelSequential()model.add(base_model)model.add(Flatten())model.add(Dense(value[1]))# Load weightsmodel.load_weights(fparams/{value[0]})self.parm[value[0]]model print(九个模型加载完成)# 信号 槽函数def btn_open_img(self): print(点击按钮)file_pathQFileDialog.getOpenFileNames(self,dirhandbone/data/images,filter*.png;*.jpeg;*.jpg)iffile_path[0]:# 选择图片print(file_path[0][0])# 回显手骨x光片self.label_2.setPixmap(QPixmap(file_path[0][0]))# 获取性别sexboyifself.radioButton.isChecked()elsegirlprint(sex)# 侦测resulthand_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__:appQApplication(sys.argv)windowMainWindow()window.show()app.exec()最后计算机视觉、图像处理、代码获取远程协助代码定制私聊会回复!##全部代码code--