Pull to refresh

Comments 21

Возникает пара логичных вопросов:
1) А почему только с OpenVINO сравнение. а с OpenCV нет? Он то как раз умеет на армах инферить. Хотя не помню что там с поддержкой именно на мобильниках.
2) На i7 i9 вы сравнивали производительность с OpenVINO? Мне кажется у вас достаточно медленно.
3) Почему не поддерживаете какой-нибудь ONNX который сейчас по сути стандарт для передачи моделей между разными фреймворками?
4) Я правильно понимаю, что у вас только поддержка базовой архитуктуры? Для того же RPi NEON-совместимое ядро не будет поддерживаться? Так же как GPU-на чипе для Intel?
1) Наболее быстрая реализация OpenCV на процессорах Интел реализовано как раз на OpenVINO (Inference Engine там под капотом). Потому зачем тащить OpenCV, если можно сравнить напрямую.
2) По умолчанию OpenVINO включает распараллеливание на все ядра, как и другие фреймворки. Может поэтому у вас сложилось такое впечатление. Если я не прав — поправьте.
3) У нас на проекте используется два вдижка (Inference Engine и Synet) — взависимости от того что быстрее, то и используется. Потому с целью облегчения своей работы, я ограничился конвертацией из OpenVINO — благо в этот формат так и так надо перегонять.
4) Raspberry Pi поддерживается. Впрочем как и любой ARM с поддержкой NEON.
1) Но вы ставите в минус OpenVINO именно невозможность работать на ARM'ах. Что OpenCV неплохо реализует.
2) OpenVINO ещё оптимизирует свёртки и их последовательность для оптимального использования памяти. Так что интересно именно сравнение производительности.
3) Чем больше форматов, тем больше сеть теряет при перегонке. Например: чтобы выгрузить PyTorch -> TensorRT надо сделать 2 конвертации. Чтобы выгрузить TensorFlow в Google TPU там где-то 3 нужно было. И каждая конвертация режет список возможных слоёв/соединений, и.т.д.
Чем ближе вы к графу исходной сети — тем лучше. Чем дальше вы — тем сложнее вас использовать. Использование ONNX даёт вам всего один хоп до исходной сети. При этом ONNX очень много что поддерживает.
4) Мне кажется что там сопроцессор. Вы поддерживаете именно его? Или разбиваете на процессор + сопроцессор? Просто, например, Caffe2 считал только на сопроцессоре в RPi 3 (была нулевая загрузка проца, по времени получалось раза в полтора быстрее чем ту же сетку инферить на проце простой версией Caffe с его 100% загрузкой). OpenCV, если я правильно помню, инферит на обоих устройствах. Но я не понимаю как они задачи согласуют/раскладывают.
1) Возможно я не прав.
2) Synet тоже оптимизирует свёртки и их последовательность для оптимального использования памяти. Благодаря чему и достигается преимущество в производительности.
3) Согласен. Добавлю в цели :).
4) Под сопроцессором вы встроенный GPU имеете в виду?
2) Собственно я и говорю — что было бы интересно посмотреть сравнение. Оптимизировать свёртки можно разными путями. Может у вас всё сильно лучше вышло.
4) Там есть какой-то FPU (VFP), если я правильно понимаю. И максимальную производительность вроде как вытаскивают с него. Я просто не очень глубоко копал, но заметил что некоторые фреймворки основной процессор почти не грузуили. Читал описание что они вычисления на математическом сопроцессоре гоняют.
2) Скорость кода может катастрофически (до 10 раз) меняться в зависимости от того, влазят расчетные данные в процессорный уеш или нет. Потому любой быстрый алгоритм должен разбивать/сливать исходные данные такми образом, что бы кеш использовался максимально эффективно. В Synet и Inference Engine немного разный подход, но основные принципы совпадают.
4) Не знаю, VFP — вроде как аналог x87 и считается устаревшим в ARMv7 и ARMv8. Везде рекомендуют вместо него использовать NEON. Единственное его преимущество — поддержка FP64. Но почитаю про него по подробнее.
это я только один прочитал Skynet?
На самом деле название произошло от имени компании: Synet = Synesis Network, но ход ваших мыслей мне нравится!
Честно говоря, я не проверял работоспособность под C++Builder. То что проверено: MSVS, GCC, CLANG.
Статик Simd под Win32 вроде сбилдил, поменял макросы и добавил инклюдов в нескольких местах, надо в деле теперь проверить.

C++ Builder 10.3
Под 32-бит Visual Studio обнаружились проблемы с загрузкой моделей. Эти ошибки исправлены.
Некоторые из Intel моделей не конвертируется, license-plate-detection-barrier, person-detection-retail, text-detection, что делать?
Добавить issue на гитхаб. Желательно по каждому конкретному багу.
P.S. text-detection — уже работает. По остальным жду более подробного описания проблемы.
Я не могу вкурить как этот Outputs для text-detection рестанглом на картинке отрисовать в c++

The net outputs two blobs
[1x2x192x320] - logits related to text/no-text classification for each pixel.
[1x16x192x320] - logits related to linkage between pixels and their neighbors.


Подскажите где пример можно найти?
Тут скорее всего надо сегментировать 1-й выход сети. 2-й выход отвечает вроде за направление текста.
Я к тому что я совсем плохо с с++ дружу, только с delphi
Так там просто массив float-32, причем не очень большой. Думаю его можно прекрасно и на delphi обработать (сравнить с порогом, кластеризовать).
Хотелось бы конечно побольше примеров для OpenVino моделей, не только face detector.
Мне нужен пример Text Detection и попроще, я не могу разобраться, я паскаль писарь, и маленько глуповат.
Sign up to leave a comment.

Articles