Pull to refresh

Comments 14

Делаю сейчас проект, в котором нужно делать определение лиц, железо десктопное, но при этом процессор крайне желательно не занимать ничем. Так что попробовал разные варианты, в том числе ваш Neural Compute Stick 2. Тестировал на картинках 800x533

Core i5 9400F — 59ms
Core i7 7500U — 108ms
Core i7 3770 — 110ms
GeForce GTX 1060 6Gb — 154ms
GeForce GTX 1050 2Gb — 199ms
Core i7 3770, ubuntu 18.04 with OpenCV from OpenVINO — 67ms
Intel Neural Compute Stick 2, ubuntu 18.04 with opencv from OpenVINO — 349

Короче решил на видеокартах остановиться, чтобы поцессор не нагружать. Intel Neural Compute stick ваш все-таки больше для всяких Raspberry Pi, насколько я понял.

Крайне удивило, что процессоры так хорошо работают по сравнению с видеокартами.
Еще не понял, почему старый Corei7 3770 работает горазо лучше через OpenVino. Вы там какое-то графическое ядро к вычислениям подключаете?

Рекомендую посмотреть в сторону асинхронного запуска сети на стике. Для face detection сети из OpenCV (SSD, 300x300), синхронное использование стика даёт около 26FPS, асинхронное — 53FPS (смотрите https://github.com/opencv/opencv/pull/14516).


Не рассматривали вариант с iGPU? С half precision floating point (DNN_TARGET_OPENCL_FP16 в терминах OpenCV) обычно быстрее чем CPU.


Еще не понял, почему старый Corei7 3770 работает горазо лучше через OpenVino. Вы там какое-то графическое ядро к вычислениям подключаете?

У OpenVINO внутри mkl-dnn для CPU. Все вычисления честно на CPU.

Спасибо! Попробую.

А можно как-то в докере к примеру запустить ваш OpenCV? У меня более-менее современный процессор с GPU только на рабочем ноуте, а там федора.
Выделение лиц на full-hd видеопотоке с openvino for fpga в асинхронном режиме выдает 4.35ms на openvino-вском примере выделения лиц.
Что-то не верится, скорее всего там скейлится картинка к меньшему размеру. Для моего случая меньше 300x300 очень плохо работает, на 300x300 конечно быстрее раза в 3 работает.
./interactive_face_detection_demo -i /var/xlam/test_faces.mp4 -m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/face-detection-adas-0001/FP16/face-detection-adas-0001.xml -m_ag /opt/intel/computer_vision_sdk/deployment_tools/intel_models/age-gender-recognition-retail-0013/FP32/age-gender-recognition-retail-0013.xml -d HETERO:FPGA,CPU -async -d_ag CPU

Видео для примера взято было из ютуба (самая проблема найти видео без всяких демонстраций распознавания). Распознавание пола и возраста тут да, крутятся на процессоре. Полностью на FPGA запустить не вышло, т.к. прямую обработку видео оно не умеет. Использовалось OpenVino 2018 R5. Одна из плат, которую мучал, разработана в РФ.

Попробую разобраться, что там делается, было бы неплохо производительность повысить. Мне максимум около 60FPS, я обрабатываю лайввью с зеркалки canon 200D, через библиотеку gphoto2 можно запросить текущую картинку в jpeg, если в цикле без ограничений читать, то около 60 кадров в секунду получается.

Очень странные результаты. Напишите хотя бы что за алгоритмы такие, которые на GPU выполняются почти в 3 раза хуже, чем просто на CPU. Даже если учесть время на передачу данных, всё равно очень странно.

Так посмотрите, какие у меня GPU — очень слабенькие по сравнению с тем, что используется в тестах на сайте нвидии. У меня код вот на этом примере основан — https://github.com/hybridgroup/gocv/blob/master/cmd/ssd-facedetect/main.go


Только там размер картинки image.Pt(128, 96) — у меня 800x533 в приведенных тестах было. Но там от размера картинки соотношение скоростей не сильно зависит. Модель caffe взял ту же, из примера.


Инициализация, один раз делается


    d.net = gocv.ReadNet(protoFile, modelFile)
    if d.net.Empty() {
        return nil, fmt.Errorf("Error loading model and proto files")
    }

    if err := d.net.SetPreferableBackend(gocv.NetBackendDefault); err != nil {
        return nil, errors.Wrap(err, "Set GPU backend")
    }

    targetType := gocv.NetTargetCPU
    if _, err := os.Stat("/proc/driver/nvidia/gpus"); err == nil {
        targetType = gocv.NetTargetFP16
    }

    if err := d.net.SetPreferableTarget(targetType); err != nil {
        return nil, errors.Wrap(err, "Set Target type")
    }

И поиск:


    W := float32(img.Cols())
    H := float32(img.Rows())

    blob := gocv.BlobFromImage(img, 1.0, image.Pt(300, 300), gocv.NewScalar(104.0, 177.0, 123.0, 0), false, false)
    defer blob.Close()

    d.net.SetInput(blob, "data")

    detBlob := d.net.Forward("detection_out")
    defer detBlob.Close()

    detections := gocv.GetBlobChannel(detBlob, 0, 0)
    defer detections.Close()

    rects := []image.Rectangle{}
    for r := 0; r < detections.Rows(); r++ {
        confidence := detections.GetFloatAt(r, 2)
        left := detections.GetFloatAt(r, 3) * W
        top := detections.GetFloatAt(r, 4) * H
        right := detections.GetFloatAt(r, 5) * W
        bottom := detections.GetFloatAt(r, 6) * H

        if confidence < 0.8 {
            continue
        }

        r := image.Rectangle{
            Min: image.Point{int(left), int(top)},
            Max: image.Point{int(right), int(bottom)},
        }.Canon()

        if (r.Min.X < 0 && r.Max.X < 0) || (r.Min.Y < 0 && r.Max.Y < 0) || (float32(r.Min.X) > W && float32(r.Max.X) > W) || (float32(r.Min.Y) > H && float32(r.Max.X) > H) {
            continue
        }
        rects = append(rects, r)
    }
Спасибо за релиз!
Расскажите, почему перестали развивать cuda модули? Ведь сейчас обработка изображений все больше переезжает на gpu.

Вопрос в поддержке. CUDA модули были перенесены в opencv_contrib, в котором требования к изменениям более гибкие, чем в главном репозитории. Тестирование проводится, а вот развитие — уже на стороне заинтересованных пользователей. С 4.0.0 тем не менее 12 коммитов есть (git rev-list -v --no-merges d511587..2c32791 modules/cud*).


BTW, для dnn этим летом, вероятно, появится поддержка CUDA backend (в рамках Google Summer of Code): https://github.com/opencv/opencv/issues/14585.

UFO just landed and posted this here

Хотелось бы уточнить, пробовали ли запускать OpenCV с OpenCL на Mali? То есть вопрос про то, поддерживает ли OpenCV Mali вообще или наблюдается проблема с этой версией?

UFO just landed and posted this here
Sign up to leave a comment.