点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

荐语

透镜由于制造精度以及组装工艺的偏差会引入畸变,导致原始图像的失真。镜头的畸变分为径向畸变和切向畸变两类。以往的文章一般是通过传统方式进行推导,本次我们尝试使用深度学习来完成这一步骤。

在手机中的计算摄影4-超广角畸变校正中,我为你描述了广角镜头的镜头畸变校正和透视畸变校正,尤其是花了很多篇幅讲述施易昌等人的论文如何校正因为透视畸变导致的人脸拉伸现象。

然而,正如我文章中所讲,这个方法依然有它的不足之处:

  • 没有准确的人脸Mask就无法进行校正

  • 校正只针对人脸,会出现头小身大的现象

  • 某些情况下无法保证直线不弯曲,有些时候还无法很好的校正人脸

  • 速度慢,单张图像需要接近1秒钟完成

那么如何解决这些问题呢?今天要介绍的方法,就是尝试对上述缺陷进行改进。

一. 第一个基于深度学习的畸变校正算法

我们先来想想为什么施易昌等人的方法存在一定缺陷

  1. 需要FOV信息作为输入,作者提到他们用到了图像的EXIF信息来获取焦距和传感器信息,但我们都知道很多图像在传输和保存过程中是丢失了这些信息的

  2. 因为他们的算法只针对人脸区域采用球极投影进行校正,因此一定需要输入人脸的Mask,而这个Mask是通过专门训练的人脸分割网络计算出来的。很显然,这里带来了两个问题:

  • 算法需要额外的外部输入,增加了复杂度

  • 外部输入的质量高低决定了人脸校正的效果好坏

3. 整个算法包含多个可调整的参数。但作者只在20张图像上进行了参数的调整,然后在167张图像上进行了仔细的验证,最后在4131张图像上观察是否有明显的错误。总体来说,真正用于检验并调整参数只有不到两百张图像,确实可能有泛化性问题。

4. 另外目标函数也是非常复杂的,因此最优化也比较慢。

针对这几个问题,潜在的解决方案有:

  1. 完全不用相机内参数输入,将背景的镜头畸变校正也整合到流程中,用一些图像上的特征来约束镜头畸变校正

  2. 将人脸校正所需的Mask的计算整合到整个流程中,不需要外部输入

  3. 使用大量的图像来验证算法的泛化性和有效性

旷视研究院的谭婧、赵姗等人在2021年CVPR发表的文章,就很好的把这几个方案整合到了一起:

这篇文章展示了第一个用深度学习来完成的自动去畸变算法,其中用两个子网络分别完成镜头畸变的校正和透视畸变的校正,而且它不需要相机的畸变参数,效果据作者描述比施易昌等人的方法更好。

这里,LineNet用于进行镜头畸变校正,经过LineNet后直线被校直。而ShapeNet则用于进行人脸的球极畸变校正。通过两个注意力模块LAM(Line Attention Module)和FAM(Face Attention Module),图像中的直线和人脸被特意强调。由于训练数据有人脸和直线的标注信息,因此训练出的网络不需要外部的相机参数及人脸Mask也能够进行很好的校正,最后得到了和施易昌等方法相当,甚至某些情况下更好的结果。

接下来我从训练和验证数据、损失函数、评价指标、网络结构等几个方面概略的介绍一下。

1.1 训练和验证数据

谭婧等的方法总体上来说是一种监督型的训练方法,因此需要一个带有Ground Truth信息的数据集。然而以前从来没有广角畸变校正的标准数据集,因此作者用5个超广角的拍照手机,在各种场景下进行采集,制作了一个超过5000张图像的数据集,每张图像的人像分布在1到6人之间。由于有这几个相机的畸变参数,因此可以很容易的获得镜头畸变校正的map,作为LineNet训练时的Ground Truth。

接下来,为了获得每张图像对应的透视畸变校正后的图像,作者们基于施易昌等的方法开发了一个自动化的校正工具,其中刻意在原方法的目标函数的基础上添加了一个人脸附近的直线约束,使得能够更好的保持人脸附近的直线。

作者们还开发了一个微调工具,可以基于Mesh来对图像的局部进行微调。通过联合使用校正工具+微调工具,她们得到了一个效果很好的数据集,下图d是最终手动优化后的效果,可以看到它确实比施易昌等的方法结果好(图b),例如这里人脸附近的大楼阳台保持了直线。

下面展示了数据集中需要包括的内容

  • 输入的图像(完全未经畸变校正)

  • 经过镜头畸变校正后的图像(此时直线被校直)

  • 经过透视畸变校正后的图像(此时背景直线校直,且人脸畸变被消除)

  • 人脸Mask

  • 直线标注信息

  • 镜头畸变校正Map

  • 透视畸变校正Map

1.2 评价方法和指标

为了评价算法的效果,作者引入了两个评价指标: LineAcc(评价直线的保直度),以及ShapeAcc(评价人脸校正的准确度)。简单说来,LineAcc计算的是已标注的线段在校正后图像上的像素点的平均夹角,夹角越小,直线越直。而ShapeAcc则是计算校正前后人脸上每个关键点与中心点形成的线段的夹角,夹角越小,人脸效果越接近Ground Truth。

下图说明作者的最终输出在LineAcc和ShapeAcc两方面均超过了输入,且达到了较好的平衡。

1.3 网络结构

如前所述,作者的网络结构如下图所示,其中

  • LineNet用于进行镜头畸变校正,经过LineNet后直线被校直

  • ShapeNet则用于进行人脸的球极畸变校正。

  • 通过两个注意力模块LAM(Line Attention Module)和FAM(Face Attention Module),图像中的直线和人脸被特意强调

  • TM用于保持LineNet和ShapeNet在背景区域的一致性

1.4 损失函数

下面是LineNet和ShapeNet的损失函数,其中下标flow代表在计算map表的一致性,而下标proj和下标out则用于表示计算image的一致性。而2,s2则表示分别计算原始的L2 Loss,以及先对图像或map做Sobel计算,然后再计算L2 Loss。

类似的,两个注意力模块LAM和FAM也有自己的损失函数:

这几个损失函数之和构成了最终的损失函数,用于约束整个网络的训练

1.5 结果展示

我们先来看看作者展示的效果,这里图(a)是利用相机参数进行镜头畸变校正后的结果,图(b)是在此基础上进行球极投影校正的结果,图(c)是施易昌等人的方法,图(d)则是谭婧等的方法。

我们用动图比较下两个方法,可以看到对于某些图片,谭婧等的方法明显更好

不过仔细看别的图,会发现和施易昌的方法一样,谭婧等的方法也会有一些缺陷,施易昌等的方法过于强调人脸,使得背景可能弯曲,而谭婧等的方法则强调了背景的直线,但人脸表现不够完美:

1.6 小结,及实际项目中的好处

公平的说,这种基于深度学习的方案依然有这样那样的效果问题。但我得承认,它确实从整体方法上前进了一大步。让我们回顾施易昌等人的方案在哪些地方做的不够好,再看看新方案是否解决了这些问题:

为什么我说用深度学习的方案,理论上可以做到更快呢?因为现在各种计算框架,以及硬件芯片本身,对卷积神经网络的运算已经做到了很好的优化了,而许多传统优化算法由于计算方法的复杂和非统一性,很难做到大幅的性能提升。在实际项目中,我们对谭婧等的网络架构做了裁剪优化,经过良好的配置,在模型算力要求高达1.8GFlops的情况下,在高通8250平台只需要不到40ms即可完成推理运算,这相比起施易昌等需要接近1s才能完成运算来说,是巨大的性能提升——这就是目前很多计算机视觉、计算摄影学的算法由传统算法改为统一的深度学习算法的一大收益!

二. 改进方案,以及第一个半监督学习的畸变校正算法

然而,为什么基于深度学习的方法在实测效果上并未比施易昌等的方法好多少呢?我认为主要有两个原因:

  • 深度学习方法需要大量数据来训练,而数据非常昂贵

  • 谭婧等所用的评判结果好坏的标准和人类的主观感受还无法完全一致

我们先来看看评价方法和标准的缺陷,如下图所示,作者们用的评价方法是采样图像上的特定的线段,希望这些线段与Ground Truth之间的夹角越小越好。那么这里就可能存在这些采样的线段不足以描述人类的主观感受这样的问题了,比如是不是当发生畸变时,有更多的无法简单用线段的偏转来描述的特征?这是一个非常本质和深入的问题,可以留待将来进行更深入的研究。

更现实的问题是,不管是用于训练,还是用于验证和评价,数据都非常宝贵。高质量的数据非常难于得到。几乎对每一张样本图像,都需要手工进行调整,以得到它去掉畸变后的完美图像——这实际上是一个非常主观的事情。昂贵的数据采集手段,使得谭婧等最终得到的是大概5000张图像的数据集。实际上,这些数据集很可能因为时间和精力原因,存在一定的瑕疵,影响最终的效果。

那么,有没有可能降低对数据采集的需求呢?半监督学习是一个可能的方向,下面这篇旷视研究院的预印版文章(arxiv.org/abs/2109.0802)可供参考:

作者们的想法也很简单,他们在网络训练过程中加入了一个分割的任务,使得分割任务去分割校正map中的各个部分(不同方向的大位移以及小位移)。那么分割结果和校正map之间就建立起了某种关系,另外分割结果、校正map与各自的Ground Truth之间也有约束关系。现在加入没有标注过的数据,这些数据经过网络推理后也会得到分割图和校正map。作者认为这两者之间的关系应该和有标注的数据对应的信息有相同的约束关系——就用这个约束去迭代优化网络。

听起来,跟模型蒸馏颇有异曲同工之妙,文章中也展示了挺不错的效果,例如下图中的效果,确实相比谭婧和施易昌等人的方法有了提升。

三. 总结

到此为止,我已经介绍了第1个基于优化算法的自动畸变校正算法(手机中的计算摄影4-超广角畸变校正),第1个基于深度学习的畸变校正算法,以及第1个基于半监督学习思想的畸变校正算法。从工程上讲,利用这些技术,已经能够开发出比较符合当前手机客户需求的产品了。事实上正如我文章里所讲,我们开发的基于深度学习的畸变校正算法已经能够在不到100ms时间内完成全流程的计算和图像变换了。

然而,不管是哪种方法,目前都还有前进的空间,有一些图像上表现依然还不够好。除了人脸之外,人的身体、脚等区域与人脸的一致性还需要加强。但过于强调这些区域之间的一致性,又会使得网络学习起来比较困难。

与此同时,尽管算法运行已经足够快了,但要真正流畅的用在视频拍摄方面,还需要解决视频帧之间的时域相关性,否则会产生抖动,同时速度还需要加快,才能适用于当前大分辨率的视频录制上。

所以你现在在用的手机,基本上还没有解决好”超广角畸变校正“这个问题,比如下面的图示就能看出iPhone12和小米11都没有把这个问题解决好,其实最新的iPhone13 Pro也在这个问题上没有提升。希望之后,能在更多的手机产品上看到这个问题更好的解决方案吧!

四. 参考资料

  1. 手机中的计算摄影4-超广角畸变校正

  2. YiChang Shih, Wei-Sheng Lai, Chia-Kai Liang,     and Chia Kai Liang.     Distortion-free wide-angle portraits on camera phones. ACM Trans. Graphics, 38(4):1–12, 2019

  3. Jing Tan, Shan Zhao, Pengfei Xiong, Jiangyu     Liu, Haoqiang Fan, and Shuaicheng Liu. Practical wide-angle portraits     correction with deep structured models. In Proc. CVPR, pages 3498–3506, 2021.

  4. https://arxiv.org/abs/2109.08024

好消息!

小白学视觉知识星球

开始面向外开放啦

基于深度学习的畸变校正相关推荐

  1. 计算摄影:基于深度学习的畸变校正

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 在手机中的计算摄影4-超广角畸变校正中,我为你描述了广角镜头的镜头畸变校正和透视畸变校正,尤其是花了很 ...

  2. 光学分辨率光声显微镜中基于深度学习的运动校正算法

    在这项研究中,我们提出了一种基于深度学习的方法来校正光学分辨率光声显微镜 (OR-PAM) 中的运动伪影.该方法是一种卷积神经网络,它从具有运动伪影的输入原始数据建立端到端映射,以输出校正后的图像.首 ...

  3. 基于深度学习的低光照图像增强方法总结(2017-2019)| CSDN博文精选

    扫码参与CSDN"原力计划" 作者 | hyk_1996 来源 | CSDN博客精选 之前在做光照对于高层视觉任务的影响的相关工作,看了不少基于深度学习的低光照增强(low-lig ...

  4. 黄浴:基于深度学习的超分辨率图像技术发展轨迹一览

    作者 | 黄浴 转载自知乎 导读:近年来,使用深度学习技术的图像超分辨率(SR)取得了显著进步.本文中,奇点汽车自动驾驶首席科学家黄浴对基于深度学习技术的图像超分辨率技术进行了一次全面的总结,分析了这 ...

  5. 中科院张士峰:基于深度学习的通用物体检测算法对比探索

    https://www.toutiao.com/a6674792954369933838/ 人工智能论坛如今浩如烟海,有硬货.有干货的讲座却百里挑一.由中国科学院大学主办,中国科学院大学学生会承办,读 ...

  6. 基于深度学习的多目标跟踪:从UMA Tracker出发谈谈SOT类MOT算法

    ©PaperWeekly 原创 · 作者|黄飘 学校|华中科技大学硕士生 研究方向|多目标跟踪 之前的文章中我们介绍了联合检测和跟踪的多目标跟踪框架,这类框架最大优势在于可以利用优秀的检测器平衡不同观 ...

  7. 基于深度学习的医学图像分割综述

    转载:https://blog.csdn.net/weixin_41783077/article/details/80894466 摘要:医学图像分割是决定医学图像在临床诊疗中能否提供可靠依据的关键问 ...

  8. 图像重建算法_基于深度学习图像重建算法(DLIR)对CT图像质量和剂量优化的研究:体模实验...

    编者按:今年Joël Greffier博士等在European Radiology (IF 4.1)上发表了题为<Image quality and dose reduction opportu ...

  9. 手写公式识别 :基于深度学习的端到端方法

    本文简要介绍2018年5月被TMM录用论文"Track,Attend and Parse (TAP): An End-to-end Framework for Online Handwrit ...

最新文章

  1. 基础练习 字符串对比
  2. FatFs文件系统的移植
  3. 成立快两年,阿里巴巴达摩院都干什么了?
  4. mysql修改表结构权限_mysql 修改表结构操作
  5. LeetCode hard 668. Kth Smallest Number in Multiplication Table(二分答案)
  6. Jirasearch 2.0狗粮:使用Lucene查找我们的Jira问题
  7. 具有多个Join和选定列的示例LINQ
  8. 19. jQuery 遍历
  9. 怎么用PS为一寸证件照更换底色背景色
  10. 2020 年,从架构谈起,到 Mesh 结束
  11. 王家林老师 大数据学习之路
  12. html里获得农历时间,获取阴历(农历)和当前日期的js代码_javascript技巧
  13. threejs-自定义着色器材质
  14. 零界之痕服务器维护,《零界之痕》1月26日更新维护公告
  15. CSDN-markdown语法之怎样使用LaTeX语法编写数学公式
  16. android Toast
  17. 怎么修改设置路由器默认密码
  18. 关于爬取企业信息类的爬虫(一)
  19. 2009年6月2日,博客近期所做的改动通报!
  20. IDEA设置字体随鼠标滑动改变大小

热门文章

  1. 关于使用http://www.tenaa.com.cn/求证手机真假的方法
  2. 你到底想要什么,通信欢迎你
  3. Python基础教程之Python 标识符
  4. 程序员数学(20)–数据的分析(平均数、中位数、众数、方差、平均差)
  5. python数据分析 pdf-【python数据分析+pdf】百度云下载 - 云盘精灵
  6. 使用substr获取string子串
  7. java jna 例子_JNA入门实例
  8. JupyterLab 介绍 及简单教程
  9. Jupyterlab配置pytorch内核
  10. android 双屏手机问题