Есть ли способ получить ограничивающие рамки из файла model.pb обнаружения объекта пользовательского видения Microsoft? - PullRequest
0 голосов
/ 05 января 2019

Есть ли способ получить ограничивающие рамки определенного объекта, обнаруженные с помощью файла Microsoft custom vision model.pb? Я знаю, что мы можем получить это с помощью API-вызовов к службе Azure Custom Vision. Скажем, например, мы можем получить ограничивающие рамки из файла ssd замороженного вывода graph.pb, так как присутствуют тензоры. Можем ли мы сделать то же самое для файла model.pb, созданного пользователем?

Это код, который я использую для распечатки операций для модели с тензорным потоком и вывода.

detection_graph = tf.Graph()

with detection_graph.as_default():
    graph_def = tf.GraphDef()
    with tf.gfile.GFile('model.pb,'rb') as fid:
        serialized_graph = fid.read()
        graph_def.ParseFromString(serialized_graph)
        tf.import_graph_def(graph_def, name='')

with tf.Session(graph=detection_graph) as sess:
    ops = tf.get_default_graph().get_operations()
    for op in ops:
        for output in op.outputs:
            print(output.name)


Placeholder:0
layer1_conv/weights:0
layer1_conv/weights/read:0
layer1_conv/Conv2D:0
layer1_conv/biases:0
layer1_conv/biases/read:0
layer1_conv/BiasAdd:0
layer1_leaky/alpha:0
layer1_leaky/mul:0
layer1_leaky:0
pool1:0
layer2_conv/weights:0
layer2_conv/weights/read:0
layer2_conv/Conv2D:0
layer2_conv/biases:0
layer2_conv/biases/read:0
layer2_conv/BiasAdd:0
layer2_leaky/alpha:0
layer2_leaky/mul:0
layer2_leaky:0
pool2:0
layer3_conv/weights:0
layer3_conv/weights/read:0
layer3_conv/Conv2D:0
layer3_conv/biases:0
layer3_conv/biases/read:0
layer3_conv/BiasAdd:0
layer3_leaky/alpha:0
layer3_leaky/mul:0
layer3_leaky:0
pool3:0
layer4_conv/weights:0
layer4_conv/weights/read:0
layer4_conv/Conv2D:0
layer4_conv/biases:0
layer4_conv/biases/read:0
layer4_conv/BiasAdd:0
layer4_leaky/alpha:0
layer4_leaky/mul:0
layer4_leaky:0
pool4:0
layer5_conv/weights:0
layer5_conv/weights/read:0
layer5_conv/Conv2D:0
layer5_conv/biases:0
layer5_conv/biases/read:0
layer5_conv/BiasAdd:0
layer5_leaky/alpha:0
layer5_leaky/mul:0
layer5_leaky:0
pool5:0
layer6_conv/weights:0
layer6_conv/weights/read:0
layer6_conv/Conv2D:0
layer6_conv/biases:0
layer6_conv/biases/read:0
layer6_conv/BiasAdd:0
layer6_leaky/alpha:0
layer6_leaky/mul:0
layer6_leaky:0
pool6:0
layer7_conv/weights:0
layer7_conv/weights/read:0
layer7_conv/Conv2D:0
layer7_conv/biases:0
layer7_conv/biases/read:0
layer7_conv/BiasAdd:0
layer7_leaky/alpha:0
layer7_leaky/mul:0
layer7_leaky:0
layer8_conv/weights:0
layer8_conv/weights/read:0
layer8_conv/Conv2D:0
layer8_conv/biases:0
layer8_conv/biases/read:0
layer8_conv/BiasAdd:0
layer8_leaky/alpha:0
layer8_leaky/mul:0
layer8_leaky:0
m_outputs0/weights:0
m_outputs0/weights/read:0
m_outputs0/Conv2D:0
m_outputs0/biases:0
m_outputs0/biases/read:0
m_outputs0/BiasAdd:0
model_outputs:0

Placeholder:0 и model_outputs:0 - это входы и выходы. Placeholder:0 принимает тензор формы (?,416,416,3), а model_outputs:0 выводит тензор формы (1, 13, 13, 30). Если я обнаруживаю только один объект, как мне получить ограничивающие рамки от тензора model_outputs:0.

Куда я иду не так? Любые предложения приветствуются.

1 Ответ

0 голосов
/ 26 февраля 2019

Вы, кажется, используете python, поэтому вы можете экспортировать модель обнаружения объектов из пользовательского интерфейса customvision (выберите параметры tenorflow):

https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/export-model-python

, который даст вам zip-файл, содержащий:

labels.txt
model.pb
python/object_detection.py
python/predict.py

Поместите все в один каталог, затем просто выполните код:

python predict.py image.jpg

Привет, Престо! Это распечатает список словарей как

{'boundingBox': {'width': 0.92610852, 'top': -0.06989955, 'height': 0.85869097, 'left': 0.03279033}, 'tagId': 3, 'tagName': 'myTagName', 'probability': 0.24879535}

Координаты (относительно верхнего левого угла) нормализованы по ширине и высоте изображения.

Вот главное (не мой код!):

def main(image_filename):
    # Load a TensorFlow model
    graph_def = tf.GraphDef()
    with tf.gfile.FastGFile(MODEL_FILENAME, 'rb') as f:
        graph_def.ParseFromString(f.read())

    # Load labels
    with open(LABELS_FILENAME, 'r') as f:
        labels = [l.strip() for l in f.readlines()]

    od_model = TFObjectDetection(graph_def, labels)

    image = Image.open(image_filename)
    predictions = od_model.predict_image(image)
    print(predictions)

, который вы можете изменить по своему усмотрению. Удачи!

...