Заметка о различных инженерных архитектурах, доступных для развертывания решения компьютерного зрения.

Недавно мой коллега обсуждал со мной различные архитектуры, которые он может использовать для развертывания решения Computer Vision. Мы сели и составили список, которым я подумал, что было бы неплохо поделиться здесь. Пожалуйста, поделитесь своими мыслями.

Мы говорили о наилучшем способе развертывания решения Computer Vision на основе глубокого обучения. Для этого нужно было рассмотреть ряд плюсов и минусов, и вот список различных архитектур, доступных для инженеров.

Введение

Методы компьютерного зрения можно в целом сгруппировать по различным вариантам использования, таким как классификация изображений, обнаружение объектов, восприятие глубины, создание изображений и т. Д. Такие требования, как оптическое распознавание символов, распознавание лиц, обычно помещаются в один из этих блоков. В этом документе перечислены различные архитектуры, которые можно использовать для развертывания решений для этих вариантов использования.

Вообще говоря, решения могут быть спроектированы с использованием одного из следующих подходов. Для каждого решения есть компромисс между стоимостью и производительностью, и вы можете выбрать то, что подходит именно вам.

  1. Запуск на ПК
  • ЦП против графического процессора

2. Централизованная обработка видеопотока

  • Выделенный сервер
  • Облачные процессоры, облачные графические процессоры, облачные виртуальные процессоры
  • Готовые решения

3. Варианты граничных вычислений

  • Интел ОпенВино
  • Qualcomm СНПЕ

Более того, здесь я разделю весь процесс Computer Vision на две части. Один из них - обучение модели, а другой - вывод модели. Наиболее интересные аспекты происходят в обеих этих областях. Моя дискуссия здесь ограничивается выводом по большей части. Кратко коснусь и тренинга.

Вне рамок: Обсуждение достоинств/недостатков отдельных алгоритмов/моделей выходит за рамки этого обсуждения. Если такие модели/алгоритмы не подходят для конкретной архитектуры, я воздержусь от обсуждения сравнения моделей/алгоритмов. Другими словами, если вы хотите узнать сравнение Inception и Resnet, то этот документ не для вас.

Значение терминов

· Классические алгоритмы компьютерного зрения: я включаю в это все алгоритмы неглубокого обучения. Будь то изменение цветового пространства или распознавание образов, если это не основано на глубоком обучении, я включаю их в определение «классического».

· Модели глубокого обучения: независимо от используемой для их построения структуры (например, Pytorch, Tensorflow или простой C++), если модель использует подходы на основе персептрона и CNN, я буду называть их моделями глубокого обучения. Будь то поверхностная сеть или сверхглубокая сеть, которую вы написали с нуля, для меня все они являются моделями глубокого обучения.

Архитектурный поток

Архитектурные компоненты обучения и логического вывода можно изобразить следующим образом. Подобно любому программному проекту, обучение или разработка отделены во времени от выводов или производства.

Системы на основе классических алгоритмов

Это то, к чему привыкло большинство разработчиков программного обеспечения. В этой архитектуре развертывание означает развертывание кода в производственной среде.

Системы на основе глубокого обучения

Заметили различия?

Обучение модели

Классические алгоритмы

Обучение этому подходу — это старый подход, который кажется наиболее естественным для всех разработчиков. В этой архитектуре модель строится после эвристического определения параметров алгоритмов. Артефакт обучения — это код (будь то Python, Java или старый добрый C).

Модели глубокого обучения

Обучение в этом случае также довольно прямолинейно. Выполняете ли вы трансферное обучение или строите сеть с нуля, вы обучаете модель на высокопроизводительном компьютере локально или в облаке. Время обучения можно значительно сократить за счет использования графических процессоров. Обратитесь к этому документу для исследования.

Существуют исследовательские работы, в которых исследуются подходы к параллельным и распределенным вычислениям для глубокого обучения. Но это еще не мейнстрим. Поэтому я не буду обсуждать их здесь. Кроме того, основное внимание в этом документе уделяется умозаключениям.

Вывод модели

Какую бы технологию мы ни использовали, есть место, где изображение захватывается и преобразуется в матрицу цветового пространства. (RGB, CMY и т. д.). Это числовое представление, которое позволяет мониторам отображать захваченную информацию. И Inference — это осмысление этих чисел.

Существует множество способов выполнения логических выводов для решений Computer Vision. Выбор аппаратной архитектуры оказывает большое влияние на капитальные затраты, эксплуатационные расходы и качество решения. Тщательная оценка этих параметров жизненно важна для понимания выгоды ценности для потребителя.

Давайте на мгновение посмотрим, как данные изображения нуждаются в выводе. Автономная обработка изображений (фотографии, загруженные на облачный диск и т. д.) и обработка в более позднее время или обработка в реальном времени, когда видеокадры с камеры постоянно обрабатываются. Какими бы ни были ваши бизнес-требования, вам необходимо оценить финансовые последствия для создания успешного продукта.

Существует множество способов спроектировать продукт. Каждый подход имеет технические и финансовые последствия. Я захватываю некоторые из них здесь.

Пейзаж

Классические методы обработки изображений

Локальный логический вывод

В этом сценарии камера напрямую подключена к машине, на которой выполняется код. Это обеспечивает большую гибкость в управлении аппаратным и программным обеспечением, но неизбежно ограничивается аппаратными возможностями хост-компьютера. Камера не может быть слишком далеко от главного компьютера по практическим соображениям. Представьте себе провод камеры длиной 200/300 метров, чтобы можно было распознавать лица пассажиров. Потоковая передача видеокадров через Интернет решает эту проблему, но добавляет дополнительные сложности. Кроме того, он не очень хорошо масштабируется, когда необходимо проанализировать несколько каналов с камер. Ограничения ЦП неизменно достигаются довольно быстро.

Облако

Облако предлагает большое упрощение по сравнению с локальными машинами. Однако облако не является «бесплатным». Это, конечно, доступно, но не бесплатно. И это может быть даже не дешево. Вы должны тщательно создавать свои лямба-функции и т. д., чтобы обеспечить оптимальное время отклика.

Кроме того, при обработке видеокадров необходимо учитывать сетевые задержки. Ваша камера может быть расположена на вашем переднем Porsche. Но если облачный сервер работает в центре обработки данных в нескольких сотнях километров, то для вашего решения необходимо учитывать задержки в сети.

Методы глубокого обучения

Вообще говоря, модель, основанная на глубоком обучении, обеспечивает лучшую точность для ваших моделей. Однако модели глубокого обучения также медленны, требовательны к процессору и памяти. В отрасли существует несколько подходов к их решению и созданию красивого решения.

Локальные процессоры

Решение для глубокого обучения можно запустить на том же компьютере, к которому подключена камера. Это отлично подходит для нишевого набора действий, когда изображение не может покидать компьютер (возможно, по юридическим причинам или по причинам конфиденциальности). В этом случае масштабирование становится проблемой. Из-за того, что модель глубокого обучения сильно загружает ЦП, добавление второй и третьей камеры экспоненциально увеличит затраты.

Локальные графические процессоры

Графические процессоры отлично подходят для сокращения времени вычислений для моделей глубокого обучения. Они почти волшебным образом улучшают производительность во время выполнения. Обратите внимание, что графические процессоры не влияют на производительность алгоритма. Они влияют только на производительность во время выполнения.

  • Графические процессоры NVIDIA: самые известные из всех графических процессоров. Используя программирование CUDA, вы можете использовать потрясающую мощь GPU. Однако CUDA ограничена графическими процессорами NVIDIA.
  • Графические процессоры Intel. Многие современные ноутбуки имеют интегрированный в материнскую плату графический процессор Intel. Увы, ими никто не пользуется. Я посетил учебную программу Intel по использованию OpenVINO, где тренер признался, что «большинство из них, вероятно, простаивают в вашей системе». Это было примерно в начале 2020 года. С тех пор Intel вложила много миллионов долларов в изменение этого сценария.

Облако

Облачные процессоры и графические процессоры аналогичны тем, которые я описал выше для локальных процессоров. Кроме того, я никогда не слышал о графических процессорах Intel, доступных в облаке. Помимо графических процессоров NVIDIA, в облаке также доступны блоки обработки изображений и тензорные процессоры, которые будут выполнять те же функции, что и GPU, и сокращать время задержки.

Пограничные вычисления

Обрабатываете ли вы глубокое обучение в локальной сети или в облаке, вы неизбежно ограничены мощностью процессора машины. Увеличение мощности процессора обходится экспоненциально дорого. Кроме того, сетевые расходы также увеличивают ваши операционные расходы. Есть ли способ достичь своей цели, не нарушая банк?

Ответ — устройства специального назначения, такие как Intel Movidius (нейронные вычислительные модули), Qualcomm Snapdragon и т. д. В этом сценарии обработка логических выводов переносится на эти устройства специального назначения, подключенные к компьютеру. Они бывают разных форм и конструкций, от встроенных в материнскую плату до USB-накопителей с интерфейсом plug-n-play.

Используя специальное кодирование, вы можете перенести обработку логического вывода вашей глубокой нейронной сети на эти устройства и освободить свой процессор. Эти устройства дешевы, портативны и, что более важно, предлагают возможности граничных вычислений. Таким образом, вместо того, чтобы отправлять весь видеокадр на ЦП в облаке, обработайте кадр на пограничном устройстве и отправьте на главный сервер только результат вывода. Итак, сервер вместо обработки всего изображения просто обрабатывает информацию о том, что на изображении есть машина, кот и мышь. Это значительно проще и очень легко для вашего бюджета. Если в случае повреждения граничного устройства, его замена также не будет слишком дорогой.

Но есть одна загвоздка. Эти устройства Edge не способны обрабатывать любую случайную нейронную сеть, которую вы могли бы себе представить. Они поддерживают предварительно определенный список сетей, таких как Inception, YOLO и т. д. Как разработчик, у вас есть свобода выполнять трансферное обучение и обучать их выбранным вами объектам. Но если вы хотите создать собственную сеть с нуля, вам, возможно, придется пойти на некоторые компромиссы в отношении функций активации, типов слоев и т. д. Тем не менее, это динамично развивающаяся область, и конкуренция побуждает компании внедрять инновации быстрее. Лично я делаю ставку на то, как будет развиваться область компьютерного зрения.

Общие компромиссы

Отзывчивость и стоимость

Независимо от выбранной вами архитектуры, всегда будет компромиссное решение в отношении скорости отклика и затрат. Я видел, как многие люди не знали об этом моменте. Итак, позвольте мне написать это здесь.

Видеопоток представляет собой последовательность изображений. Каждая видеокамера имеет частоту кадров. Частота кадров — это количество изображений, снятых в секунду. Чем выше частота кадров, тем реалистичнее движение объектов на экране. 24 кадра в секунду, и вы получаете реалистичное действие, которое мы видим в телевизорах и фильмах. Для вас это означает, что при обработке видеокадров мы должны обрабатывать 24 изображения в секунду. Теперь в сетях глубокого обучения, требовательных к ЦП, обработка одного кадра занимает 3–4 секунды. Таким образом, к моменту обработки одного кадра в очереди уже находится 24*3–1 = 71 кадр. Через несколько секунд вы обрабатываете кадр, который устарел более чем на несколько минут. Ваше решение больше не в режиме реального времени. Переход на GPU сократит время обработки до менее секунды, но это не 1/24 секунды (по крайней мере, на момент написания этой статьи). Независимо от того, выбираете ли вы устройства CPU, GPU, VPU, TPU или Edge, эта проблема остается. Один из подходов состоит в том, чтобы обрабатывать только 1 кадр из каждых n и пропускать остальные. Если вы правильно выбрали архитектуру (учитывая все варианты, описанные выше), ваше n может быть довольно маленьким и почти реальным.

Выбор оборудования

Выбранное вами оборудование повлияет на ваше решение в большей степени, чем просто стоимость. Выбор между графическим процессором, процессором, облачным хранилищем и периферией также зависит от менеджеров по продуктам. Почему? В разделе, посвященном граничным вычислениям, я упомянул о компромиссах, связанных с выбором алгоритма. Эти варианты влияют на точность и эффективность модели. Именно здесь менеджеры по продукту должны вмешаться и взвесить допустимую величину потери точности.

Есть еще одна загвоздка. После того, как вы выберете свою платформу (ЦП, ГП или ВП), довольно сложно перенести ее на другую. Платформы, языки и внутренности просто несовместимы друг с другом. OpenCL утверждает, что обеспечивает интероперабельность, но еще не выполнил свое обещание. Эти нюансы необходимо тщательно учитывать при принятии архитектурных решений.