• 文章转载:微信公众号「机器学习炼丹术」
  • 作者:炼丹兄(已授权)
  • 联系方式:微信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 \rightarrow R^3\),表示从一个图片的坐标到另外一个图片的坐标的变形场

  • 这个变形场的定义为:

  • 假设我们拥有了\(t\in [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份;
  • 双向配准的效果还不确定。

医学图像配准 | Voxelmorph 微分同胚 | MICCAI2019的更多相关文章

  1. voxelmorph配置

    简介 VoxelMorph使用CNN实现了非监督的医学图像配准,速度较之前的方法有很大提升.主要特点有: 提出了一种基于学习的解决方案,不需要在训练过程中获取诸如ground truth对应或解剖标志 ...

  2. 【图像配准】基于互信息的图像配准算法:MI、EMI、ECC算法

    简单介绍: 基于互信息的图像配准算法以其较高的配准精度和广泛的适用性而成为图像配准领域研究的热点之中的一个.而基于互信息的医学图像配准方法被觉得是最好的配准方法之中的一个.基于此.本文将介绍简单的基于 ...

  3. 图像匹配 | NCC 归一化互相关损失 | 代码 + 讲解

    文章转载自:微信公众号「机器学习炼丹术」 作者:炼丹兄(已授权) 作者联系方式:微信cyx645016617(欢迎交流共同进步) 本次的内容主要讲解NCCNormalized cross-correl ...

  4. Computer Vision_33_SIFT:A novel coarse-to-fine scheme for automatic image registration based on SIFT and mutual information——2014

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  5. Image Processing and Analysis_15_Image Registration:Image registration methods a survey——2003

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  6. Image Processing and Analysis_15_Image Registration:A survey of medical image registration——1998

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  7. 【计算机视觉】图像配准(Image Registration)

    (Source:https://blog.sicara.com/image-registration-sift-deep-learning-3c794d794b7a)  图像配准方法概述 图像配准广泛 ...

  8. 图像配准:从SIFT到深度学习

      图像配准(Image Registration)是计算机视觉中的基本步骤.在本文中,我们首先介绍基于OpenCV的方法,然后介绍深度学习的方法. 什么是图像配准 图像配准就是找到一幅图像像素到另一 ...

  9. Matlab 高斯_拉普拉斯滤波器处理医学图像

    前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...

随机推荐

  1. Python_小程序

    一.开发前的准备工作 1.申请AppID:一个账号对应一个小程序,个人/个体只能申请5个小程序 2.下载开发工具 二.小程序的文件结构 三. 1.数据绑定 1.1数据的设置 Page( data:{ ...

  2. Playbook 角色(Roles) 和 Include 语句

    简介 当我们刚开始学习运用 playbook 时,可能会把 playbook 写成一个很大的文件,到后来可能你会希望这些文件是可以方便去重用的,所以需要重新去组织这些文件. Include 语句 基本 ...

  3. cin 与 getline

    cin空格截断 getline(cin,s) 换行结束 ....太愚蠢了

  4. Linux 驱动框架---platform驱动框架

    Linux系统的驱动框架主要就是三个主要部分组成,驱动.总线.设备.现在常见的嵌入式SOC已经不是单纯的CPU的概念了,它们都会在片上集成很多外设电路,这些外设都挂接在SOC内部的总线上,不同与IIC ...

  5. μC/OS-III---I笔记3---时间管理

    时间管理相关函数,其实深入根本的理解就是一些对时间任务相关变量,数据结果进行修改的函数这样方便对应任务查找延时等时间相关的任务有没有到期.前面的时间相关的函数是这些操作的基 1.延时函数 OsTIme ...

  6. 007.NET5 Log4Net组件使用

    NET 5 Log4Net组件使用 1. Nuget引入程序集:log4net + Microsfot.Extensions.Logging.Log4Net.AspNetCore 2. 准备配置文件 ...

  7. 修改jupyter-notebook的python3版本

    将默认的kernel修改为对应的python即可: /home/a/.virtualenvs/YOUR_VENV/bin/python -m pip install ipykernel /home/a ...

  8. VSCode 在 Vue 导入路径中使用 @ 符号后无法正确跳转 bug

    VSCode 在 Vue 导入路径中使用 @ 符号后无法正确跳转 bug bug jsconfig.json { // This file is required for VSCode to unde ...

  9. Web 安全漏洞 All In One

    Web 安全漏洞 All In One Web 安全 & 漏洞 输入输出验证不充分 SQL 注入 XSS self-XSS CSRF 目录穿越 文件上传 代码注入 命令注入 信息漏洞 暴力破解 ...

  10. CSS & new class name

    CSS & new class name { test: /\.((s*)css|sass)$/, // test: /\.(css|scss|sass)$/, use: ExtractTex ...