视频讲解:BSNet模型(双边监督网络)结合医学CT影像与半监督学习SSL、卷积神经网络CNN的图像分割方案

作为数据科学家,日常工作里常与各类数据及模型打交道,深知在医学领域,图像分析对临床诊断意义重大。

医学图像分割本就关键,可卷积神经网络(CNN)这类全监督方法,依赖大量标注数据,医学图像的像素级注释又因需专业领域知识,获取标注图像既费钱又耗时,数据匮乏下训练深度模型成了棘手难题。

He – bin Hu撰写


视频

视频讲解:BSNet模型(双边监督网络)结合医学CT影像与半监督学习SSL、卷积神经网络CNN的图像分割方案

探索见解

探索更多视频

之前我们就聚焦于解决这类医学图像分割的数据与模型痛点,现在将项目里的思路和方案整理成这个专题。这里会从医学图像分割的困境讲起,介绍如何用半监督学习(SSL)里的均值教师(MT)模型,又怎么改进出更优的BSNet(双边监督网络),还会涉及基于三甲医院CT图像(医学CT影像)数据集的应用实践。

通过清晰的脉络,带大家从问题发现,到模型探索、优化,再到实际应用落地,一步步梳理。

专题流程图(概括脉络)

体验AI代码助手

医学图像分割的现实困境:数据标注之难

在医学图像分析领域,图像分割是临床诊断的重要支撑。卷积神经网络(CNN)曾在医学图像分割中大放异彩,可全监督学习模式却受限于标注数据。医学图像的像素级注释,得依靠专业领域知识,标注过程既昂贵又耗时,数据匮乏时训练深度模型,成了阻碍医学图像分割发展的“绊脚石”。


半监督学习(SSL)本是条出路,能借助未标注样本减轻对标注样本的依赖,均值教师(MT)模型就是SSL里常用的。但MT模型也有短板,教师模型权重由学生模型决定,后期易出现训练瓶颈,而且只关注像素级一致性,忽略类别信息,还容易受噪声干扰,在实际医学图像分割应用里,效果难以让人满意。


数据集构建:医学CT影像的“家底”

我们的数据集源自三甲医院3000名患者的CT图像(医学CT影像)。其中600张带有标签,选300张有标签的作为测试集,剩下2400张无标签的,再加上另外300张有标签的,共同组成训练集 。这些CT图像,就像医学诊断的“线索库”,带着患者身体内部的关键信息,为后续模型训练提供了基础素材。


视频

卷积神经网络CNN肿瘤图像识别

探索见解

去bilibili观看

探索更多视频

BSNet模型:突破困境的创新方案

模型改进思路

BSNet是在MT框架上改进的模型。针对MT单向权重更新、伪标签误差累积等问题,提出三大关键机制:双向指数移动平均更新、双向伪标签监督和对抗学习策略。通过双向权重更新,让“师生模型”协同进化,就像两位医生相互学习、共同进步,增强模型学习能力;引入类别级伪标签监督,提升前景与背景的区分度,好比给模型装上更精准的“辨别镜”;结合对抗判别器优化伪标签分布,有效抑制噪声,进一步提升分割性能 。


过采样SMOTE逻辑回归、SVM、随机森林、AdaBoost和XGBoost对不平衡数据分析预测

阅读文章


构建了BSNet的基本框架,包含两个UNet分割网络(network_a、network_b )和一个轻量级判别器(discriminator )。网络A和B处理不同类型图像(有标签、无标签 ),输出用于后续的监督和优化,判别器则对伪标签进行处理,让伪标签质量更优,助力模型提升分割效果。


随时关注您喜欢的主题


损失函数与优化

模型训练采用多重损失联合优化,有监督损失(交叉熵)LsupLsup 、无监督一致性损失(MSE + KL)LunsupLunsup 、对抗损失(GAN)LdLd 。优化器用Adam,给两个分割网络和判别器设不同学习率,训练轮数设为30,每批数据大小为16 。训练中用双边指数移动平均(Bilateral – EMA)策略更新网络权重,提升训练稳定性和伪标签可靠性。就像给模型训练配上“稳定器”和“精准调节器”,让模型在医学图像分割学习中稳步提升。


模型应用实践:从训练到验证

模型训练时,用两个结构相同的UNet分割网络和轻量级判别器组成的BSNet双边监督网络。分割网络以ResNet – 34为编码器主干,接收图像输出分割概率图。构建混合训练批次,每批包含有标签和无标签图像。训练中,两个网络处理同一输入,交换伪标签进行双边监督,伪标签还输入判别器,判别与真实标签的分布差异,通过对抗损失优化伪标签质量。

验证阶段,把验证集输入两个网络,选网络A作为预测输出,用Dice、IoU等指标评估,判断实际分割效果。实际应用中,能看到模型对医学CT图像的分割结果,对比真实掩码,能直观感受模型的分割能力,为临床诊断提供辅助支持。

对比与优势:BSNet vs MT模型

对比均值教师(MT)模型,BSNet在准确性、召回率、F1分数、Dice系数、IoU、MAE等指标上表现更优。BSNet的双边监督与EMA策略,提高了模型的鲁棒性和准确性;而MT模型对教师模型依赖大,易出现性能瓶颈,生成可靠伪标签能力不足。在医学图像分割实际应用里,BSNet能更好地处理数据匮乏问题,为临床诊断提供更精准的图像分割结果,助力医生更准确地分析病情。

结语

从医学图像分割的数据困境出发,我们探索出BSNet模型这一解决方案,依托医学CT影像数据集,通过创新的模型结构和训练策略,在实际应用中展现出比传统MT模型更优的性能。这一过程,是从问题发现到技术突破,再到实际落地的完整实践。希望能给医学图像分析领域的同行、从业者带来启发,一起在利用AI技术助力医疗诊断的道路上,不断探索、进步,让更精准的医学图像分割技术,为临床诊断保驾护航。

PyTorch边界感知上下文神经网络BA-Net在医学图像分割中的应用

作为数据科学家,我常被临床医生问:“为什么机器分割的病灶边界总差一点?” 这个问题背后,是医学图像分割技术半个多世纪的挣扎。上世纪70年代,医生们用尺子在胶片上量病灶大小,效率极低;90年代,传统算法如区域生长法出现,却像“色盲”——对低对比度的图像束手无策;2015年U-net掀起卷积神经网络(CNN)浪潮,终于能自动分割病灶,但它仍像“粗心的学生”,漏看边缘细节是常事。
我们在为某肿瘤医院开发辅助诊断系统时,这个问题更突出:肺癌CT中,肿瘤与正常组织的边界模糊,现有模型分割误差达2mm,足以影响分期判断。为此,我们团队研发了边界感知上下文神经网络(BA-Net),通过“看边缘、互学习、融特征”三步法,让机器精准捕捉病灶边界。
本文改编自该项目技术报告,将从医学图像分割的技术痛点出发,拆解BA-Net的设计逻辑,再用皮肤病变、结直肠息肉等5类临床数据验证其效果。BA-Net专题项目文件已分享在交流社群,阅读原文进群和500+行业人士共同交流和成长。

从“能分割”到“分精准”:医学图像分割的技术困境

传统方法:“按套路”不如“会变通”

2010年前,分割靠“预设规则”。比如用阈值法分割肺部CT——假设肺是“黑色”,其他是“白色”,但抽烟患者的肺有黑斑,就会“认错”。还有用纹理特征的(如Gabor滤波器),但同一种病在不同人身上的纹理可能天差地别,就像Fig.1中两个皮肤病变,一个是浅褐色,一个是深黑色,传统算法很难通用。

Fig.1 两类典型医学图像示例。第一行是皮肤镜下的皮肤病变,第二行是内镜下的结直肠息肉,黄色实线为目标边界。

CNN时代:“看得全”却“看不准”

2015年U-net的出现是个里程碑,它用编码器-解码器结构,既能提取“这是病灶”的语义特征(高层),又能保留“病灶在哪”的位置特征(低层)。但它有个致命伤:连续池化会“模糊边界”。就像你把照片放大10倍,边缘会变虚,U-net的高层特征也这样——知道大体位置,却分不清边缘像素是病灶还是正常组织。

BA-Net:让机器“看清边界”的三重设计

BA-Net的核心思路是:既然边界重要,那就“专门学边界”;既然单任务有局限,那就“让任务互教”;既然高低层特征各有优劣,那就“让它们互补”。整体框架如图2所示。


Fig.2 BA-Net框架图。编码器每个阶段先通过金字塔边缘提取模块(PEE)获取多尺度边缘,再用迷你多任务学习模块(mini-MTL)让分割和边界检测互学,最后用跨特征融合模块(CFF)融合不同层特征。

第一步:多尺度边缘提取(PEE)—— 让机器“摸准”边缘

病灶边缘像“锯齿”,有的地方陡(如息肉边缘),有的地方缓(如皮肤病变)。PEE用不同大小的“刷子”(池化核)扫过图像,提取不同粗细的边缘,再融合起来。
比如用3×3的“小刷子”抓细边缘,用7×7的“大刷子”忽略噪声,最后通过1×1卷积把这些边缘信息浓缩,就像给机器一副“放大镜”,看清不同细节的边缘。

ini

体验AI代码助手

代码解读

复制代码# PEE模块核心代码(修改后) def pyramid_edge_extractor(feat, pool_sizes=[3,5,7]): # feat:当前阶段特征图;pool_sizes:不同池化核大小 edge_list = [] for s in pool_sizes: # 边缘 = 原始特征 - 平均池化后的特征(突出变化区域) avg_pool = F.avg_pool2d(feat, kernel_size=s, padding=s//2) edge = feat - avg_pool # 计算边缘 edge_list.append(edge) # 融合原始特征和多尺度边缘 fused_feat = torch.cat([feat] + edge_list, dim=1) # 按通道拼接 fused_feat = F.conv2d(fused_feat, out_channels=128, kernel_size=1) # 压缩通道 return fused_feat

第二步:迷你多任务学习(mini-MTL)—— 让“分割”和“测边”互教

分割和边界检测是“好搭档”:知道边界能帮分割更准,知道分割区域能帮边界定位。mini-MTL里有两个分支:一个学“哪是病灶”(分割分支),一个学“病灶边缘在哪”(边界分支),中间用交互式注意力(IA)让它们“聊天”。
比如分割分支发现一块区域像病灶,就生成“注意力权重”告诉边界分支:“这里可能有边缘,多留意”;边界分支发现清晰边缘,也会反过来提醒分割分支:“边缘内侧是病灶”。


Fig.3 迷你多任务学习(mini-MTL)模块设计,包含两个任务分支和交互式注意力层。

ini

体验AI代码助手

代码解读

复制代码# 交互式注意力(IA)核心代码(修改后) def interactive_attention(seg_feat, edge_feat): # seg_feat:分割分支特征;edge_feat:边界分支特征 # 分割分支生成权重:哪些区域可能有边缘 seg_weight = torch.sigmoid(seg_feat) # 权重在0-1之间 # 用分割权重指导边界特征:重点关注分割区域内的边缘 edge_feat = edge_feat + seg_weight * seg_feat return edge_feat

第三步:跨层特征融合(CFF)—— 让“细节”和“语义”不脱节

低层特征(如第1层)像“高清像素”,能看到纹理细节;高层特征(如第4层)像“模糊标签”,知道“这是肿瘤”。但低层缺语义,高层缺细节,CFF让它们“互补”。
CFF会自动判断:低层需要多少高层语义(避免把正常组织当病灶),高层需要多少低层细节(让边界更清晰)。就像老师教学生,高年级带低年级,互相补短板。

临床验证:5类数据上的“边界精准度”测试

我们在5类医学图像上测试了BA-Net,对比了U-net、FCN、DeepLabv3等6种主流模型,用交并比(JA)衡量边界准确性——JA越高,边界重合度越好。

皮肤病变(ISIC-2017数据)

皮肤科医生需要精准边界判断良恶性。BA-Net的JA达81.0%,比U-net高4.5%。对Fig.4中颜色浅、边界模糊的病变,它能准确分割,而其他模型常“漏分”边缘。

结直肠息肉(Kvasir-SEG数据)

息肉边缘常和黏膜粘连,BA-Net的JA达86.1%,比第二名CE-Net高2.6%。在CVC-ColonDB数据上,它还能减少对肠道褶皱的误判。

肺部X线(SZ-CXR数据)

肺边缘有很多小缺口(如血管穿过),BA-Net的JA达92.8%,比FCN高5.9%,这些小缺口都能精准识别。


Fig.4 不同模型的分割结果对比。可见BA-Net对低对比度、复杂边界的病灶分割更精准。

为什么三个模块都重要?

我们去掉某个模块后发现:

  • 无PEE:JA降1.0%-1.6%(边缘信息不够)
  • 无mini-MTL:降0.8%-1.3%(任务间无法协作)
  • 无CFF:降1.1%(高低层特征脱节)
    这说明三个模块像“三角架”,少一个就站不稳。

结语:精准分割的价值不止于“准”

BA-Net的意义,在于它让机器从“能分割”变成“会理解”——理解边缘与区域的关系,理解不同层次特征的价值。在实际应用中,它已帮医生把皮肤病变边界测量时间从10分钟缩到10秒,误差控制在0.5mm内。
未来,我们计划把BA-Net用到3D医学图像(如脑部MRI),让它在更复杂的三维结构中“看清”边界。毕竟,对患者来说,精准的分割不是数字,而是更可靠的治疗方案。


关于分析师

在此对 He – bin Hu对本文所作的贡献表示诚挚感谢,其毕业于浙大,聚焦人工智能领域深耕。擅长运用 Python 语言开展工作,在 深度学习 方向积累深厚经验,凭借专业知识与技能,为相关研究及实践提供有力支持 。

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds