обнаружение тензорного объекта - множество детекторов в параллельных потоках - PullRequest
0 голосов
/ 26 января 2019

Я хочу обрабатывать несколько видеопотоков в режиме реального времени.Я взял эту суть и внес некоторые изменения.Вот что у меня сейчас:

запускается один раз в основном потоке.self является единственным объектом основного класса:

self.detection_graph = tf.Graph()
with self.detection_graph.as_default():
    od_graph_def = tf.GraphDef()
    with tf.gfile.GFile(model_path, 'rb') as fid:
        serialized_graph = fid.read()
        od_graph_def.ParseFromString(serialized_graph)
        tf.import_graph_def(od_graph_def, name='')

выполняется в каждом потоке.Теперь self является объектом класса, который расширяет Thread:

self.default_graph = self.detection_graph.as_default()
self.sess = tf.Session(graph=self.detection_graph)
self.image_tensor = self.detection_graph.get_tensor_by_name('image_tensor:0')
self.detection_boxes = self.detection_graph.get_tensor_by_name('detection_boxes:0')
self.detection_scores = self.detection_graph.get_tensor_by_name('detection_scores:0')
self.detection_classes = self.detection_graph.get_tensor_by_name('detection_classes:0')
self.num_detections = self.detection_graph.get_tensor_by_name('num_detections:0')

# ...

frame_np_expanded = np.expand_dims(frame, axis=0) 
boxes, scores, classes, num = self.sess.run(
        [self.detection_boxes, self.detection_scores,
        self.detection_classes, self.num_detections],
        feed_dict={self.image_tensor: frame_np_expanded})

# ...

self.sess.close()

Похоже, что он параллелен во время выполнения, но в настоящий момент даже один поток детектора потребляет все 3 ГБ видеопамяти, которые у меня есть, ипрежде чем я получу больше, я хотел бы знать:

  1. Это действительно параллельно или я что-то пропустил?Я начинающий с tf.
  2. Использует ли tf 3 ГБ (или еще больше, если бы у меня было) видеопамяти для всех потоков, или для каждого потока требуются свои собственные 3 ГБ?Если второе, могу ли я переписать код для выполнения первым?
  3. Почему не освобождается память после закрытия сеанса и завершения потока?Я прочитал это , но решения выглядят радикально.
...