而配准又分为
刚性配准
(rigid registration)和
非刚性配准
(non-rigid registration),而非刚性配准也叫做柔性配准(deformable registration)。其区别是:刚性配准的变化通常都是仿射变换,一般通过全图的平移、旋转、放缩等几个操作就可以对齐图像;而柔性配准则是对每一个局部区域(甚至每个像素点)都会有一个单独的变换,有学者们使用向量场(vector field)或者密集形变场(dense displacement field)来形容这种变换是比较合理的。换一种说法的话柔性变换也可以认为是光流(optical flow)对齐的一种医学特例。一般来说柔性配准更具有挑战性一些。
具体来说,根据当前状态,智能体会做出一个动作(平移旋转等),然后环境对浮动图像进行变换,并给予反馈。这里的环境是我们人为设置的,它的作用就是:1、提供每次训练所需的数据;2、可以衡量配准结果的好坏(如Dice等评价指标)并反馈奖励给智能体;3、根据智能体的动作对浮动图像进行操作。
那为什么要用强化学习来做配准呢?大多数给出的答案是当遇到多模态时,一般的DL方法没法从形态差异较大的图像间找出最优解(关键是不好设计Loss)。且图像变换比较复杂或数据较少时,由于DL的loss通常是针对全局的,它们会更倾向于学习粗略对齐而忽略掉一些细节。
刚性配准中的强化学习
刚性配准其实是比较适合用强化学习来解决的,因为它就只需要处理全局的变换,一般就上下左右移动、左右旋转、放大或缩小
8个离散动作
。而奖励的设置则是通过计算两图的相应特征点(SIFT点)之间的距离,再用当前本的距离减去上一步的距离得到Reward。或者就直接距离越远则奖励越小,距离越近则奖励越高。其代表是Kai Ma
、Rui Liao
以及Shanhui Sun
等人的工作。
在强化学习算法的选用上,Kai Ma用的是Dueling DQN
,Rui Liao用的是DQN
加上一个对动作的强监督,而Shanhui Sun则是用的A3C
。从RL算法上来说,A3C属于异步学习框架,是三者中最高效的,而且目前大部分工业RL算法也都是异步学习的,从论文看来其在配准中效果也最好。基于A3C,后面有一系列扩展的配准相关工作,如改进奖励函数、增加更强的时序和空间信息(ConvLSTM/ConvGRU)等发表在医学顶刊Medical Image Analysis上
或者ACCESS上
。这系列基于A3C的方法整体框架其实是差不多的,如下图:
前面我们提到过,相比于刚性配准,柔性配准要难得多。这是由于它的变换比较复杂,且输出的是全图每个像素点的变换(动不动就是128x128x128的向量场)。这对强化学习来说无疑是
巨大的挑战
。
目前绝大部分的强化学习算法都是针对低维度的、离散的动作,也就是说根本无法直接将强化学习搬运过来搞柔性配准任务。那怎么办呢,目前已知的有两种方法。一是取巧的方法:我搞不定高维动作的RL算法那又怎么样呢,我选择直接
将高维连续动作(向量场)转化为低维离散的动作
。
其具体做法是将图像网格化,再利用B曲线(B-splines)来控制某点带动周围网格的形变。你可以想象你用手去提一个平铺在地上的渔网,你用手去拉渔网上的一个点(网线的交界处),则该点周围全都会被拉起来,且靠的越近,受到的影响越大。而渔网上有数个这样的点,你每次拉一点点,拉的点越多,则渔网的形变就越大。Krebs等人就是这么做的
,但他们还遇到一个问题,那就是图像上的点实在是太多了,而智能体受到RL的算法框架限制,每次又只能拉一点,多了就拉不了了。于是他们使用PCA对这些点进行降维(3D图像从16x16x8个点降到25个点,2D图像从16x16个点降到15个点),由于每个点都可以向上或向下拉,所以最终需要预测50个动作(for 3D)或30个动作(for 2D)。
但这个方法主要有两个大问题。其一:该算法需要Ground Truth Deformation Field。就算你的动作已经从128x128x128(x2)降到了50,但这对于DQN此类RL算法来说还是太难了。因此作者采用GT形变场来计算Reward,但这也就意味着只能自己合成数据了,且合成的方式只能是基于B-Spline的,且只能是单模态。其二:整个算法流程实在是太复杂了= =,包含了各种传统机器学习和图像算法:DDF(Free Form Deformations)、PCA等等,再加上强化学习,基本就是来一个劝退一个。而且这篇paper没有公开代码,我复现的时候都快哭了好吧!
当然,作为第一篇处理柔性配准的RL算法它已经很屌了,毕竟算是开了一个先河。那么不改变问题本身,难道就没有RL算法可以直接处理这种高维连续动作的问题了吗?答案是:非常难!就算在深度学习飞速发展的近几年,RL+柔性配准依然劝退了一波又一波人。直到今年(2022年)才出现了第二篇paper使用强化学习来处理柔性配准任务
(发表在AAAI)。
这篇paper(
这里
)的主要思想其实很简单:高维动作我解决不了,我就
学习一个低维的representation vector,再学一个Decoder把这个vector还原成高维动作,
此外我再增加一个监督或无监督loss来加速智能体对连续动作的学习,确保万无一失。
如图所示,除了Actor和Critic以外,这篇paper还多加了一个Planner用来学习高维动作的低维表示,而Actor负责还原高维的动作。这里的动作其实就是完整的Deformation Field,整个过程就类似于coarse-to-fine进行配准的过程。这篇文章还使用了K-means来得到每个图像自己粗略的分割label,并利用这个这些label来作为reward function,因此是无监督的,不需要合成数据,且可以用到任意的公开数据集中。此外,这篇paper的RL算法看得出来是基于SAC(Soft Actor-Critic)的,也是目前最流行的连续动作算法之一吧。并且代码还开源了!