поток теноров на GPU медленный, плюс еще вопросы - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь сделать обнаружение людей, используя тензор потока.

Вот видео того, что я придумала для

https://youtu.be/93XOujVi-1U

Мои вопросы.1. Я запускаю тензор потока на GPU 1050ti nvidia, и он очень медленный 2. Обнаружение все еще мерцает, но благодаря фильтру Калмана, который я сделал, он сохраняет согласованные идентификаторы, но как я могу сделать обнаружение плавным и продолжает обнаружение без мерцания?

Вот код обнаружения, который я использую

def get_localization(self, image, visual=False):

        """Determines the locations of the cars in the image
        Args:
            image: camera image
        Returns:
            list of bounding boxes: coordinates [y_up, x_left, y_down, x_right]
        """
        category_index = {1: {'id': 1, 'name': u'person'},
                          2: {'id': 2, 'name': u'bicycle'},
                          3: {'id': 3, 'name': u'car'},
                          4: {'id': 4, 'name': u'motorcycle'},
                          5: {'id': 5, 'name': u'airplane'},
                          6: {'id': 6, 'name': u'bus'},
                          7: {'id': 7, 'name': u'train'},
                          8: {'id': 8, 'name': u'truck'},
                          9: {'id': 9, 'name': u'boat'},
                          10: {'id': 10, 'name': u'traffic light'},
                          11: {'id': 11, 'name': u'fire hydrant'},
                          13: {'id': 13, 'name': u'stop sign'},
                          14: {'id': 14, 'name': u'parking meter'}}

        with self.detection_graph.as_default():
            image_expanded = np.expand_dims(image, axis=0)
            (boxes, scores, classes, num_detections) = self.sess.run(
                [self.boxes, self.scores, self.classes, self.num_detections],
                feed_dict={self.image_tensor: image_expanded})

            if visual == True:
                vis_util.visualize_boxes_and_labels_on_image_array(
                    image,
                    np.squeeze(boxes),
                    np.squeeze(classes).astype(np.int32),
                    np.squeeze(scores),
                    category_index,
                    use_normalized_coordinates=True, min_score_thresh=.4,
                    line_thickness=3)

                plt.figure(figsize=(9, 6))
                plt.imshow(image)
                plt.show()

            boxes = np.squeeze(boxes)
            classes = np.squeeze(classes)
            scores = np.squeeze(scores)

            cls = classes.tolist()

            # The ID for car in COCO data set is 3
            idx_vec = [i for i, v in enumerate(cls) if ((v == 1) or (v == 3) or (v == 2)or (v == 4)or (v == 8)and (scores[i] > 0.6))]

            if len(idx_vec) == 0:
                print('no detection!')
                self.car_boxes = []
            else:
                tmp_car_boxes = []
                for idx in idx_vec:
                    dim = image.shape[0:2]
                    box = self.box_normal_to_pixel(boxes[idx], dim, scores[idx])
                    box_h = box[2] - box[0]
                    box_w = box[3] - box[1]
                    ratio = box_h / (box_w + 0.01)

                    if ((ratio < 0.8 or ratio > 0.8) and (box_h > 20) and (box_w > 20)):
                        tmp_car_boxes.append(box)
                        #print(box, ', confidence: ', scores[idx], 'ratio:', ratio)

                    #else:
                        #print('wrong ratio or wrong size, ', box, ', confidence: ', scores[idx], 'ratio:', ratio)

                self.car_boxes = tmp_car_boxes

        return self.car_boxes

1 Ответ

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

Одна из проблем заключается в том, что вы используете дикты подачи в своем входном конвейере, что очень неэффективно.В основном вы переходите с OpenCV C ++ на Python на TensorFlow C ++, который снижает производительность и снижает производительность вашего графического процессора.

К сожалению, у меня нет прямого ответа на вопрос, как решить эту проблему в TensorFlow в сочетании с OpenCV.Я использовал Nvidias TensorRT в прошлом, и он работает очень хорошо.Базовый подход с этой платформой будет следующим:

  1. Модель поезда в TensorFlow
  2. График заморозки в TensorFlow
  3. преобразование Modell в движок TensorRT
  4. ЗагрузитьДвижок TensorRT и логический вывод

Во время этого процесса вы также можете «сбрить» некоторые ненужные части вашей модели для повышения производительности.

В этой ссылке показан другой подход.Он использует какую-то многопоточную многопроцессорную смесь для извлечения видеоданных!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...