你可曾目睹医生于凌晨三点之际仍在手动标记几百张CT片子呢?我是亲眼所见的。就在那天,于医院的走廊当中,有一位老主任,其眼睛泛红着讲道,要是AI能够协助看一下结节就好了。
后来呀,我知晓了这么个事实,并非是AI本身不行,而是缺少一个能够将DICOM输送进模型的“管道”。于是呢,我把自己曾经踩过的坑,摔过的跤,还有那些从深夜一直调试到天亮所得的宝贵经验,全都一股脑儿地撰写成了这篇彻头彻尾从个人角度出发的实战随笔。请务必记住:在这个领域从来都不存在完美无瑕的通用系统,有的只是针对具体场景进行反复锤炼时那种艰辛到极致的状况。
老实说,我原本认为医学影像人工智能会特别难入门,一直到我于上安装了MONAI框架,结果pip monai[all]这一行代码就把事情给解决了,就在那一瞬间我猛地发觉,可能这件事情并没有像自己想象的那样遥不可及,是这种情况。
你可晓得呀,在我头一回运用MONAI来加载肺部CT数据之际,代码进行编译时失败了三次呢。耗费了整整一下午来调整,最终才发觉仅仅是由于数据路径的格式写错了而已。
所以别怕,我们一起熬。
怎么从头搭一套影像分析环境?
简易到近乎“离谱”, 3.10加上,再加上MONAI,基本上便足以让你成功运行首个分割任务。
那个叫MONAI的东西,讲真它的情况是,人家把那些极具恶心感的东西全给吃了,而留给你的是那种能够直接拿来调用的接口。它特意针对医学影像做了好些增强处理,举例来说,当你进行三维图像跟着旋转的操作时,它是明白要维持图像的物理空间正确性的。
安装之际存在一点需留意 , CUDA版本起码得是10.2 , 不然GPU便无法开展工作。 要是你是头一回接触医学影像开发 , 建议借助conda创建一个独自的环境 , 以此规避依赖产生冲突。
肺结节代码从哪里找?
介绍一个宝藏项目: – ml2,它于上讲授如何运用开展肺结节检测,自模型构建直至推理的每一步均设有代码示范,我依据那个笔记本逐行敲完,大约半小时便成功运行了一个基础分类器,那种体验,该如何表述呢,仿若在黑暗房间里寻摸到开关那般。
可是要提醒你,那个数据集是在上的公开数据集,其分类分为“良性”、“恶性”、“正常”这三档。真实的医院场景可要比这复杂许多,病人的片子常常会存在额外的伪影以及噪声,有时甚至图像自身拍的就是歪的哦。
医学图片加载DICOM有哪些坑?
我最先有的代码是这样的:“image = .(file)”。是不是很单纯幼稚呢?我向来都觉得一个dcm文件就等同于一张完整的片子。
实际情况是,医学影像里称作一个3D 的东西,一般是由几十乃至上百个.dcm文件堆叠造就的。你要是只读取其中一个文件,所见到的仅仅是那个三维数据里的一个二维切片。后来呢,我转而运用去处理整个序列:
有一个名为的东西,它等于这个对象调用es方法,该方法的参数是。
将一组表示数字成像和通信医学名称的内容,设置给名为的对象的文件名称属性。
image = .()
如此这般,你方可获取一个完备的3D ,其涵盖CT的值信息以及空间的方向。然而,此处尚存在一个微小的技巧:DICOM的像素的值并非寻常的灰度的值,需借由 Slop以及 转变为切实的HU的值,不然的话,模型便会觉得片子时而明亮时而昏暗。
为什么说CT三维重建比X光难十倍?
鉴于X光呈现的是一次成像,然而CT却是一个涵盖了几百层二维切片的三维立方体。当我于MONAI里对三维UNet进行调试之际,将设定为2时便直接出现了内存不足的情况,也就是OOM(Out of )。随后经察觉得知原因在于输入的尺寸过大。
学医的朋友曾严肃地给我指出过一条批评:存在能识别出结节的AI模型,然而它却没办法判定该结节处于哪一个肺叶,甚至也不能告知医生血管是否在其附近横向穿过。因此,在我经历过失误后才领悟到:不要仅仅着眼于论文里那些好看的指标,前往放射科实地观察一整天,你会针对方法论的喜好产生全新的认知。
MRI脑区分割用哪个模型?
我尝试过UniX,它将理解任务与生成任务区别对待,其参数量仅为同行的四分之一,然而理解能力却高出了46%,它在MRI图像分割方面效果极为突出,特别是在脑部结构提取上。
开源在上的官方训练代码,其依赖要求颇为严格,建议借助虚拟环境进行单独安装。运行之后发觉8G显存并不够用,起码需要12G起步。有意思的是,此模型的训练数据仅仅采用了公开的脑部MRI库,不过在非公开数据集上其泛化性也算尚可——当然这要依据你自身的数据来予以判定。
倘若你并不打算从零基础开始训练模型,那么能够直接借助ifier的预训练权重来开展乳腺密度分类,它在同一时间对以及予以支持。
怎么把模型部署到医院工作站?
极其尴尬的一回经历是,模型在本地运行得顺顺当当的,而后到了医院的PACS服务器那里,却是由于缺少依赖库,进而全部都挂掉了。
往后我察觉到了MHub.ai,它能够将模型包装成为容器,你仅仅只需寥寥几行配置,便能够在任何一种环境当中运行起来,其一致性高到超乎想象,并且它使输入输出的接口格式实现了标准化,无需再针对不同的模型编写各异的对接代码。
往另一个方向去看是边缘部署,有一家医院于PC端那儿部署了YOLO模型用以处理X光片,医生有这样的反馈就是“快了可不是仅仅一点点”,是关于实时检测给出的结果,并不用去等待云端产生的延迟,我尝试过类似的这样一个方案,那就是将较为轻量化的模型,像这种,其大小应该是4MB左右,直接放置在阅片电脑上运行,结果是完全不存在网络延迟的情况。
还有个颇具趣味的情况是,天津存在一家医院,该医院将大模型于放射科进行了影像报告助手的部署,原本需要十分钟才能完成的六百字报告,现今被压缩至一分钟。如此这般,使我产生这样的想法,或许我们历经诸多周折,真正所获得的产出,并非仅仅局限于病灶识别率,另外还涵盖着医生撰写报告时那种解脱的感觉。
训练数据不够怎么办?
先别着急着去放弃,生成式AI已然能够进行合成了,当下GAN以及扩散模型能够于健康的器官影像当中“精准注入”合成病灶,进而生成全新的图像,这相较于传统的数据增强可要好用许多了。
我曾尝试用这般方式,于肺部CT上扩增了两倍呈现的样本量,分割准确率有约百分之九的程度得以增长。然而要留意,切莫合成过多,一旦超出三至五倍,便兴许会引入分布偏移状况,致使模型学习出现偏差。
有一种更为简便的方式举措:前往之地,或者TCGA之所,去扒取公开的数据集范畴,一定要务必把所有病人的身份信息予以去除,实施去标识化的处理动作,这乃是基本的伦理边界所在,是有其规定性的。
大模型在医学影像上能干啥?
谷歌于不久前将 1.5进行了开源,这属于较为少见的开源多模态医疗大模型。它已不再局限于平面,能够看懂CT序列,能够定位解剖位置,还能够理解影像特征,并在报告里描述病变。 2.0在某些病种上对待医学影像的理解精度也颇为令人惊艳。
然而也千万别被这些令人惊艳的数字冲昏了头脑,这些模型偶尔会出现“幻觉”,也就是让你认为看见了并不存在的病变,所以我的策略是,大模型进行初筛,专业小模型进行精筛,医生做出最后判断。
其实讲了这般许多,我内心最想要表述的一段话是,AI并非是能被用来当做医生角色完全替代者,而是成为那种自打始至终都绝对不会呼喊着感觉疲惫叫累的初始层级辅助助理身份 ,此AI它能够在仅仅一秒钟而已的短暂时间之内直接迅速扫描完成数量多达三百张的片子,哪怕是再怎么极其细微细小的微小的结节部分它也绝对不会出现有所遗漏错过的情况 ,然而最终对于做出决定判定“这究竟是属于良性结果还是恶性结果范围种类”这件事情的决定权,自始至终一直都是牢牢掌控在医生的手里边。
我们所编写的每一行代码,皆在于让医生节约时间,为病人争取生机。那天凌晨两点,代码调试成功了。CT上覆盖了一层美观的半透明mask,清楚地标明病灶轮廓。第二天老主任在片子上看到结果,沉默了相当长的时间,讲了一句令我浑身起鸡皮疙瘩的话——“谢谢你。这能够挽救很多人。”。
那一刻我突然觉得,那些被bug折腾到崩溃的夜晚都值了。
这便是我所领会的医学影像AI,它存在着不完美之处,它会于某个凌晨三点为你训练出一堆杂乱无章的分割mask,然而它会在你有所需求之际,神奇地将结节清晰地标记出来。我于上创建了一个实验仓库,倘若你入门时在某一步骤遭遇困惑,欢迎前来找我交流。期望我们的代码,都能够切实地救助到他人。

