Как запустить обученную модель Yolov3 с использованием графического процессора

#python #tensorflow #object-detection #yolo #custom-object

Вопрос:

Я новичок в области обнаружения объектов DL/реального времени и пытаюсь кое-чему научиться на YouTube. Я посмотрел видео https://www.youtube.com/watch?v=DLngCtsG3bk на youtube об обнаружении пользовательских объектов в реальном времени на yolov3, и я все сделал правильно. Когда я запускаю свой файл python для обнаружения объектов на своем ноутбуке, он работает на процессоре, и я могу получать только 2-3 кадра в секунду. Пожалуйста, может ли кто-нибудь сказать мне, как я могу использовать свой графический процессор для его запуска. Файлы , которые я получил yolov3_training_last.weights , yolov3_testing.cfg и classes.txt . Файл python включен ниже, и когда я запускаю его, как я уже сказал, я получаю низкий fps. Если есть какой-либо способ увеличить его с помощью графического процессора, пожалуйста, научите меня. Заранее спасибо.

Файл Python:

 import cv2
import numpy as np
import time

net = cv2.dnn.readNet('yolov3_training_last.weights', 'yolov3_testing.cfg')

classes = []
with open("classes.txt", "r") as f:
    classes = f.read().splitlines()

cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_PLAIN
colors = np.random.uniform(0, 255, size=(100, 3))

# used to record the time when we processed last frame
prev_frame_time = 0
 
# used to record the time at which we processed current frame
new_frame_time = 0

while True:
    _, img = cap.read()
    height, width, _ = img.shape

    blob = cv2.dnn.blobFromImage(img, 1/255, (416, 416), (0,0,0), swapRB=True, crop=False)
    net.setInput(blob)
    output_layers_names = net.getUnconnectedOutLayersNames()
    layerOutputs = net.forward(output_layers_names)

    boxes = []
    confidences = []
    class_ids = []

    for output in layerOutputs:
        for detection in output:
            scores = detection[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]
            if confidence > 0.95:
                center_x = int(detection[0]*width)
                center_y = int(detection[1]*height)
                w = int(detection[2]*width)
                h = int(detection[3]*height)

                x = int(center_x - w/2)
                y = int(center_y - h/2)

                boxes.append([x, y, w, h])
                confidences.append((float(confidence)))
                class_ids.append(class_id)

    indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.2, 0.4)

    if len(indexes)>0:
        for i in indexes.flatten():
            x, y, w, h = boxes[i]
            crop_img = img[y:y h, x:x w]
            (B, G, R) = [int(x) for x in cv2.mean(crop_img)[:3]]
            roi_face= img[y: y  h, x:x w]
            roi_face = cv2.blur(roi_face,(20,20))
            img[y: y  h, x: x  w]=[0,0,0]
            img[y: y  h, x: x  w]=cv2.add(roi_face, img[y: y  h, x: x  w])
            label = str(classes[class_ids[i]])
            confidence = str(round(confidences[i],2))
            color = colors[i]
            cv2.rectangle(img, (x,y), (x w, y h), color, 2)
            cv2.putText(img, label   " "   confidence, (x, y 20), font, 1, (255,255,255), 2)

    
    font = cv2.FONT_HERSHEY_SIMPLEX
    # time when we finish processing for this frame
    new_frame_time = time.time()
 
    # Calculating the fps
 
    # fps will be number of frame processed in given time frame
    # since their will be most of time error of 0.001 second
    # we will be subtracting it to get more accurate result
    fps = 1/(new_frame_time-prev_frame_time)
    prev_frame_time = new_frame_time
 
    # converting the fps into integer
    fps = int(fps)
 
    # converting the fps to string so that we can display it on frame
    # by using putText function
    fps = str(fps)
 
    # putting the FPS count on the frame
    cv2.putText(img, fps, (7, 70), font, 3, (100, 255, 0), 3, cv2.LINE_AA)

    cv2.imshow('Image', img)
    key = cv2.waitKey(1)
    if key==27:
        break

cap.release()
cv2.destroyAllWindows()
 

Ответ №1:

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

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

Ваш другой вариант-использовать Pytorch , для чего вам снова нужно иметь правильное оборудование и программное обеспечение.

Другой способ-создание модели с нуля с использованием Keras и PlaidML

Комментарии:

1. У меня есть GTX 1650 и Intel Core i7 9750H. Пожалуйста, не могли бы вы предоставить ссылку или рассказать мне, как я могу это сделать. У меня в ноутбуке есть tensorflow.

2. Следуйте приведенному здесь руководству, в котором показано, какое программное обеспечение вам необходимо установить

3. Сэр, у меня уже есть все они, как я уже сказал. Просто я хочу знать, где я могу найти файл python, который работает с версией GPU, и нужно ли мне что-то делать, например, преобразовать мой файл весов в другой файл или и т. Д. Главный вопрос: Как я могу запустить обнаружение объектов в реальном времени с помощью своих файлов?

4. И есть интересный пример [здесь] ( machinelearningmastery.com/… ) , который использует keras и yolo3 для обнаружения. удачи