Прогнозирование с помощью RetinaNet TPU - PullRequest
0 голосов
/ 24 апреля 2019

Возможно, мы что-то упускаем из виду, но моя команда в настоящее время пытается обучать и делать прогнозы, используя реализацию RetinaNet TPU на GCP . Однако мы застряли, пытаясь просто делать прогнозы на немаркированных изображениях, поскольку мы не знаем, как интерпретировать выходные формы.

Мы обучили модель в облаке, чтобы получить экспортированные saved_model.pb и переменные, убедившись, что мы подстроили размер наших данных и количество классов. Затем, присмотревшись к saved_model.pb, мы можем увидеть выходные формы примерно так:

model_dir = <PATH_TO_SAVED_MODEL>

with tf.Session() as sess:
     graph = tf.Graph()
     with graph.as_default():
         metagraph = tf.saved_model.loader.load(sess, [tag_constants.SERVING],model_dir)
     outputs_mapping = dict(metagraph.signature_def['serving_default'].outputs)
     print (outputs_mapping)

Используя 9 классов наших данных, мы получаем следующие выходные данные и формы:

{'cls_outputs_3': name: "retinanet/class_net/class-predict/BiasAdd:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 80
  }
  dim {
    size: 80
  }
  dim {
    size: 81
  }
}
, 'cls_outputs_4': name: "retinanet/class_net/class-predict_1/BiasAdd:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 40
  }
  dim {
    size: 40
  }
  dim {
    size: 81
  }
}
, 'cls_outputs_5': name: "retinanet/class_net/class-predict_2/BiasAdd:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 20
  }
  dim {
    size: 20
  }
  dim {
    size: 81
  }
}
, 'box_outputs_3': name: "retinanet/box_net/box-predict/BiasAdd:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 80
  }
  dim {
    size: 80
  }
  dim {
    size: 36
  }
}
, 'cls_outputs_6': name: "retinanet/class_net/class-predict_3/BiasAdd:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 10
  }
  dim {
    size: 10
  }
  dim {
    size: 81
  }
}
, 'box_outputs_4': name: "retinanet/box_net/box-predict_1/BiasAdd:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 40
  }
  dim {
    size: 40
  }
  dim {
    size: 36
  }
}
, 'cls_outputs_7': name: "retinanet/class_net/class-predict_4/BiasAdd:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 5
  }
  dim {
    size: 5
  }
  dim {
    size: 81
  }
}
, 'box_outputs_5': name: "retinanet/box_net/box-predict_2/BiasAdd:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 20
  }
  dim {
    size: 20
  }
  dim {
    size: 36
  }
}
, 'box_outputs_6': name: "retinanet/box_net/box-predict_3/BiasAdd:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 10
  }
  dim {
    size: 10
  }
  dim {
    size: 36
  }
}
, 'box_outputs_7': name: "retinanet/box_net/box-predict_4/BiasAdd:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 5
  }
  dim {
    size: 5
  }
  dim {
    size: 36
  }
}
, 'cls_outputs_all': name: "map_1/TensorArrayStack_2/TensorArrayGatherV3:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 5000
  }
}
, 'indices_all': name: "map_1/TensorArrayStack/TensorArrayGatherV3:0"
dtype: DT_INT32
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 5000
  }
}
, 'image': name: "Reshape:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 640
  }
  dim {
    size: 640
  }
  dim {
    size: 3
  }
}
, 'box_outputs_all': name: "map_1/TensorArrayStack_3/TensorArrayGatherV3:0"
dtype: DT_FLOAT
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 5000
  }
  dim {
    size: 4
  }
}
, 'classes_all': name: "map_1/TensorArrayStack_1/TensorArrayGatherV3:0"
dtype: DT_INT32
tensor_shape {
  dim {
    size: -1
  }
  dim {
    size: 5000
  }
}
}

Мы можем запускать изображения через модель, чтобы успешно получать выходные данные, но тогда мы не знаем, что делать с выходными данными. Кажется, что ни одна из форм не полностью соответствует нашим данным. Прогнозирование с использованием метод развертывания GCP также не работает для нас. Он не говорит нам, что что-то пошло не так, но он просто сидит и ничего не делает.

Мы также прочитали бумагу с очаговыми потерями , пытаясь понять формы. Хотя это дало нам некоторое понимание, на самом деле интерпретация и работа с весами все еще уклоняются от нас. Все мы - студенты, у которых есть некоторый опыт работы с машинным обучением и нейронными сетями, но у нас нет опыта работы с этой конкретной моделью или подобными ей Из-за отсутствия онлайн-справки, похоже, очень немногие люди имеют опыт работы с ней.

Буду очень признателен за понимание или помощь в создании прогнозов с RetinaNet.

...