我们可能会完全忽略某些内容,但是我的团队目前正在尝试使用RetinaNet TPU implementation on 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's deployment method进行预测对我们也不起作用。它并没有告诉我们什么地方出了问题,但是它只是坐着,什么也不做。
我们还阅读了focal loss paper,以期了解形状。虽然它给了我们一些见识,但实际上对权重的解释和使用仍然在逃避我们。我们都是在机器学习和神经网络方面有一定经验的学生,但是没有使用该特定模型或类似模型的经验。由于缺少在线帮助,似乎也很少有人有使用它的经验。
对于使用RetinaNet进行运行预测的任何见解或帮助,将不胜感激。