3248250港币是多少人民币币

&figure&&img src=&https://pic4.zhimg.com/v2-3ceb18afa2fe_b.jpg& data-rawwidth=&600& data-rawheight=&232& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/v2-3ceb18afa2fe_r.jpg&&&/figure&&h2&1 前言&/h2&&p&视觉导航(Visual Navigation)一直是人工智能领域,机器人领域非常重要的一个研究方向,在之前我在专栏里曾写过这篇文章:&/p&&a href=&https://zhuanlan.zhihu.com/p/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-6f589df1_180x120.jpg& data-image-width=&1140& data-image-height=&440& class=&internal&&Flood Sung:最前沿:深度增强学习再发力,家用机器人已近在眼前&/a&&p&介绍了Fei-Fei Li组的使用深度增强学习做视觉导航的文章。那么一年时间过去了,这个领域又发生了什么翻天覆地的变化呢?&/p&&p&我想这两天,deepmind最新的进展是让人惊讶的:&/p&&a href=&https://link.zhihu.com/?target=https%3A//deepmind.com/blog/learning-to-navigate-cities-without-a-map/& data-draft-node=&block& data-draft-type=&link-card& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&deepmind.com/blog/learn&/span&&span class=&invisible&&ing-to-navigate-cities-without-a-map/&/span&&span class=&ellipsis&&&/span&&/a&&p&现在的端到端神经网络竟然可以在这么大的真实地图上进行第一视角的导航,你能想象吗?以前搞机器人做planning的人能想到吗?&/p&&p&我真的是蛮震惊的,我觉得会有进展,也仅仅局限在仿真环境中,我依然觉得真实环境太过复杂了,但是当真正做到的时候,我们反而有点不敢相信。纯神经网络的视觉导航呀!&/p&&p&所以,今天我们要来谈谈基于深度学习视觉导航的最近的一些重要进展,包括以下三篇文章:&/p&&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& data-draft-node=&block& data-draft-type=&link-card& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/abs/&/span&&span class=&invisible&&8&/span&&span class=&ellipsis&&&/span&&/a&&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& data-draft-node=&block& data-draft-type=&link-card& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/abs/&/span&&span class=&invisible&&0&/span&&span class=&ellipsis&&&/span&&/a&&a href=&https://link.zhihu.com/?target=https%3A//openreview.net/forum%3Fid%3DBkisuzWRW& data-draft-node=&block& data-draft-type=&link-card& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&openreview.net/forum?&/span&&span class=&invisible&&id=BkisuzWRW&/span&&span class=&ellipsis&&&/span&&/a&&p&其中前两篇也就是deepmind最近发的,而第三篇zero shot imitation learning则是UCB在ICLR 2018录用的oral paper。&/p&&h2&2
Learning to Navigate in Cities Without a Map&/h2&&p&就先说说这篇让人震惊的paper吧!看了方法论你会发现,nothing new!&/p&&p&并没有看到太多很新的东西,可以说就是作者之前成果的综合。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ec0a570ce010ce36195aef_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1500& data-rawheight=&541& class=&origin_image zh-lightbox-thumb& width=&1500& data-original=&https://pic3.zhimg.com/v2-ec0a570ce010ce36195aef_r.jpg&&&/figure&&p&我们可以看到,整个网络是非常非常简单的,输入是目标位置g和当前的视觉状态x,然后输出具体动作和价值。作者专门为目标位置g构造了一个rnn模块,来让神经网络来感知位置信息,同时这样实现了模块化,从而来可以直接实现多个城市的训练与迁移。&/p&&p&然后我觉得就没了,文章对目标位置g做了一点特殊构造,使用周围的地标距离来描述。整个网络使用IMPALA的一个分布式RL算法来训练,并且使用了curriculum learning循序渐进的来训练整个网络,让网络能够记忆各种位置导航的方式。&/p&&p&整个方法论作者在paper里面其实也就是用了一页纸来描述。效果为什么这么好?&/p&&p&不是很清楚其实,文章里没有细说。整个网络规模应该是很大的,从文章中说使用512个actor来分布式训练可以看出来。&/p&&p&简单的说,在方法论并没有新奇的情况下做出了难以置信的效果,不得不说深度学习很神奇!&/p&&h2&3
Unsupervised Predictive Memory in a Goal-Directed Agent&/h2&&p&这篇文章做的工作不一样,可以实现one shot navigation。在上一篇paper中,实际上这个神经网络在地图上已经跑了无数遍了,记住了所有路线。但是人可以做到只走一遍就能记住路线,下次就不用再探索了。而这篇文章其中的一个实验,就做了这个one shot navigation的问题。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-d1370fe495c17a1324bd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1592& data-rawheight=&560& class=&origin_image zh-lightbox-thumb& width=&1592& data-original=&https://pic4.zhimg.com/v2-d1370fe495c17a1324bd_r.jpg&&&/figure&&p&但这篇文章的思路完全不一样,也肯定要不一样,因为是one shot,意味着需要很好的记忆。所以这篇文章的关键在于构造了一个非常复杂的记忆模块,来更好的提取记忆信息。我们这里不讲详细的细节,只是说说思想。实际上这篇文章提出的MERLIN依然是一个meta reinforcement learning的模型,因为它把之前的reward信息也一并输入进去,这是meta的一个关键,不了解的童鞋可以看看这篇paper:&/p&&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& data-draft-node=&block& data-draft-type=&link-card& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/abs/&/span&&span class=&invisible&&3&/span&&span class=&ellipsis&&&/span&&/a&&p&所以,首先是这个模型具备meta属性,才使其能够做到one shot navigation,其次是其复杂的memory模块大幅度提升了记忆之前信息的能力,可以说通过一次的探索构建出了整个地图模型,从而能够提取信息到下一步的policy网络进行处理。大家可以看看这篇文章的演示视频,依然非常让人印象深刻。&/p&&h2&3 Zero-Shot Imitation Learning&/h2&&p&那么这篇文章呢就换个角度故意不做reinforcement learning了,改用imitation learning来做。道理也很显然呀,我们可以用一些专家的甚至最优的轨迹来直接训练网络,而不需要通过reinforcement learning的方式来自己探索。我们先看看这篇文章的网络结构:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-b6b765b5d1b43bfb7277a88_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1746& data-rawheight=&898& class=&origin_image zh-lightbox-thumb& width=&1746& data-original=&https://pic3.zhimg.com/v2-b6b765b5d1b43bfb7277a88_r.jpg&&&/figure&&p&有没有觉得和第一篇paper的其实相当接近。只是这里的目标也是用图片来表示的。但是这篇文章除了改用imitation learning之外,很重要的一点是所谓的zero shot?那这里什么叫做zero shot呢?引用一下原文:&/p&&blockquote&Our method is ”zero-shot” in that we never see expert actions and never&br&see demonstrations during learning. &/blockquote&&p&这个网络模型在训练的时候是没有使用任何的专家动作的,那么怎么训练呢?使用随机探索的trajectory (s1,a1,s2,a2,s3,a3....) 有这样的轨迹,我们可以把任何一点的状态s作为目标位置。看到这,大家会不会觉得很hindsight experience replay的思想很像呢:&/p&&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Hindsight Experience Replay&/a&&p&所以这篇文章这个idea真的很棒,并且在网络结构上我们看上面最右边的那个图,它还加一个对未来state的预测模块,进一步强化了其学习效果。&/p&&h2&4 小结&/h2&&p&由于时间有限,我这里也只是很初略的介绍了一下这三篇paper的一些思想上的东西,这三篇paper实现的结果都是让人觉得有点‘啊哈这样也行’。但是idea可能真的没有那么复杂,实现上倒是会很复杂。有了这三篇paper的结果,我们可以说深度学习在视觉导航这块取得了挺大的进展了。那么未来呢?&/p&&p&我想肯定都要往真实场景上上手了,要不然还有什么意思呢?比如这个one shot navigation。如果真实的机器人在真实的房子里走几圈之后,你让他去找啥他就能去,那么这个视觉导航的目标也就实现了,简直都可以落地了有木有?&/p&&p&家用机器人确实在一步一步的走进现实,让我们拭目以待!一起加油!&/p&&p&&/p&&p&&/p&&p&&/p&&p&&/p&&p&&/p&&p&&/p&&p&&/p&&p&&/p&
1 前言视觉导航(Visual Navigation)一直是人工智能领域,机器人领域非常重要的一个研究方向,在之前我在专栏里曾写过这篇文章:介绍了Fei-Fei Li组的使用深度增强学习做视觉导航的文章。那…
&p&如果题主不介意使用MATLAB的话(转成OpenCV也比较容易):&/p&&div class=&highlight&&&pre&&code class=&language-matlab&&&span class=&c&&% read image&/span&
&span class=&n&&im&/span& &span class=&p&&=&/span& &span class=&n&&imread&/span&&span class=&p&&(&/span&&span class=&s&&'org.jpg'&/span&&span class=&p&&);&/span&
&span class=&n&&figure&/span&&span class=&p&&;&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&n&&im&/span&&span class=&p&&);&/span&
&span class=&n&&title&/span&&span class=&p&&(&/span&&span class=&s&&'Original rgb image'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/50/v2-168de4553f86fef23d6ebc6_b.jpg& data-caption=&& data-rawwidth=&517& data-rawheight=&372& class=&origin_image zh-lightbox-thumb& width=&517& data-original=&https://pic2.zhimg.com/50/v2-168de4553f86fef23d6ebc6_r.jpg&&&/figure&&div class=&highlight&&&pre&&code class=&language-matlab&&&span class=&c&&% convert to gray&/span&
&span class=&n&&imG&/span& &span class=&p&&=&/span& &span class=&n&&mat2gray&/span&&span class=&p&&(&/span&&span class=&n&&rgb2gray&/span&&span class=&p&&(&/span&&span class=&n&&im&/span&&span class=&p&&));&/span&
&span class=&n&&figure&/span&&span class=&p&&;&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&n&&imG&/span&&span class=&p&&)&/span&
&span class=&n&&title&/span&&span class=&p&&(&/span&&span class=&s&&'Grayscale image'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-eec1f0ac31fe2_b.jpg& data-caption=&& data-rawwidth=&517& data-rawheight=&372& class=&origin_image zh-lightbox-thumb& width=&517& data-original=&https://pic4.zhimg.com/50/v2-eec1f0ac31fe2_r.jpg&&&/figure&&div class=&highlight&&&pre&&code class=&language-matlab&&&span class=&c&&% threshold using Gaussian mean (sigma=50)&/span&
&span class=&n&&imGaussianMean&/span& &span class=&p&&=&/span& &span class=&n&&imgaussfilt&/span&&span class=&p&&(&/span&&span class=&n&&imG&/span&&span class=&p&&,&/span& &span class=&mi&&50&/span&&span class=&p&&);&/span&
&span class=&n&&imBW&/span& &span class=&p&&=&/span& &span class=&n&&imG&/span& &span class=&o&&&&/span& &span class=&n&&imGaussianMean&/span&&span class=&p&&;&/span&
&span class=&n&&figure&/span&&span class=&p&&;&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&n&&imBW&/span&&span class=&p&&)&/span&
&span class=&n&&title&/span&&span class=&p&&(&/span&&span class=&s&&'Binary image after Gaussian filter'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-26f74ace6b6023efa88e_b.jpg& data-caption=&& data-rawwidth=&517& data-rawheight=&372& class=&origin_image zh-lightbox-thumb& width=&517& data-original=&https://pic4.zhimg.com/50/v2-26f74ace6b6023efa88e_r.jpg&&&/figure&&div class=&highlight&&&pre&&code class=&language-matlab&&&span class=&c&&% keep the largest area and morphological closing&/span&
&span class=&n&&imBW&/span& &span class=&p&&=&/span& &span class=&n&&bwareafilt&/span&&span class=&p&&(&/span&&span class=&n&&imBW&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&);&/span&
&span class=&n&&imBW&/span& &span class=&p&&=&/span& &span class=&n&&bwmorph&/span&&span class=&p&&(&/span&&span class=&n&&imBW&/span&&span class=&p&&,&/span&&span class=&s&&'close'&/span&&span class=&p&&);&/span&
&span class=&n&&figure&/span&&span class=&p&&;&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&n&&imBW&/span&&span class=&p&&)&/span&
&span class=&n&&title&/span&&span class=&p&&(&/span&&span class=&s&&'Binary image after area filter and morphological closing'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/50/v2-a2477c3dff93bb5ea1fb0eedef66ed2e_b.jpg& data-caption=&& data-rawwidth=&517& data-rawheight=&372& class=&origin_image zh-lightbox-thumb& width=&517& data-original=&https://pic2.zhimg.com/50/v2-a2477c3dff93bb5ea1fb0eedef66ed2e_r.jpg&&&/figure&&div class=&highlight&&&pre&&code class=&language-matlab&&&span class=&c&&% skeletonize&/span&
&span class=&n&&imSkele&/span& &span class=&p&&=&/span& &span class=&n&&bwmorph&/span&&span class=&p&&(&/span&&span class=&n&&imBW&/span&&span class=&p&&,&/span&&span class=&s&&'skel'&/span&&span class=&p&&,&/span& &span class=&nb&&inf&/span&&span class=&p&&);&/span&
&span class=&n&&figure&/span&&span class=&p&&;&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&n&&imSkele&/span&&span class=&p&&)&/span&
&span class=&n&&title&/span&&span class=&p&&(&/span&&span class=&s&&'Skeleton image'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-19a361c2401dce1fdc83_b.jpg& data-caption=&& data-rawwidth=&517& data-rawheight=&372& class=&origin_image zh-lightbox-thumb& width=&517& data-original=&https://pic4.zhimg.com/50/v2-19a361c2401dce1fdc83_r.jpg&&&/figure&&div class=&highlight&&&pre&&code class=&language-matlab&&&span class=&c&&% remove spurs&/span&
&span class=&n&&imCross&/span& &span class=&p&&=&/span& &span class=&n&&bwmorph&/span&&span class=&p&&(&/span&&span class=&n&&imSkele&/span&&span class=&p&&,&/span&&span class=&s&&'spur'&/span&&span class=&p&&,&/span& &span class=&nb&&inf&/span&&span class=&p&&);&/span&
&span class=&n&&figure&/span&&span class=&p&&;&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&n&&imCross&/span&&span class=&p&&)&/span&
&span class=&n&&title&/span&&span class=&p&&(&/span&&span class=&s&&'Final cross center'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-091b51af0aa2997f1cffb_b.jpg& data-caption=&& data-rawwidth=&517& data-rawheight=&372& class=&origin_image zh-lightbox-thumb& width=&517& data-original=&https://pic4.zhimg.com/50/v2-091b51af0aa2997f1cffb_r.jpg&&&/figure&&div class=&highlight&&&pre&&code class=&language-matlab&&&span class=&c&&% display cross and skeleton together&/span&
&span class=&n&&figure&/span&&span class=&p&&;&/span&&span class=&n&&imshowpair&/span&&span class=&p&&(&/span&&span class=&n&&im&/span&&span class=&p&&,&/span& &span class=&n&&imCross&/span&&span class=&p&&)&/span&
&span class=&n&&title&/span&&span class=&p&&(&/span&&span class=&s&&'Cross center overlaid on original image'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/50/v2-7d73c529ecc_b.jpg& data-caption=&& data-rawwidth=&517& data-rawheight=&372& class=&origin_image zh-lightbox-thumb& width=&517& data-original=&https://pic4.zhimg.com/50/v2-7d73c529ecc_r.jpg&&&/figure&&p&以上代码适用于原图,这里我将你的图片旋转了,验证代码也适用于旋转后的十字。&/p&
如果题主不介意使用MATLAB的话(转成OpenCV也比较容易):% read image
im = imread('org.jpg');
imshow(im);
title('Original rgb image')% convert to gray
imG = mat2gray(rgb2gray(im));
imshow(imG)
title('Grayscale image')% threshol…
&figure&&img src=&https://pic3.zhimg.com/v2-7b2dc24f84f_b.jpg& data-rawwidth=&900& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic3.zhimg.com/v2-7b2dc24f84f_r.jpg&&&/figure&&blockquote&李杉 李林 编译整理&br&量子位 报道 | 公众号 QbitAI&/blockquote&&figure&&img src=&https://pic1.zhimg.com/v2-eb70a84b1532e9acb7ee_b.jpg& data-rawwidth=&640& data-rawheight=&427& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-eb70a84b1532e9acb7ee_r.jpg&&&/figure&&p&&b&△&/b& 『凡所有相,皆是虚妄』&/p&&p&上面这张德国街道图片,乍一看像是行车记录仪拍的,又好像谷歌街景照片加了复古滤镜。&/p&&p&实际上,这是一张合成图片。&/p&&p&在谷歌地图上,根本找不到这样的街道。一个神经网络,根据自己在训练过程中见过的真实街道,生成了它。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-335beb330a0d8aa82bda2b_b.jpg& data-rawwidth=&600& data-rawheight=&338& data-thumbnail=&https://pic2.zhimg.com/v2-335beb330a0d8aa82bda2b_b.jpg& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic2.zhimg.com/v2-335beb330a0d8aa82bda2b_r.jpg&&&/figure&&h2&比GAN更强&/h2&&p&生成这张照片的算法出自英特尔实验室的新论文&b&Photographic Image Synthesis with Cascaded Refinement Networks&/b&,用级联优化网络生成照片。&/p&&p&在论文中,斯坦福大学博士陈启峰和英特尔实验室视觉组主管Vladlen Koltun展示了一种根据语义布局来合成照片的方法。所谓语义布局,就是像这样,在图片上标出各种物体的位置:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-92c758fb80bcb04a104f6_b.jpg& data-rawwidth=&640& data-rawheight=&325& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-92c758fb80bcb04a104f6_r.jpg&&&/figure&&p&而他们的算法可以看作一个渲染引擎,输入上面的图片,就相当于告诉它图片中间是道路、路上有车、上半部分有树、有交通灯、右上有一些行人,然后按照图上的布局,输出一张逼真的照片。&/p&&p&陈启峰在自己的博客中说,“好比机器想象出来的画面。”&/p&&p&经过3000张德国街道照片的训练,遇到输入的布局上标注成“car”的部分,这个见过很多车的算法就会自己生成一辆车,填在那里。&/p&&p&现在一提到生成、或者合成图像,可能大部分人都会立刻想到对抗生成网络(GAN),不过,陈启峰等的算法并没有用到对抗式训练,而只用了一个端到端训练过的前馈网络。&/p&&p&和各种往往只能生成小尺寸图片的GAN不同,他们提出的方法可以“无缝扩展”到高分辨率,像素的图像也能搞定。&/p&&p&当然,他们在论文里也展示了自己的算法如何将各种基于GAN的生成模型秒成渣渣:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-fbcfc6a90b17fb164cb559edd552b2ef_b.jpg& data-rawwidth=&640& data-rawheight=&275& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-fbcfc6a90b17fb164cb559edd552b2ef_r.jpg&&&/figure&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-99d075b133e87131adb46fd47181b9fd_b.jpg& data-rawwidth=&640& data-rawheight=&245& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-99d075b133e87131adb46fd47181b9fd_r.jpg&&&/figure&&p&这篇论文入选了今年10月在威尼斯举办的国际计算机视觉大会ICCV 2017,要进行口头报告,相应的源代码在GitHub上已经收获了402个星,月初还登顶了GitHub热门项目Python排行榜。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-85e23cfa4bb6bbc0acae61_b.jpg& data-rawwidth=&640& data-rawheight=&349& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-85e23cfa4bb6bbc0acae61_r.jpg&&&/figure&&h2&现实,梦境&/h2&&p&康奈尔大学计算机系副教授Noah Snavely深受打动,他说,创建逼真的人工场景非常困难,即便是当今最好的方法也无法做到,而陈奇峰的系统生成出了他见过的最大、最详细的人工场景。&/p&&p&他认为,这项技术可以让人们描述一个世界,然后让人工智能在虚拟现实中将其打造出来。“如果能够仅凭大声描述就能像魔法一样召唤出逼真的场景,那就太好了。”他说。&/p&&p&陈启峰认为,这种技术前途大好,最终可以用于创造真正模拟现实世界的游戏场景。他说:“使用深度学习渲染视频游戏可能成为未来的趋势。”现在,他已经开始尝试利用这套算法来替换《侠盗猎车手5》里的游戏场景。&/p&&p&不过,他对这个系统还有一点不满:合成的画面不够逼真。陈启·峰表示,因为这套神经网络渲染细节的能力还无法达到我们的预期,所以目前生成的图片比较模糊,有点像梦境。他正在开发一个更大的版本,希望能够提升系统功能。&/p&&p&在这一点上,Snavely比作者还乐观。他说,具体到构建虚拟现实场景,这种梦境般的效果未必是坏事,我们也不见得需要完全写实的效果。&/p&&p&他更期待的,是让这个系统能生成道路和室内布局之外的场景。Snavely说,要真正实现该系统的潜力,还是需要一套能够真正捕捉现实世界多样性的数据集。&/p&&p&但说起来容易做起来难,想用这个系统生成真是世界中的各种场景,需要借助大量的人力,对训练中使用的图片进行详细标记。&/p&&h2&关于陈启峰&/h2&&p&这篇论文的作者陈启峰,经历也颇为传奇。陈启峰生于1989年6月,成长于广东省中山市。小学时,陈启峰先后获得全国作文竞赛二等奖和奥数竞赛一等奖。&/p&&p&2006年,17岁的陈启峰发表论文,提出数据结构Size Balanced Tree(SBT)。2007年,陈启峰在IOI上获得金牌(第八名);2008年,陈启峰以中学生身份获得中山“十大杰出青年”称号。&/p&&p&也是在2008年,陈启峰放弃保送清华的资格,进入香港科技大学就读,并获得54万港币全额奖学金。期间全部22门计算机课程都获得A+。2010年,陈启峰获得百度之星编程大赛第三名。&/p&&p&2011年,陈启峰在ACM国际大学生程序设计竞赛获得金牌(全球第二,北美冠军)。同年还获得香港大学生编程比赛冠军。&/p&&p&2012年,斯坦福、哈佛、麻省理工、普林斯顿、加州大学伯克利分校、哥伦比亚、康奈尔、加州大学洛杉矶分校、密歇根大学安娜堡分校九所高校,同时以全额奖学金录取陈启峰攻读研究生学位,最终他入读斯坦福。&/p&&p&最后,放一张陈启峰6月的博士毕业照。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-88b7ef436b27cb627f7e3771_b.jpg& data-rawwidth=&640& data-rawheight=&518& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-88b7ef436b27cb627f7e3771_r.jpg&&&/figure&&h2&相关链接&/h2&&p&项目主页:&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//cqf.io/ImageSynthesis& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&cqf.io/ImageSynthesis&/span&&span class=&invisible&&&/span&&/a&&/p&&p&论文:&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//web.stanford.edu/%7Ecqf/papers/Photographic_Image_Synthesis_ICCV2017.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&web.stanford.edu/~cqf/p&/span&&span class=&invisible&&apers/Photographic_Image_Synthesis_ICCV2017.pdf&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&代码:&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/CQFIO/PhotographicImageSynthesis& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/CQFIO/Photog&/span&&span class=&invisible&&raphicImageSynthesis&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&—— &b&完&/b& ——&/p&&p&欢迎大家关注我们的专栏:&a href=&https://zhuanlan.zhihu.com/qbitai& class=&internal&&量子位 - 知乎专栏&/a&&/p&&p&诚挚招聘&/p&&p&量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。&/p&&p&&a href=&https://zhuanlan.zhihu.com/qbitai& class=&internal&&量子位 QbitAI&/a&&/p&&p&?'?' ? 追踪AI技术和产品新动态&/p&
李杉 李林 编译整理 量子位 报道 | 公众号 QbitAI△ 『凡所有相,皆是虚妄』上面这张德国街道图片,乍一看像是行车记录仪拍的,又好像谷歌街景照片加了复古滤镜。实际上,这是一张合成图片。在谷歌地图上,根本找不到这样的街道。一个神经网络,根据自己在…
题主既然说到了机器人,就首先说一下,这个project tango确实跟机器人是有点关系的。硬件是目前robot vision的主流硬件,技术也是robot tracking和3D mapping的研究技术(最新谈不上,但基本在此硬件上能应用的最新技术都用上了,而且还优化不少)。&br&但与其说这个是一个结合机器人的设备,倒不如说&b&是为机器与人的交互服务的,或者说是一个为AR应用量身设计的一个设备。&/b&&br&&br&当我们现在在移动端谈论AR的应用时,我们都谈论些什么?给些最基本的:&br&物体识别,目标跟踪,手机的能自主精确六自由度导航定位,对周围3D场景进行描绘…&br&这些都涉及到现在一个新的研究方向,叫3D scene understanding,让机器能理解周围场景。&br&&br&当机器能准确把握周围场景,我们才可以在我们身旁的手机上实现一些更为高级的交互,比如跟现实场景设计游戏。&br&&br&&b&在移动端做这样一个3D scene understanding的设备,为AR铺垫,方便交互,就是google的目的。&/b&&br&&br&为什么google要做一个新的手机原型呢?&br&因为现在的computer vision技术应用在我们的手机上,缺少传感器,不适于做实时的AR应用。举个例子,比如对三维场景需要知道深度。传统相机只有一个摄像头,深度虽然能估算出来,但是既不准,还耗费计算资源。这个手机上加了一个depth sensor,就简化了很多问题。再比如处理器有两块是适于做computer vision的并行处理器,同样是为了加速计算。&br&&br&这样一个手机有没有意义?&br&当然有意义。尚且不知道google是否会把这个打造成一个同android类似的开源平台。但是其结合了新的硬件以及相当多的机器人技术之后,这个手机平台的系统会和android差异很大,也更加智能。google可以先做这样一个尝试。加上depth sensor和motion tracking camera对现在用户来说必然是价格负担,但是如果它能提供一定的AR应用,肯定有大批用户难以拒绝的。&br&&br&放个3D scene constructed by Project Tango,其能力已经类似于Kinect + PC,未来还不够乐观么?&br&&br&&figure&&img src=&https://pic3.zhimg.com/50/4bd047f2c25da4f8a6c212_b.jpg& data-rawwidth=&426& data-rawheight=&253& class=&origin_image zh-lightbox-thumb& width=&426& data-original=&https://pic3.zhimg.com/50/4bd047f2c25da4f8a6c212_r.jpg&&&/figure&&br&&br&--------------------------------------------------------------------------------------------------------------------------------------------&br&&br&google收集的八家公司,多家与此技术有交集。抱歉之前工作比较忙,忘了更新。最近有很多新朋友关注。我简述一下写个番外。&br&&br&首先说说Industrial Perception,个人猜测这个项目是以这个公司团队作为核心。这个公司由Kurt Konolige和Gary Bradski创立,两位都是在视觉导航方面的成果卓著的博士。这个公司原先的目标是构建一个支持3D识别和自主导航的机器人框架,并把应用在工业机器人上(&a href=&//link.zhihu.com/?target=http%3A//spectrum.ieee.org/automaton/robotics/robotics-hardware/startup-spotlight-industrial-perception& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Startup Spotlight: Industrial Perception Building 3D Vision Guided Robots&/a&)。Project Tango这个项目虽然与机器人的实际应用不同,但是上面已经说到了,其实二者的目标,和软件框架都是非常相似的。&br&&br&第二个是Meka robotics。Meka robotics比较著名的是与MIT media lab的人形机器人。不过与Boston Dynamic这种侧重于机器人控制系统不同。他们最新的机器人研究侧重于视觉和人机交互上(&a href=&//link.zhihu.com/?target=http%3A//spectrum.ieee.org/automaton/robotics/humanoids/meka-robotics-announces-mobile-manipulator-with-kinect-and-ros& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Meka Robotics Announces Mobile Manipulator With Kinect and ROS&/a&)。在使用3D信息的情况下,他们的软件系统倾向于如何对周围场景进行感知学习并做出反应。这也是上面说的3D scene understanding。&br&&br&从目前Tango能够实现的效果来看,差不多能做到这二者的程度。在多传感器融合问题上,其他六家公司也能提供一定的技术和专利支持,只能说有交集,但并不一定有所参与。比如Bot&Dolly,Boston Dynamics的平台,都能实现六自由度的精确跟踪控制,这个作为视觉跟踪的一部分,应该Industrial Perception就已经可以很好解决。&br&&br&这个项目还只是开始,之前的一篇报道说google计划在未来五到十年继续丰富自己的AR和机器人团队,可能还会有很多类似的收购(可惜暂时没找到来源)。
题主既然说到了机器人,就首先说一下,这个project tango确实跟机器人是有点关系的。硬件是目前robot vision的主流硬件,技术也是robot tracking和3D mapping的研究技术(最新谈不上,但基本在此硬件上能应用的最新技术都用上了,而且还优化不少)。 但与其…
&figure&&img src=&https://pic2.zhimg.com/v2-e5b575c2f1fe15e92be84_b.jpg& data-rawwidth=&1024& data-rawheight=&619& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&https://pic2.zhimg.com/v2-e5b575c2f1fe15e92be84_r.jpg&&&/figure&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//v.qq.com/x/cover/uo1/uo1.html& target=&_blank& data-video-id=&412736& data-video-playable=&true& data-name=&ABB参赛作品:基于ROS的工厂作业机器人Plantbot_腾讯视频& data-poster=&https://pic4.zhimg.com/v2-181dc3d915bc84b50a3f8f.jpg& data-lens-id=&&&
&img class=&thumbnail& src=&https://pic4.zhimg.com/v2-181dc3d915bc84b50a3f8f.jpg&&&span class=&content&&
&span class=&title&&ABB参赛作品:基于ROS的工厂作业机器人Plantbot_腾讯视频&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://v.qq.com/x/cover/uo1/uo1.html&/span&
&br&&br&ROS 官方提供了&a href=&https://link.zhihu.com/?target=http%3A//wiki.ros.org/hector_mapping& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&hector_mapping&/a&和&a href=&https://link.zhihu.com/?target=http%3A//wiki.ros.org/gmapping& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&gmapping&/a&两种方法来实现SLAM,其中gmapping采用的是比较古老的经典算法,而hector_gmapping采用较新的算法。两者在应用上的主要区别在于前者可以不借助里程计实现SLAM,而gmapping必须提供里程计信息。&br&hector_mapping订阅主题是scan(提供激光雷达消息)和syscommand(提供重启等系统命令,可缺省),坐标变换关系为:&br&&figure&&img src=&https://pic3.zhimg.com/v2-29f92db024c1dc74451a53_b.jpg& data-rawwidth=&755& data-rawheight=&182& class=&origin_image zh-lightbox-thumb& width=&755& data-original=&https://pic3.zhimg.com/v2-29f92db024c1dc74451a53_r.jpg&&&/figure&&p&可以看到,运行该结点需要提供激光雷达坐标系(laser)到机器人基础坐标系(base_link) 的转换,这是因为激光雷达感知周围物体的距离信息是以自身为坐标中心的,而机器人的移动、定位是以机器人基础坐标系为参考坐标系的,因此有必要添加机器人基础坐标系到激光雷达坐标系的转换。如图是我选用激光雷达的坐标系规定:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-123c41fb5e4ea0c871ae_b.jpg& data-rawwidth=&563& data-rawheight=&402& class=&origin_image zh-lightbox-thumb& width=&563& data-original=&https://pic1.zhimg.com/v2-123c41fb5e4ea0c871ae_r.jpg&&&/figure&&p&如果使用官方驱动,就必须按照规定的坐标系布置激光雷达、配置坐标系。激光雷达坐标系到基础坐标系之间的转换由运动平台确定,通常是静态的。在Plantbot中,激光雷达架设在在第三层中心, 而基础坐标系中心为第一层中心 ,两坐标系的转换只需沿z轴平移两板的间距。静态坐标系转换可以使用&a href=&https://link.zhihu.com/?target=http%3A//wiki.ros.org/tf%23static_transform_publisher& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&static_transform_publisher&/a&命令来定周期发布,也可以采用更通用的方法,即利用建立的URDF(Unified Robot Description)模型,调用joint_state_publisher和robot_state_publisher来完成,后一种方法在机械臂中尤为常见。&/p&&p&激光雷达采用了自带的驱动包,运行结点rplidarNode,发布/scan主题。需要注意的是默认情况下串口没有写的权限,因此运行结点之前先要修改串口权限,也可以写相应的规则文件。&br&&/p&&p&一切配置好后运行hector_mapping,可以看到RVIZ中绘制的周围地图,此时ROS的工作状态如下所示:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ef7afbd001fffb1c443da_b.jpg& data-rawwidth=&1093& data-rawheight=&326& class=&origin_image zh-lightbox-thumb& width=&1093& data-original=&https://pic4.zhimg.com/v2-ef7afbd001fffb1c443da_r.jpg&&&/figure&&p&继续运行&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&底层框架&/a&中的相关结点或对应的启动文件,然后通过键盘或app控制机器人移动,直到绘完整个环境地图。下图是绘制的室内环境地图:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-7b66fab15c14f376bb8db20aafefdca9_b.jpg& data-rawwidth=&717& data-rawheight=&543& class=&origin_image zh-lightbox-thumb& width=&717& data-original=&https://pic3.zhimg.com/v2-7b66fab15c14f376bb8db20aafefdca9_r.jpg&&&/figure&&p&补充资料:&a href=&https://link.zhihu.com/?target=http%3A//www.robotics.sei.ecnu.edu.cn/ROS2017/docs/0728/RPLidar%2520For%2520ROS%2520Based%2520SLAM_slamtec_KintZhao_2017.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RPLidar For ROS Based SLAM&/a&&/p&&p&---------------------------------------------------------------------------------------------------------------------&/p&&p&目录:&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&基于ROS的自主导航小车Plantbot--底层驱动&/a&&/p&&p&基于ROS的自主导航小车Plantbot--SLAM&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&基于ROS的自主导航小车Plantbot--自主导航&/a&&/p&
ROS 官方提供了和两种方法来实现SLAM,其中gmapping采用的是比较古老的经典算法,而hector_gmapping采用较新的算法。两者在应用上的主要区别在于前者可以不借助里程计实现SLAM,而gmapping必须提供里程计信息。 hector_mapping订阅主…
我怎么会写得那么长……如果您有兴趣可以和我一块把公式过一遍。&br&要讲清这个问题,得从状态估计理论来说。先摆上一句名言:&br&&blockquote&状态估计乃传感器之本质。(To understand the need for state estimation is to understand the nature of sensors.)&/blockquote&任何传感器,激光也好,视觉也好,整个SLAM系统也好,要解决的问题只有一个:&b&如何通过数据来估计自身状态。&/b&每种传感器的测量模型不一样,它们的精度也不一样。换句话说,状态估计问题,也就是“&b&如何最好地使用传感器数据&/b&”。可以说,SLAM是状态估计的一个特例。&br&&br&=====================&b&离散时间系统的状态估计&/b&======================&br&记机器人在各时刻的状态为&img src=&//www.zhihu.com/equation?tex=x_1%2C%5Cldots%2Cx_k& alt=&x_1,\ldots,x_k& eeimg=&1&&,其中&img src=&//www.zhihu.com/equation?tex=k& alt=&k& eeimg=&1&&是离散时间下标。在SLAM中,我们通常要估计机器人的位置,那么系统的状态就指的是机器人的位姿。用两个方程来描述状态估计问题:&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Cleft%5C%7B+%5Cbegin%7Barray%7D%7Bl%7D%0A%7Bx_k%7D+%3D+f%5Cleft%28+%7B%7Bx_%7Bk+-+1%7D%7D%2C%7Bu_k%7D%2C%7Bw_k%7D%7D+%5Cright%29%5C%5C%0A%7By_k%7D+%3D+g%5Cleft%28+%7B%7Bx_k%7D%2C%7Bn_k%7D%7D+%5Cright%29%0A%5Cend%7Barray%7D+%5Cright.%5C%5D& alt=&\[\left\{ \begin{array}{l}
{x_k} = f\left( {{x_{k - 1}},{u_k},{w_k}} \right)\\
{y_k} = g\left( {{x_k},{n_k}} \right)
\end{array} \right.\]& eeimg=&1&&&br&&br&解释一下变量:&br&&img src=&//www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&-运动方程&br&&img src=&//www.zhihu.com/equation?tex=u& alt=&u& eeimg=&1&&- 输入&br&&img src=&//www.zhihu.com/equation?tex=w& alt=&w& eeimg=&1&&- 输入噪声&br&&img src=&//www.zhihu.com/equation?tex=g& alt=&g& eeimg=&1&&- 观测方程&br&&img src=&//www.zhihu.com/equation?tex=y& alt=&y& eeimg=&1&&- 观测数据&br&&img src=&//www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&&- 观测噪声&br&&br&运动方程描述了状态&img src=&//www.zhihu.com/equation?tex=x_%7Bk-1%7D& alt=&x_{k-1}& eeimg=&1&&是怎么变到&img src=&//www.zhihu.com/equation?tex=x_k& alt=&x_k& eeimg=&1&&的,而观测方程描述的是从&img src=&//www.zhihu.com/equation?tex=x_k& alt=&x_k& eeimg=&1&&是怎么得到观察数据&img src=&//www.zhihu.com/equation?tex=y_k& alt=&y_k& eeimg=&1&&的。&br&请注意这是一种抽象的写法。当你有实际的机器人,实际的传感器时,方程的形式就会变得具体,也就是所谓的&b&参数化&/b&。例如,当我们关心机器人空间位置时,可以取&img src=&//www.zhihu.com/equation?tex=x_k+%3D+%5Bx%2Cy%2Cz%5D_k& alt=&x_k = [x,y,z]_k& eeimg=&1&&。进而,机器人携带了里程计,能够得到两个时间间隔中的相对运动,像这样&img src=&//www.zhihu.com/equation?tex=%5CDelta+x_k%3D%5B%5CDelta+x%2C+%5CDelta+y%2C+%5CDelta+z%5D_k& alt=&\Delta x_k=[\Delta x, \Delta y, \Delta z]_k& eeimg=&1&&,那么运动方程就变为:&br&&img src=&//www.zhihu.com/equation?tex=x_%7Bk%2B1%7D%3Dx_k%2B%5CDelta+x_k%2Bw_k& alt=&x_{k+1}=x_k+\Delta x_k+w_k& eeimg=&1&&&br&同理,观测方程也随传感器的具体信息而变。例如激光传感器可以得到空间点离机器人的距离和角度,记为&img src=&//www.zhihu.com/equation?tex=y_k%3D%5Br%2C%5Ctheta%5D_k& alt=&y_k=[r,\theta]_k& eeimg=&1&&,那么观测方程为:&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%7B%5Cleft%5B+%5Cbegin%7Barray%7D%7Bl%7D%0Ar%5C%5C%0A%5Ctheta+%0A%5Cend%7Barray%7D+%5Cright%5D_k%7D+%3D+%5Cleft%5B+%5Cbegin%7Barray%7D%7Bl%7D%0A%5Csqrt+%7B%7B%7B%5Cleft%5C%7C+%7B%7Bx_k%7D+-+%7BL_k%7D%7D+%5Cright%5C%7C%7D_2%7D%7D+%5C%5C%0A%7B%5Ctan+%5E%7B+-+1%7D%7D%5Cfrac%7B%7B%7BL_%7Bk%2Cy%7D%7D+-+%7Bx_%7Bk%2Cy%7D%7D%7D%7D%7B%7B%7BL_%7Bk%2Cx%7D%7D+-+%7Bx_%7Bk%2Cx%7D%7D%7D%7D%0A%5Cend%7Barray%7D+%5Cright%5D+%2B+%7Bn_k%7D%5C%5D& alt=&\[{\left[ \begin{array}{l}
\end{array} \right]_k} = \left[ \begin{array}{l}
\sqrt {{{\left\| {{x_k} - {L_k}} \right\|}_2}} \\
{\tan ^{ - 1}}\frac{{{L_{k,y}} - {x_{k,y}}}}{{{L_{k,x}} - {x_{k,x}}}}
\end{array} \right] + {n_k}\]& eeimg=&1&&,其中&img src=&//www.zhihu.com/equation?tex=L_k%3D%5BL_%7Bk%2Cx%7D%2CL_%7Bk%2Cy%7D%5D& alt=&L_k=[L_{k,x},L_{k,y}]& eeimg=&1&&是一个2D路标点。&br&&br&举这几个例子是为了说明,&b&运动方程和观测方程具体形式是会变化的&/b&。但是,我们想讨论更一般的问题:当我不限制传感器的具体形式时,能否设计一种方式,从已知的&img src=&//www.zhihu.com/equation?tex=u%2Cy& alt=&u,y& eeimg=&1&&(输入和观测数据)从,估计出&img src=&//www.zhihu.com/equation?tex=x& alt=&x& eeimg=&1&&呢?&br&&br&这就是最一般的状态估计问题。我们会根据&img src=&//www.zhihu.com/equation?tex=f%2Cg& alt=&f,g& eeimg=&1&&是否线性,把它们分为&b&线性/非线性系统&/b&。同时,对于噪声&img src=&//www.zhihu.com/equation?tex=w%2Cn& alt=&w,n& eeimg=&1&&,根据它们是否为高斯分布,分为&b&高斯/非高斯噪声&/b&系统。最一般的,也是最困难的问题,是非线性-非高斯(NLNG, Nonlinear-Non Gaussian)的状态估计。下面先说最简单的情况:线性高斯系统。&br&&br&=====================&b&线性高斯系统&/b&============================&br&&b&线性高斯系统(LG,Linear Gaussian)&/b&&br&在线性高斯系统中,运动方程、观测方程是线性的,且两个噪声项服从零均值的高斯分布。这是最简单的情况。简单在哪里呢?主要是因为&b&高斯分布经过线性变换之后仍为高斯分布&/b&。而对于一个高斯分布,只要计算出它的一阶和二阶矩,就可以描述它(高斯分布只有两个参数&img src=&//www.zhihu.com/equation?tex=%5Cmu%2C+%5CSigma& alt=&\mu, \Sigma& eeimg=&1&&)。&br&线性系统形式如下:&br&&img src=&//www.zhihu.com/equation?tex=%5Cleft%5C%7B%0A%5Cbegin%7Barray%7D%7Bl%7D%0A%7Bx_k%7D+%3D+%7BA_%7Bk+-+1%7D%7D%7Bx_%7Bk+-+1%7D%7D+%2B+%7Bu_k%7D+%2B+%7Bw_k%7D%5C%5C%0A%7By_k%7D+%3D+%7BC_k%7D%7Bx_k%7D+%2B+%7Bn_k%7D%5C%5C%0A%7Bw_k%7D%5Csim+N%5Cleft%28+%7B0%2C%7BQ_k%7D%7D+%5Cright%29%5C%5C%0A%7Bn_k%7D%5Csim+N%280%2C%7BR_k%7D%29%0A%5Cend%7Barray%7D%0A+%5Cright.& alt=&\left\{
\begin{array}{l}
{x_k} = {A_{k - 1}}{x_{k - 1}} + {u_k} + {w_k}\\
{y_k} = {C_k}{x_k} + {n_k}\\
{w_k}\sim N\left( {0,{Q_k}} \right)\\
{n_k}\sim N(0,{R_k})
\end{array}
\right.& eeimg=&1&&
其中&img src=&//www.zhihu.com/equation?tex=Q_k%2CR_k& alt=&Q_k,R_k& eeimg=&1&&是两个噪声项的协方差矩阵。&img src=&//www.zhihu.com/equation?tex=A%2CC& alt=&A,C& eeimg=&1&&为转移矩阵和观测矩阵。&br&对LG系统,可以用贝叶斯法则,计算&img src=&//www.zhihu.com/equation?tex=x& alt=&x& eeimg=&1&&的后验概率分布——这条路直接通向&b&卡尔曼滤波器&/b&。卡尔曼是线性系统的递推形式(recursive,也就是从&img src=&//www.zhihu.com/equation?tex=x_%7Bk-1%7D& alt=&x_{k-1}& eeimg=&1&&估计&img src=&//www.zhihu.com/equation?tex=x_k& alt=&x_k& eeimg=&1&&)的无偏最优估计。由于解释EKF和UKF都得用它,所以我们来推一推。如果读者不感兴趣,可以跳过公式推导环节。&br&符号:用&img src=&//www.zhihu.com/equation?tex=%5Chat%7Bx%7D& alt=&\hat{x}& eeimg=&1&&表示&img src=&//www.zhihu.com/equation?tex=x& alt=&x& eeimg=&1&&的后验概率,用&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Ctilde+x%5C%5D& alt=&\[\tilde x\]& eeimg=&1&&表示它的先验概率。因为系统是线性的,噪声是高斯的,所以状态也服从高斯分布,需要计算它的均值和协方差矩阵。记第&img src=&//www.zhihu.com/equation?tex=k& alt=&k& eeimg=&1&&时刻的状态服从:&img src=&//www.zhihu.com/equation?tex=x_k%5Csim+N%28%7B%7B%5Cbar+x%7D_k%7D%2C%7BP_k%7D%29& alt=&x_k\sim N({{\bar x}_k},{P_k})& eeimg=&1&&&br&&br&我们希望得到状态变量&img src=&//www.zhihu.com/equation?tex=x& alt=&x& eeimg=&1&&的最大后验估计(MAP,Maximize a Posterior),于是计算:&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Cbegin%7Barray%7D%7Bccl%7D%0A%5Chat+x+%26%3D%26+%5Carg+%5Cmathop+%7B%5Cmax+%7D%5Climits_x+p%5Cleft%28+%7Bx%7Cy%2Cu%7D+%5Cright%29%5C%5C%0A+%26%3D%26+%5Carg+%5Cmax+%5Cfrac%7B%7Bp%5Cleft%28+%7By%7Cx%2Cu%7D+%5Cright%29p%5Cleft%28+%7Bx%7Cu%7D+%5Cright%29%7D%7D%7B%7Bp%5Cleft%28+%7By%7Cv%7D+%5Cright%29%7D%7D+%5C%5C%0A+%26%3D%26+%5Carg+%5Cmax+p%28y%7Cx%29p%5Cleft%28+%7Bx%7Cu%7D+%5Cright%29%0A%5Cend%7Barray%7D%5C%5D& alt=&\[\begin{array}{ccl}
\hat x &=& \arg \mathop {\max }\limits_x p\left( {x|y,u} \right)\\
&=& \arg \max \frac{{p\left( {y|x,u} \right)p\left( {x|u} \right)}}{{p\left( {y|v} \right)}} \\
&=& \arg \max p(y|x)p\left( {x|u} \right)
\end{array}\]& eeimg=&1&&&br&第二行是贝叶斯法则,第三行分母和&img src=&//www.zhihu.com/equation?tex=x& alt=&x& eeimg=&1&&无关所以去掉。&br&第一项即观测方程,有:&img src=&//www.zhihu.com/equation?tex=%5C%5Bp%5Cleft%28+%7By%7Cx%7D+%5Cright%29+%3D+%5Cprod%5Climits_%7Bk+%3D+0%7D%5EK+%7Bp%5Cleft%28+%7B%7By_k%7D%7C%7Bx_k%7D%7D+%5Cright%29%7D+%5C%5D& alt=&\[p\left( {y|x} \right) = \prod\limits_{k = 0}^K {p\left( {{y_k}|{x_k}} \right)} \]& eeimg=&1&&,很简单。&br&第二项即运动方程,有:&img src=&//www.zhihu.com/equation?tex=%5C%5Bp%5Cleft%28+%7Bx%7Cv%7D+%5Cright%29+%3D+%5Cprod%5Climits_%7Bk+%3D+0%7D%5EK+%7Bp%5Cleft%28+%7B%7Bx_k%7D%7C%7Bx_%7Bk+-+1%7D%7D%2Cv_k%7D+%5Cright%29%7D+%5C%5D& alt=&\[p\left( {x|v} \right) = \prod\limits_{k = 0}^K {p\left( {{x_k}|{x_{k - 1}},v_k} \right)} \]& eeimg=&1&&,也很简单。&br&现在的问题是如何求解这个最大化问题。对于高斯分布,最大化问题可以变成最小化它的负对数。当我对一个高斯分布取负对数时,它的指数项变成了一个二次项,而前面的因子则变为一个无关的常数项,可以略掉(这部分我不敲了,有疑问的同学可以问)。于是,定义以下形式的最小化函数:&br&&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Cbegin%7Barray%7D%7Bl%7D%0A%7BJ_%7By%2Ck%7D%7D%5Cleft%28+x+%5Cright%29+%3D+%5Cfrac%7B1%7D%7B2%7D%7B%5Cleft%28+%7B%7By_k%7D+-+%7BC_k%7D%7Bx_k%7D%7D+%5Cright%29%5ET%7DR_k%5E%7B+-+1%7D%5Cleft%28+%7B%7By_k%7D+-+%7BC_k%7D%7Bx_k%7D%7D+%5Cright%29%5C%5C%0A%7BJ_%7Bv%2Ck%7D%7D%5Cleft%28+x+%5Cright%29+%3D+%5Cfrac%7B1%7D%7B2%7D%7B%5Cleft%28+%7B%7Bx_k%7D+-+%7BA_%7Bk+-+1%7D%7D%7Bx_%7Bk+-+1%7D%7D+-+%7Bv_k%7D%7D+%5Cright%29%5ET%7DQ_k%5E%7B+-+1%7D%5Cleft%28+%7B%7Bx_k%7D+-+%7BA_%7Bk+-+1%7D%7D%7Bx_%7Bk+-+1%7D%7D+-+%7Bv_k%7D%7D+%5Cright%29%0A%5Cend%7Barray%7D%5C%5D& alt=&\[\begin{array}{l}
{J_{y,k}}\left( x \right) = \frac{1}{2}{\left( {{y_k} - {C_k}{x_k}} \right)^T}R_k^{ - 1}\left( {{y_k} - {C_k}{x_k}} \right)\\
{J_{v,k}}\left( x \right) = \frac{1}{2}{\left( {{x_k} - {A_{k - 1}}{x_{k - 1}} - {v_k}} \right)^T}Q_k^{ - 1}\left( {{x_k} - {A_{k - 1}}{x_{k - 1}} - {v_k}} \right)
\end{array}\]& eeimg=&1&&&br&那么最大后验估计就等价于:&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Chat+x+%3D+%5Carg+%5Cmin+%5Csum%5Climits_%7Bk+%3D+0%7D%5EK+%7B%7BJ_%7By%2Ck%7D%7D+%2B+%7BJ_%7Bv%2Ck%7D%7D%7D+%5C%5D& alt=&\[\hat x = \arg \min \sum\limits_{k = 0}^K {{J_{y,k}} + {J_{v,k}}} \]& eeimg=&1&&&br&这个问题现在是二次项和的形式,写成矩阵形式会更加清晰。定义:&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Cbegin%7Barray%7D%7Bl%7D%0Az+%3D+%5Cleft%5B+%5Cbegin%7Barray%7D%7Bl%7D%0A%7Bx_0%7D%5C%5C%0A%7Bv_1%7D%5C%5C%0A+%5Cvdots+%5C%5C%0A%7Bv_K%7D%5C%5C%0A%7By_0%7D%5C%5C%0A+%5Cvdots+%5C%5C%0A%7By_K%7D%0A%5Cend%7Barray%7D+%5Cright%5D%2Cx+%3D+%5Cleft%5B+%5Cbegin%7Barray%7D%7Bl%7D%0A%7Bx_0%7D%5C%5C%0A+%5Cvdots+%5C%5C%0A%7Bx_K%7D%0A%5Cend%7Barray%7D+%5Cright%5D%5C%5C%0AH+%3D+%5Cleft%5B+%7B%5Cbegin%7Barray%7D%7B%2A%7B20%7D%7Bc%7D%7D%0A1%26%7B%7D%26%7B%7D%26%7B%7D%5C%5C%0A%7B+-+%7BA_0%7D%7D%261%26%7B%7D%26%7B%7D%5C%5C%0A%7B%7D%26+%5Cddots+%26+%5Cddots+%26%7B%7D%5C%5C%0A%7B%7D%26%7B%7D%26%7B+-+%7BA_%7BK+-+1%7D%7D%7D%261%5C%5C%0A%7B%7BC_0%7D%7D%26%7B%7D%26%7B%7D%26%7B%7D%5C%5C%0A%7B%7D%26+%5Cddots+%26%7B%7D%26%7B%7D%5C%5C%0A%7B%7D%26%7B%7D%26+%5Cddots+%26%7B%7D%5C%5C%0A%7B%7D%26%7B%7D%26%7B%7D%26%7B%7BC_K%7D%7D%0A%5Cend%7Barray%7D%7D+%5Cright%5D%2CW+%3D+%5Cleft%5B+%7B%5Cbegin%7Barray%7D%7B%2A%7B20%7D%7Bc%7D%7D%0A%7B%7BP_0%7D%7D%26%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%5C%5C%0A%7B%7D%26%7B%7BQ_1%7D%7D%26%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%5C%5C%0A%7B%7D%26%7B%7D%26+%5Cddots+%26%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%5C%5C%0A%7B%7D%26%7B%7D%26%7B%7D%26%7B%7BQ_K%7D%7D%26%7B%7D%26%7B%7D%26%7B%7D%5C%5C%0A%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%26%7B%7BR_1%7D%7D%26%7B%7D%26%7B%7D%5C%5C%0A%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%26+%5Cddots+%26%7B%7D%5C%5C%0A%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%26%7B%7D%26%7B%7BR_K%7D%7D%0A%5Cend%7Barray%7D%7D+%5Cright%5D%0A%5Cend%7Barray%7D%5C%5D& alt=&\[\begin{array}{l}
z = \left[ \begin{array}{l}
\end{array} \right],x = \left[ \begin{array}{l}
\end{array} \right]\\
H = \left[ {\begin{array}{*{20}{c}}
1&{}&{}&{}\\
{ - {A_0}}&1&{}&{}\\
{}& \ddots & \ddots &{}\\
{}&{}&{ - {A_{K - 1}}}&1\\
{{C_0}}&{}&{}&{}\\
{}& \ddots &{}&{}\\
{}&{}& \ddots &{}\\
{}&{}&{}&{{C_K}}
\end{array}} \right],W = \left[ {\begin{array}{*{20}{c}}
{{P_0}}&{}&{}&{}&{}&{}&{}\\
{}&{{Q_1}}&{}&{}&{}&{}&{}\\
{}&{}& \ddots &{}&{}&{}&{}\\
{}&{}&{}&{{Q_K}}&{}&{}&{}\\
{}&{}&{}&{}&{{R_1}}&{}&{}\\
{}&{}&{}&{}&{}& \ddots &{}\\
{}&{}&{}&{}&{}&{}&{{R_K}}
\end{array}} \right]
\end{array}\]& eeimg=&1&&&br&&br&就得到矩阵形式的,类似最小二乘的问题:&br&&img src=&//www.zhihu.com/equation?tex=%5C%5BJ%5Cleft%28+x+%5Cright%29+%3D+%5Cfrac%7B1%7D%7B2%7D%7B%5Cleft%28+%7Bz+-+Hx%7D+%5Cright%29%5ET%7D%7BW%5E%7B+-+1%7D%7D%5Cleft%28+%7Bz+-+Hx%7D+%5Cright%29%5C%5D& alt=&\[J\left( x \right) = \frac{1}{2}{\left( {z - Hx} \right)^T}{W^{ - 1}}\left( {z - Hx} \right)\]& eeimg=&1&&&br&于是令它的导数为零,得到:&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Cfrac%7B%7B%5Cpartial+J%7D%7D%7B%7B%5Cpartial+%7Bx%5ET%7D%7D%7D+%3D++-+%7BH%5ET%7D%7BW%5E%7B+-+1%7D%7D%5Cleft%28+%7Bz+-+Hx%7D+%5Cright%29+%3D+0+%5CRightarrow+%5Cleft%28+%7B%7BH%5ET%7D%7BW%5E%7B+-+1%7D%7DH%7D+%5Cright%29x+%3D+%7BH%5ET%7D%7BW%5E%7B+-+1%7D%7Dz%5C%5D& alt=&\[\frac{{\partial J}}{{\partial {x^T}}} =
- {H^T}{W^{ - 1}}\left( {z - Hx} \right) = 0 \Rightarrow \left( {{H^T}{W^{ - 1}}H} \right)x = {H^T}{W^{ - 1}}z\]& eeimg=&1&& (*)&br&&br&读者会问,这个问题和卡尔曼滤波有什么问题呢?事实上,&b&卡尔曼滤波就是递推地求解(*)式的过程&/b&。所谓递推,就是只用&img src=&//www.zhihu.com/equation?tex=x_%7Bk-1%7D& alt=&x_{k-1}& eeimg=&1&&来计算&img src=&//www.zhihu.com/equation?tex=x_k& alt=&x_k& eeimg=&1&&。对(*)进行Cholesky分解,就可以推出卡尔曼滤波器。详细过程限于篇幅就不推了,把卡尔曼的结论写一下:&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Cbegin%7Barray%7D%7Bl%7D%0A%7B%7B%5Ctilde+P%7D_k%7D+%3D+%7BA_%7Bk+-+1%7D%7D%7B%7B%5Chat+P%7D_%7Bk+-+1%7D%7DA_%7Bk+-+1%7D%5ET+%2B+%7BQ_k%7D%5C%5C%0A%7B%7B%5Ctilde+x%7D_k%7D+%3D+%7BA_%7Bk+-+1%7D%7D%7B%7B%5Chat+x%7D_%7Bk+-+1%7D%7D+%2B+%7Bv_k%7D%5C%5C%0A%7BK_k%7D+%3D+%7B%7B%5Ctilde+P%7D_k%7DC_k%5ET%7B%5Cleft%28+%7B%7BC_k%7D%7B%7B%5Ctilde+P%7D_k%7DC_k%5ET+%2B+%7BR_k%7D%7D+%5Cright%29%5E%7B+-+1%7D%7D%5C%5C%0A%7B%7B%5Chat+P%7D_k%7D+%3D+%5Cleft%28+%7BI+-+%7BK_k%7D%7BC_k%7D%7D+%5Cright%29%7B%7B%5Ctilde+P%7D_k%7D%5C%5C%0A%7B%7B%5Chat+x%7D_k%7D+%3D+%7B%7B%5Ctilde+x%7D_k%7D+%2B+%7BK_k%7D%5Cleft%28+%7B%7By_k%7D+-+%7BC_k%7D%7B%7B%5Ctilde+x%7D_k%7D%7D+%5Cright%29%0A%5Cend%7Barray%7D%5C%5D& alt=&\[\begin{array}{l}
{{\tilde P}_k} = {A_{k - 1}}{{\hat P}_{k - 1}}A_{k - 1}^T + {Q_k}\\
{{\tilde x}_k} = {A_{k - 1}}{{\hat x}_{k - 1}} + {v_k}\\
{K_k} = {{\tilde P}_k}C_k^T{\left( {{C_k}{{\tilde P}_k}C_k^T + {R_k}} \right)^{ - 1}}\\
{{\hat P}_k} = \left( {I - {K_k}{C_k}} \right){{\tilde P}_k}\\
{{\hat x}_k} = {{\tilde x}_k} + {K_k}\left( {{y_k} - {C_k}{{\tilde x}_k}} \right)
\end{array}\]& eeimg=&1&&&br&前两个是预测,第三个是卡尔曼增益,四五是校正。&br&&br&另一方面,能否直接求解(*)式,得到&img src=&//www.zhihu.com/equation?tex=%5Chat%7Bx%7D& alt=&\hat{x}& eeimg=&1&&呢?答案是可以的,而且这就是优化方法(batch optimization)的思路:将所有的状态放在一个向量里,进行求解。与卡尔曼滤波不同的是,在估计前面时刻的状态(如&img src=&//www.zhihu.com/equation?tex=x_1& alt=&x_1& eeimg=&1&&)时,会用到后面时刻的信息(&img src=&//www.zhihu.com/equation?tex=y_2%2Cy_3& alt=&y_2,y_3& eeimg=&1&&等)。从这点来说,优化方法和卡尔曼处理信息的方式是相当不同的。&br&&br&==================&b&扩展卡尔曼滤波器&/b&===================&br&线性高斯系统当然性质很好啦,但许多现实世界中的系统都不是线性的,状态和噪声也不是高斯分布的。例如上面举的激光观测方程就不是线性的。当系统为非线性的时候,会发生什么呢?&br&一件悲剧的事情是:&b&高斯分布经过非线性变换后,不再是高斯分布。而且,是个什么分布,基本说不上来&/b&。(摊手)&br&如果没有高斯分布,上面说的那些都不再成立了。&b&于是EKF说,嘛,我们睁一只眼闭一只眼,用高斯分布去近似它,并且,在工作点附近对系统进行线性化&/b&。当然这个近似是很成问题的,有什么问题我们之后再说。&br&EKF的做法主要有两点。其一,在工作点附近&img src=&//www.zhihu.com/equation?tex=%5C%5B%7B%7B%5Chat+x%7D_%7Bk+-+1%7D%7D%2C%7B%7B%5Ctilde+x%7D_k%7D%5C%5D& alt=&\[{{\hat x}_{k - 1}},{{\tilde x}_k}\]& eeimg=&1&&,对系统进行线性近似化:&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Cbegin%7Barray%7D%7Bl%7D%0Af%5Cleft%28+%7B%7Bx_%7Bk+-+1%7D%7D%2C%7Bv_k%7D%2C%7Bw_k%7D%7D+%5Cright%29+%5Capprox+f%5Cleft%28+%7B%7B%7B%5Chat+x%7D_%7Bk+-+1%7D%7D%2C%7Bv_k%7D%2C0%7D+%5Cright%29+%2B+%5Cfrac%7B%7B%5Cpartial+f%7D%7D%7B%7B%5Cpartial+%7Bx_%7Bk+-+1%7D%7D%7D%7D%5Cleft%28+%7B%7Bx_%7Bk+-+1%7D%7D+-+%7B%7B%5Chat+x%7D_%7Bk+-+1%7D%7D%7D+%5Cright%29+%2B+%5Cfrac%7B%7B%5Cpartial+f%7D%7D%7B%7B%5Cpartial+%7Bw_k%7D%7D%7D%7Bw_k%7D%5C%5C%0Ag%5Cleft%28+%7B%7Bx_k%7D%2C%7Bn_k%7D%7D+%5Cright%29+%5Capprox+g%5Cleft%28+%7B%7B%7B%5Ctilde+x%7D_k%7D%2C0%7D+%5Cright%29+%2B+%5Cfrac%7B%7B%5Cpartial+g%7D%7D%7B%7B%5Cpartial+%7Bx_k%7D%7D%7D%7Bn_k%7D%0A%5Cend%7Barray%7D%5C%5D& alt=&\[\begin{array}{l}
f\left( {{x_{k - 1}},{v_k},{w_k}} \right) \approx f\left( {{{\hat x}_{k - 1}},{v_k},0} \right) + \frac{{\partial f}}{{\partial {x_{k - 1}}}}\left( {{x_{k - 1}} - {{\hat x}_{k - 1}}} \right) + \frac{{\partial f}}{{\partial {w_k}}}{w_k}\\
g\left( {{x_k},{n_k}} \right) \approx g\left( {{{\tilde x}_k},0} \right) + \frac{{\partial g}}{{\partial {x_k}}}{n_k}
\end{array}\]& eeimg=&1&&&br&这里的几个偏导数,都在工作点处取值。于是呢,它就被&b&活生生地当成了一个线性系统&/b&。&br&第二,在线性系统近似下,把噪声项和状态都&b&当成了高斯分布&/b&。这样,只要估计它们的均值和协方差矩阵,就可以描述状态了。经过这样的近似之后呢,后续工作都和卡尔曼滤波是一样的了。所以EKF是卡尔曼滤波在NLNG系统下的直接扩展(所以叫扩展卡尔曼嘛)。EKF给出的公式和卡尔曼是一致的,用线性化之后的矩阵去代替卡尔曼滤波器里的转移矩阵和观测矩阵即可。&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Cbegin%7Barray%7D%7Bl%7D%0A%7B%7B%5Ctilde+P%7D_k%7D+%3D+%7BF_%7Bk+-+1%7D%7D%7B%7B%5Chat+P%7D_%7Bk+-+1%7D%7DF_%7Bk+-+1%7D%5ET+%2B+Q_k%27%5C%5C%0A%7B%7B%5Ctilde+x%7D_k%7D+%3D+f%5Cleft%28+%7B%7B%7B%5Chat+x%7D_%7Bk+-+1%7D%7D%2C%7Bv_k%7D%2C0%7D+%5Cright%29%5C%5C%0A%7BK_k%7D+%3D+%7B%7B%5Ctilde+P%7D_k%7DG_k%5ET%7B%5Cleft%28+%7B%7BG_k%7D%7B%7B%5Ctilde+P%7D_k%7DG_k%5ET+%2B+R_k%27%7D+%5Cright%29%5E%7B+-+1%7D%7D%5C%5C%0A%7B%7B%5Chat+P%7D_k%7D+%3D+%5Cleft%28+%7BI+-+%7BK_k%7D%7BG_k%7D%7D+%5Cright%29%7B%7B%5Ctilde+P%7D_k%7D%5C%5C%0A%7B%7B%5Chat+x%7D_k%7D+%3D+%7B%7B%5Ctilde+x%7D_k%7D+%2B+%7BK_k%7D%5Cleft%28+%7B%7By_k%7D+-+g%28%7B%7B%5Ctilde+x%7D_k%7D%2C0%29%7D+%5Cright%29%0A%5Cend%7Barray%7D%5C%5D& alt=&\[\begin{array}{l}
{{\tilde P}_k} = {F_{k - 1}}{{\hat P}_{k - 1}}F_{k - 1}^T + Q_k'\\
{{\tilde x}_k} = f\left( {{{\hat x}_{k - 1}},{v_k},0} \right)\\
{K_k} = {{\tilde P}_k}G_k^T{\left( {{G_k}{{\tilde P}_k}G_k^T + R_k'} \right)^{ - 1}}\\
{{\hat P}_k} = \left( {I - {K_k}{G_k}} \right){{\tilde P}_k}\\
{{\hat x}_k} = {{\tilde x}_k} + {K_k}\left( {{y_k} - g({{\tilde x}_k},0)} \right)
\end{array}\]& eeimg=&1&&
其中&img src=&//www.zhihu.com/equation?tex=%5C%5BF_%7Bk-1%7D+%3D+%7B%5Cleft.+%7B%5Cfrac%7B%7B%5Cpartial+f%7D%7D%7B%7B%5Cpartial+%7Bx_%7Bk+-+1%7D%7D%7D%7D%7D+%5Cright%7C_%7B%7B%7B%5Chat+x%7D_%7Bk+-+1%7D%7D%7D%7D%2C%7BG_k%7D+%3D+%7B%5Cleft.+%7B%5Cfrac%7B%7B%5Cpartial+g%7D%7D%7B%7B%5Cpartial+%7Bx_k%7D%7D%7D%7D+%5Cright%7C_%7B%7B%7B%5Ctilde+x%7D_k%7D%7D%7D%5C%5D& alt=&\[F_{k-1} = {\left. {\frac{{\partial f}}{{\partial {x_{k - 1}}}}} \right|_{{{\hat x}_{k - 1}}}},{G_k} = {\left. {\frac{{\partial g}}{{\partial {x_k}}}} \right|_{{{\tilde x}_k}}}\]& eeimg=&1&&&br&&br&这样做听起来还是挺有道理的,实际上也是能用的,但是问题还是很多的。&br&考虑一个服从高斯分布的变量&img src=&//www.zhihu.com/equation?tex=x+%5Csim+N%280%2C1%29& alt=&x \sim N(0,1)& eeimg=&1&&,现在&img src=&//www.zhihu.com/equation?tex=y%3Dx%5E2& alt=&y=x^2& eeimg=&1&&,问&img src=&//www.zhihu.com/equation?tex=y& alt=&y& eeimg=&1&&服从什么分布?&br&我概率比较差,不过这个似乎是叫做卡尔方布。&img src=&//www.zhihu.com/equation?tex=y& alt=&y& eeimg=&1&&应该是下图中k=1那条线。&br&&figure&&img src=&https://pic1.zhimg.com/50/a0dc2dcc745ddcfc6729ea_b.jpg& data-rawwidth=&1134& data-rawheight=&854& class=&origin_image zh-lightbox-thumb& width=&1134& data-original=&https://pic1.zhimg.com/50/a0dc2dcc745ddcfc6729ea_r.jpg&&&/figure&但是按照EKF的观点,我们要用一个高斯分布去近似&img src=&//www.zhihu.com/equation?tex=y& alt=&y& eeimg=&1&&。假设我们采样时得到了一个&img src=&//www.zhihu.com/equation?tex=x%3D0.5& alt=&x=0.5& eeimg=&1&&,那么就会近似成一个均值为0.25的高斯分布,然而卡方分布的期望应该是1。……但是各位真觉得k=1那条线像哪个高斯分布吗?&br&&br&所以EKF面临的一个重要问题是,当一个高斯分布经过非线性变换后,如何用另一个高斯分布近似它?按照它现在的做法,存在以下的局限性:(注意是滤波器自己的局限性,还没谈在SLAM问题里的局限性)。&br&&ol&&li&即使是高斯分布,经过一个非线性变换后也不是高斯分布。EKF只计算均值与协方差,是在用高斯近似这个非线性变换后的结果。(实际中这个近似可能很差)。&/li&&li&系统本身线性化过程中,丢掉了高阶项。&/li&&li&线性化的工作点往往不是输入状态真实的均值,而是一个估计的均值。于是,在这个工作点下计算的&img src=&//www.zhihu.com/equation?tex=F%2CG& alt=&F,G& eeimg=&1&&,也不是最好的。&/li&&li&在估计非线性输出的均值时,EKF算的是&img src=&//www.zhihu.com/equation?tex=%5Cmu_y%3Df%28%5Cmu_x%29& alt=&\mu_y=f(\mu_x)& eeimg=&1&&的形式。这个结果几乎不会是输出分布的真正期望值。协方差也是同理。&/li&&/ol&&br&那么,怎么克服以上的缺点呢?途径很多,主要看我们想不想维持EKF的假设。如果我们比较乖,希望维持高斯分布假设,可以这样子改:&br&&ol&&li&为了克服第3条工作点的问题,我们以EKF估计的结果为工作点,重新计算一遍EKF,直到这个工作点变化够小。是为迭代EKF(Iterated EKF, IEKF)。&/li&&li&为了克服第4条,我们除了计算&img src=&//www.zhihu.com/equation?tex=%5Cmu_y%3Df%28%5Cmu_x%29& alt=&\mu_y=f(\mu_x)& eeimg=&1&&,再计算其他几个精心挑选的采样点,然后用这几个点估计输出的高斯分布。是为Sigma Point KF(SPKF,或UKF)。&/li&&/ol&&br&如果不那么乖,可以说:&b&我们不要高斯分布假设,凭什么要用高斯去近似一个长得根本不高斯的分布呢?&/b&于是问题变为,丢掉高斯假设后,怎么描述输出函数的分布就成了一个问题。一种比较暴力的方式是:用足够多的采样点,来表达输出的分布。这种蒙特卡洛的方式,也就是粒子滤波的思路。&br&&br&如果再进一步,可以丢弃滤波器思路,说:&b&为什么要用前一个时刻的值来估计下一个时刻呢&/b&?&b&我们可以把所有状态看成变量,把运动方程和观测方程看成变量间的约束,构造误差函数,然后最小化这个误差的二次型。&/b&这样就会得到非线性优化的方法,在SLAM里就走向图优化那条路上去了。不过,非线性优化也需要对误差函数不断地求梯度,并根据梯度方向迭代,因而局部线性化是不可避免的。&br&&br&可以看到,在这个过程中,我们逐渐放宽了假设。&br&&br&============== &b&UKF 无迹卡尔曼 &/b&==================&br&由于题主问题里没谈IEKF,我们就简单说说UKF和PF。&br&UKF主要解决一个高斯分布经过非线性变换后,怎么用另一个高斯分布近似它。假设&img src=&//www.zhihu.com/equation?tex=x+%5Csim+N%28%5Cmu_x+%5CSigma_%7Bxx%7D+%29%2C+y%3Dg%28x%29& alt=&x \sim N(\mu_x \Sigma_{xx} ), y=g(x)& eeimg=&1&&,我们希望用&img src=&//www.zhihu.com/equation?tex=N%28%5Cmu_y%2C+%5CSigma_%7Byy%7D%29& alt=&N(\mu_y, \Sigma_{yy})& eeimg=&1&&近似&img src=&//www.zhihu.com/equation?tex=y& alt=&y& eeimg=&1&&。按照EKF,需要对&img src=&//www.zhihu.com/equation?tex=g& alt=&g& eeimg=&1&&做线性化。但在UKF里,不必做这个线性化。&br&UKF的做法是找一些叫做Sigma Point的点,把这些点用&img src=&//www.zhihu.com/equation?tex=g& alt=&g& eeimg=&1&&投影过去。然后,用投影之后的点做出一个高斯分布,如下图:&br&&figure&&img src=&https://pic4.zhimg.com/50/4ec9ce019bfa0cac3cca41_b.jpg& data-rawwidth=&807& data-rawheight=&348& class=&origin_image zh-lightbox-thumb& width=&807& data-original=&https://pic4.zhimg.com/50/4ec9ce019bfa0cac3cca41_r.jpg&&&/figure&这里选了三个点:&img src=&//www.zhihu.com/equation?tex=%5Cmu_x%2C+%5Cmu_x%2B%5Csigma_x%2C+%5Cmu_x-%5Csigma_x& alt=&\mu_x, \mu_x+\sigma_x, \mu_x-\sigma_x& eeimg=&1&&。对于维数为N的分布,需要选2N+1个点。篇幅所限,这里就不解释这些点怎么选,以及为何要这样选了。总之UKF的好处就是:&br&&ul&&li&不必线性化,也不必求导,对&img src=&//www.zhihu.com/equation?tex=g& alt=&g& eeimg=&1&&没有光滑性要求。&/li&&li&计算量随维数增长是线性的。&/li&&/ul&&br&=============== &b&PF 粒子滤波&/b& ==================&br&UKF的一个问题是输出仍假设成高斯分布。然而,即使在很简单的情况下,高斯的非线性变换仍然不是高斯。并且,仅在很少的情况下,输出的分布有个名字(比如卡方),多数时候你都不知道他们是啥……更别提描述它们了。&br&因为描述很困难,所以粒子滤波器采用了一种暴力的,用大量采样点去描述这个分布的方法(老子就是无参的你来打我呀)。框架大概像下面这个样子,就是一个不断采样——算权重——重采样的过程:&br&&figure&&img src=&https://pic3.zhimg.com/50/792fab6b2722deeaededbf_b.jpg& data-rawwidth=&789& data-rawheight=&311& class=&origin_image zh-lightbox-thumb& width=&789& data-original=&https://pic3.zhimg.com/50/792fab6b2722deeaededbf_r.jpg&&&/figure&越符合观测的粒子拥有越大的权重,而权重越大就越容易在重采样时被采到。当然,每次采样数量、权重的计算策略,则是粒子滤波器里几个比较麻烦的问题,这里就不细讲了。&br&这种采样思路的最大问题是:&b&采样所需的粒子数量,随分布是指数增长的&/b&。所以仅限于低维的问题,高维的基本就没办法了。&br&&br&=============== &b&非线性优化&/b& ==================&br&非线性优化,计算的也是最大后验概率估计(MAP),但它的处理方式与滤波器不同。对于上面写的状态估计问题,可以简单地构造误差项:&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Cbegin%7Barray%7D%7Bl%7D%0A%7Be_%7Bv%2Ck%7D%7D%5Cleft%28+x+%5Cright%29+%3D+%7Bx_k%7D+-+f%5Cleft%28+%7B%7Bx_%7Bk+-+1%7D%7D%2C%7Bv_k%7D%2C0%7D+%5Cright%29%5C%5C%0A%7Be_%7By%2Ck%7D%7D%5Cleft%28+x+%5Cright%29+%3D+%7By_k%7D+-+g%5Cleft%28+%7B%7Bx_k%7D%2C0%7D+%5Cright%29%0A%5Cend%7Barray%7D%5C%5D& alt=&\[\begin{array}{l}
{e_{v,k}}\left( x \right) = {x_k} - f\left( {{x_{k - 1}},{v_k},0} \right)\\
{e_{y,k}}\left( x \right) = {y_k} - g\left( {{x_k},0} \right)
\end{array}\]& eeimg=&1&&&br&然后最小化这些误差项的二次型:&br&&img src=&//www.zhihu.com/equation?tex=%5C%5B%5Cmin+J%5Cleft%28+x+%5Cright%29+%3D+%5Csum%5Climits_%7Bk+%3D+1%7D%5EK+%7B%5Cleft%28+%7B%5Cfrac%7B1%7D%7B2%7D%7Be_%7Bv%2Ck%7D%7D%7B%7B%5Cleft%28+x+%5Cright%29%7D%5ET%7DW_%7Bv%2Ck%7D%5E%7B+-+1%7D%7Be_%7Bv%2Ck%7D%7D%5Cleft%28+x+%5Cright%29%7D+%5Cright%29+%2B+%5Csum%5Climits_%7Bk+%3D+1%7D%5EK+%7B%5Cleft%28+%7B%5Cfrac%7B1%7D%7B2%7D%7Be_%7By%2Ck%7D%7D%7B%7B%5Cleft%28+x+%5Cright%29%7D%5ET%7DW_%7Bv%2Ck%7D%5E%7B+-+1%7D%7Be_%7Bv%2Ck%7D%7D%5Cleft%28+x+%5Cright%29%7D+%5Cright%29%7D+%7D+%5C%5D& alt=&\[\min J\left( x \right) = \sum\limits_{k = 1}^K {\left( {\frac{1}{2}{e_{v,k}}{{\left( x \right)}^T}W_{v,k}^{ - 1}{e_{v,k}}\left( x \right)} \right) + \sum\limits_{k = 1}^K {\left( {\frac{1}{2}{e_{y,k}}{{\left( x \right)}^T}W_{v,k}^{ - 1}{e_{v,k}}\left( x \right)} \right)} } \]& eeimg=&1&&&br&这里仅用到了噪声项满足高斯分布的假设,再没有更多的了。当构建一个非线性优化问题之后,就可以从一个初始值出发,计算梯度(或二阶梯度),优化这个目标函数。常见的梯度下降策略有牛顿法、高斯-牛顿法、Levenberg-Marquardt方法,可以在许多讲数值优化的书里找到。&br&&br&非线性优化方法现在已经成为视觉SLAM里的主流,尤其是在它的稀疏性质被人发现且利用起来之后。它与滤波器最大不同点在于, 一次可以考虑整条轨迹中的约束。它的线性化,即雅可比矩阵的计算,也是相对于整条轨迹的。相比之下,滤波器还是停留在马尔可夫的假设之下,只用上一次估计的状态计算当前的状态。可以用一个图来表达它们之间的关系:&br&&figure&&img src=&https://pic1.zhimg.com/50/b67b863d41f5e4e762dde44c516cb35c_b.jpg& data-rawwidth=&684& data-rawheight=&438& class=&origin_image zh-lightbox-thumb& width=&684& data-original=&https://pic1.zhimg.com/50/b67b863d41f5e4e762dde44c516cb35c_r.jpg&&&/figure&当然优化方式也存在它的问题。例如优化时间会随着节点数量增长——所以有人会提double window optimization这样的方式,以及可能落入局部极小。但是就目前而言,它比EKF还是优不少的。&br&&br&=============== &b&小结&/b& ==================&br&&ol&&li&&b&卡尔曼滤波是递归的线性高斯系统最优估计。&/b&&/li&&li&&b&EKF将NLNG系统在工作点附近近似为LG进行处理。&/b&&/li&&li&&b&IEKF对工作点进行迭代。&/b&&/li&&li&&b&UKF没有线性化近似,而是把sigma point进行非线性变换后再用高斯近似。&/b&&/li&&li&&b&PF去掉高斯假设,以粒子作为采样点来描述分布。&/b&&/li&&li&&b&优化方式同时考虑所有帧间约束,迭代线性化求解。&/b&&/li&&/ol&呃好像题主还问了FastSLAM,有空再写吧……&br&&br&注:&br&* 本文大量观点来自Timothy. Barfoot, &State estimation for Robotics: A Matrix Lei Group Approach&, 2016. 图片若有侵权望告知。
我怎么会写得那么长……如果您有兴趣可以和我一块把公式过一遍。 要讲清这个问题,得从状态估计理论来说。先摆上一句名言: 状态估计乃传感器之本质。(To understand the need for state estimation is to understand the nature of sensors.)任何传感器…
&figure&&img src=&https://pic4.zhimg.com/v2-669402afdf69986edc3ada4f52e78833_b.jpg& data-rawwidth=&600& data-rawheight=&259& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/v2-669402afdf69986edc3ada4f52e78833_r.jpg&&&/figure&&p&随着AR/VR行业的兴起,以及智能移动机器人、无人驾驶的发展,行业对SLAM技术的需求出现了井喷。另一方面,随着传感器技术的发展,计算资源的丰富以及算法的进步,SLAM技术本身也进入了一个从算法到产品过渡的阶段。行业中已经出现了一些以SLAM技术为主的产品,但离进入千家万户还有一定的距离。本文将从SLAM的基本技术,典型SLAM的应用以及目前行业中使用的解决方案来介绍。&/p&&h2&&b&&i&SLAM技术入门&/i&&/b&&/h2&&p&SLAM是simultaneous localization and mapping的简写,中文直译为同时定位与建图,其中又以定位更为核心,建图实际上是在定位的基础上,将观测数据进行融合的过程。关于定位,我们或许听过很多相关的术语,GPS(全球定位系统),基站定位,WIFI定位,陀螺仪等等;但以上定位方案无论是适用场景,还是精度,抑或是价格,对于常见的SLAM应用都不能满足需求,因此需要寻求更好的定位解决方案。&/p&&p&定位本质上可以定义为一个估计问题,通过传感器的观测数据(存在不同程度的噪声)来估计位置;也可以定义为一个优化问题,通过多种观测数据之间的约束关系,对位置进行优化。逻辑上,噪声越低的传感器能够获得更好的定位精度,但需要在价格和精度上寻求balance;目前行业中使用的传感器有:激光雷达(单线、多线,能够获得对应点的深度信息),深度摄像头(TOF,结构光,双目;三种方案各有优缺点,能够获取彩色和深度图像),IMU(惯导单元,能够获得高频的位移信号),彩色摄像头(单目,鱼眼,或者是经过特殊的设计获得更大的FOV),码盘(记录累积里程,累积误差大);可以参考这个链接获取更多的信息:&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.cnblogs.com/zengcv/p/5994587.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SLAM的前世今生 终于有人说清楚了&/a&&/p&&p&对于定位,通常意义上我们都指绝对定位,比如我们的GPS,固定原点位置,所有的定位都以这个原点作为参考,并以经纬度表示;又比如建筑物内部,我们规定一个原点,其他的定位结果都已这个位置为参考,并加上度量衡(cm, m等)表示。另外,在SLAM中我们也考虑相对定位(或者称为相对位移),当前时刻相对于前一时刻的旋转、平移量是多少,并且可以通过时序的累积得到绝对定位。&/p&&p&关于SLAM入门,在这里把几个相关的资料list出来:&/p&&p&1. slamcn主页:&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.slamcn.org/index.php/%25E9%25A6%%25A1%25B5& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SlamCN&/a&&/p&&p&2. 大神Andrew Davison的主页:&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//www.doc.ic.ac.uk/%7Eajd/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Andrew Davison: Research&/a&&/p&&p&3. openslam:&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//openslam.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&openslam.org/&/span&&span class=&invisible&&&/span&&/a&&/p&&p&4. 泡泡机器人,微信公众号&/p&&p&5. 《视觉SLAM十四讲》,高翔,总结比较全面,同时有对应的code可以参考&/p&&p&6. slam基础知识:&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&学习SLAM需要哪些预备知识?&/a&&/p&&p&感兴趣的朋友可以关注一下上面的材料。&/p&&p&&br&&/p&&p&从如下3个方向简单介绍SLAM技术的入门,又以视觉SLAM技术为主。&/p&&p&&b&1. 激光雷达定位&/b&&/p&&p&使用激光雷达进行定位一般情况下包含建图、定位两个过程;当然,单线和多线激光在处理时是有差异的,在此以单线激光为例。&/p&&p&单线激光能够获取到某一平面上以激光位置为参考的点的深度信息,一周常见的是上千个点左右;他能够很好的捕捉场景以某一平面为参考的轮廓信息。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-3e5ad1ee5ea9cdae8b443e5ebe0eba21_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic1.zhimg.com/v2-3e5ad1ee5ea9cdae8b443e5ebe0eba21_r.jpg&&&/figure&&p&结合如码盘等完成建图,获取2d的平面图,建好的地图参考这个图片:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-4fd075ebcb7ba691e6ec3a466c6cfc6a_b.jpg& data-rawwidth=&570& data-rawheight=&394& class=&origin_image zh-lightbox-thumb& width=&570& data-original=&https://pic1.zhimg.com/v2-4fd075ebcb7ba691e6ec3a466c6cfc6a_r.jpg&&&/figure&&p&通过这个图片,我们大致能够判断这个地图是办公区,然后工位信息相对准确。&/p&&p&定位过程可以简单的理解成,通过当前激光的观测数据,同地图信息匹配得到定位位置;当然这中间需要使用相对的位移的信息,在此不进行更多的介绍。&/p&&p&当环境变化较小(即地图信息不需要频繁更新)的情况下,激光雷达能够获得很好的定位精度以及定位的连续性。但对于周围环境变化较快,比如商场的公共区域,存在很多行人的情况,激光雷达定位需要做特殊处理。&/p&&p&&b&2. 视觉SLAM技术&/b&&/p&&p&着重介绍基于视觉的SLAM技术,并且参考ORB_SLAM为例说明一个完整的视觉SLAM系统需要的多个模块。可以参考这个链接学习相关内容:&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&orb-slam在众多SLAM方法中处于怎样的地位?&/a&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-39fe9a6cd050a8cb321e_b.jpg& data-rawwidth=&916& data-rawheight=&703& class=&origin_image zh-lightbox-thumb& width=&916& data-original=&https://pic4.zhimg.com/v2-39fe9a6cd050a8cb321e_r.jpg&&&/figure&&p&从上图,我们大致可以将SLAM分成如下几个模块:&/p&&p&前端,完成VO的功能&/p&&p&后端,对VO的结果进行优化和融合&/p&&p&建图,在优化之后的定位结果上进行地图的构建&/p&&p&回环,当到达之前去过的位置时,通过回环进行全局的优化,减小累积误差&/p&&p&&b&a1. 前端VO&/b&&/p&&p&VO的目标是计算两个图像帧之间的相对位移关系,由于很多时候存在深度图像,所以可以将VO分成3d-3d, 3d-2d, 2d-2d等多种情况(注意:2d-2d的方案没有尺度信息,需要想办法从其他地方引入),流程如下:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c4c4f33e981faa4b099a14a6_b.jpg& data-rawwidth=&1808& data-rawheight=&1096& class=&origin_image zh-lightbox-thumb& width=&1808& data-original=&https://pic3.zhimg.com/v2-c4c4f33e981faa4b099a14a6_r.jpg&&&/figure&&p&实际当中面临的问题主要是特征点的选择(精度,计算时间的平衡),配对算法的选择,以及R,T计算方法的选择。&/p&&p&但连续两帧之间VO的计算存在较大的累积误差,同时也并没有完整的利用帧间信息,VO基本上使用的是t,t+1时刻的信息,但实际上t+2时刻和t时刻可能同时获得某些特征点的观测信息,因此可以考虑将这些非相邻帧之间的观测信息作为约束条件,进行局部的优化,常见的如local BA&/p&&figure&&img src=&https://pic3.zhimg.com/v2-789c53faa9a65526e9bdde2_b.jpg& data-rawwidth=&1842& data-rawheight=&1186& class=&origin_image zh-lightbox-thumb& width=&1842& data-original=&https://pic3.zhimg.com/v2-789c53faa9a6552

我要回帖

更多关于 480港币是多少人民币 的文章

 

随机推荐