Привет всем!
Пытаюсь разобраться с детектированием лиц на изображениях с использованием нейронных сетей.
Где-то на Хабре прочитал, что хорошим детектором является MTCNN, он точный и быстрый.
Я нашёл два его (её?) варианта для фреймворка MXNet.
1:
https://github.com/onnx/models/blob/master/models/...
2:
https://github.com/edmBernard/mtcnn
Оно работает и находит лица.
Но: FPS низкий (6 - 10) и видеокарта загружается только на 10 - 15%, память видеокарты занимается максимум на четверть. Т.е. есть какое-то узкое место, которое мешает использовать мощность GPU на полную. Как его найти, куда копать, в чём может быть причина?
Для тестирования у меня крайне простой код (это код для первого варианта, для второго - аналогичный), как мне кажется, тормозить тут просто нечему:
import time
import cv2
import mxnet as mx
import mtcnn_detector
ctx = mx.gpu()
detector = mtcnn_detector.MtcnnDetector("path_to_model", ctx=ctx)
image = cv2.imread("1920x1080.png")
frame_id = 0
time_deltas: = [1 for _ in range(10)]
while True:
time1 = time.time()
detector.detect_face(image)
time2 = time.time()
td = time2 - time1
time_deltas[frame_id % 10] = td
if frame_id % 10 == 0:
fps = 1 / (sum(time_deltas) / len(time_deltas))
print(fps)
frame_id += 1
GPU: Две штуки GTX 1050Ti, CPU: Xeon E5-2660 v2 @ 2.20GHz, RAM: 32GB
Python 3.6.7, mxnet-cu91mkl, Nvidia driver: 390.48
Ubuntu 18.04