点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
3D视觉工坊的第64篇文章
在上一篇文章《VSLAM|回环检测之词袋字典如何生成?》中,我们了解了如何自行训练字典。
那对于我们自己训练的字典效果与ORB-SLAM2作者提供的字典,哪个效果要更好些呢。此处笔者简单做了如下测试。
本次测试,主要对比三个字典对于图像相似度检测的效果。三个字典分别为:ORBvoc.txt(ORB-SLAM2作者自带的)、MyOldVoc.txt(使用三组数据集训练)、MyNewVoc.txt(使用8组数据集训练(经过筛选与剔除质量不佳的图片))。测试图片集及检测效果如下:
第一组实验:
不失一般性,我们选取了非训练字典所用图片库中的十张均较为相似的图片(序号为0~9.png):
此处限于篇幅,仅展示前八张,如下。
实验测试结果部分数据展示如下:
第二组实验:
选取十张图片,其中仅有前两张图片较为相似,其余图片均差异较大,限于篇幅,此处仅展示前八张。
测试结果部分截图展示如下:
与此类似的实验,还有多组,此处便不再一一展示。
由以上实验,我们可以看到,使用我们自己生成的字典(只有14.8M,而ORBvoc.txt文件为145.3M,即使压缩后也要42M多)同样可以区分出相似图片与非相似图片。
但是,很多同学可能会问一个问题,对于我们肉眼看来,具有较高相似性图片之间的得分,并非接近于1,这与我们固有的认知有所差异,以下笔者的一些小发现,或许能给你一些启发。
关于DBoW词袋模型相似性得分计算的一些思考
对于肉眼看似相似度非常大的两幅图片,在进行ORB角点检测后,得到的如下图所示。
对于上述的两幅图,由测试结果发现,对应的词袋向量却大不相同,如下图所示,对应的相似度计算结果与1也相差较远。
故而,对于相似性评分的处理,我们只利用这个分值的绝对值大小并没有太大帮助。比如,有些环境的外观本来就很相似,像有的办公室的桌椅大多为同款,另一些环境下的各个地方可能差异较大。考虑到这种情况,我们会取一个先验相似度s(vt,vt-dt),它表示某时刻关键帧图像与上一时刻的关键帧的相似性。然后,其他的分值都参照这个值进行归一化[1]:
s(vt,vtj)’=s(vt,vtj)/s(vt,vt-dt).
这样,我们说:如果当前帧与之前某关键帧的相似度超过当前帧与上一个关键帧的相似度的3倍,就认为可能存在回环。
上述步骤,避免了引入绝对的相似性阈值,使得算法能够适应更多环境。
笔者之前也较为纳闷,明明肉眼相似的两个图片,得分却不接近1。直至将两幅图中的词袋向量拿出来比较后,才发现原来对应的向量差异这么大...
跋
对于自己训练的字典能否实际应用于产品中,仍然还需要进一步的测试,尤其需要到实际的应用场景中做测试,对于光照的影响如何考虑,这些都值得我们思考,笔者在此便不再赘述。
上述内容,如有侵犯版权,请联系作者,会自行删文。