Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object 如何在没有nms的情况下解码Tensorflow对象检测ssd mobilenet的原始输出/方框编码_Object_Tensorflow_Detection - Fatal编程技术网

Object 如何在没有nms的情况下解码Tensorflow对象检测ssd mobilenet的原始输出/方框编码

Object 如何在没有nms的情况下解码Tensorflow对象检测ssd mobilenet的原始输出/方框编码,object,tensorflow,detection,Object,Tensorflow,Detection,为了在android上部署我自己的ssd移动模型并使用NNAPI加速,我根据tensorflow异议检测API在没有NMS后期处理的情况下重新训练了模型。 在没有NMS的情况下,输出原始输出/box编码是对box位置进行编码的,我将其解码如下,但它不起作用: for(int j =0; j < 5; j++) { float sk = (float)(0.2 + (0.949 - 0.200) *j * 1.0 / 5*1

为了在android上部署我自己的ssd移动模型并使用NNAPI加速,我根据tensorflow异议检测API在没有NMS后期处理的情况下重新训练了模型。 在没有NMS的情况下,输出原始输出/box编码是对box位置进行编码的,我将其解码如下,但它不起作用:

for(int j =0; j < 5; j++)
               {
                   float sk = (float)(0.2 + (0.949 - 0.200) *j * 1.0 / 5*1.0);
                   float width_a = (float)(sk * Math.sqrt(aspectra[j]));
                   float height_a = (float)(sk * 1.0 / Math.sqrt(aspectra[j]));
                   for(int k = 0; k < featuresize[j] ; k++)
                   {
                       float center_x_a = (float)((k + 0.5) * 1.0/ featuresize[j]);
                       float center_y_a = (float)((k + 0.5) * 1.0/ featuresize[j]);

                       float ty = (float)(outputBox[0][i][0] / 10.);
                       float tx = (float)(outputBox[0][i][1] /  10.);
                       float th = (float)(outputBox[0][i][2] / 5.);
                       float tw = (float)(outputBox[0][i][3] / 5.);

                       float w =(float)(Math.exp(tw) * width_a);
                       float h = (float)(Math.exp(th) * height_a);
                       float y_center = ty * height_a + center_y_a;
                       float x_ceneter = tx * width_a + center_x_a;


                       float ymin = (float)((y_center - h ) / 2.);
                       float xmin = (float)((x_ceneter - w ) / 2.);
                       float ymax = (float)((y_center + h ) / 2.);
                       float xmax = (float)((x_ceneter + w ) / 2.);
为了解码原始输出/方框编码,您还需要锚,因为方框编码是相对于锚进行编码的

以下是我解码原始输出/方框编码的实现:

为了解码原始输出/方框编码,您还需要锚,因为方框编码是相对于锚进行编码的

以下是我解码原始输出/方框编码的实现:

private float[][][] decodeBoxEncodings(final float[][][] boxEncoding, final float[][] anchor, final int numBoxes) {
    final float[][][] decodedBoxes = new float[1][numBoxes][4];
    for (int i = 0; i < numBoxes; ++i) {

        final double ycenter = boxEncoding[0][i][0] / y_scale * anchor[i][2] + anchor[i][0];
        final double xcenter = boxEncoding[0][i][1] / x_scale * anchor[i][3] + anchor[i][1];
        final double half_h = 0.5 * Math.exp((boxEncoding[0][i][2] / h_scale)) * anchor[i][2];
        final double half_w = 0.5 * Math.exp((boxEncoding[0][i][3] / w_scale)) * anchor[i][3];

        decodedBoxes[0][i][0] = (float)(ycenter - half_h);   //ymin
        decodedBoxes[0][i][1] = (float)(xcenter - half_w);   //xmin
        decodedBoxes[0][i][2] = (float)(ycenter + half_h);   //ymax
        decodedBoxes[0][i][3] = (float)(xcenter + half_w);   //xmax
    }
    return decodedBoxes;
}
float y_scale = 10.0f;
float x_scale = 10.0f;
float h_scale = 5.0f;
float w_scale = 5.0f;