只看影子就能还原视频,MIT新算法让摄像头无死角
点击我爱计算机视觉标星,更快获取CVML新技术
边策 十三 发自 凹非寺
量子位 报道 | 公众号 QbitAI
你在看电影,墙上的影子也在动。如果只让你看到这样一段视频,你能猜出来屏幕上播放的是什么吗?
最近MIT人工智能实验室(CSAIL)开发出的算法可以做到:
而真实的视频是这样的:
算法还原的结果只是模糊了些,但已经能猜出视频的大致内容了。
有了这套算法,就可以通过观察视频中阴影和几何图形之间的相互作用,预测出光在场景中的传播方式,然后从观察到的阴影中估计隐藏的视频,甚至看出人的轮廓。
这种图像重建算法会有许多用途:自动驾驶汽车可以了解拐角处正在发生的事情,监控摄像头也可以发现在视线外的人。该论文已经被最近召开的NeurIPS 2019大会所收录。
根据影子,还原看不见的死角
在下面这个场景中,人摆弄玩具的镜头被隐藏,在人们正常视野范围内是无法看见的。
我们唯一能够捕捉到的就是打在墙上的影子。
MIT的这项研究就是仅仅利用这些影子,重新还原隐藏视频的原貌。
算法对场景中的光线传输做了预测。
下图左侧是通过算法估计出来的阴影,而右侧则是实际场景中的阴影。
根据光线传输的预测和估计,就可以重建隐藏物体的运动情况。
例如在下图中,隐藏在摄像头视野之外的人,双手不停的在做着运动。
而我们能够观察到的只是图中左侧单个物体中光影的变化。
就是利用这样简单的光影变化,便可以重构出如图中右侧的视频。
与隐藏视频相比,重构的视频已经可以大致再现双手运动的轮廓。
根据房间杂物乱七八糟的影子,同样也可以还原下图隐藏视频中人物走动的大致轮廓。
当然还有这样的。
以及这样的:
总体来说,MIT的这次研究,能够根据隐藏视频中的内容将光线传输分离出来,从而对它做一个大致的估计。
原理
图像的影子具有线性叠加的特性。如果依次点亮隐藏的屏幕上的两个像素,并墙上的影子图像求和,结果应该和一次同时点亮两个像素时得到的图像相同。
从数学上来看,无论是墙上的影子,还是屏幕上的画面,都是矩阵。而符合线性叠加的特性,等于是在这两个矩阵之间做线性变换。
我们不妨把这二者别看做两个矩阵Z和L,经过空间传输,画面L变成了影子Z,这就相当于做了一次矩阵乘法,T是空间传输矩阵。
Z=TL
问题是我们只看到了影子Z,对于T和L,我们一无所知。
这篇论文的第一作者Miika Aittala说:“这就像是我告诉你,我正在考虑两个秘密数字,它们的乘积为80。你能猜出它们是什么吗?也许是40和2,或是371.8和0.2152。”
对于这个问题也是类似,而且我们在每个像素上都会有一样的困扰。如何求出传输矩阵T成了问题的关键。
如果我们知道了光传输矩阵,那么求原图像L的操作就变成了最小化||Z-TL||2的最小二乘法问题。
作者通过DCT和PCA方法测量了T,然后通过求逆的方法恢复了原始图像。
因此知道了T,接下来恢复图像就好办了。
但是这篇文章要挑战更高的难度:如何在不知道T的情况下恢复图像。他们使用了去年一篇Deep Image Prior论文中的新的矩阵分解方法。
这篇文章曾经被CVPR 2018收录,在inpainting问题上收到了不错的效果。
过去也有一些矩阵分解方法,但是分解得到的矩阵一般都是低秩的,与图像差别很大,而且对初始值和优化的动力学都高度敏感,只能针对特定问题量身定制。
而作者使用的矩阵分解方法里,CNN随机初始化并“过拟合”,将两个噪声矢量映射到两个矩阵T和L,使它们的乘积与输入矩阵Z匹配。此过程将因式分解正则化为更接近于图像的结构。
结合上面的思想
Deep Image Prior
作者首先描述了一种基线方法,在知道Z和L的情况下求T,其实就是求||Z-TL||2最小值的最小二乘法问题。
使用了Deep Image Prior的方法,作者提出了一种在无法测得的光传输矩阵时,逆向求原图像的方法。逆向光传输矩阵的体系架构和数据流动如下图所示:
其中左下角是存储在U中的左奇异矢量的一个样本。L和Q是两个卷积神经网络,其余块是多维张量或矩阵,其尺寸显示在边缘。
L和Q生成各自矩阵的卷积神经网络中张量,然后在随后的网络操作中将结果重整为堆叠的矩阵表示形式,以便评估矩阵乘积。
传输矩阵T的分量可以表示为从输入视频的奇异值分解(SVD)获得的基本图像的线性组合。这样做计算效率高,又通过限制迭代和位于有效分解子空间中的解来指导优化。
通过输入Z预先计算的截断奇异值分解UΣVT带入到上面的网络中,计算出T,再将计算的TL与Z对比求得损失。
因此问题的核心就变成了用CNN得出Q,使得(UQ)L≈Z。
代码已开源
这么好玩的技术,代码当然开源啦~
GitHub链接如下:
https://github.com/prafull7/compmirrors
这份文档中列出了“矩阵分解”和“光线传输分解”的实现方法。
安装
git clone https://github.com/prafull7/compmirrors
cd compmirrors
配置要求:Python 3.7,以及还需要torch=1.0.1.post2、matplotlib、scipy、visdom等包。
矩阵分解
这步的实现代码在factorization_1d.py文件。可用如下代码运行:
python factorization_1d.py -T ./data/inputs_1d/lightfield.png -L ./data/inputs_1d/tracks_bg.png -o ./outdir_1d
光线传输分解
一次性训练实现代码在factorization_light_transport.py文件。可用如下代码运行:
export FACTORIZE_DATA_DIR=/path/to/where/data/folders/
export FACTORIZE_OUT_DIR=/path/to/output/directory
python factorization_light_transport.py -d ./data/light_transport/ -f FOLDER_NAME -ds DATASET_NAME -s SEQUENCE_NAME -dev DEVICE_NUMBER
依旧是“鸡生蛋,还是蛋生鸡”问题
虽然这项技术能够重建被隐藏的内容,但是用户还是需要提前知道被隐藏的东西是存在的。
用数学的角度来打个比方。
A和B相乘得80,让你来猜A和B分别是哪两个数字。
可能是40和2,也可能是371.8和0.2152。
在重建工作中,每个像素都会遇到这样的问题——有多种选择。
要让计算机来做选择,那它就会做最简单的事情,得到的结果就是随机的图像。
因此需要规定的算法来做训练。
在此之前,量子位也曾报道过,通过墙壁漫反射的光影,来重建原始画面。
墙上的漫反射如下图所示:
算法还原的图像则是:
这个图像还原实验是,在房间中间随手放置了一个不明位置的遮挡物体,可以是一块不发光的板子,也可以是随手拽过来的一把椅子,阻挡一部分光线到达墙壁。
而这次是完全根据墙上的影子来做图像还原工作。
通过影子的变化可以大致了解房间里隐蔽区域发生了哪些运动。
研究人员同时也对接下来的工作做了展望:
未来,希望能够提高系统的总体分辨率,并最终在不受控制的环境中测试该技术。
传送门
博客:
https://news.mit.edu/2019/using-computers-view-unseen-computational-mirrors-mit-csail-1206
论文:
https://arxiv.org/pdf/1912.02314.pdf
代码:
https://github.com/prafull7/compmirrors
数据:
http://compmirrors.csail.mit.edu/data/dots-sequence.tar
图像增强、恢复交流群
关注最新最前沿的图像增强、修补、恢复技术,扫码添加CV君拉你入群,(如已为CV君其他账号好友请直接私信)
(请务必注明:恢复)
喜欢在QQ交流的童鞋,可以加52CV官方QQ群:805388940。
(不会时时在线,如果没能及时通过验证还请见谅)
长按关注我爱计算机视觉
只看影子就能还原视频,MIT新算法让摄像头无死角相关推荐
- 墙面也能变镜子,只看影子就能还原视频,MIT新算法让摄像头无死角
边策 十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 你在看电影,墙上的影子也在动.如果只让你看到这样一段视频,你能猜出来屏幕上播放的是什么吗? 最近MIT人工智能实验室(CSAIL)开发 ...
- AI大神李沐开源新手剪辑神器!只看字幕就能剪视频,卡壳重复片段一键删除...
羿阁 发自 凹非寺 量子位 | 公众号 QbitAI 自称"业余up主"的AI大神李沐,刚刚搞了个造福剪辑圈的神器. 如果你还在犯愁每次剪视频都要反复听才能下手,不妨试试它: 连p ...
- 新浪看点怎么批量搬运视频,新浪看点视频搬运消重方法
"站在风口上,猪都会飞起来". 自媒体从2016年开始就是一个风口,很多人实现了人生的逆袭! 同时,在2016年9月,今日头条CEO张一鸣表示:短视频将是内容创业的下一个风口.今日 ...
- 机器人大牛 Daniela Rus 领衔!MIT 新算法实现软体机器人「本体感知」
本文转自雷锋网,如需转载请至雷锋网官网申请授权. 说起软体机器人,或许很多人都不觉得陌生了. 软体机器人的发展离不开包括材料学.机器人学.生物力学.传感与控制在内的多学科进步,近年来相关学科迅速发展, ...
- B站爱情怀,投资者只看利益
图文来源于网络 文|陈小江 来源 | 螳螂财经(ID:TanglangFin) "毕业"是一个符号,象征着一个人独立面对着社会.人生和未来.每个人都会经历这一刻,这是我们共通的部分 ...
- 在 1080P 的显示器上,4K 的视频是否看起来比 1080P 的视频更清晰?
作者:迟宬 链接:https://www.zhihu.com/question/37322363/answer/71717662 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- vue-video-play 记载视频观看时间和还原视频进度
vue-video-play 记载视频观看时间和还原视频进度 vue-video-play 还原视频进度 vue-video-play 记载视频观看时间 vue-video-play 全屏也要将弹出窗 ...
- 只看不敲,神也学不好C---------嵌入式经典书籍经验分享
目录 1.C语言经典 2.单片机系列 3.Python方面 4.嵌入式LWip协议 5.Android 6.C++经典书籍 7.Linux开发 8.版本控制Git 9.其他的书籍 该文章为原创,转载请 ...
- 1080P 的显示器上,4K 的视频是否看起来比 1080P 的视频更清晰
注意:这个没有同等码率限制的前提 转自:https://www.zhihu.com/question/37322363/answer/71717662 作者:迟宬 链接:https://www.zhi ...
最新文章
- 沈阳农业大学计算机往年录取分数6,沈阳农业大学历年分数线 2021沈阳农业大学录取分数线...
- day1 作业二:多级菜单操作
- 遗传算法解决排序问题
- 对象测试_测试|你挑恋爱对象的眼光准不准?
- vue数组中对象属性变化页面不渲染问题
- C++ 类的深拷贝与浅拷贝||深拷贝通过重载拷贝构造函数与重载赋值运算符实现
- LeetCode 1806. 还原排列的最少操作步数(模拟)
- LeetCode OJ 之 Valid Anagram
- Android Studio 第六十三期 - Android框架 -RecycleView所有用法
- sublime怎么运行go_使用SublimeGDB调试Go程序
- 关于 Spring 注解和 XML 的选择问题
- mongodb 插入一个数组 java_mongodb:推送到数组元素的子数组或添加到数组(如果不存在)...
- 汇编 MOVSX与MOVZX 指令
- couldn't connect to the device trackpad
- 深信服AC1100上网行为管理
- MySQL子查询,多表查询
- 古月居ROS入门21讲——10-12.Publisher和Subscriber的编程实现 话题消息的定义与使用
- unity 半透明效果shader
- python银行家算法例题详解_攒人品之作-能考408大题的知识点整理(有两个知识点的补充)...
- 4399 面试笔试题
热门文章
- Vert x开发指南
- 线性代数第9版英文pdf_线性代数(英文版·第9版)
- 信号与槽是如何实现的_苹果iPhone 12信号仍弱?网友反馈打不进电话需重启解决...
- 程序包java.awt不存在_IDEA解决Java:程序包xxxx不存在的问题
- 动态照片墙 python 实现_利用python生成照片墙的示例代码
- ubuntu20.10上搭建hadoop3.2.2伪分布式
- java 发送带basic认证的http post请求实例代码_图解HTTP学习笔记(八)—确认访问用户身份的认证...
- Android studio3.5 SDK29项目开发笔记
- 计算机主机箱拆箱,开箱 篇一:拆戴尔3681 SFF 10代小主机
- php网页审批权限设置,Linux下ThinkPHP网站目录权限设置