We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
作者在#10 中答复 LUT 的生成原理,贴了这个代码:LUT_gen.cpp,代码里的分数选择好像是根据夹角呈线性分布,而且只有0-4分。
但在论文Gradient Response Maps for Real-Time Detection of Textureless Objects中,分数取的是夹角的余弦的绝对值:
论文里保留了1位小数,即1、0.9、0.7、0.4、0分。那么按理来说,这个单点的分数,取整可以取10、9、7、4、0分?
不过论文好像也没有解释为啥取余弦而不是其他函数...
在#69 如何将64个特征点增加到8192个特征点中 作者答复
一个点最高4分,int16_t类型最大值32767,所以不能超过8192。一般也不会这么多。
但是,在 #79 匹配得分的计算问题 中
float score = (score_int * 100.f) / (4 * numFeatures); 为什么在计算分数的时候, 除数要乘以4?
作者答复
因为单点得分最高为4,需要*100 / 4 缩放到100
总分数都设置成float了,为什么还要被int16_t类型限制?而且如果一开始就把分数取0-10,这里是不是可以不用乘100?
另外,我在作者的知乎中看到:
一个特征点就是三个量,x,y坐标跟一个8位的方向(180/8)。匹配的时候,如果同样位置上的方向一致,加4分;方向差22.5度,加3, 45度加2,67.5度加1,90度加0,超90度自动减180,所以就这4个情况。 也就是说,我就算乱给方向,那么得分的期望也有2分,占最高分的一半,给分这么宽容难怪阈值低的时候出现这么多错误匹配。比如遮挡了物体的1/3,现在的实际得分应该是67。但是,由于给分过于宽松,随机物体的分数可以认为是50分的一个正态分布,要超过67分实在是太容易了,所以降低阈值虽然能把部分遮挡的物体检测到,同时会引入大量误匹配。 所以,一个自然的想法就是把误匹配的分布压下去:方向一致给4分,差22.5度给1分,不然不给分。为什么要这样给呢,因为这样一个特征点的期望得分是1分,随机物体的期望得分是25分(而且试了试其他给分都没这样好);至于不一致还给一分是因为方向有可能在交界处左右摇摆,这也是quantization的一个缺点吧,可以用16位来进一步提升效果(待实现)。这样的话,误匹配只会出现在跟实际物体部分相似的地方,比如大家都有圆圆的头之类的。(更新:这里是从focal loss得到的启发;从之前的观点看,这样可以大大降低average pooling的坏处)
如果用cos分数是不是也能解决这个问题,毕竟cos的图像略凸,也能把误匹配的分布压下去。
各位朋友有看懂的也可以指点一下~
The text was updated successfully, but these errors were encountered:
好问题,这样确实可以达到一样的效果。 当时最大值选4是考虑到得分之和是一个8bit变量,最255,所以选4并同时把特征点数量限制到63,用10的话特征点就太少了。 后来突破了这个限制,扩展到16bit,但是原来的分数设置也没出现什么问题,所以就沿用最大得分4. 当然,改成这个得分是否在某些case下更好也说不定,有兴趣的话可以尝试一下。
Sorry, something went wrong.
@meiqua 我一直没看明白 LUT 的生成原理: LUT_gen.cpp,能否详细讲下代码原理呢?有示意图最好啦。
可基本参照博文理解https://blog.csdn.net/weixin_41864918/article/details/124324107
No branches or pull requests
作者在#10 中答复 LUT 的生成原理,贴了这个代码:LUT_gen.cpp,代码里的分数选择好像是根据夹角呈线性分布,而且只有0-4分。
但在论文Gradient Response Maps for Real-Time Detection of Textureless Objects中,分数取的是夹角的余弦的绝对值:
论文里保留了1位小数,即1、0.9、0.7、0.4、0分。那么按理来说,这个单点的分数,取整可以取10、9、7、4、0分?
不过论文好像也没有解释为啥取余弦而不是其他函数...
在#69 如何将64个特征点增加到8192个特征点中 作者答复
但是,在 #79 匹配得分的计算问题 中
作者答复
总分数都设置成float了,为什么还要被int16_t类型限制?而且如果一开始就把分数取0-10,这里是不是可以不用乘100?
另外,我在作者的知乎中看到:
如果用cos分数是不是也能解决这个问题,毕竟cos的图像略凸,也能把误匹配的分布压下去。
各位朋友有看懂的也可以指点一下~
The text was updated successfully, but these errors were encountered: