图像对齐深度学习算法调研
参考博客:
旷视 R TALK:图像对齐及其应用
单应性Homograph估计:从传统算法到深度学习
1. 传统算法
大致流程:
- 提取特征点
- 特征匹配
- RANSAC 排除错误匹配
- 求解单应性(Homograph)矩阵
难点:
- 弱纹理、无纹理(特征少,难以提取)
- 低光图像、噪声干扰(特征集中在局部,对齐效果差)
- 重复纹理(特征匹配容易出错)
- 大前景干扰
- 大视差
- 深度视差(单应性变换本身的局限性)
2. 深度学习算法
2.1 Deep Image Homography Estimation(2016)
论文地址
创新:
- 数据集
- 原始图像取一个矩形区域 A(蓝色框)
- 对 A 的四个顶点做一定范围(黄色框)的随机位移(红色箭头)得到一个不规则区域(不规则绿色框)
- 根据位移向量可以求得 HAB\mathrm{H^{AB}}HAB 和 HBA\mathrm{H^{BA}}HBA
- 对原图做 HBA\mathrm{H^{BA}}HBA 变换,得到矩形区域 B(矩形绿色框)
- 将 A 和 B 输入给网络求得 HAB\mathrm{H^{AB}}HAB
- 网络结构
直接预测出单应性矩阵参数比较困难,因此网络预测的是4个顶点的位移量(右边回归网络),然后再计算单应性矩阵。
文中说没有置信度会限制一些应用,就搞了左边的分类网络,将4个顶点的位移范围划分为21个区间,输出落在每个区间的概率值。
优点:
- 对弱纹理和无纹理图像优于传统算法;
缺点:
- 训练数据是人工变形得到的,真实世界图像存在内容上差异,导致对真实世界图像的对齐效果较差;
2.2 Unsupervised Deep Homography: A Fast and Robust Homography Estimation Model(2017)
论文地址
代码地址
创新:
- 网络结构
图(a)为2.1的监督算法,图(b)为传统算法,图(c)为此文无监督算法。
H~4pt\mathrm{\tilde{H}_{4pt}}H~4pt 为预测的4个顶点位移向量,结合4个顶点的位置坐标 C4ptA\mathrm{C^A_{4pt}}C4ptA,通过 Tensor DLT(Direct Linear Transform)得到单应性矩阵 H~\mathrm{\tilde{H}}H~;之后通过空间变换层得到图像 P~B\mathrm{\tilde{P}^B}P~B,并与实际图像 PB\mathrm{P^B}PB 计算光度损失(像素点间的 L1 损失)。
其中,Tensor DLT(代替 SVD 奇异值分解)和空间变换层都是为了便于梯度计算,使网络得以训练。
优点:
- 相比监督算法,对真实世界图像的对齐效果较好;
- 对图像特征的表达比较鲁棒,不像传统方法很依赖特征点;
缺点:
- 数据集主要用的航拍图像,适合单个单应性矩阵做对齐;
- 深度视差、RANSAC
2.3 Content-Aware Unsupervised Deep Homography Estimation(2019)
论文地址
代码地址
创新:
数据集
制作了一套数据集分为5大类,并为了量化评估,手工标注了5000张图像作为ground truth;- Regular(RE):纹理丰富,单平面远景适合用单个单应性矩阵对齐
- Low texture(LT):纹理少
- Low light(LL):低光图像
- Small Foregrounds(SF):小前景
- Large Foreground(LF):大前景
网络结构
令 β∈{a,b}\beta \in \{a,b\}β∈{a,b}
此文认为直接用像素值当特征不太好,通过 f(⋅)f(\cdot)f(⋅) 获取深层特征 FβF_{\beta}Fβ,并通过 m(⋅)m(\cdot)m(⋅) 生成 mask MβM_{\beta}Mβ。这里的特征和 mask 都和原图 IβI_{\beta}Iβ 分辨率相同,其中 m(⋅)m(\cdot)m(⋅) 的作用与 RANSAC 相似,生成的 mask 可以看作是特征的权重,来衡量特征的重要性,从而可以忽略一些干扰的特征(如干扰前景)。Gβ=FβMβG_{\beta}=F_{\beta}M_{\beta}Gβ=FβMβ 输入给后续的单应性估计网络,同样预测4个位移向量,并通过一个线性系统得到单应性矩阵 Hab\mathcal{H}_{a b}Hab。损失计算:
minm,f,hLn(Ia′,Ib)+Ln(Ib′,Ia)−λL(Ia,Ib)+μ∥HabHba−I∥22\min _{m, f, h} \mathbf{L}_{\mathbf{n}}\left(I_{a}^{\prime}, I_{b}\right)+\mathbf{L}_{\mathbf{n}}\left(I_{b}^{\prime}, I_{a}\right)-\lambda \mathbf{L}\left(I_{a}, I_{b}\right)+\mu\left\|\mathcal{H}_{a b} \mathcal{H}_{b a}-\mathcal{I}\right\|_{2}^{2} m,f,hminLn(Ia′,Ib)+Ln(Ib′,Ia)−λL(Ia,Ib)+μ∥HabHba−I∥22
其中,
Ln(Ia′,Ib)=∑iMa′Mb⋅∥Fa′−Fb∥1∑iMa′Mb\mathbf{L}_{\mathbf{n}}\left(I_{a}^{\prime}, I_{b}\right)=\frac{\sum_{i} M_{a}^{\prime} M_{b} \cdot\left\|F_{a}^{\prime}-F_{b}\right\|_{1}}{\sum_{i} M_{a}^{\prime} M_{b}}Ln(Ia′,Ib)=∑iMa′Mb∑iMa′Mb⋅∥Fa′−Fb∥1,iii 表示特征图和mask中的像素索引L(Ia,Ib)=∥Fa−Fb∥1\mathbf{L}\left(I_{a}, I_{b}\right)=\left\|F_{a}-F_{b}\right\|_{1}L(Ia,Ib)=∥Fa−Fb∥1
Hba\mathcal{H}_{b a}Hba 通过将 IaI_aIa 和 IbI_bIb 的特征位置互换得到
损失函数前两项最小化变换后图像特征的差异,第三项是为了避免全零解最大化原始图像特征差异,第四项则是让两个单应性变换尽可能可逆。
(2021.10.25)后续发现提供的代码用torch.nn.TripletMarginLoss()
替代了论文描述的损失函数(TripletMarginLoss解析),基本就是只保留上面损失的1、3项,第4项在 utils.py 里留了个口getBatchHLoss()
;主要问题在于 mask 的训练,从 loss 分析如果 mask 是全为0那么 loss 会最低,这显然不对;mask 加入训练时,github 上说用一个小学习率微调网络,结合反向传播和数据来看,前景差异大,背景差异小,则 mask 的前景部分会更快地趋向于0,那么 mask 是有效的,但是关键在于这个数据集是分割视频生成的,背景部分差异很小,后面发现很多对齐用的公开数据集即使是背景差异也非常大,这个 mask 的策略基本就是无效的了。
优点:
- 解决 RANSAC 问题,主要避免前景干扰
缺点:
- 深度视差
2.4 DeepMeshFlow: Content Adaptive Mesh Deformation for Robust Image Registration(2019)
论文地址
Mesh Flow 大致就是把图像划分为网格,每个网格对应一个单应性矩阵,从而适应图像中的不同深度平面来对齐。
创新:
网络结构
ResNet-34 后面连接 KKK 个分支(K=3K=3K=3),每个分支从一个自适应池化层开始,并通过卷积层生成一个特定大小的 mesh flow:M1′→(Hg16+1)×(Wg16+1)×2=2×2×2\mathcal{M}_{1}^{\prime} \to \left(\frac{H_{g}}{16}+1\right) \times\left(\frac{W_{g}}{16}+1\right) \times 2=2 \times 2 \times 2M1′→(16Hg+1)×(16Wg+1)×2=2×2×2
M2′→(Hg4+1)×(Wg4+1)×2=5×5×2\mathcal{M}_{2}^{\prime} \to \left(\frac{H_{g}}{4}+1\right) \times\left(\frac{W_{g}}{4}+1\right) \times 2=5 \times 5 \times 2M2′→(4Hg+1)×(4Wg+1)×2=5×5×2
M3→(Hg+1)×(Wg+1)×2=17×17×2\mathcal{M}_{3} \to \left(H_{g}+1\right) \times\left(W_{g}+1\right) \times 2=17 \times 17 \times 2M3→(Hg+1)×(Wg+1)×2=17×17×2
然后将粗尺度 M1′\mathcal{M}_{1}^{\prime}M1′ 和 M2′\mathcal{M}_{2}^{\prime}M2′ 上采样至 M3\mathcal{M}_{3}M3 分辨率,并融合 M1\mathcal{M}_{1}M1、M2\mathcal{M}_{2}M2、M3\mathcal{M}_{3}M3。
mesh flow 的融合通过一个场景分割网络将图像 III 分割为 KKK 个类别,输出大小为 (Hg+1)×(Wg+1)×K\left(H_{g}+1\right) \times\left(W_{g}+1\right) \times K(Hg+1)×(Wg+1)×K,融合方式是直接按分类结果选择每个点的位移向量用哪个 mesh flow 的对应值,最终得到 M∗\mathcal{M}^{*}M∗。之后的 loss 计算与 2.3 相同。
优点:
- 解决深度视差问题
2.5 RANSAC-Flow: generic two-stage image alignment(2020 ECCV)
论文地址
代码地址
论文代码详细分析
创新:
- 单应性(粗对齐)与光流法(细对齐)结合
- 迭代方式做对齐
优点:
按论文中的说法,单应性对图像细节对齐的不好,而光流法对差异较大的图像无法对齐,而此方法可以对差异大的图像细节也对齐好,扬长避短地结合两种对齐方法。
- 细节对齐效果好
- 对各种差异很大图像也能对齐
- 网络基本没做什么优化就有很好的效果(论文只是训练了细对齐网络,粗对齐网络直接是迁移过来都不微调;直接用提供的模型在自己双目相机采集的小差异数据上就有很好的对齐效果)
缺点:
论文中展示的为相对效果较好(较容易对齐)的结果,下图为挑选的几种不同角度的缺点,由于最终的对齐参数为一个像素级对齐矩阵,所以主要缺陷还是与光流法类似。
无法判断需要对齐的部分
此例,原始图像为目标图像右上一小块区域,但是算法会尽可能将全图都对上。
光流法的图像局部扭曲现象
像素级对齐通常在低分率的特征图上做对齐然后插值到原图的高分辨率,目前判断扭曲现象是插值造成的。
前景遮挡
前景遮挡情况下的肉眼观感很差,存在大面积扭曲,不如 2.3 的效果(无视前景做对齐)。
慢
1660Ti的笔记本上约10s一对图像。
2.6 GLU-Net: Global-Local Universal Network for Dense Flow and Correspondences(2020 CVPR)
论文地址
代码地址
图像对齐深度学习算法调研相关推荐
- 图像 引言 深度学习_深度学习算法对磁共振图像序列的识别
本文内容.图片与涉及的源码均为作者原创,未经许可不得转载.版权声明或联系作者请移步 "关于" 前言 面对大数据和人工智能,已经跨过门槛的各路小伙伴们利用深度学习算法不断的炼丹,都已 ...
- 大话卷积神经网络CNN,小白也能看懂的深度学习算法教程,全程干货建议收藏!...
来源 | 程序员管小亮 本文创作的主要目的,是对时下最火最流行的深度学习算法的基础知识做一个简介,作者看过许多教程,感觉对小白不是特别友好,尤其是在踩过好多坑之后,于是便有了写这篇文章的想法. 由于文 ...
- Bengio、Hinton的不懈追求——深度学习算法揭示大脑如何学习
来源:AI科技评论 编译:Don 校对:青暮 "如果我们能够揭示大脑的某些学习机制或学习方法,那么人工智能将能迎来进一步的发展,"Bengio如是说. 深度学习依赖于精妙设计的算法 ...
- 计算机视觉招聘_INDEMIND|SLAM、计算机视觉、深度学习算法招聘(社招实习)
公司介绍 INDEMIND是一家专注于计算机视觉技术研发与嵌入式计算平台研发的人工智能公司,行业领先的计算机视觉方案提供商.公司成立于2017年,核心技术团队成员均为来自计算机视觉领域的顶级技术人员. ...
- 刚发布!开发者调查报告:机器学习/深度学习算法工程师急缺
近日,CSDN发布了<2019-2020中国开发者调查报告>,本报告从2004年开始针对一年一度的CSDN开发者大调查数据分析结果形成,是迄今为止覆盖国内各类开发者人群数量最多.辐射地域. ...
- 万字长文解读深度学习算法在自动驾驶规控中的应用
交流群 | 进"传感器群/滑板底盘群"请加微信号:xsh041388 交流群 | 进"汽车基础软件群"请加微信号:ckc1087 备注信息:群名称 + 真实姓名 ...
- 深度学习算法工程师面试知识点总结(一)
深度学习算法工程师岗位需要具有的技术栈初步总结如下: 这个总结并不是很完整,这个方向所需要的知识体系非常的庞大,例如高等数学基础.线性代数.概率论的基础,这对很多的同学来说是一个比较大的挑战.还需要针 ...
- ONNX 浅析:如何加速深度学习算法工程化?
AlphaGo击败围棋世界冠军李世石以来,关于人工智能和深度学习的研究呈现井喷之势. 各种新的算法和网络模型层出不穷,令人眼花缭乱.与之相随的,深度学习的训练和推理框架也在不断的推陈出新,比较著名的有 ...
- 为什么说卷积神经网络,是深度学习算法应用最成功的领域之一?
目前,作为深度学习的代表算法之一,卷积神经网络(Convolutional Neural Networks,CNN)在计算机视觉.分类等领域上,都取得了当前最好的效果. 后来,基于深度神经网络和搜索树 ...
最新文章
- 2D池化IPoolingLayer
- 026_如何在MAC下输入主要国家货币符号?
- Zookeeper 在Hadoop中的应用
- 9月,水了几个大中厂前端面试的一些总结分享 | 掘金技术征文
- 斯坦福助理教授马腾宇:ML非凸优化很难,如何破?
- Java:汇总堆外数据
- delphi7升级delphi2007可以互用马_马爹利鼎盛周末饭局暂停营业,未来再见
- [导入]16:50论坛终于恢复了
- java进度条代码,java进度条代码该怎么编写?
- com4j学习(2):Visio自定义模具和形状,并添加连接点
- 三年级计算机帮助我们学本领,三年级作文学本领40
- (34.1)【登录越权/爆破专题】原理、字典资源、工具、利用过程……
- 编程制作动态壁纸的思路_Android应用源码动态壁纸开发必看例子源码
- css中英文单词换行的问题
- 车马邮件都慢,一生只够爱一个人
- 开发微信小程序的作用
- Java***冒泡排序***
- 100句非常经典的读书名言
- 2018最新精选的Go框架,库和软件的精选列表 二 https://awesome-go.com/
- SCRUM Beta Day 1
热门文章
- blog, blog.
- HTML学习笔记-v1.3
- 国内外概况和预测android主界面个性化定制技术研究与实现,手机个性化图铃定制系统的研究及实现...
- 2843 拯救炜哥 (bfs)
- 王瑞平是一个计算机编程家,CCF@U683: 方玉明、王瑞平、樊彬、张天柱、任桐炜走进山东财经大学...
- 设备栈中各个设备加载顺序
- Java开发环境变量配置
- 华为手机真机调试设置
- 2019全国大学生信息安全大赛线下初体验 --体验黑客的儿童节
- Unity进度条简单制作(两个Image搞定)