Сбой класса трекера TensorFlow при создании второго экземпляра - сеансы должны быть уникальными?

У меня есть трекер TensorFlow, который я собираю, чтобы он соответствовал стандартному формату OpenCV Tracker. Эти трекеры могут быть использованы так (я заменил вычисления и вещи, которые не используют тензорный поток с ~<this>~):

tracker = cv2.Tracker_create("type")
status_init = tracker.init( initial_frame, bbox)
while True:
    status, frame = camera.read()
    bbox = tracker.update(frame)
    ~<draw bbox onto frame>~
    cv2.imshow("Tracking", frame)
    cv2.waitKey(1)

И вот как я хотел бы структурировать использование моего класса трекера TensorFlow.

ТЕМ НЕ МЕНИЕ! В настоящее время мой код класса выглядит так:

class MyTracker(object):
    'My Tracking class code'

    with tf.Session() as sess:
        print "Session Created!"

        def __init__(self, params):
            ~<non-tensorflow object variables being set>~
            self.sess.run(tf.global_variables_initializer())

        def __del__(self):
            print "Session Closed?"

        def init(self, initial_image, initial_bbox)
            try:
                ~<non-tensorflow calculations and things>~
                self.templates = self.sess.run(self.templates_,
                                               feed_dict={
                                                            ~<vars into tf>~
                                                         })
                return True
            except:
                return False

        def update(self, image):
            try:
                ~<non-tensorflow calculations and things>~
                scores_ = self.sess.run(self.scores,
                                        feed_dict={
                                                    ~<vars into tf>~
                                                  })
                ~<more non-tensorflow stuff>~
                bbox = ~<non-tensorflow things>~
                if ~<stuff>~:
                    new_templates = self.sess.run(self.templates_,
                                                  feed_dict={
                                                             ~vars into tf>~
                                                            })
                ~<yet more non-tensorflow calculations>~
                return True, bbox
            except:
                return False, (0, 0, 0, 0)

Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно иметь возможность создавать несколько трекеров в моем коде одновременно, однако они пытаются использовать один и тот же сеанс, и это вызывает проблему (на самом деле я заменяю старый, надеясь, что это будет мусором). собрал, но я должен иметь возможность иметь два объекта трекера в случае необходимости):

ValueError: Variable conv1/W already exists, disallowed.  Did you mean to set reuse=True in VarScope?

Я хотел бы, чтобы любой экземпляр этого класса создавал свою собственную сессию. Однако вместо того, чтобы использовать обертку "with tf.Session() as sess:" для всех моих функций-членов класса, я попытался просто добавить:

self.sess = tf.Session()

к __init__ функция, чтобы попытаться дать каждому экземпляру свой уникальный сеанс, но у него точно такая же проблема, и, кроме того, я не могу использовать хороший __enter__ а также __exit__ методы, которые приходят с использованием with заявление.

Поскольку в моем тестовом коде в настоящее время я использую только один трекер, я могу просто вызвать мою функцию 'init' для моего объекта трекера с новыми initial_image и initial_bbox, не создавая совершенно новый объект.

ОДНАКО, мне нужно уметь!

Любая помощь с этой надоедливой проблемой была бы очень признательна!

0 ответов

Другие вопросы по тегам