借助最近学习的U-Net及相关工具的理论学习,用肝脏的CT样本训练出AI模型的肿瘤识别能力,用产品经理的视角解析实战全过程原理,便于后续的相关产品设计过程中,充分考量技术栈的各项特征和能力,更高效的与技术人员进行沟通协作、更精准的定义产品的定位和边界,做出更靠谱的产品。
项目目标
训练U-Net识别人的胸腔CT照片,使其能够在切片照片中标记肝脏肿瘤的大小、位置。

CT成像原理简介
CT全名为计算机断层扫描,利用X射线生成人体内部骨骼、软组织和血管的详细横截面图像,由于体内各种器官组织的密度不同,因此能穿过身体到达传感器上的射线密度各有不同,体现在照片中就是不同的灰度,以此帮助医生诊断疾病和损伤。检查结果非常详细,甚至能提供三维图像,是医生评估病情、确定诊断的重要工具。

与同样用X射线拍的DR照片不同的是,CT生成的照片是三维的,因此往往会看到这样的切片照片:

因为CT机拍照时,而是将X射线分切成1mm-10mm的小切片分别照射,并通过环绕目标周围360°高速旋转扫描,目标再配合纵向进出射线生成最终的3D模型照片:

CT照片里一排排的图片就是每个X射线切片的成像结果。
医学图像与自然图像(一般图像)的区别
1.医学图像的模态(格式)更加多样化,如X-ray、CT、MRI以及超声等等,当然也包括一些常见的RGB图像(如眼底视网膜图像)。不同模态图像反应的信息侧重点是不一样的。比如X-ray观察骨骼更清晰,CT可以反应组织和器官出血,MRI适合观察软组织。而且不同型号的成像设备得到的成像结果有一定差异。
2.医学图像的像素值范围与自然图像(0~255)有很大差别,如CT一般会上千。
3.噪声。由于成像设备、成像原理以及个体自身差异的影响,医学图像一般会含有很多噪声。由于噪声对于位置和空间约束是独立的,从而可以利用噪声的分布来实现降噪,但是在抑制噪声的同时也需要考虑图像细节的保留问题。
4.伪影。伪影一般是在图像配准或三维重建时产生(如CT),从原理上来,只能减少,无法消除。
CT样本图片的格式
通过与CT设备的DICOM接口拉取照片,实际每张照片都是由很多张2D的照片压缩组成的3D照片,其中就是每张照片就是前面讲过的切片,若CT配置是128排的就有128张照片,64排的就是64张照片,将这些2D的DICOM照片按顺序合到一起就可以生成VTK格式的3D模型。

DICOM照片不同于普通的PNG、JPEG格式,是医学图像和相关信息的国际标准,涵盖了医学数字图像的采集、归档、通信、显示及查询等几乎所有信息交换的协议,查看工具:Agnosco,打开时效果如下:

VTK格式数据,使用可视化工具包处理图像并创建三维计算机图形,查看工具:ParaView,打开效果如下,还可以通过鼠标拖拽翻滚模型:

为了后面的训练,还要准备好训练用的掩膜DICOM照片,掩模图直接在原图上标记出肿瘤的位置、大小,与原图的每张照片一一对应,由标记人员用专用工具逐张标记后生成:

图片预处理
预处理过程应该是整个训练过程中耗时最长、最繁琐的,首先要了解医学图片的格式和特点,其次要对原图像做一些降噪、特征增强、标准化等处理,以提高训练的效果,最后将图片格式转换成Unet便于识别的格式。在图像识别中针对不同的图片格式、特征以及训练用途,对图像预处理的手段、步骤和工具各不相同,因此本篇仅针对人体肝脏的CT照片为例介绍过程,实践时需根据实际需求和样本特征做专门的预处理,不可生搬硬套。
CT拍摄的照片都是黑白的,其细节都在灰阶中呈现,显示器灰的阶层次越多,能显示到的细节越丰富,通过人眼在显示器上看出这些细节是很辛苦的,但实际上照片中的数据包含了相当丰富的信息,AI可以通过对照片数据的解读来识别到更丰富更精确的特征,与此同时,由于照片中的数据过于丰富,也会带来很多对识别肿瘤无用的冗余信息,这些多余的数据需要被有效的筛除以避免干扰训练效果,还可以大幅缩短训练所需的算力和时间,另外对本来需要用来训练的数据进行特征强化以提高AI的训练效果,预处理就是用来筛掉无用信息,强化目标特征的过程。
1.数据加载
这个环节主要是技术人员用合适的工具将训练样本导入,导入时需按照拍摄时的顺序进行排序,并且图片的方向、缩放比例、中心点、坐标轴、色彩、亮度、灰度等解析需统一,确保输入的照片都是统一的数据格式和解析参数。
2.原图亮度和对比度优化
把CT照片转换成二进制文件后,可以解析出照片数据实际是一个二维数组,数组中的每个值代表着某个像素的RGB值。

可以看到其数值区间包含-1024~1024,而大量RGB为-1024的像素都是背景,且数值过低整体的拉低了整张照片的亮度和对比度,通过对windowing的参数窗宽(windowWidth)和窗位(windowCenter)的调节,使得图片提亮和对比度加深,以降低背景像素对照片元数据特征的干扰,并且能够更明显的突出拍摄到的照片细节。通过对亮度、对比度的调整,从肉眼上也可以看出图片中的轮廓、线条变得更加清晰。

2.图片降噪
原图存在噪点是不可避免的,噪点会导致细节变得模糊,影响轮廓和边界的判断,简单的情况可通过调节直方图均衡化解析参数来减少噪点,实际应用时降噪是非常复杂的,因每家医院的设备厂商、型号不同且设备寿命、保养情况不同,照片质量差异非常大,这个过程也可以训练单独的CNN模型来处理,实际效果类似如下:

3.整理有效训练素材
前面说过CT照片其实是立体模型的切片,实际肿瘤不一定占满整个立体模型,因此为了加快训练速度,可以将没有拍到肿瘤的照片剔除,只留下拍到有肿瘤的照片以及对应的人工标记好的掩模图。
筛好照片后,将原照片和掩模图按顺序对应分别导出为JPG或PNG等可以被用于训练的格式。
4.图像数据增强
因医疗数据的敏感性,很多实际医疗项目中很难有充足的数据完成项目任务。可从以下方面入手:
1.寻找更多的数据。
2.充分利用己有的数据进行数据增强。
数据增强也叫数据扩增,意思是在不实质性的增加数据的情况下,让有限的数据产生等价于更多数据的价值。
可以上一步整理好的照片和掩模图进行缩放、旋转、裁切、位移等等,用以增加样本量。增强时注意以下几点:
1.生成的新照片色彩模式为黑白灰度,不要用RGB彩色模式
2.CT照片和对应标记了肿瘤的掩模图要做相同的处理且命名上成对匹配
3.根据训练机器的配置,自行调整生成的数量,可多可少,越多当然训练效果越好但训练成本更高
5.图像归一化
图像归一化是指对图像进行了一系列标准的处理变换,使之变换为一固定标准形式的过程。归一化思想是通过数学手段,把不明显的像素、过亮、过暗的像素进行一定程度的屏蔽,突出有价值的像素,以加快训练网络的收敛性、简化计算。在案例中主要通过归一化去减小医学图片,也可以一定程度消除由于光线不均匀而造成的干扰。案例中将每个像素的像素值直接除以图片最高像素值255,而后对标签数据进行灰度处理,数值大于0.5的赋为1,小于等于0.5则赋为0,使得原照片像素值从0-255变成了0-1,在实际应用时需根据自己的样本照片像素值特征设计特有的归一化算法。
这样处理后的图片中线条的变得更清晰,因为线条边缘的灰度像素被强制设定为0(白色)或者1(黑色),当然实践时也可以通过一些算法把过暗、过亮的像素进行归一化处理:

虽然归一化处理可以降低图片中数据的复杂度,但是也会导致一定程度的失真,当然也有其他手段避免这一问题,同样也会增加复杂度和计算成本。
训练模型
这个过程在我的上一篇内容已经介绍过原理,传送门,这里就不再重复。
当然实际训练的时候,还会有一些参数,比如单次训练的图片数量、训练次数等等,这些需要和技术人员协商,根据自身项目的紧急程度做调整,通常来说训练的越多越好,但是花费的算力和时间成本也更多,通常当准确率达到预期或某个极值就OK了(比如99%),只能无限接近100%,当准确率达到某个极值之后再往上提升,成本会指数级上升。
训练效果

OK,整个过程就介绍这么多,实战时每个步骤都是一块不小的工程量,根据实际项目需求决定,过程中涉及到很多对于图片数据的处理,因此产品经理还需要掌握DICOM照片和常见图片的数据格式、参数、解析原理的相关知识,才能有效分析需求特性和目标预期,便于分析和调整产品方案中预处理的模块,也能更好的与技术人员合作沟通。