zoukankan      html  css  js  c++  java
  • 医学图像配准 | Voxelmorph 微分同胚 | MICCAI2019

    • 文章转载:微信公众号「机器学习炼丹术」
    • 作者:炼丹兄(已授权)
    • 联系方式:微信cyx645016617(欢迎交流)
    • 论文题目:‘Unsupervised Learning for Fast Probabilistic Diffeomorphic Registration’

    0 综述

    • 本文提出了一个概率生成模型,并给出了一种基于无监督学习的推理算法卷积神经网络
    • 论文中对一个三维脑配准任务进行了验证,并提供了一个实验结果;
    • 论文的方法在提供微分同胚的同时,且具有最先进的精度和非常快的运行速度。

    1 微分同胚

    Our approach results in state of the art accuracy and very fast runtimes, while providing diffeomorphic guarantees.

    这片论文提供了SOTA的配准方式,并且使用了diffeomorphic(微分同胚)。

    • diffeomorphic 微分同胚

    • deformation field 变形场

    • ordinary differential equation (ODE) 常微分方程

    • 假设两个三维图片满足:(phi = R^3 ightarrow R^3),表示从一个图片的坐标到另外一个图片的坐标的变形场

    • 这个变形场的定义为:

    • 假设我们拥有了(tin [0,1])的所有静态速度场,那么我们就可以integrate(整合)所有的速度场,从而从(phi^{(0)})推断出(phi^{(1)})的图片。(也就是0时刻的位移厂推出1时刻的位移场);

    关于微分同胚,经过李代数和群论的推到后的结论:

    总的来说,我感觉就是对于部分图片变化太大,所以可能不存在静态位移场,所以用速度场来计算位移场。而这个微分同胚的推断,通过李代数和群论,得到的结论如下

    (phi^{(1)} = phi^{(1/2)} composition phi^{(1/2)})

    这部分我也不太能说明具体的含义,在voxelmorph的github代码中体现为:

    class VecInt(nn.Module):
        """
        Integrates a vector field via scaling and squaring.
        """
    
        def __init__(self, inshape, nsteps):
            super().__init__()
            
            assert nsteps >= 0, 'nsteps should be >= 0, found: %d' % nsteps
            self.nsteps = nsteps
            self.scale = 1.0 / (2 ** self.nsteps)
            self.transformer = SpatialTransformer(inshape)
    
        def forward(self, vec):
            vec = vec * self.scale
            for _ in range(self.nsteps):
                vec = vec + self.transformer(vec, vec)
            return vec
    

    重点看最后一行,vec = vec + self.transformer(vec,vec),这个刚好对应上面的:

    这一块我的理解也就止步于此,进一步的可能需要李代数和群论的知识把。

    2 模型结构

    2.1 简单

    模型结构不复杂:

    我直接在代码中标记注释,来学习这个模型结构的过程。

        def forward(self, source, target, registration=False):
            '''
            Parameters:
                source: Source image tensor.
                target: Target image tensor.
                registration: Return transformed image and flow. Default is False.
            '''
    
            # 先把fixed和moving两个图片拼接起来,放到Unet模型中,提取中一个特征
            x = torch.cat([source, target], dim=1)
            x = self.unet_model(x)
    
            # 把特征转换成速度场
            flow_field = self.flow(x)
    
            # 对速度场做下采样
            pos_flow = flow_field
            if self.resize:
                pos_flow = self.resize(pos_flow)
    
            preint_flow = pos_flow
    
            # 这个是如果使用了双向配准的话
            neg_flow = -pos_flow if self.bidir else None
    
            # 微分同胚的整合
            if self.integrate:
                pos_flow = self.integrate(pos_flow)
                neg_flow = self.integrate(neg_flow) if self.bidir else None
    
                # 把尺寸恢复到原来的尺寸
                if self.fullsize:
                    pos_flow = self.fullsize(pos_flow)
                    neg_flow = self.fullsize(neg_flow) if self.bidir else None
    
            # 计算这个速度场作用在moving上的结果,如果使用了双向配准,则还需要把速度场反向作用在fixed图片上
            y_source = self.transformer(source, pos_flow)
            y_target = self.transformer(target, neg_flow) if self.bidir else None
    
            # return non-integrated flow field if training
            if not registration:
                return (y_source, y_target, preint_flow) if self.bidir else (y_source, preint_flow)
            else:
                return y_source, pos_flow
    

    整个网络也不难理解,其实这个voxelmorph代码中已经使用了微分同胚和双向配准的方案,目前使用变分推断的prob-voxelmorph模型github仓库中作者还没有提供torch的代码,所以目前还没有这个部分。

    关于voxelmorph先介绍这么多,个人的心得为:

    • 微分同胚一定要有,不然很容易不收敛,建议使用默认的参数7,把一个时间间隔划分成8份;
    • 双向配准的效果还不确定。
    人不可傲慢。
  • 相关阅读:
    ElementUI中弹窗使用textarea原样显示SpringBoot后台带换行的StringBuilder内容
    Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
    Nodejs中搭建一个静态Web服务器,通过读取文件获取响应类型
    JS中怎样比较两个时分格式的时间大小
    ElementUI中对el-table的某一列的时间进行格式化
    MongoDb在Windows上的下载安装以及可视化工具的下载与使用
    Express中使用ejs新建项目以及ejs中实现传参、局部视图include、循环列表数据的使用
    FFmpeg-20160506-snapshot-bin
    FFmpeg-20160428-snapshot-bin
    FFmpeg-20160422-snapshot-bin
  • 原文地址:https://www.cnblogs.com/PythonLearner/p/14518503.html
Copyright © 2011-2022 走看看