Как улучшить производительность net.forward() для cv2.dnn.readNetFromCaffe(), net.forward, который занимает больше времени (от 7 до 10 секунд / кадр), чтобы получить результат

Я использовал net = cv2.dnn.readNetFromCaffe(protoFile, weightsFile) а затем перебирая живые видеокадры, чтобы получить выходные данные для каждого кадра, используя net.forward(),

Но net.forward() требуется 7-10 секунд для каждого кадра, чтобы дать результат. Пожалуйста, помогите мне, как улучшить производительность (сократить время, необходимое для обработки в net.forward()).

Означает: от шага 1 до шага 2 занимает от 7 до 10 секунд для каждого кадра.

(Step1 и Step2 упомянуты в приведенном ниже коде).

import cv2
import time
import numpy as np

protoFile = "deploy.prototxt"
weightsFile = "iter_10.caffemodel"

inWidth = 300
inHeight = 300

# web camera
cap = cv2.VideoCapture(0)
hasFrame, frame = cap.read()

net = cv2.dnn.readNetFromCaffe(protoFile, weightsFile)
k = 0
while 1:
    k+=1
    t = time.time()
    print("Start time = {}".format(t))
    hasFrame, frame = cap.read()

    if not hasFrame:
        cv2.waitKey()
        print("Wait====>")
        break

    inpBlob = cv2.dnn.blobFromImage(frame, 1.0 / 255, (inWidth, inHeight),
                              (0, 0, 0), swapRB=False, crop=False)


    net.setInput(inpBlob)

    # Step1
    print("before forward = {}".format(time.time() - t))

    output = net.forward()

    # Step2
    #taking close to 7 to 10 seconds for each frame
    print("forward = {}".format(time.time() - t))

1 ответ

Я уменьшаю размер изображения перед тем, как передать его по сети.

# convert the input frame from BGR to RGB then resize it to have
# a width of 750px (to speed up processing)
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
rgb = imutils.resize(frame, width=750)
imageBlob = cv2.dnn.blobFromImage(cv2.resize(rgb, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0))

# apply OpenCV's deep learning-based face detector to localize
# faces in the input image
detector.setInput(imageBlob)
detections = detector.forward()

Модели OpenPose огромны сами по себе. Есть несколько способов повысить эффективность.

1) Попробуйте транковую версию ( .caffemodel, .prototxt).

2) Более низкое разрешение входного блоба. Обратите внимание, что это может значительно снизить точность.

3) Попробуйте другую модель. Вы можете посмотреть на вариант сборки OpenCV с помощью Intel Inference Engine (OpenVINO) и попробовать эту модель: https://github.com/opencv/open_model_zoo/blob/2018/intel_models/human-pose-estimation-0001/description/human-pose-estimation-0001.md. Третий вариант, если только у вас есть Intel CPU или GPU или Movidius Neural Compute Stick.

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