医疗影像深度学习-ChexNet肺结核(DR_AI)

一、模型

核心模型采用现在吴恩达的ChexNet模型,此模型是121层的DenseNet。虽然模型的诊断结果较四位影像科的诊断结果在给出的数据集上要好,并且吴恩达自己也说Should radiologists be worried about their jobs? Breaking news: We  can now diagnose pneumonia from chest X-Rays better than radiologists. 但是招来的Diss一大片,毕竟在影像圈里这个结论未免下的有点早。不过,个人还是站在人工智能一队的。

我们生产环境中,在此模型前,又加入了正位和其他部位影像分类的模型。训练环境中,还加入了Unet肺部分割模型,影像前处理,例如对于没有(window center\window width)的影像进行自动窗宽窗位计算。

二、模型关键代码解读

1 随机放大剪切处理

normalize = transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
transformList = []
transformList.append(transforms.RandomResizedCrop(transCrop))#随机放大剪切
transformList.append(transforms.RandomHorizontalFlip())
transformList.append(transforms.ToTensor())
transformList.append(normalize)

ChexNet采用的方法,是将3000X3000的DR影像的原图像缩小到1024的大小。只比原图缩小了3倍的大小,纹理细节损失的比较少,而且计算机对纹理的感知肯定比人眼更强,可以分辨更细微纹理。另外,现在大部分对DR诊断的显示器,也只有1M,很多的时候,老师也不放大去观察影像。所以,这两方面原因来说,缩小原来的3倍大小,是可以接受的。我们在处理这部分的影像的时候,首先是要将影像裁剪到大概单边2800大小,这样缩放到1024后,就更多保留图中的信息。
2 ChexNet对1024图像用RandomResizedCrop的方法处理,也就是在原图上,随机缩放,然后随机截取其中的大小为224图片。这里可能开发者会有疑问,在某些时刻根本就截取不到病灶的位置,这样的图片个也作为一个正样本,对模型进行训练。这么做的真真原因是,在负样本中,也能截取到类似的区域的图像,又被认定为负样本,这样多次训练后,这种图像的特征肯定是被压制了,真真病灶特诊就相对提高了。
3 和ChexNet不同的是,我们还对影像中的肺部区域进行分割,然后用分割后图像才进行训练。分割所用的模型是UNet基础上加入了ResNet中的短接处理。正常的情况下,肺部的分割效果很不错,如下图所示。但是对于某些病变肺,无论如何效果也不能满足,如图2所示,右上肺产生了实性变,但是分割算法没有识别出来。所以,我们在分割后的图像上又做了些常规的算法处理,最后结果图像,如图3所示。

图1

图2

图3

扫描二维码关注公众号,回复: 9449991 查看本文章

三、训练结果

我们从数据库中,标记了大概11000个肺结核,11000个负样本。ROI图如下

四、工程实现效果

选取threshold为0.42,再将定位的图发送到前端H5,利用js将热力图和dicom灰度图进行合并后,显示如下

对应的老师报告如下

{"finding":"双侧胸廓大致对称。右上肺可见斑点及索条状密度增高影,边界清晰。余肺内未见其它异常阴影。肺门形态、大小及位置未见异常。纵隔无增宽表现,位置居中无移位,心影不大,形态未见异常。双侧膈肌光整,肋膈角锐利。片内所示胸廓骨骼及胸壁软组织无异常表现。","result":"右上肺结核,病灶基本纤维化、钙化。"}

发布了40 篇原创文章 · 获赞 17 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/rendawei636/article/details/90110791