Как изменить размеры (сжатие) для выходных тензоров - PullRequest
0 голосов
/ 08 марта 2019

Я относительно новичок в Tensorflow.Я занимаюсь разработкой кода на C ++ с использованием API-интерфейса Tensorflow C ++.Я должен сначала удалить размер размера 1 из моих выходных тензоров, а затем повторить его, чтобы получить необходимые координаты блока и значения маски.API squeeze выдает выходные данные в формате Tensorflow :: Output.Я не могу преобразовать Tensorflow :: Output в формат Tensorflow :: Tensor.Мой код примерно такой.Я много искал в Интернете, но не мог найти точный способ сделать это.

tf::Tensor imagetensor = convert_image_to_4D_uint8_tensor(cameraFrame);
tf::Status status = detect_session->Run( { { "image_tensor:0", imagetensor } }, //inputs
{ "detection_boxes:0", "detection_masks:0", "detection_scores:0", "detection_classes:0", "num_detections:0" }, //fetch_outputs
{ }, //run outputs
p_outputs); //Tensor outputs

/*** Need to add code for removing dimension of size 1 ***/
/********** Not sure about this commented code ****/
//auto root = tensorflow::Scope::NewRootScope();
//tensorflow::Output numDetection;
//numDetection = Squeeze(root.WithOpName("Squeeze dimension size 1"),    //p_outputs->at(4));

auto numDetectionTensor = p_outputs->at(4).tensor<float,1>();
for (int i = 0; i <  numDetectionTensor(0); ++i)
{
      auto maskTensor = p_outputs->at(1).tensor<float, 4>();


      // Some code here to get the values of maskTensors


      if (scoreTensor(0, i) >= SCORE_THRESHOLD)
      {
           auto boxTensor = p_outputs->at(0).tensor<float, 3>();
           double ymin = boxTensor(0, i, 0);
           double xmin = boxTensor(0, i, 1);
           double ymax = boxTensor(0, i, 2);
           double xmax = boxTensor(0, i, 3);
      }
}
...