当前位置: 首页 > article >正文

MRI 脊椎分割数据集/脊椎分割项目解决

MRI 脊椎分割数据集/脊椎分割项目解决包含脊椎分割数据集:原图标签分别2460张代码仅供参考MRI 脊椎分割数据集/脊椎分割项目解决包含脊椎分割数据集:原图标签分别2460张完整的基于YOLOv5的MRI脊椎分割项目的实现。我们将涵盖以下内容项目结构依赖项安装数据准备模型训练评估模型推理界面完整项目结构spine_segmentation/ ├── main.py ├── train.py ├── evaluate.py ├── infer.py ├── ui_files/ │ ├── infer_ui.ui │ ├── infer_ui.qrc │ └── infer_ui_rc.py ├── datasets/ │ ├── spine/ │ │ ├── images/ │ │ ├── labels/ │ │ ├── train.txt │ │ └── val.txt ├── best_spine.pt ├── requirements.txt └── data.yaml文件内容requirements.txtopencv-python4.5.3.56 torch1.9.0cu111 PyQt55.15.4 labelme shutil matplotlib scikit-image numpy pandasdata.yamltrain:./datasets/spine/images/trainval:./datasets/spine/images/valnc:1names:[vertebra]train.pyimporttorchfromyolov5importtrain# 设置随机种子以保证可重复性torch.manual_seed(42)# 定义数据集路径dataset_configdata.yaml# 训练模型resultstrain.run(imgsz640,batch16,epochs50,datadataset_config,weightsyolov5s.pt,namespine,projectruns/train)# 打印训练结果print(results)evaluate.pyfromyolov5importval# 初始化YOLOv5模型model_pathruns/train/spine/weights/best.pt# 评估模型resultsval.run(datadata.yaml,weightsmodel_path,imgsz640,taskval)# 打印评估结果print(results)infer.pyimportsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QFileDialog,QMessageBox,QLabel,QPushButton,QVBoxLayout,QWidget,QProgressBarfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQTimerimporttorchfrompathlibimportPathfromyolov5.utils.generalimportnon_max_suppression,scale_coordsfromyolov5.models.experimentalimportattempt_loadfromyolov5.utils.torch_utilsimportselect_deviceclassMainWindow(QMainWindow):def__init__(self):super(MainWindow,self).__init__()self.setWindowTitle(MRI 脊椎分割)self.setGeometry(100,100,800,600)# 初始化YOLOv5模型self.deviceselect_device()self.modelattempt_load(runs/train/spine/weights/best.pt,map_locationself.device)self.strideint(self.model.stride.max())# model strideself.imgsz640# 创建界面元素self.label_displayQLabel(self)self.label_display.setAlignment(Qt.AlignCenter)self.button_select_imageQPushButton(选择图片,self)self.button_select_folderQPushButton(选择文件夹,self)self.button_select_videoQPushButton(选择视频,self)self.button_start_cameraQPushButton(开始摄像头,self)self.button_stop_cameraQPushButton(停止摄像头,self)self.progress_barQProgressBar(self)self.progress_bar.setVisible(False)layoutQVBoxLayout()layout.addWidget(self.label_display)layout.addWidget(self.button_select_image)layout.addWidget(self.button_select_folder)layout.addWidget(self.button_select_video)layout.addWidget(self.button_start_camera)layout.addWidget(self.button_stop_camera)layout.addWidget(self.progress_bar)containerQWidget()container.setLayout(layout)self.setCentralWidget(container)self.button_select_image.clicked.connect(self.select_image)self.button_select_folder.clicked.connect(self.select_folder)self.button_select_video.clicked.connect(self.select_video)self.button_start_camera.clicked.connect(self.start_camera)self.button_stop_camera.clicked.connect(self.stop_camera)self.timerQTimer()self.timer.timeout.connect(self.update_frame)self.capNoneself.results[]defload_image(self,image_path):framecv2.imread(image_path,cv2.IMREAD_GRAYSCALE)framecv2.cvtColor(frame,cv2.COLOR_GRAY2BGR)resultsself.detect(frame)annotated_frameself.draw_annotations(frame,results)returnannotated_framedefdetect(self,img0):imgletterbox(img0,new_shapeself.imgsz,strideself.stride)[0]imgimg[:,:,::-1].transpose(2,0,1)# BGR to RGB, to 3x416x416imgnp.ascontiguousarray(img)imgtorch.from_numpy(img).to(self.device)imgimg.float()# uint8 to fp16/32img/255.0# 0 - 255 to 0.0 - 1.0ifimg.ndimension()3:imgimg.unsqueeze(0)predself.model(img,augmentFalse)[0]prednon_max_suppression(pred,0.25,0.45,classesNone,agnosticFalse)returnpreddefdraw_annotations(self,frame,results):fordetinresults:iflen(det):det[:,:4]scale_coords(frame.shape[2:],det[:,:4],frame.shape).round()for*xyxy,conf,clsinreversed(det):labelf{self.model.names[int(cls)]}{conf:.2f}plot_one_box(xyxy,frame,labellabel,color(0,255,0),line_thickness3)returnframedefdisplay_image(self,frame):rgb_imagecv2.cvtColor(frame,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w qt_imageQImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)pixmapQPixmap.fromImage(qt_image)self.label_display.setPixmap(pixmap.scaled(self.label_display.width(),self.label_display.height()))defselect_image(self):optionsQFileDialog.Options()file_path,_QFileDialog.getOpenFileName(self,选择图片,,图片 (*.jpg *.jpeg *.png *.tif);;所有文件 (*),optionsoptions)iffile_path:annotated_frameself.load_image(file_path)self.display_image(annotated_frame)self.results.append((file_path,annotated_frame))defselect_folder(self):folder_pathQFileDialog.getExistingDirectory(self,选择文件夹)iffolder_path:files[os.path.join(folder_path,f)forfinos.listdir(folder_path)iff.endswith((.jpg,.jpeg,.png,.tif))]total_fileslen(files)self.progress_bar.setMaximum(total_files)self.progress_bar.setValue(0)self.progress_bar.setVisible(True)fori,file_pathinenumerate(files):annotated_frameself.load_image(file_path)self.display_image(annotated_frame)self.results.append((file_path,annotated_frame))self.progress_bar.setValue(i1)self.progress_bar.setVisible(False)defselect_video(self):optionsQFileDialog.Options()file_path,_QFileDialog.getOpenFileName(self,选择视频,,视频 (*.mp4 *.avi);;所有文件 (*),optionsoptions)iffile_path:self.process_video(file_path)defprocess_video(self,video_path):self.capcv2.VideoCapture(video_path)whileself.cap.isOpened():ret,frameself.cap.read()ifnotret:breakresultsself.detect(frame)annotated_frameself.draw_annotations(frame,results)self.display_image(annotated_frame)self.results.append((video_path,annotated_frame))ifcv2.waitKey(1)0xFFord(q):breakself.cap.release()defstart_camera(self):self.capcv2.VideoCapture(0)self.timer.start(30)defstop_camera(self):self.timer.stop()ifself.capisnotNone:self.cap.release()self.label_display.clear()defupdate_frame(self):ret,frameself.cap.read()ifnotret:returnresultsself.detect(frame)annotated_frameself.draw_annotations(frame,results)self.display_image(annotated_frame)self.results.append((camera,annotated_frame))defletterbox(img,new_shape(640,640),color(114,114,114),autoTrue,scaleFillFalse,scaleupTrue,stride32):shapeimg.shape[:2]# current shape [height, width]rmin(new_shape[0]/shape[0],new_shape[1]/shape[1])ifnotscaleup:# only scale down, do not scale up (for better test mAP)rmin(r,1.0)ratior,r# width, height ratiosnew_unpadint(round(shape[1]*r)),int(round(shape[0]*r))dw,dhnew_shape[1]-new_unpad[0],new_shape[0]-new_unpad[1]# wh paddingifauto:# minimum rectangledw,dhnp.mod(dw,stride),np.mod(dh,stride)# wh paddingelifscaleFill:# stretchdw,dh0.0,0.0new_unpad(new_shape[1],new_shape[0])rationew_shape[1]/shape[1],new_shape[0]/shape[0]# width, height ratiosdw/2# divide padding into 2 sidesdh/2ifshape[::-1]!new_unpad:# resizeimgcv2.resize(img,new_unpad,interpolationcv2.INTER_LINEAR)top,bottomint(round(dh-0.1)),int(round(dh0.1))left,rightint(round(dw-0.1)),int(round(dw0.1))imgcv2.copyMakeBorder(img,top,bottom,left,right,cv2.BORDER_CONSTANT,valuecolor)# add borderreturnimg,ratio,(dw,dh)defplot_one_box(x,img,colorNone,labelNone,line_thicknessNone):tlline_thicknessorround(0.002*(img.shape[0]img.shape[1])/2)1# line/font thicknesscolorcoloror[random.randint(0,255)for_inrange(3)]c1,c2(int(x[0]),int(x[1])),(int(x[2]),int(x[3]))cv2.rectangle(img,c1,c2,color,thicknesstl,lineTypecv2.LINE_AA)iflabel:tfmax(tl-1,1)# font thicknesst_sizecv2.getTextSize(label,0,fontScaletl/3,thicknesstf)[0]c2c1[0]t_size[0],c1[1]-t_size[1]-3cv2.rectangle(img,c1,c2,color,-1,cv2.LINE_AA)# filledcv2.putText(img,label,(c1[0],c1[1]-2),0,tl/3,[225,255,255],thicknesstf,lineTypecv2.LINE_AA)if__name____main__:appQApplication(sys.argv)windowMainWindow()window.show()sys.exit(app.exec_())运行步骤总结克隆项目仓库如果有的话gitclone https://github.com/yourusername/spine_segmentation.gitcdspine_segmentation安装依赖项conda create--namespine_envpython3.8conda activate spine_env pipinstall-rrequirements.txt下载YOLOv5代码gitclone https://github.com/ultralytics/yolov5.gitcdyolov5 pipinstall-rrequirements.txtcd..准备数据集将你的MRI脊椎图像放入datasets/spine/images目录。将对应的标注文件假设为YOLO格式的TXT文件放入datasets/spine/labels目录。使用脚本划分数据集为训练集和验证集并生成train.txt和val.txt文件。训练模型python train.py评估模型python evaluate.py运行推理界面python infer.py操作界面选择图片进行检测点击“选择图片”按钮选择一张图片进行检测。选择文件夹批量检测点击“选择文件夹”按钮选择一个包含多张图片的文件夹进行批量检测。选择视频进行检测点击“选择视频”按钮选择一个视频文件进行检测。摄像头检测点击“开始摄像头”按钮使用摄像头进行实时检测点击“停止摄像头”按钮停止检测。详细解释requirements.txt列出项目所需的所有Python包及其版本。data.yaml配置数据集路径和类别信息用于YOLOv5模型训练。train.py加载预训练的YOLOv5s模型并使用自定义数据集进行训练。训练完成后打印训练结果。evaluate.py加载训练好的YOLOv5模型并对验证集进行评估打印评估结果。infer.py创建一个GUI应用程序支持选择图片、文件夹、视频或使用摄像头进行实时检测并显示检测结果。

相关文章:

MRI 脊椎分割数据集/脊椎分割项目解决

MRI 脊椎分割数据集/脊椎分割项目解决 包含脊椎分割数据集: 原图,标签分别2460张 代码仅供参考MRI 脊椎分割数据集/脊椎分割项目解决 包含脊椎分割数据集: 原图,标签分别2460张完整的基于YOLOv5的MRI脊椎分割项目的实现。我们将涵盖以下内容:…...

如何在嘎嘎降AI中处理扫描版PDF论文:格式转换和处理教程

如何在嘎嘎降AI中处理扫描版PDF论文:格式转换和处理教程 第一次用降AI工具会遇到很多不确定的地方——传什么格式、选哪个模式、怎么验收效果。 这篇教程把常见问题都覆盖了,主要基于嘎嘎降AI(www.aigcleaner.com),4…...

2026最新|OpenClaw(小龙虾)Windows一键部署教程,内置28万免费Token直接用

2026年OpenClaw(小龙虾)持续升级,不仅解决了新手部署难、环境配置繁琐的痛点,更推出内置28万免费Token的Windows一键部署版本——无需手动配置依赖,无需额外付费获取Token,解压即装、一键启动,小…...

DeepSeek总结的Postgres 性能衰退

来源:https://mydbanotebook.org/posts/postgres-performance-regression-are-we-there-yet/ Postgres 性能衰退:我们到了吗? 2026年4月15日 2402 词 预计阅读 12 分钟 每年,PostgreSQL 都在变得更快。研究人员对从 8 版到 1…...

当AI学会害怕和好奇——V4认知与情绪

「当AI学会发脾气」—— 一个类脑认知系统的诞生记 7个版本迭代Python脚本,教会AI像人一样焦虑、兴奋、犯错和成长 📚 全系列文章: 如果把你扔进一个迷宫,你的大脑在干什么?150行代码,AI迈出了第一步聪明反…...

深度学习模型可视化:除了TensorBoard,用pydot+graphviz画模型结构图也很香(Python 3.11实测)

深度学习模型可视化:pydotgraphviz的轻量级解决方案 在深度学习项目开发中,模型结构的可视化是理解网络架构、调试参数和分享研究成果的关键环节。虽然TensorBoard等工具提供了强大的交互式可视化功能,但对于需要生成高质量静态图片、快速查看…...

从图像修复到风格迁移:深入浅出聊聊TV Loss(总变分损失)的前世今生与调参技巧

从图像修复到风格迁移:深入浅出聊聊TV Loss的前世今生与调参技巧 想象一下你正在修复一张老照片——那些斑驳的噪点和缺失的像素,就像时间在画布上留下的裂痕。而TV Loss(总变分损失)就像一位经验丰富的修复师,它不追求…...

指纹识别新思路:用FingerNet卷积网络解决低质量图像特征提取难题

指纹识别新思路:用FingerNet卷积网络解决低质量图像特征提取难题 在安防、考勤等实际应用场景中,指纹识别系统常常面临低质量指纹图像的挑战。模糊、残缺、噪声干扰等问题严重影响了传统算法的识别准确率。FingerNet作为一种创新的深度学习解决方案&…...

复杂项目管理进入大模型时代:利用知识图谱构建智能治理新体系

复杂项目管理的难点,从来不只是信息量大,而是信息分散、关系复杂、状态变化快、管理动作难闭环。立项书、实施方案、周报、日报、会议纪要、邮件、风险清单、变更记录和任务台账分别承载了项目的不同侧面,但这些信息往往分布在不同系统和不同…...

别再瞎采了!FOC下桥臂电流采样,你的ADC转换时间算对了吗?

FOC下桥臂电流采样:ADC转换时间的精确计算与验证实战 电机控制工程师们经常遇到一个令人头疼的问题——明明电路设计没问题,代码逻辑也正确,但电流采样值就是不稳定。这很可能是因为你忽略了ADC转换时间窗口的精确计算。本文将带你深入理解下…...

C语言printf函数format参数输出格式及type、flags规定详解

format 参数输出的格式,定义格式为:% type规定数据输出方式,具体如下:1.type 含义如下:d 有符号10进制整数i 有符号10进制整数o 有符号8进制整数u 无符号10进制整数x 无符号的16进制数字,并以小写abcdef表示…...

RNA-seq新手必看:raw_count、tpm、fpkm、rpkm到底怎么选?附实战代码示例

RNA-seq数据标准化方法全解析:从理论到实战的精准选择指南 刚接触RNA-seq分析的生物信息学研究者,往往会被各种标准化方法搞得晕头转向。实验室前辈可能随口甩出一句"用TPM就行",而文献中又频繁出现raw count结合DESeq2的分析流程。…...

Transformer位置编码的另一种思路:手把手教你实现Relative Position Representations

Transformer位置编码新实践:Relative Position Representations技术解析与实现 在自然语言处理领域,Transformer架构彻底改变了序列建模的范式。但当我们深入其核心机制时,一个关键问题浮现:如何让模型理解词语之间的相对位置关系…...

Matplotlib图表想用思源黑体或霞鹜文楷?手把手教你添加自定义字体并应用到Jupyter Notebook

在Matplotlib中优雅使用思源黑体与霞鹜文楷的完整指南 每次看到学术论文或技术博客中那些千篇一律的默认字体图表,总感觉缺少了些许个性与专业感。作为数据可视化的重要工具,Matplotlib默认的字体配置往往无法满足对美学有更高要求的用户。本文将带你从零…...

一文讲清,精益生产与管理是什么意思?精益生产与管理核心解读

精益生产与管理是现代制造业实现卓越运营的核心路径,很多企业都在探索精益生产与管理的落地模式。精益生产与管理并非简单的工具堆砌,而是一种以客户价值为导向、以消除浪费为核心、以持续改善为动力的系统性管理哲学。理解精益生产与管理,关…...

HarmonyOS6 半年磨一剑 —— RcSearch 三方库插件样式系统与形状尺寸配置深度剖析

文章目录前言一、形状系统:round 与 square1.1 两种基础形状1.2 圆角的精细控制二、尺寸系统2.1 高度与字号的协同配置2.2 内边距的灵活配置三、颜色体系3.1 六维颜色配置3.2 品牌色定制示例四、边框系统4.1 边框颜色与透明效果五、输入对齐方式5.1 三种对齐模式总结…...

2026 - 解决Typora文档内快捷键失效(与其他软件快捷键冲突)

前言突然有一个我的Typora快捷键失效了,比如我想快速设置一个段落对应的快捷键都存在,但是我怎么按都无效,接下来开始慢慢排查。解决方法一、修改配置文件文件->偏好设置-> 最底下有个高级设置,选择 打开高级设置 &#xff…...

国泰君安国际荣获2025年度离岸中资基金大奖“货币市场基金 - 港币(1年)”冠军

近日,香港中资基金业协会(HKCAMA)与彭博联合宣布2025年度“离岸中资基金大奖”获奖名单。国泰海通集团下属公司国泰君安国际控股有限公司(“国泰君安国际”或“公司”,股份代号:1788.HK)旗下国泰…...

SITS2026正式发布:2024年唯一经Gartner交叉验证的生成式AI应用成熟度评估框架

第一章:SITS2026正式发布:生成式AI应用图谱 2026奇点智能技术大会(https://ml-summit.org) SITS2026(Semantic Intelligence & Trustworthy Systems 2026)正式发布,标志着生成式AI正从单点模型能力跃迁至系统化、…...

生成式AI模型即代码(MaaC)实践白皮书:将LLM微调、评估、安全扫描、合规审查全部纳入GitOps驱动的CI/CD流水线

第一章:生成式AI应用CI/CD流水线 2026奇点智能技术大会(https://ml-summit.org) 生成式AI应用的持续集成与持续交付(CI/CD)面临模型版本不可控、推理环境不一致、评估指标难量化等独特挑战。传统软件流水线需扩展以支持大语言模型权重、提示…...

雨云(Rainyun)优惠全攻略:新用户 5 折、优惠券领取与使用指南

雨云(rainyun)是 2018 年成立的云计算服务平台,主营云服务器、游戏云服务器、裸金属物理机、对象存储、域名注册、SSL 证书等业务,面向个人开发者、中小企业与游戏玩家提供稳定实惠的云服务。平台针对新用户推出专属优惠&#xff…...

【2026内容生产力分水岭】:为什么92%的AI写作工具失败了?SITS2026揭示故事生成的3个隐藏阈值

第一章:SITS2026演讲:AI故事创作应用 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026主会场,来自Narrative Labs的研究团队现场演示了StoryWeaver——一款面向专业作家与教育工作者的开源AI故事创作框架。该系统不依赖封闭大模型…...

基于COZE平台GLM5.1开发简易3D导演台布局,10分钟速成傻瓜式教学(小白也能搭建)

基于COZE平台GLM5.1开发简易3D导演台布局,10分钟速成傻瓜式教学(小白也能搭建) 前言 这次想分享一个很有意思的实战项目:复刻一个网页版 3D 导演台。 先说结论: 我以前并没有开发过 3D 导演台,甚至很多底…...

生成式AI用户反馈闭环设计:从单向上报到因果推演——基于127个真实场景的反馈归因模型(附可运行Python SDK)

第一章:生成式AI用户反馈闭环设计 2026奇点智能技术大会(https://ml-summit.org) 用户反馈闭环是生成式AI系统持续演进的核心机制,它将真实使用场景中的行为信号、显式评价与隐式偏好转化为可训练的监督信号,驱动模型迭代优化。一个健壮的闭…...

三菱FX5U控制三轴伺服定位:(BOM表、CAD电气图纸、PLC程序、人机界面)

三菱fx5U控制三轴伺服定位。 (BOM表,CAD电气图纸,plc程序,人机界面) 在工业自动化现场折腾过的小伙伴都知道,三轴伺服定位系统就像车间里的平衡术——轴与轴之间的配合但凡有点差错,整台设备就…...

MinerU 系列教程 第三课:多场景使用指南 -- CLI 参数详解与批量处理

MinerU 系列教程 第三篇 本篇教程作为 模块一:基础入门与架构概览 的第三课,全面剖析 mineru CLI 的完整参数体系。上一课我们完成了安装并成功运行了第一次解析,本课将深入每个参数的含义与使用场景,掌握批量处理、分页解析、语言…...

别再抄作业了!2026奇点大会首次公开AI学习助手的“动态知识图谱构建协议”——支持实时跨域推理的底层逻辑

第一章:2026奇点智能技术大会:AI学习助手 2026奇点智能技术大会(https://ml-summit.org) 核心定位与能力演进 AI学习助手是本届大会首次发布的开源智能体框架,聚焦教育场景中的个性化知识建模与实时认知反馈。它不再仅依赖预训练语言模型的…...

碳交易机制下需求响应的综合能源系统优化运行策略探索:实现双碳目标的路径与策略分析

碳交易机制下考虑需求响应的综合能源系统优化运行 综合能源系统是实现“双碳”目标的有效途径,为进一步挖掘其需求侧可调节潜力对碳减排的作用,提出了一种碳交易机制下考虑需求响应的综合能源系统优化运行模型。 首先,根据负荷响应特性将需求…...

基于SpringBoot+Vue小区报修系统的设计与实现(源码+论文+部署)

一. 系统介绍 本文以Spring Boot和Vue为技术基础,建立小区报修管理系统,实现系统管理、用户管理、维修类型管理、维修工具管理、报修管理、维修记录、评价反馈管理等功能模块。 代码实现下载地址:https://download.csdn.net/download/lv_so…...

面试官:LRU算法听过吗?如何改进?

上周群里看到有位小伙伴面试时,被问到这两个问题:咋一看,以为是在问操作系统的问题,其实这两个题目都是在问如何改进 LRU 算法。因为传统的 LRU 算法存在这两个问题:「预读失效」导致缓存命中率下降(对应第…...