双目测距系列(三)monodepth2模型的测试

前言

基于张正友标定方法的双目测距在远距离尤其是室外环境复杂,光照影响强烈的场景下会出现准确度,稳定性以及鲁棒性明显下降的缺点。所以个人认为,双目测距未来的发展趋势还是深度学习技术的引入。 

就双目测距而言,深度学习有两大分支:一个是监督学习,即样本图片本身带有深度信息;另外一个是无监督和自监督学习,即样本图片还是需要的,但不需要标注深度信息了。 由于对样本图片进行深度信息的标注是一个非常有难度和非常耗时费力的工作,所以第二种无需标注的深度学习方法会慢慢成为主流。 

基于无监督和自监督的深度学习算法模型有好几种,未来也会越来越多。我们这里主要介绍monodepth2。它是自监督;而它的前身monodepth是无监督。 个人觉得自监督和无监督本质差不多,叫法不同而已。它们原理大体上都是通过双目测距的一个摄像头,比如左摄像头所拍得的图片来学习到与之对应右摄像头图片,并生成视差图,然后再通过视差图又反推出左摄像头图片,并和Ground Truth的左图片形成delta。随着学习的迭代进行,这个delta会慢慢变小。 当然这个原理只是我目前的理解,其表述很粗糙,也不一定对,后续随着学习的深入会对原理部分进行补充和更正。

模型测试

Monodepth2的github地址如下:

https://github.com/nianticlabs/monodepth2

其对应的paper为《Digging into self-supervised monocular depth estimation.pdf》大家可自行下载。

该开源项目已经提供训练好的各个类型的模型,如下图红框所示。

大家可以按照自己的喜好下载好一个或数个模型,当然图片测距测试时只需要一个模型即可。 我这里下载了两个模型(mono_1024x320和stereo_1024x320),来分别对 图片进行测距。

注意,下载后模型文件是zip格式,需要解压缩到同名的目录下面。因为monodepth包括了2个网络:unet和pose,前者是求深度图的,后者是求双目间姿态的,所以一般模型训练出来后,至少有2个pth。下面是mono_1024x320所包含的pth文件:

 有了模型后,就可以开始对于某张图片来测距了。其对应命令为:

python3 test_simple.py --image_path assets/test_image.jpg --model_name mono+stereo_640x192

大家感兴趣可以看看test_simple.py,非常简单的一个python测试脚本,其后面带两个参数,第一个为待测距的图片,“asserts/test_image.jpg”为测试图片的路径和名称,大家可以根据自己应用来进行更改;第二个为模型,如果你下载的是mono_1024x320,那么后面的模型名字就应该由"mono+stereo_640x192“改为”mono_1024x320“。 当然,为了能找到模型文件,还必须该项目根目录下面创建models子目录,然后把前面下载并已经解压缩的模型目录置于其下面。

运行结果 

该github项目的运行环境如下所示:

PyTorch 0.4.1/1.0, CUDA 9.1, Python 3.6.6/2.7 and Ubuntu 18.04

刚好我的ubuntu18.0.4平台已经安装好gpu版本pytorch, CUDA,python3.6以及opencv3.x。所以该图片测距的测试脚本就直接运行成功了。

原始图片如下:

彩色化后的深度图如下所示:

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章