Как улучшить производительность 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.