Автор: Виктор Ерухимов, исполнительный директор Itseez, председатель рабочей группы OpenVX
Группа «Хронос» 18 ноября 2013 г.
представлен предварительная спецификация стандарта OpenVX 1.0 для компьютерного зрения.
Поскольку Итсиз был одним из инициаторов этой деятельности и активно участвовал в создании спецификации, мы решили рассказать аудитории Хабрахабра об этом стандарте.
Зачем вам нужен OpenVX? Когда несколько лет назад инженеры Itseez начали работать над компьютерным зрением на мобильных платформах, они были поражены тем, насколько медленными были алгоритмы процессоров мобильных телефонов по сравнению с настольными компьютерами, к которым все привыкли в то время.
Простая функция изменения разрешения изображения (cv::resize) может занять больше 20 миллисекунд, практически не оставляя времени для обработки видео в реальном времени (функция, обрабатывающая 30 кадров в секунду, должна выполняться примерно за 33 мс на кадр).
Например, используя НЕОН оптимизации, cv::resize можно ускорить на ARM более чем в 7 раз (см.
1 ]).
Стало очевидным, что возникла необходимость в более эффективном взаимодействии кода и SoC , причем не только с центральным процессором, но и со всеми доступными ускорителями, включая GPU, ЦСП , ASIC , ПЛИС .
Ни одна компания не решит эту проблему в одиночку, поэтому Itseez вместе с NVIDIA обратились к Хронос Групп с предложением создать стандарт компьютерного зрения, представляющий собой Hardware Abstraction Layer (HAL), то есть интерфейс, функции которого будут вызываться алгоритмами высокого уровня, а релиз будет оптимизирован под вычислительную архитектуру.
Примеры стандартов от Хроноса - OpenGL И OpenCL , — решить эту задачу для графики и общих вычислений соответственно.
Предложение поддержало большое количество компаний, и была создана рабочая группа, председателем которой был избран сотрудник Itseez. В разработке стандарта участвуют лидеры отрасли (см.
ниже).
Благодаря такой сильной поддержке, которую получила идея OpenVX, она может по-настоящему изменить отрасль, сделав разработку приложений компьютерного зрения проще, чем когда-либо!
Стандарт был создан для ускорения алгоритмов компьютерного зрения, прежде всего, на мобильных и встраиваемых архитектурах.
Архитектура OpenVX
OpenVX — это C API двух уровней: непосредственный режим и графический режим.
Первый — это отдельные функции, очень похожие по структуре на примитивы из OpenCV .
Все функции имеют эквивалент в OpenCV, в основном в модуле.
imgproc .
Верхний уровень позволяет описать алгоритм компьютерного зрения в виде ориентированного графа, где каждому узлу соответствует функция.
Для каждой функции немедленного режима существует эквивалентный узел графа.
Граф полностью указывается перед выполнением.
Пользователь может определить свою функцию через обратный вызов C API и включить ее в граф (пользовательские узлы, см.
пользовательские узлы в примере стереомашинного зрения ниже).
Оба уровня API работают с контейнерами для изображений, внутренняя структура которых не указана — пользователь оперирует идентификаторами:
Таким образом, эти контейнеры непрозрачны, что дает большую свободу реализации.typedef uintptr_t vx_reference; typedef vx_reference vx_image;
Распределение изображений и узлов графа между потоками и ускорителями практически не контролируется стандартом и, соответственно, остается на усмотрение разработчика, реализующего стандарт. Эта архитектура может хранить изображения и запускать функции OpenVX на ускорителях, что может значительно ускорить работу алгоритма или сделать его более энергоэффективным.
В целом Graph API открывает большие возможности для оптимизации.
Например, вы можете выполнять несколько операций параллельно на разных ядрах или разных ускорителях.
При определенных условиях можно одновременно выполнять два последовательных узла графа в одном потоке, выполняя вычисления на лету, или обрабатывать изображение порциями (тайлинг) с целью повышения эффективности кэширования.
Поддержка тайлинга для пользовательских узлов реализована с помощью расширения тайлинга OpenVX 1.0 — интерфейса, одобренного группой OpenVX, но не обязательного для реализации в OpenVX 1.0. В будущем не исключено, что Tiling API станет обязательной частью будущих версий стандарта.
OpenVX и другие инструменты Open-double-caps
OpenVX с самого начала разрабатывался для эффективного взаимодействия с OpenCV: обмен данными максимально свободный от накладных расходов, очень схожие спецификации функций.
Возможно, в будущем OpenCV будет использовать OpenVX для ускорения на ряде платформ.
Но поскольку OpenVX 1.0 все еще находится в разработке, а OpenCV 3.0 будет архитектурно отличаться от предыдущих версий, сейчас сложно описать модель взаимодействия.
Во время работы над OpenVX мы получили много вопросов о взаимодействии OpenVX и OpenCL .
Например, почему OpenVX не может быть просто набором ядер OpenCL? Мы решили сделать так, чтобы OpenVX не требовал зависимости от OpenCL, поскольку существуют ускорители, которые не поддерживают OpenCL, но способны выполнять некоторые функции OpenVX. Однако OpenVX предназначен для реализации OpenVX на OpenCL.
Как OpenVX может повлиять на отрасль
Многие разработчики технологий компьютерного зрения сейчас при работе ориентируются на одну платформу, выбирая алгоритм и оптимизируя его реализацию под одну систему.
Учитывая, что OpenVX широко поддерживается на всех платформах, усилия по адаптации алгоритма к другой платформе будут минимальными.
Это приведет к появлению в ближайшем будущем крутых приложений компьютерного зрения для мобильных телефонов и планшетов.
В долгосрочной перспективе OpenVX будет стимулировать производителей чипов создавать ускорители, ориентированные на OpenVX. Это радикально ускорит развитие технологий компьютерного зрения и позволит использовать более умные приложения, о которых в настоящее время и не снилось, например, дополненную реальность на носимых устройствах и функции безопасного вождения, доступные на автомобилях эконом-класса.
.
Как я могу повлиять на OpenVX? Предварительная версия спецификации уже опубликована ( прямая ссылка на документ ).
Его цель — собрать отзывы сообщества и, если возможно, включить их в окончательную спецификацию OpenVX 1.0, которая, как ожидается, будет выпущена не позднее середины 2014 года.
Теперь вы можете оставлять сообщения на Форум , bugzilla будет доступна в будущем.
Мы призываем всех будущих пользователей OpenVX взглянуть на стандарт! И, конечно же, мы приглашаем всех любителей компьютерного зрения присылать нам свое резюме по адресу: [email protected] ! Всем удачи и быстрых алгоритмов! Ссылки [1] Кари Пулли, Анатолий Бакшеев, Кирилл Корняков, Виктор Ерухимов: Компьютерное зрение в реальном времени с OpenCV. Коммун.
ACM (CACM) 55(6):61–69 (2012 г.
) .
Теги: #openvx #компьютерное зрение #itseez #нижний новгород #OpenCV #opencl #Обработка изображений
-
Так Много Удобства У Вас Под Рукой Онлайн
19 Oct, 24 -
Функция Распределения
19 Oct, 24 -
Содалит: Попытка Оседлать Мечту
19 Oct, 24 -
Вы Работаете С Фрилансерами?
19 Oct, 24 -
Метрики Рекомендательной Системы Imhonet.ru
19 Oct, 24 -
История О Том, Как Sql Экономит Время
19 Oct, 24 -
Сброс Стилей С Помощью Css Reset
19 Oct, 24