您好,上次回复不太准确,算法限制是:poly_nms中求交面积的算法要求输入的每个四边形坐标必须是顺时针或者是逆时针,输入四边形坐标乱序时计算不保证结果。 输入可以使用一个顺时针的一个逆时针的数据。您可以多做些测试,计算结果可以和MLUOPS仓中poly_nms结果做对比,或者和https://github.com/dingjiansw101/AerialDetection/tree/master/mmdet/ops/poly_nms 中的计算结果做对比。展开
您好,上次回复不太准确,算法限制是:poly_nms中求交面积的算法要求输入的每个四边形坐标必须是顺时针或者是逆时针,输入四边形坐标乱序时计算不保证结果。 输入可以使用一个顺时针的一个逆时针的数据。您可以多做些测试,计算结果可以和MLUOPS仓中poly_nms结果做对比,或者和https://github.com/dingjiansw101/AerialDetection/tree/master/mmdet/ops/poly_nms 中的计算结果做对比。展开
您好 上面的代码还是有问题,我发现2个不相交框的IOU不为0,您能再看下吗?
样例:
half Bbox_A[8] = {0.807617, 0.589844, 0.765137, 0.668457, 0.596680, 0.575684, 0.639160, 0.497559};
half Bbox_B[8] = {0.435303, 0.691895, 0.397705, 0.764160, 0.226318, 0.674805, 0.263916, 0.602051};
计算结果intersect=0.015778,即交集为其中一个框的面积。
好的 非常感谢,但我还是有一些疑问, half Bbox_A[8] = { 0, 0, 0, 1, 1, 1, 1, 0};Bbox_B[0]=0.5; Bbox_B[1]=0.5; Bbox_B[2]=1.5; Bbox_B[3]=0.5;Bbox_B[4]=1.5; Bbox_B[5]=1.5; Bbox_B[6]=0.5; Bbox_B[7]=1.5;上面这种初始化结果是正确的,但是此时一个是顺时针 一个是逆时针。展开
您好,poly_nms中求交面积的算法要求输入的两个四边形坐标都是顺时针或者都是逆时针,这个限制在poly_nms的API接口有写,在设计文档的限制中也有描述。 参考:https://github.com/Cambricon/mlu-ops/blob/ae3b78a648/docs/bangc-docs/design_docs/poly_nms/poly_nms.md阅读并调试了代码,发现是您的调试数据出错了,测试代码中的两个boxes坐标一个是顺时针输入,一个是逆时针输入,调整坐标顺序,可以得到正确的计算结果。展开
好的 非常感谢,但我还是有一些疑问,
half Bbox_A[8] = { 0, 0, 0, 1, 1, 1, 1, 0};
Bbox_B[0]=0.5; Bbox_B[1]=0.5; Bbox_B[2]=1.5; Bbox_B[3]=0.5;
Bbox_B[4]=1.5; Bbox_B[5]=1.5; Bbox_B[6]=0.5; Bbox_B[7]=1.5;
上面这种初始化结果是正确的,但是此时一个是顺时针 一个是逆时针。
您好 我把代码和说明上传在附件里了,您可以调试以下。
您好,poly_nms中求交面积的算法要求输入的两个四边形坐标都是顺时针或者都是逆时针,这个限制在poly_nms的API接口有写,在设计文档的限制中也有描述。 参考:https://github.com/Cambricon/mlu-ops/blob/ae3b78a648/docs/bangc-docs/design_docs/poly_nms/poly_nms.md
阅读并调试了代码,发现是您的调试数据出错了,测试代码中的两个boxes坐标一个是顺时针输入,一个是逆时针输入,调整坐标顺序,可以得到正确的计算结果。
感谢回复BIT_FLOAT_NEG_1变量是在一个Union联合体中,BIT_FLOAT_NEG_1的值会影响到isInner()函数的返回值,函数内容如下https://github.com/Cambricon/mlu-ops/blob/ae3b78a6487e663ff93cb6d940048d7db863b0ed/bangc-ops/kernels/poly_nms/intersect_area.h#L71 修改BIT_FLOAT_NEG_1的初始值,会影响到isInner()函数的result.fp32值,而且影响很大。展开
将初始化改为0x8000试一下。
您好,BIT_FLOAT_NEG_1 这个值属于中间过程的一个变量,且没有直接参与到计算中,不需要修改。在您的测试中,float改half, 主要关注下输入的float类型的参数在计算过程中的变化, 只修改输入boxes的类型及直接参与到面积计算的变量类型就可以。展开
感谢回复
BIT_FLOAT_NEG_1变量是在一个Union联合体中,BIT_FLOAT_NEG_1的值会影响到
isInner()函数的返回值,函数内容如下修改BIT_FLOAT_NEG_1的初始值,会影响到isInner()函数的result.fp32值,而且影响很大。
请登录后评论