Эффективный конвейер данных для примера API обнаружения объектов TensorFlow - PullRequest
0 голосов
/ 10 апреля 2019

Я использую пример API обнаружения объектов TF для обнаружения объектов в видео, и кажется, что конвейер данных является узким местом.

После запуска предоставленного примера кода, который делает вывод на одном изображении, который является очень медленным, и инициализирует сеанс после каждого вывода, я выполнил подачу пакетов с использованием конвейера tf-data. Это увеличило скорость примерно в 10 раз по сравнению с одиночным изображением. Тем не менее, во время логического вывода моя загрузка графического процессора примерно на 18% контролируется с помощью nvidia-smi.

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

Здесь я поделюсь двумя подходами, которые я использовал, с соответствующими временами. Пример видео имеет 484 кадра с разрешением 720x1080 с одинаковым размером пакета 128, используемым в обоих случаях.

Подход 1:

sess = tf.Session(graph=load_frozen_graph)

def getBatch(start, end):
    loop from start to end:
        #load one image into a numpy array
    return numpy array

loop over num_batches:
    get_inference = sess.run(tensor_dict, feed_dict:{getBatch(start, end)})

Подход 2:

sess = tf.Session(graph=load_frozen_graph)

dataset = tf.data.Dataset.from_tensor_slices((TEST_IMAGE_PATHS))
dataset = dataset.map(parse_function, num_parallel_calls=8)
dataset = dataset.batch(batch_size)
dataset = dataset.prefetch(1)
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()

sess2 = tf.Session()

while True:
    i = i + 1
    try:
        image_batch = sess2.run(next_element)
        get_inference = sess.run(tensor_dict, feed_dict = {image_tensor: image_batch})
    except tf.errors.OutOfRangeError:
        print("End of training dataset.")
        break

Сравнение времени

Я рассчитал скрипт Python с функцией "time", как time python object_detection.py

| Approach 1      | Approach 2       |
| ----------------| ---------------- | 
|real    2m29.634s| real    0m37.005s|
|user    3m46.984s| user    1m44.916s|
|sys     0m32.404s| sys     0m16.404s|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...