【论文精读】Pairwise learning for medical image segmentation

article/2025/10/20 19:30:04

Published in: Medical Image Analysis 2020

论文:https://www.sciencedirect.com/science/article/abs/pii/S1361841520302401
代码:https://github.com/renzhenwang/pairwise_segmentation


目录

Published in: Medical Image Analysis 2020

摘要

一、主要亮点

二、问题提出

三、网络结构

1. CFCN

2. C^{2}FCN

四、实验部分

1. 实验表格

2.ASSD损失函数

总结

完整网络框架代码


摘要

本文提出了一种共轭完全卷积网络conjugate fully convolutional network (CFCN),其中输入成对样本来捕获丰富的上下文表示,并通过融合模块相互引导。为了避免由少量训练样本引入的类内异质性和边界模糊带来的过拟合问题,我们建议明确利用标签空间的先验信息,称为代理监督。我们进一步将CFCN扩展为紧耦共轭全卷积网络compact conjugate fully convolutional network(c^{2}fcn),与CFCN相比,它只需要一个头部来拟合代理监督,而不需要额外的两个解码器分支来拟合输入对的地面真值。


先了解一下孪生神经网络(Siamese network)

度量学习:metric learning 是通过特征变换得到特征子空间,通过使用度量学习,让类似的目标距离更近(PULL),不同的目标距离更远(push),也就是说,度量学习需要得到目标的某些核心特征(特点),比如区分两个人,2只眼睛1个鼻子-这是共性,柳叶弯眉樱桃口-这是特点。

一、主要亮点

  • 输入的是成对切片,训练阶段,将一个切片与不同的患者内/患者间切片进行配对,每个像素的标签由其自身和配对切片中的另一个像素(位于同一位置)确定。
  • 提出共轭完全卷积网络,在三个支路上做监督学习,解决类内异质性和边界模糊的问题。

二、问题提出

如图所示,通过两个腹部CT图像(第一排)和两个腹部MR图像(第二排)的例子显示了医学成像中的类内异质性和边界模糊。蓝色矩形和红色矩形分别表示外观不均匀和边界模糊

 针对医学图像分割中训练数据有限、类内异构和边界模糊的问题

三、网络结构

1. CFCN

 [MICCAI2019]Pairwise Semantic Segmentation via Conjugate Fully Convolutional Network

本文主要参考上述文献延伸得到的,网络框架如下

 

2. C^{2}FCN

四、实验部分

1. 实验表格

2.ASSD损失函数

Average symmetric surface distance博客参考

Metric评价指标-图像分割之平均表面距离(Mean surface distance )


总结


  本文提出了一种新的基于有限训练样本的医学图像分割框架。特别地,专注于解决由类内异质性和边界模糊引起的具有挑战性的问题。扩展前期工作,从两个方面改进了框架:首先,将CFCN扩展为一个一般的双学习框架,其中代理监督作为网络的全局约束,以适应标签空间的固有先验知识。除了在LiTS数据集上的二值分割外,进一步将CFCN扩展到多类别分割,用于基准数据集CHAOS上的多器官分割,结果表明,我们的CFCN可以在所有比较方法中取得最先进的结果。
  其次,将CFCN扩展为一个紧凑的架构C2FCN,它可以在测试阶段用可以忽略不计的附加参数和计算开销来改进任何现成的分割网络。具体来说,采用DeepLabv3+作为基线,得到的C2FCN在LiTS数据集上取得了较好的结果(见表1),在Sub-CHAOS数据集上取得了优于CFCN的结果。然而,在训练过程中,C2FCN的参数数量和计算开销都大大低于CFCN。更重要的是,本文提出的C2FCN在训练阶段仅用一个头部学习代理监督中隐含的逻辑关系,在测试阶段通过学习的逻辑关系推断分割概率。与CFCN相比,C2FCN中不需要两个解码器来显式拟合输入对的ground truth,说明通过深度模型学习一般关系是可行的和有潜力的。
  值得一提的是,本文采用了提出的两两分割框架来解决类内异质性和边界模糊所带来的挑战。然而,通过明确地设计G_{proxy}函数,可以利用更多的先验信息。未来的另一个研究方向是将所提出的CFCN和C2FCN应用于更多的分割场景,特别是管状结构的自动分割,如血管或小肠。通常在三维空间中折叠,且形状先验很难通过患者内相邻切片进行建模。此外,将方法扩展到三维模型将是作者未来的研究方向。
  综上所述,本文提出了一种新的针对有限训练样本的医学图像分割框架。为了解决医学影像中类内异质性和边界模糊的问题,提出了一种代理监督,将标签空间中的先验信息显式编码,并在训练阶段将其作为网络的全局约束。特别是,我们提出了一种新的分割通过C2FCN范式,在网络旨在学习输入对之间的逻辑关系,而不是直接适合地面真理传统FCNs一样的目标,和分割测试样本的概率是推断的逻辑关系。实验结果表明,在训练数据量有限的情况下,所提出的两两分割方法能够显著提高分割精度。

完整网络框架代码

# -*- coding: utf-8 -*-import torch
import torch.nn as nn
import torch.nn.functional as F
from models.sync_batchnorm.batchnorm import SynchronizedBatchNorm2d
from models.aspp import build_aspp
from models.decoder import build_decoder
from models.backbone import build_backbone
from models.fusion import build_fusion
from models.attention_fusion import build_attention_fusionclass PairwiseDeepLab(nn.Module):def __init__(self, backbone='resnet18', in_channels=3, output_stride=16, num_classes=1, aux_classes=3, sync_bn=True, freeze_bn=False, pretrained=False, fusion_type='fusion', is_concat=False,  **kwargs):super(PairwiseDeepLab, self).__init__()if backbone == 'drn':output_stride = 8if sync_bn == True:BatchNorm = SynchronizedBatchNorm2delse:BatchNorm = nn.BatchNorm2dself.backbone = build_backbone(backbone, in_channels, output_stride, BatchNorm, pretrained)## branch1self.aspp = build_aspp(backbone, output_stride, BatchNorm)self.decoder = build_decoder(num_classes, backbone, BatchNorm)## branch2# self.br2_aspp = build_aspp(backbone, output_stride, BatchNorm)# self.br2_decoder = build_decoder(num_classes, backbone, BatchNorm)## fusionself.fusion_type = fusion_typeif self.fusion_type == 'attention_fusion':print('fusion_type is attention_fusion')self.fusion = build_attention_fusion(aux_classes, backbone, BatchNorm, is_concat=is_concat)elif self.fusion_type == 'fusion':print('init fusion_type')self.fusion = build_fusion(aux_classes, backbone, BatchNorm, is_concat=is_concat)else:raise NotImplementedErrorif freeze_bn:self.freeze_bn()def forward(self, x1, x2):## branch1br1_x, low_level_feat1 = self.backbone(x1)# print(br1_x.shape, low_level_feat1.shape)br1_x = self.aspp(br1_x)br1_out = self.decoder(br1_x, low_level_feat1)br1_out = F.interpolate(br1_out, size=x1.size()[2:], mode='bilinear', align_corners=True)# br1_out = br1_out.permute(0, 2, 3, 1).contiguous()## branch2br2_x, low_level_feat2 = self.backbone(x2)br2_x = self.aspp(br2_x)br2_out = self.decoder(br2_x, low_level_feat2)br2_out = F.interpolate(br2_out, size=x2.size()[2:], mode='bilinear', align_corners=True)# br2_out = br2_out.permute(0, 2, 3, 1).contiguous()## fusionfusion_x = self.fusion(br1_x, low_level_feat1, br2_x, low_level_feat2)fusion_x = F.interpolate(fusion_x, size=x2.size()[2:], mode='bilinear', align_corners=True)# fusion_x = fusion_x.permute(0, 2, 3, 1).contiguous()return br1_out, br2_out, fusion_xdef freeze_bn(self):for m in self.modules():if isinstance(m, SynchronizedBatchNorm2d):m.eval()elif isinstance(m, nn.BatchNorm2d):m.eval()def get_1x_lr_params(self):modules = [self.backbone]for i in range(len(modules)):for m in modules[i].named_modules():if isinstance(m[1], nn.Conv2d) or isinstance(m[1], SynchronizedBatchNorm2d) \or isinstance(m[1], nn.BatchNorm2d):for p in m[1].parameters():if p.requires_grad:yield pdef get_10x_lr_params(self):modules = [self.aspp, self.decoder, self.fusion]for i in range(len(modules)):for m in modules[i].named_modules():if isinstance(m[1], nn.Conv2d) or isinstance(m[1], SynchronizedBatchNorm2d) \or isinstance(m[1], nn.BatchNorm2d):for p in m[1].parameters():if p.requires_grad:yield pimport time
start = time.time()
if __name__ == "__main__":model = PairwiseDeepLab(backbone='resnet18', output_stride=16, in_channels=5, pretrained=False, fusion_type='attention_fusion')model.eval()input = torch.rand(1, 5, 256, 256)output = model(input, input[:])print(output[0].size(), output[1].size(), output[2].size())print("Total paramerters: {}".format(sum(x.numel() for x in model.parameters())))   
end = time.time()
print(end-start)


http://chatgpt.dhexx.cn/article/juPkQSFy.shtml

相关文章

pairwise相似度计算

做了一个比赛,其中为了更好的构建负样本,需要计算不同句子之间的相似性,句子大概有100w,句子向量是300维,中间踩了很多坑,记录一下。 暴力计算 最简单的idea是预分配一个100w x 100w的矩阵,一…

如何计算 Pairwise correlations

Pairwise Correlation的定义是啥?配对相关性?和pearson correlations有什么区别? Pairwise Correlation顾名思义,用来计算两个变量间的相关性,而pearson correlations只是计算相关性的一种方法罢了。 1、pearson相关系…

再谈排序算法的pairwise,pointwise,listwise

NewBeeNLP干货 作者:DOTA 大家好,这里是 NewBeeNLP。 最近因为工作上的一些调整,好久更新文章和个人的一些经验总结了,下午恰好有时间,看了看各渠道的一些问题和讨论,看到一个熟悉的问题,在这…

【推荐】pairwise、pointwise 、 listwise算法是什么?怎么理解?主要区别是什么?

写在前面:写博客当成了学习笔记,容易找到去完善,不用于商业用途。通过各种途径网罗到知识汇总与此,如有侵权,请联系我,我下掉该内容~~ 排序学习的模型通常分为单点法(Pointwise Approach&#…

软件测试用例设计之Pairwise算法

Pairwise算法简介 Pairwise是L. L. Thurstone(29 May1887 – 30 September 1955)在1927年首先提出来的。他是美国的一位心理统计学家。Pairwise也正是基于数学统计和对传统的正交分析法进行优化后得到的产物。 测试过程中,对于多参数参数多值的情况进行测试用例组…

磁盘配额中quotacheck不能创建aquota.user和aquota.group文件的问题

在centos6.5学习中有关磁盘配额的内容中,发现quotacheck -augv 命令无法创建aquota.group 和aquota.user文件, 操作系统挂载在/home下,经排查发现是SELinux的问题,使用setenforce 0命令将其关闭后,重新执行quotacheck…

Linux从入门到精通(八)——Linux磁盘管理

文章篇幅较长,建议先收藏,防止迷路 文章跳转Linux从入门到精通(八)——Linux磁盘管理goLinux从入门到精通(九)——Linux编程goLinux从入门到精通(十)——进程管理goLinux从入门到精…

Linux:Quota 的基本命令​​​​​​​

在开始进行 quota 的实作之前,我们得来了解一下 quota 要使用的指令啰! 基本上分为两种,一种是查询功能(quota, quotacheck, quotastats, warnquota, repquota),另一种则是编辑 quota 的内容( …

01_Linux系统管理_基础知识_高级文件系统管理_磁盘配额(quota)

环境 虚拟机:VMware-10.0.7 build-2844087Linux系统:CentOS 6.8远程工具:Xshell 6 (Build 0197) 01_Linux系统管理_基础知识_高级文件系统管理_磁盘配额 一、什么是磁盘配额(quota) 磁盘配额概念 对用户和用户组使用磁…

linux 系统配额管理功能,磁盘配额管理_Linux教程_Linux公社-Linux系统门户网站

在多用户系统中,如果没有对用户使用的磁盘空间做出限制,用户无限制地存放数据和文件,可能会导致系统磁盘空间告警。如果存放的是无用数据,就会导致磁盘空间白白浪费。磁盘配额可以限制用户或组在磁盘上存放文件的空间,…

Linux复习笔记

Linux复习笔记 常识说明 目录结构 Linux以树型结构管理文件,其最上层文件夹为 / ,也就是根目录。 如图所示,图中展示了一部分文件夹的结构: 所有的文件夹都属于根目录的子文件夹。 安装好系统后,根目录会挂载到一…

linux对目录空间使用限制,Linux quotacheck命令使用详解:检查磁盘的使用空间和限制...

quotacheck命令通过扫描指定的文件系统,获取磁盘的使用情况,创建、检查和修复磁盘配额(quota)文件。执行quotacheck指令,扫描挂入系统的分区,并在各分区的文件系统根目录下产生quota.user和quota.group文件,设置用户和…

Linux常用命令——quotacheck命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) quotacheck 检查磁盘的使用空间与限制 补充说明 quotacheck命令通过扫描指定的文件系统,获取磁盘的使用情况,创建、检查和修复磁盘配额(quota)文件。执行quotach…

Linux quotacheck失败

我找了多少个帖子才发现解决这个问题的啊...最终还是靠FQ找的这位大佬的文章 http://www.2daygeek.com/quotacheck-error/# 当我在执行quotacheck -avug的时候出现如下的错误: quotacheck: 无法从 /dev/sdb1 上的文件名猜测其格式,请在命令行中指定一个…

Linux系统输入quotacheck -ugcv /dev/sdb1报错

quotacheck -ugcv /dev/sdb1 报错处理 报错大多因为selinux没有关闭 [rootlocalhost fanhuilin]# quotacheck -ugcv /dev/sdb1 quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid runni…

【Shell 命令集合 磁盘管理 】Linux 检查和创建磁盘配额数据库 quotacheck命令使用教程

目录标题 描述语法格式参数说明错误情况 注意事项底层实现示例示例一示例二示例三示例四示例五示例六示例七 用c语言实现结语 Shell 命令专栏:Linux Shell 命令全解析 描述 quotacheck命令是Linux系统中的一个磁盘配额管理工具,用于检查和创建磁盘配额数…

linux quotacheck命令参数及用法详解---Linux系统管理

功能说明:检查磁盘的使用空间与限制。 语  法:quotacheck [-adgRuv][文件系统...] 补充说明:执行quotacheck指令,扫描挂入系统的分区,并在各分区的文件系统根目录下产生quota.user和quota.group文件,设…

第一性原理 《禅与计算机程序设计艺术》 / 陈光剑

第一性原理 《禅与计算机程序设计艺术》 / 陈光剑 任何事物背后必有道理。 什麼是第一性原理 第一性原理(First Principle Thinking),指的是回歸事物最基本的條件,將其拆分成各要素進行解構分析,從而找到實現目標最優路徑的方法。 該原理源於古希臘哲學家亞里士多德提出的一…

“风味人间”与计算机程序设计艺术《禅与计算机程序设计艺术》 / 陈光剑

来自“风味人间”的类比 所谓美食,不过是一次又一次的相逢。我们带您穿越山海之间,偶尔的落地生根,成就万千肴变,随即化作滚滚红尘,穿越香料歧路,几度江湖夜雨后,点亮万家灯火。 《风味人间》 浮华随风去,一菜一江湖。无论置身繁华闹市,还是身居乡野陋巷,世上的滋味,…

《禅与计算机程序设计艺术》/ By 禅与计算机程序设计艺术GPT-4

以《禅与计算机程序设计艺术》为文章标题,写一篇关于软件架构设计哲学思想的文章,不少于10000字。不要列目录,直接写具体的内容。 《禅与计算机程序设计艺术》/ By 禅与计算机程序设计艺术&GPT-4 文章目录 《禅与计算机程序设计艺术》/ By 禅与计算机程序设计艺术&G…