3. 病灶检测问题定义
在医学影像 AI 中,“分类、检测、分割”经常被混用,但它们回答的是三个不同层级的问题。理解三者的差别,是设计病灶检测系统的第一步,因为任务定义直接决定了标注方式、网络输出、损失函数和评价指标。
三个任务回答不同的问题
分类(Classification)回答“这张图里有没有病灶、属于哪一类”。输入是一张图像(或一个图像块),输出是一个或多个类别标签,例如“正常 / 肺结节 / 肺炎”。它不关心病灶在哪里、有几个、多大。典型输出是长度为 C 的概率向量,经 softmax 归一化后取最大值为预测类别。
检测(Detection)回答“病灶在哪里、是什么、有多大把握”。输入是整张图像,输出是一组边界框(bounding box),每个框附带类别和置信度,通常写成 (x_min, y_min, x_max, y_max, class, score)。检测既定位又分类,是病灶筛查中最常用的任务形式。
分割(Segmentation)回答“每个像素属于什么”。输入是图像,输出是与输入同尺寸的掩膜(mask),逐像素给出类别。语义分割只区分“病灶/背景”,实例分割还要区分不同病灶个体。分割能给出病灶的精确轮廓和面积,但标注成本最高。
三者的关系可以概括为:分类给出“有无”,检测给出“位置+类别”,分割给出“精确边界”。检测可以看作在分类基础上增加了定位回归,分割可以看作在检测基础上把框细化到像素级。
病灶检测的输入与输出
病灶检测的输入通常是一张二维切片、一个三维体数据(如 CT 的 DICOM 序列)或一段多帧影像。工程上需要明确几个约定:坐标系原点在左上角,x 向右、y 向下;框用 (x_min, y_min, x_max, y_max) 表示,且 x_min < x_max、y_min < y_max;若使用归一化坐标,则除以图像宽高,取值在 [0,1]。这些约定必须在训练、推理、评估和可视化中保持一致,否则框会错位。
输出是一组检测结果。以单张 512×512 的胸部 CT 切片为例,模型可能输出:
[
{"box": [120, 88, 176, 150], "class": "nodule", "score": 0.93},
{"box": [310, 240, 342, 276], "class": "nodule", "score": 0.71},
{"box": [400, 60, 430, 92], "class": "calcification", "score": 0.55}
]
实际部署时还要做后处理:按置信度阈值(如 0.5)过滤低分框,用非极大值抑制(NMS,IoU 阈值常取 0.5)合并重叠框,再按类别分别保留。三维检测还需在层间做框关联,把同一病灶的连续切片框合并成一个 3D 病灶,避免同一结节被重复计数。
评价指标:从 IoU 到 mAP
检测评估的核心是判断“预测框和真实框是否算匹配”。最常用的度量是交并比 IoU:
IoU = 交集面积 / 并集面积
= area(A ∩ B) / area(A ∪ B)
当 IoU ≥ 阈值(常用 0.5)且类别一致时,该预测框记为真正例 TP;未匹配的预测框为假正例 FP;未匹配的真实框为假负例 FN。由此得到精确率 Precision = TP/(TP+FP) 和召回率 Recall = TP/(TP+FN)。
把预测按置信度从高到低排序,逐个累加计算 Precision 和 Recall,可画出 PR 曲线,曲线下面积即 AP(Average Precision)。对所有类别取平均得到 mAP。医学检测中常报告 mAP@0.5 和 mAP@0.5:0.95(IoU 阈值从 0.5 到 0.95、步长 0.05 的平均),后者对定位精度要求更严。
临床场景更关注敏感度(召回率)和每例假阳性数(FP/scan)。例如肺结节筛查中,敏感度需达到 90% 以上,同时把每例假阳性控制在 1~2 个以内,否则医生会被大量误报淹没。因此评估时不能只看 mAP,还要看固定工作点下的敏感度与 FP 率。
任务选择与工程权衡
如果只需要判断“有无病灶”,分类足够;如果需要告诉医生“病灶在哪、有几个”,必须用检测;如果要测量病灶体积、做放疗计划或随访对比,则需要分割。检测的输出框可以直接用于计算病灶最大径和位置,但面积和体积估计不如分割准确。工程上还要考虑推理速度:分类最快,检测次之,分割最慢,在移动端或急诊场景需据此取舍。
明确任务定义后,才能确定标注规范、损失函数(分类用交叉熵,检测用分类损失加框回归损失,分割用 Dice 或交叉熵)和评价指标。这是后续数据准备、模型选型和部署评估的共同基础。