Глазами компьютера: как работает машинное зрение
Идея научить компьютер «видеть» мир глазами человека преследует нас с появления первых ЭВМ. Сейчас подобные технологии не только появились, но и бурно развиваются.
На смену человеческому глазу приходит автоматизированный визуальный контроль в режиме 24/7 с использованием технологий компьютерного зрения Computer Vision, CV. Это технологии на основе искусственного интеллекта, которые с помощью нейронных сетей позволяют находить, отслеживать, классифицировать и идентифицировать объекты, извлекать данные из изображений и анализировать полученную информацию.
В русскоязычной литературе принято различать машинное (техническое) и компьютерное зрение. Машинное зрение — это сфера применения компьютерного зрения для промышленности и производства, а компьютерное зрение — общее название набора технологий.
Первые попытки заставить компьютер «видеть» относятся к концу 50-х гг XX века: в 1955 году британский ученый Оливер Селфридж опубликовал статью «Глаза и уши компьютера», а в 1958 г. психолог Фрэнк Розенблатт из Корнеллского университета смоделировал на универсальной ЭВМ IBM-740 персептрон — устройство, моделирующее схему распознавания образов человеческим мозгом. Аппаратный вариант персептрона, Mark I Perceptron, был изготовлен в 1960 году и предназначался для распознавания зрительных образов.
Однако лишь в последние годы в связи с синергетическим развитием таких технологий, как машинное и глубокое обучение (Machine/Deep Learning), искусственный интеллект (Artificial Intelligence) и анализ больших данных (Big Data), технологии компьютерного (машинного) зрения, стали находить все больше применений в различных отраслях нашей жизни. Рынок и диапазон применений компьютерного зрения в последние 10-15 лет значительно расширились.
Современные приложения компьютерного зрения все чаще используют для анализа изображений возможности глубокого обучения, а не статистические методы, как раньше. Глубокое обучение благодаря определенному алгоритму — нейронной сети — позволяет системе более точно выполнять анализ, сохранять информацию о каждом проанализированном изображении и с течением времени еще больше повышать точность.
Технически этот процесс разделяется на несколько этапов:
- Сбор данных. Подбираются видеоряд или изображения, которые нейросети необходимо научиться отличать друг от друга. После этого производится очистка и проверка полученных данных.
- Настройка нейронной сети. Выбираются актуальная, подходящая архитектура нейросети и метод машинного обучения. Выбор зависит от того, какая нужна точность, скорость и какая задача перед ней стоит.
- Обучение нейронной сети. Нейросети предоставляются изображения или видео, которое она считывает специальным методом и сравнивает с имеющейся библиотекой данных. Определяются критерии успеха, проводится многократное экспериментирование и тонкая настройка всей цепочки алгоритма.
- Установка сети. Обученная нейросеть внедряется в инфраструктуру заказчика либо в облако, куда поступают изображения, на которых есть уже знакомые объекты: нейронная сеть умеет их считывать.
Сегодня разработчики компьютерного зрения чаще всего используют языки Python или С++, а также специализированные библиотеки (например, OpenCV). Регулярно пополняются датасеты для обучения нейронных сетей, проводятся соревнования для поиска лучших решений.
Конечно, системы визуального контроля включают в себя не только сложное программное обеспечение и компьютер, на котором оно установлено, но и устройства для получения изображения — фото- и видеокамеры, датчики, системы медицинской визуализации и т. п.
По мере роста разрешения оптических систем потенциал машинного зрения также увеличивается, так как вместе с разрешением множится и количество деталей для оценки. Все более и более мелкие объекты могут быть обработаны по шаблонному принципу, что ведет к увеличению нагрузки на процессор, который должен проанализировать значительный массив данных и быстро принять решение о следующем шаге (соответствует/не соответствует, задержать, вернуть в начало и т. д.).
Основные задачи компьютерного зрения:
Идентификация: задача состоит в том, чтобы классифицировать изображение целиком. Для этого на изображении выделяются ключевые области, и по ним происходит классификация: например, с помощью решающих деревьев, или свёрточных нейронных сетей.
Распознавание объектов: на изображении необходимо выделить некоторый набор объектов. На сегодняшний день алгоритмы способны распознавать только заранее заученный набор объектов с достаточно высокой точностью, но не могут классифицировать случайные объекты на изображении. Самым простым способом детекции объектов является скользящее окно R-CNN (англ. Regions with Convulational Neural Network — выделение регионов с помощью свёрточных сетей). Система проходит некоторым окном фиксированного размера по каждому кусочку изображения и применяет к нему простой классификатор, обученный распознавать заранее определенный набор объектов.
Сегментация изображений: задача похожа на предыдущую, но в отличие от нее требуется не окружить найденные объекты рамками, а выделить пиксели, которые этот объект составляют. Сегментация применяется во многих областях, например, в производстве для дефектоскопии, в медицине для первичной обработки снимков, а также для составления карт местности по снимкам со спутников. Одним из типичных способов сегментации является применение модели U-Net, которая представляет собой полносвязную свёрточную сеть, модифицированную так, чтобы она могла работать с меньшим количеством примеров (обучающих образов) и делала более точную сегментацию.
Оценка положения: нужно выделить некоторый каркас объекта (например, скелета, если речь идет о людях) и определить положение этого каркаса на изображении. В зависимости от количества рассматриваемых объектов различают одиночную оценку положения (англ. single-person pose estimation) и множественную (англ. multi-person pose estimation). Различие состоит в том, что во втором случае необходимо также учитывать, что объекты могут накладываться друг на друга. Для выполнения этой задачи сначала обрезается фон, оставляя только изображения непосредственно объектов, а затем для каждого из объектов с помощью свёрточных нейронных сетей выделяются области суставов, которые затем соединяются.
Распознавание символов и текста: с помощью алгоритмов детекции выделяется область с текстом, затем производится непосредственно распознавание текста: например, с помощью алгоритмов сегментации. При этом задачи распознавания отдельного текста и текста, являющегося частью изображения «in the wild» (например, текст на дорожном знаке, номер машины и т. д.), сильно различаются в силу наличия в последнем случае помех, мешающих выделить конкретные буквы. В этом случае может помочь, например, обучение предсказания буквы по остальным буквам в слове. Для распознавания рукописного текста наиболее эффективны рекуррентные нейронные сети (RNN) — это тип нейронных сетей, специализирующихся на обработке последовательностей и способных учитывать предшествующую информацию, то есть обладающие «памятью».
Генерация объектов: задача состоит в том, чтобы по известному набору объектов создавать похожие, но при этом не совпадающие ни с одним из тестовых. Для этого применяют такие архитектуры, как порождающие состязательные сети (англ. Generative adversarial network), построенные на комбинации двух нейронных сетей: одна из них стремится создать объект, а вторая — его отбраковать; или вариационный автокодировщик, обучающийся на плотностях вероятностей исходных данных с целью создать объект похожий на исходный, но не совпадающий с ним.
Анализ видео: так как видео представляет из себя набор изображений одинакового размера, обычно сделанных через разные интервалы времени, то для него применимы все те же алгоритмы. Добавляются такие задачи, как предсказание движения, заключающееся в том, чтобы по набору кадров предсказать положение объекта в следующих кадрах, или более общая задача ситуационной осведомленности (англ. Situation Awarness), когда требуется для каждого объекта на видео определить его положение и статус на всех кадрах.
Технологии компьютерного зрения в наше время переживают бурный рост. Уже сегодня они позволяют сделать нашу жизнь проще и безопаснее, а производство — дешевле и надежнее. По оценкам экспертов, этот рынок будет двигаться в ближайшие годы только в сторону роста, что позволит соответствующим технологиям улучшить как производительность систем, так и качество их работы.
При создании статьи использованы материалы с сайтов:
- https://controleng.ru/tehnicheskoe-zrenie/sistemy-mashinnogo-zreniya/
- https://habr.com/ru/company/jetinfosystems/blog/498294/
- https://habr.com/ru/company/leader-id/blog/529012/
- https://studwood.net/1595907/informatika/ponyatie_kompyuternogo_zreniya_istoriya
- https://rdc.grfc.ru/2021/04/analytics-computer-vision/
- https://nplus1.ru/material/2016/11/04/recurrent-networks
- https://neurohive.io/ru/osnovy-data-science/rekurrentnye-nejronnye-seti/