PSMNet:Pyramid Stereo Matching Network学习测试笔记00

CVPR2018原文链接
Github仓库地址
SceneFlow数据集链接,只需要cleanpass和Disparity

1.简要描述

PSMNet是一个很6皮的三维重建网络,我需要做三维重建,说句实在话,经典结构光法精度高,也已经发展到瓶颈了,多频外插法一枝独秀。深度学习的双目仿生原理,感觉会很有前景和研究价值。所以现在玩一玩总是好的。这里发现一篇很好的文章,毕竟是CVPR级别。说实话,第一次看文章真看不懂,而且深度学习这个东西,网络结构设计出来最后为什么会出来这种效果,其实不太好说清。这种东西,和第一次写HelloWord一样,弄出来有个直观的印象总是好的。

2.硬件推荐

参照文章,土豪哥哥们用的四路泰坦Xp,单卡batchsize是3,一次可以跑12组图,我只有一张1080Ti 11GB显存,老老实实:

# set gpu id used
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

测试一次2组图没问题,占用率忘了,大约7000多MB,除以二乘以3就是batchsize为3的时候的显存需求量,经过计算,一次3组图其实显存够,但是系统的图形界面还会占一点显存那成了压死骆驼的最后一根稻草,所以我选择关闭图形界面,这样显存占用只有10M,舒服了。内存我用32GB,需要很大的缓冲cache,小一点也可以。其他软件环境配置参照Github的README。如果显存只有4GB,那就只能跑batchsize=1
推荐先用给出的pretrain的model先测试一次。挺好玩的。预训练模型在readme里面有链接,是在google drive的,需要*,没有*的同学到我的分享的资源里有。(忘了改1积分下载。。抽空换win传一次百度云,不差积分的同学用积分,讲道理有积分的同学自己都有*)

3.训练过程

大佬们的四路泰坦XP需要13小时,1080Ti在性能上相比泰坦Xp差的不是太多,就是显存少1G,所以,我跑一个epoch需要约6小时(其实是5小时44分左右,偷懒算),设定15个Epoch,多试试看看会不会过拟合。经过6*15个小时的艰苦奋斗,终于让我跑完了这个数据集。那么看看那效果:
PSMNet:Pyramid Stereo Matching Network学习测试笔记00
上面两张是原始图,下面左边是groundtruth,右边是网络结构跑出来的结果,效果还是可以的。(顺便吐槽一下,怎么能用动画模型做数据集呢,这么不靠谱)。

4. 不靠谱的测试

之所以叫不靠谱的测试是因为,这个网络是在SceneFlow数据集进行的训练,对于其他场景应当具有很大区别。但是毕竟试一试也是几乎0成本,于是乎我把之前在成都东动车所拍的图拿过来测试一下,经过极线矫正后,剪切到960*540,灰度图直接扩充到三通道,统一输入,测试了拍的比较好的7组图,只有两组的结果能看,这两组图效果如下:
PSMNet:Pyramid Stereo Matching Network学习测试笔记00
PSMNet:Pyramid Stereo Matching Network学习测试笔记00
剩下的5组是真的看都没法看,都是马赛克(效果就是一坨翔),毕竟场景完全不同,特征提取也不对,这里能有两两组效果成这样的图我已经是狂喜了。尤其是后面这个。虽然只是视差。但是这意味着我当初的两帧图重建三维的方案现在可以只用一帧图了,并且直接利用GPU加速,还省去了并行优化的问题。拍的图上面是打了散斑点的,所以自己做一组groundtruth是有希望成功的。

5.PSMNet存在问题

最新的CVPR2019已经对这个网络进行了改进,可以参考SceneFlow和KITTI的排行榜。这里我也发现了一些问题,其中显存占用过大就是个很严重的问题(对于土豪哥哥就不是问题)。我暂时有点思路解决,但是还是不吹牛的好,解决了再回来吹牛。