Какие задачи хорошо решаются с помощью классического компьютерного зрения
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Горячкин Б.С., Китов М.А.
Значительный рост вычислительной мощности компьютеров и появление новых математических моделей и алгоритмов в последние годы позволило добиться значительного прогресса в области компьютерного зрения . Новые технологии, основанные на машинном обучении , позволяют создавать надежные решения для сложных задач распознавания зрительных образов. Многие из этих решений имеют практические применения на рынке, а потому привлекают все больше инвестиций. Данная статья представляет собой обзор основных подходов к решению задач компьютерного зрения , с акцентом на глубинное машинное обучение и искусственные нейронные сети . Также в статье приведен обзор рыночных показателей в данной области и показано, что рынок компьютерного зрения быстро развивается и имеет серьезные перспективы.
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Горячкин Б.С., Китов М.А.
Распознавание эмоций для адаптации процесса обучения в компьютерной игре Выявление действий на видео с помощью рекуррентных нейронных сетей Оптимизация структуры сверточной нейронной сети с помощью самоконфигурируемого эволюционного алгоритма в одной задаче идентификации Использование сверточных нейронных сетей для распознавания автомобильных номеров. Преимущества и недостатки по сравнению с шаблонным методом i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.Текст научной работы на тему «КОМПЬЮТЕРНОЕ ЗРЕНИЕ»
Горячкин Б. С., кандидат технических наук, доцент, Московский государственный технический университет им. Н.Э. Баумана
Китов М. А., магистр, Московский государственный технический университет им. Н.Э. Баумана
Аннотация: Значительный рост вычислительной мощности компьютеров и появление новых математических моделей и алгоритмов в последние годы позволило добиться значительного прогресса в области компьютерного зрения. Новые технологии, основанные на машинном обучении, позволяют создавать надежные решения для сложных задач распознавания зрительных образов. Многие из этих решений имеют практические применения на рынке, а потому привлекают все больше инвестиций.
Данная статья представляет собой обзор основных подходов к решению задач компьютерного зрения, с акцентом на глубинное машинное обучение и искусственные нейронные сети. Также в статье приведен обзор рыночных показателей в данной области и показано, что рынок компьютерного зрения быстро развивается и имеет серьезные перспективы.
Ключевые слова: Компьютерное зрение, машинное обучение, поиск по шаблону, искусственные нейронные сети, глубинное обучение, рынок систем компьютерного зрения в России.
Abstract: Significant growth in computer computing power and the emergence of new mathematical models and algorithms in recent years has made significant progress in the field of computer vision. New machine-based technologies enable you to create reliable solutions for complex visual image recognition tasks. Many of these
solutions have practical applications in the market, and therefore attract more and more investment.
This article is an overview of the basic approaches to solving computer vision problems, with a focus on deep machine learning and artificial neural networks. The article also provides an overview of market indicators in this area and shows that the computer vision market is developing rapidly and has serious prospects.
Keywords: Computer vision, machine learning, template search, artificial neural networks, deep learning, computer vision systems market in Russia.
Компьютерное зрение (Computer Vision), а также иногда машинное зрение (Machine Vision) - научная область, занимающаяся исследованиями в области автоматической фиксации и разного рода обработки изображений (обнаружение, отслеживание, идентификация) с помощью компьютера.
Одни из первых попыток создать такие системы были предприняты в 1960-х годах, но из-за низкой мощности компьютеров того времени эта область долго не была достаточно исследованной. Современные скоростные процессоры, дешевая память на диске и высококачественные камеры и высокая пропускная способность каналов позволяют добиться значительных результатов в этой области, особенно в связи с последними исследованиями в области машинного обучения и, в частности, нейронных сетей.
Рост качества технологий компьютерного зрения позволил активно их использовать в разных областях промышленности и бизнеса. К примеру, многие современные конвейеры оснащены автоматическими механизмами проверки качества деталей, корректной маркировки, выравнивания деталей и других задач. Примером такого подхода может служить индустрия микрочипов, где камеры автоматически контролируют размещение кремниевых пластин и планировку интегральных схем. Можно перечислить большое количество областей цифровой экономики, в которых применяется современное компьютерное зрение:
• Инфраструктурные и транспортные системы с контролем и балансировкой нагрузки.
Автомобильные системы, в том числе беспилотные автомобили. Беспилотные летательные аппараты, в том числе дроны. Фармацевтика и медицина. Видеоаналитики.
Распознавание человека и предметов. Идентификация лиц. Оценка сцены, времени, места.
Основная цель компьютерного зрения - получение полезной информации из изображения или серии изображений. Задачами могут быть такие, как:
■ калибровка оптических систем, настройка и синхронизация настроек камер,
■ определение движения объектов (Motion Tracking),
■ задачи распознавания объектов,
■ задачи реконструкции сцены (обычно BD-сцены из одного или нескольких 2D-кадров),
■ задачи сравнения изображений и идентификации изменений.
Технологии компьютерного зрения
В некоторых случаях система также может включать средства для искусственной подсветки интересующих объектов, тогда компонент, объединяющий камеры и подсветку, называется оптической системой. От качества оптической системы во многом зависит эффективность работы, так как
многие современные методы используют анализ малых деталей на изображении, для чего требуется его высокая четкость.
Типы оптических систем
Оптические системы обычно классифицируют на одномерные, двумерные и объемные (трехмерные), при этом могут быть исключения, например, различные системы панорамной съемки не всегда легко отнести к одному из этих типов [2].
Классический метод для получения трехмерного изображения -стереозрение (рис. 1).
Изображение с левой камеры Изображение с правой камеры
Рис. 1. Пример работы системы стереозрения
Это метод извлечения информации о дальности объектов от камеры при помощи двух кадров (как правило, снятых с разных камер). Сопоставление таких кадров позволяет оценить расстояние до объектов. Панорамные системы (рис. 2) используются в основном для видеонаблюдения в условиях, где
необходим широкий обзор (например, обнаружение объектов в небе) и в геоинформационных системах (Google Maps и т.д.).
Рис. 2. Панорамная съемка
Еще один способ получить BD-изображение - многокамерные оптические системы, в которых камеры сфокусированы на общем объекте. Такие технологии часто используются, например, для моделирования трехмерной виртуальной реальности.
Существует ряд распространенных программных платформ, позволяющих эффективно реализовывать системы компьютерного зрения. Перечислим некоторые из них:
* PCL - также открытая платформа, позволяющая обрабатывать двумерные и трехмерные изображения. Содержит множество реализованных
алгоритмов разной направленности: оценку характеристик, реконструкцию поверхности, восстановление сцены, поиск соответствий в изображениях и многое другое.
❖ ROS - специализированная платформа для управления робототехникой, включает богатый набор алгоритмов, применяемых в этой области.
❖ MATLAB - высокоуровневый язык программирования общематематического назначения, популярный в академической среде. Содержит большое количество инструментов, упрощающих проведение исследований: от анализа данных и визуализации до создания и внедрения моделей.
❖ CUDA - проприетарная программная разработка компании NVIDIA, специально заточенная для работы с графическими процессорами производства этой компании. Реализует крайне эффективную архитектуру для параллельных вычислений, что делает ее практически незаменимой в любой высоконагруженной системе, обрабатывающей изображения.
Алгоритмы и методы компьютерного зрения можно условно разделить на две группы:
2.Системы машинного обучения, в том числе глубокого машинного обучения (нейронные сети). Это сложные системы, гораздо более требовательные к вычислительным ресурсам и объемам данных, но бурно развивающиеся в последние годы. Системы такого рода частично имитируют человеческие способности к восприятию изображения, и поэтому позволяют извлекать из изображения гораздо более сложную информацию. Такие системы
имеет смысл применять в случаях, когда разбиение задачи и составление пошагового алгоритма крайне трудозатратно или вовсе невозможно.
Подходы классического компьютерного зрения
Существуют следующие основные подходы к решению классических задач [1]:
I. Анализ контуров и градиентов
II. Сопоставление по шаблону
III. Сопоставление по характеристикам (обычно ключевым точкам) Рассмотрим некоторые самые распространенные подходы.
I. Контурный анализ.
Контур - кривая, описывающая границы объекта или его фрагмента. Метод контурного анализа полагается в основном на контуры изображения. Самые распространенные контурные методы - это методы математической морфологии, позволяющие эффективно решать простые задачи (отделение объекта от фона, создание масок объектов, восстановление плохо читаемого текста из отсканированных фотографий и т.д.) (рис. 3).
a. Original fingerprint Ъ. Skeletonized fiiLgequiot
Binary skeletonization. The binary image of a fingerprint, (a), contains ridges tbat are many pixels wide. The skeletonized version, (b), contains ridges only a single pixel wide.
Рис. 3. Обработка отпечатка пальца с помощью контурного анализа
Эти методы имеют ряд важных ограничений:
•S они не могут быть применены, если на изображении невозможно различить контур (из-за природы объектов или просто из-за плохого цветового контраста),
S они не способны адекватно обработать перекрытие одних объектов другими,
S они неустойчивы к шуму, плохая видимость или плохо качество изображение сильно ухудшает качество их работы.
II. Поиск по шаблону, поиск по ключевым точкам
Поиск по шаблону - самый распространенный метод классического компьютерного зрения. Существует несколько его подвидов, например, при поиске простого соответствия исходное изображение сканируется пошагово, и при каждом сканировании происходит расчет доли совпадения данного участка с шаблоном согласно выбранной метрике.
Наиболее важный в этой задаче подход - выделение и сравнение ключевых точек (рис. 4) [3]. Существует несколько классических алгоритмов (например, SIFT, SURF), которые:
3. Позволяют сравнивать дескрипторы на разных изображениях и, тем самым, сопоставлять их фрагменты.
О 250 500 750 1000 1250 1500 1750 2000
Рис. 4. Сопоставление ключевых точек c помощью метода SIFT
На рисунке 5 можно увидеть пример использования метода сопоставления по ключевым точкам для склеивания панорамы из нескольких изображений.
Рис. 5. Склеивание панорамы с помощью метода SIFT
Еще один популярный способ - поиск соответствия на базе областей (корреляционные методы), основанные на смешивании двух указанных выше методов (рис. 6). Это эффективно, когда ключевых точек на изображениях недостаточно, и приходится пользоваться дополнительно пиксельным сравнением.
Перечисленные подходы являются ключевыми для классического компьютерного зрения.
Искусственные нейронные сети: появление, развитие и современное
Нейроны могут влиять на окружающую среду, вызывая действия. Обучение (или присвоение доверия) состоит в нахождении таких весов, с которыми нейронная сеть достигает желаемого результата, например, распознавание эталонного образца. В зависимости от задачи и типа связи нейронов, такое поведение может требовать цепи шагов, каждый из которых нелинейно преобразует активацию предыдущих шагов. Глубокое обучение -обучение сетей с множеством таких шагов.
Неглубокие модели, подобные нейронным сетям, существуют на протяжении многих десятилетий. Модели с несколькими нелинейными слоями нейронов появились в 1960-х - 1970-х годах. Эффективный метод обучения нейронных сетей любой глубины с учителем разрабатывался в 1970-х и был применен к нейронным сетям в 1981 году [5]. Метод называется алгоритмом обратного распространения ошибки. Однако, тренировать глубокие нейронные сети этим методом было непрактично из-за недостаточности доступных вычислительных ресурсов. Такие проблемы стали объектами исследований только в 1990-е. Тогда в основном применялось обучение без учителя, но методы обучения с учителем совершенствовались.
В новом тысячелетии нейронные сети привлекли большое внимание, став в некоторых задачах более точными, чем классические алгоритмы, например, машины опорных векторов. С 2009 года нейронные сети стали активно применять в различных задачах по распознаванию паттернов, и, именно, они впервые достигли сверхчеловеческой точности в ограниченных областях.
Прямые (ацикличные) и рекуррентные нейронные сети успешно применялись во множестве задач. Рекуррентные нейронные сети - самые глубокие, в принципе они являются универсальными вычислительными системами и могут, в теории, обрабатывать и сохранять любые паттерны. В отличие от классических методов, рекуррентные нейронные сети могут обучаться на создание программ, эффективно смешивающих последовательное и параллельное вычисление.
Общепринятая нотация для описания нейронных сетей Топология нейронной сети может изменяться со временем. В определенный момент времени она может быть записана как конечное множество вершин (нейронов) N = и конечное множество Н с N х N направленных взвешенных ребер (связей) между вершинами. Граф прямой нейронной сети - ациклический, граф рекуррентной сети - циклический. Первый (входной слой) - множество входных нейронов. В ациклических нейронных сетях к-й слой (к £ Ы, k > 1) - множество всех вершин и £ N такое,
что существует путь длиной (к - 1) между одним из входных нейронов и одним из нейронов u.
Поведение нейронной сети определяется множеством вещественных параметров (весов) wi (i = 1. n). Сосредоточимся пока на одной эпохе распространения информации, не обращая внимание на обучение и изменение весов. То есть опишем то, что происходит при работе обученной нейронной сети.
В обучении с учителем вектор выходных значений xt нейронной сети можно сравнить с вектором, заданным учителем (вручную, другой сетью или любым другим способом) dt ,при этом разницу между ними можно считать величиной ошибки, например et = (xt - dt)2. Задача обучения -минимизировать эту ошибку с помощью метода градиентного спуска.
Первые нейронные сети, 1940-е
Ранние архитектуры нейронных сетей не обучались (McCulloh & Pitts, 1943). Нейроны в них обладали дискретными весами и напоминали динамическую логическую схему (Рисунок ) [4]. Первые исследования о машинном обучении были опубликованы позже (Hebb, 1949). Первые
нейронные сети - варианты линейных регрессий, существующих в математике еще с XIX века.
Рисунок 7. Возможные схемы работы нейронов, предложенные McCulloh & Pitts
Нейронные сети в 1960-х. Изучение сетчатки глаза В сетчатке глаза кошки были обнаружены простые и сложные клетки. Эти клетки сигнализировали в ответ на некоторые характеристики зрительного образа, например, вертикальное или горизонтальное расположение границ объектов. Сложные клетки реагировали на более сложные паттерны, чем простые клетки. В будущем эти наблюдения стали основой для сверточных нейронных сетей - архитектуры, до сих пор успешно используемой при решении задач распознавания паттернов.
1965: Групповые методы обработки данных. Многослойные сети Алгоритм группового метода обработки данных (group method of data handling) (Ivakhnenko, 1967) позволил создать первую обучающуюся глубокую нейронную сеть типа многослойный персептрон. Нейроны такой сети имели полиномиальные функции активации, и пошагово модифицировались исходя из
результатов регрессионного анализа тренировочных данных, и проверяемых на тестовой выборке, не участвующей в обучении. В таких сетях могло быть несколько слоев. Они широко использовались на протяжении нескольких десятилетий.
1979: Операция свертки. Неокогнитрон Фукусимы
Неокогнитрон (Fukushima, 1979) был первой моделью глубокой нейронной сети, учитывающая нейрофизиологические исследования природы зрения (Рисунок ). Тут впервые вводится сверточный слой, входная матрица которого фильтруется матрицей весов с помощью математической операции свертки. Получившаяся в результате матрица может быть передана последующим сверточным слоям. Был также представлен механизм подвыборки (subsampling), который в последующих сетях будут заменен на выборочные слои (pooling layers). Хотя архитектура модели близка к современной, неокогнитрон не обучается с помощью изменения весов алгоритмом обратного распространения ошибки, вместо этого веса задаются алгоритмами обучения без учителя (корреляции и т.д.) и частично вручную.
j<- visual area--^association area—■
retina - LGB - simple - complex - ¡
wr-or*r - ^-«d« ^ ? .„grandmother v__, r hypercomplex hypercomplex cell ?
I_________I I_________I I_________J
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.Рисунок 8. Схема предположительного устройства неокогнитрона Фукусимы.
1960-1981. Разработка алгоритма обратного распространения
Идея минимизации параметров сложной, нелинейной, дифференцируемой многошаговой модели с помощью градиентного спуска обсуждалась с начала
1960-х, но это часто делалось с помощью якобиана. Такой метод неэффективен для большого количества параметров.
Алгоритм обратного распространения ошибки был впервые опубликован в 1970 году (Linnainmaa, 1970), но без концептуальной связи с нейронными сетями. Превые работы о применении этого метода к нейронным сетям были опубликованы в 1980-х (Werbos, 1981; LeCunn, 1985). Эти исследования сильно повлияли на популярность нейронных сетей как потенциально перспективного метода машинного обучения [4].
1989: Алгоритм обратного распространения ошибки для сверточных
Сверточная нейронная сеть была предложена Яном Лекуном в 1988 году специально для обработки изображений. Лекун ввел два новых типа слоя: сверточный и выборочный, имитирующие действия зрительной коры головного мозга (Рисунок 9-11). Нейронная сеть, содержащая сверточные слои, называется сверточной нейронной сетью. Как и в предыдущем случае, со временем биологические знание и компьютерные технологии разошлись, но сверточные сети доказали свою эффективность, и это один из основных типов современных нейронных сетей.
Сверточный слой использует маску, называемую ядром (kernel), умножаемую последовательно на смежные области предыдущего слоя. Ядро служит фильтром для поиска одного паттерна последовательно во всем слое (Рисунок ). Внутри одного слоя несколько фильтров могут применяться независимо, соответственно увеличивая количество матриц на выходе слоя.
Компьютерное зрение — это область науки, которая занимается задачами, связанными с анализом изображений и видео. Можно считать, что во всех них требуется ответить на вопрос, что изображено на картинке. Несмотря на кажущуюся тривиальность вопроса, ответить на него не так просто.
Как стать спецом по анализу данных
Взгляни на эту картинку. Чтобы ответить на вопрос, что на ней изображено, можно описывать сцену в целом. Понятно, что картинка сделана на улице (вне помещения), где-то в азиатской стране. Кто-то может узнать площадь Тяньаньмэнь в Пекине, если был там раньше.
Реверс малвари
Другой подход — выделять отдельные объекты на изображении. На картинке видно автобус, портрет, крышу, небо и так далее. Можно пойти дальше и говорить про физические свойства отдельных объектов. Например, крыша — наклонная, автобус едет, и он твердый, на стене висит изображение Мао Цзэдуна, ветер дует справа налево (это можно определить по движению флага).
Из примера выше можно заключить, что для ответа на вопрос, что изображено на рисунке, используется весь жизненный опыт. Например, знание о том, что существует ветер (на картинке его нельзя увидеть явно), что такое транспорт. Чтобы ответить на более сложные вопросы, необходимо знать историю Китая. Соответственно, задача заключается не в том, чтобы смотреть на пиксели, а в использовании знаний.
Внутриклассовая изменчивость
Возьмем другой пример. На вопрос, что такое стул, можно ответить первое, что придет в голову. Например, стул — это нечто с четырьмя ножками и спинкой. А как тебе вот такой стул?
Получается, что даже такую вещь, как стул, сложно описать в терминах форм. Стул — это некое концептуальное понятие: что-то, на чем сидят. Можно представить, как сложно объяснить это понятие инопланетному существу, которое не знает даже, что такое сидеть, и не умеет это делать. Прежде чем научить кого-то находить на картинках стул, было бы неплохо, чтобы оно поняло концепцию «сидеть».
Абсолютно то же самое происходит, когда компьютер учат распознавать изображения. В идеале, чтобы он отвечал на вопросы про стулья так же хорошо, как человек, ему нужно понимать концепцию «сидеть».
В науке об искусственном интеллекте существует понятие «ИИ-сложные задачи». Это класс задач, решение которых эквивалентно созданию искусственного интеллекта. Задача компьютерного зрения в общей постановке (ответ на вопрос о том, что изображено на картинке, и на все вопросы про это изображение) считается ИИ-сложной.
Мы показали, что для ответа на вопрос об изображении нужно не просто смотреть, а использовать весь свой жизненный опыт, образование, а иногда и интуицию. К сожалению, «сильный» искусственный интеллект до сих пор не создан. Поэтому наука о компьютерном зрении решает только определенные подзадачи, речь о которых пойдет далее.
Задачи компьютерного зрения
Давай на примерах разберем несколько задач, которые решаются с применением компьютерного зрения.
Первый пример — поиск изображений в интернете. Сейчас существует несколько сервисов, которые позволяют искать картинки. Изначально для поиска использовались текстовые запросы. Некоторое время назад в части из таких сервисов появилась возможность поиска по загруженному изображению. От пользователя требуется загрузить картинку, а сервис будет искать похожие на нее изображения в интернете.
Работает такой поиск следующим образом. Сначала индексируются изображения из интернета. Для них строятся цифровые представления, из них формируется структура данных, по которой можно быстро искать. То же происходит и с пользовательской картинкой — извлекается некое представление о ней, по которому в базе данных ищутся дубликаты или похожие картинки.
Эта задача сложна в структурном смысле. В интернет загружены миллиарды изображений, и использование сложных методов сравнения невозможно, потому что необходима высокая производительность.
Вот несколько других примеров.
Распознавание текста. Необходимо найти изображение текста на картинке и представить его в виде текстовых данных, с которыми можно будет работать, например, в текстовом редакторе. Эта технология широко используется в разных приложениях. В частности, это удобный способ вводить текст в онлайновый переводчик. Достаточно сфотографировать этикетку, и текст на ней будет распознан, а переводчик выполнит перевод.
Биометрия. Для распознавания людей может использоваться изображение лица, радужная оболочка глаза, отпечатки пальцев. Однако в основном компьютерное зрение занимается распознаванием лиц. С каждым годом эта технология работает все лучше и лучше и находит широкое применение.
Видеоаналитика. В мире устанавливается все больше камер: на дорогах для регистрации движения автомобилей или в общественных местах для отслеживания потоков людей и детектирования аномалий (например, оставленные вещи, нелегальные действия). Как следствие, возникает задача анализировать огромный поток информации. Компьютерное зрение помогает в решении этой задачи. Оно позволяет определять номер автомобиля, его марку, нарушает ли он правила дорожного движения.
Анализ спутниковых снимков. Сейчас накоплен огромный массив спутниковых снимков. Используя эти данные, можно решать самые разные задачи: улучшать карты, обнаруживать лесные пожары и другие проблемы, которые видны со спутника. Технологии компьютерного зрения шагнули в последнее время далеко вперед, и с их использованием автоматизируется все больше ручной работы в этой области.
Графические редакторы. Компьютерное зрение позволяет не только распознавать, что изображено на картинке. Оно же дает возможность менять и улучшать изображение. Получается, все, что можно сделать с помощью графического редактора, относится к технологии компьютерного зрения.
3D-анализ. Реконструкция объемных моделей — еще одна задача, решаемая с помощью компьютерного зрения. Например, используя множество изображений, сделанных в данном городе, можно восстановить форму зданий.
Управление автомобилем. В будущем любой автомобиль будет оснащен огромным количеством датчиков: видеокамерами, радарами, стереокамерой. Методы компьютерного зрения помогают анализировать информацию, получаемую с этих датчиков, и лежат в основе систем предотвращения ДТП и все более сложных автопилотов.
«Низкоуровневое» зрение
Методы компьютерного зрения используются для решения задач, которые условно можно разделить на простые и сложные. Сложные задачи отвечают на вопросы, какой объект изображен на картинке, к какому классу он относится. Для решения этих задач чаще всего используются методы машинного обучения.
При решении простых задач производятся манипуляции непосредственно с пикселями, используются эвристики, а методы машинного обучения, как правило, не применяются.
Здесь мы поговорим о задачах «простого», или «низкоуровневого», компьютерного зрения. Они нередко используются как составная часть более сложных задач распознавания. Например, предобработка картинки позволяет алгоритмам машинного обучения лучше понять, что на ней изображено.
Самая популярная библиотека для решения задач «низкоуровневого» компьютерного зрения — это OpenCV. В ней содержится огромное количество алгоритмов, есть интерфейсы для многих языков программирования, в том числе С++ и Python. Другая известная библиотека — skimage, она активно используется в скриптах на Python. В примерах дальше мы будем применять OpenCV.
Представление изображения в памяти компьютера
Изображение в памяти компьютера кодируется попиксельно, и цвет каждого пикселя в зависимости от используемой модели может быть записан по-разному. Самая простая модель — это RGB, в соответствии с которой тремя числами кодируется яркость пикселей в красном, зеленом и синем каналах. Существуют и другие модели, мы поговорим о них ниже.
Арифметические операции
Итак, картинки — это матрицы чисел. В случае с черно-белыми картинками это матрицы размера высота на ширину картинки. В случае с цветной у матрицы появляется еще одна размерность, чаще всего она равна трем.
В OpenCV используется такое же представление матриц, как в библиотеке NumPy. Это значит, что для них можно использовать стандартные арифметические операции, например сложение.
Однако не все так просто: сложение матриц в NumPy не учитывает переполнение. Для изображений переполнение — это нелогичная операция. Если при сложении двух картинок яркость где-то превысила 255, то, как правило, она должна оставаться равной 255, а не превратиться в 4. Пример ниже показывает, как отличается сложение в NumPy и OpenCV.
Для примера возьмем картинку.
Первым делом изображение нужно сделать серым (даже если оно на вид уже в оттенках серого, в файле, из которого мы загружаем, оно обычно сохранено как цветное).
Команда cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) будет неоднократно встречаться в дальнейшем. Она используется для преобразования цветовых пространств, в том числе из RGB в серые картинки. После превращения картинки в серую можно прибавить к ней какое-то число.
Такое преобразование эквивалентно увеличению яркости картинки.
Можно не прибавлять, а умножать на некий коэффициент.
Умножение картинки эквивалентно увеличению ее контрастности. Можно попробовать использовать больший коэффициент (например, 1.8 ).
Именно так и работают алгоритмы изменения яркости и контраста во многих популярных графических редакторах. Однако для этой цели можно использовать и более сложные функции.
Эквилизация гистограммы
Пример более сложного подхода — это эквилизация гистограммы. В данном случае гистограмма — это представление картинки, по которому видно, сколько в ней пикселей той или иной яркости. Ниже показана гистограмма какого-то изображения. Черная линия — это кумулятивная гистограмма, которая отвечает на вопрос, у какого количества пикселей яркость меньше значения x.
Гистограмма до эквилизации и после
В результате эквилизации гистограмма картинки растягивается таким образом, чтобы кумулятивная гистограмма была близка к линейной функции. Выполнить эквилизацию можно следующей функцией:
Если взять нашу предыдущую картинку, то результат будет выглядеть вот так.
Блендинг
Блендинг — еще один пример применения простых арифметических операций к картинкам. Если наша задача — скомбинировать два изображения, то можно попробовать их сложить. Но в таком случае, если объекты наложатся друг на друга, получится каша.
Пусть для одной картинки известно, где расположен объект, а все остальное пространство занимает фон. Тогда можно помещать второй объект туда, где находится фон. В месте, где первый объект накрывается вторым, будет также использоваться второй объект.
Такое объединение требовательно к качеству вырезания картинки. Если по краям неаккуратно обрезан фон, то будет видна некрасивая белая полоса.
Кажется, что научиться аккуратно вырезать объект из фона — сложная задача. Это так, потому что фон неоднородный и недостаточно просто выбросить белые пиксели. Можно воспользоваться хитрым алгоритмом смешивания двух картинок и построить маску таким образом, что ее значение будет тем больше, чем дальше пиксель от белого.
Там, где на исходном изображении располагаются белые пятна, будут браться пиксели со второго изображения, и неаккуратное вырезание объекта будет не так заметно. На картинке выше ты можешь увидеть, как такое простое преобразование помогает избавиться от проблемы.
Существуют более сложные алгоритмы блендинга. В случаях, когда требуется скопировать объект с неоднородным фоном и вставить его в другое изображение, простые методы, смешивающие цвета, не помогают. Методы похитрее используют оптимизацию, чтобы определить, где находится объект, а где — фон. Затем свойства объекта переносятся без изменений, а свойства фона берутся с картинки, на которую вставляется объект.
Цветовые пространства
Пока что мы говорили только о представлении в RGB, но существуют и другие варианты. Например — HSV.
Компоненты этого пространства — тон (hue), насыщенность (saturation) и значение (value). Это пространство позволяет манипулировать цветом и его насыщенностью по отдельности. Тон обозначает цвет пикселя, он закодирован числом от 0 до 360, как угол на цилиндре. Насыщенность принимает значение 0, если картинка серая.
Если мы работаем с картинкой в HSV, то можем легко сделать ее более насыщенной, умножив соответствующий канал на какой-то коэффициент. Попробуем увеличить насыщенность на 50% (коэффициент 1,5).
Каскады Хаара — детектор лиц
Одна из задач, решаемых наукой о компьютерном зрении, — это детекция лиц. Среди первых методов решения наиболее удачный — это каскады Хаара. Применяя этот метод, из картинки можно вычленять достаточно простые признаки. Для этого необходимо использовать несколько прямоугольников.
Каскады Хаара
Пиксели, попадающие в белый прямоугольник, берутся со знаком «плюс», в черный — со знаком «минус». Все значения суммируются, и получается одно число. Прямоугольники и коэффициенты для них выбираются с помощью алгоритма AdaBoost. У лица имеются некоторые паттерны, и в итоге каскад фильтров такого рода показывает, есть ли внутри него лицо или нет.
Сейчас есть методы детекции лиц, превосходящие по качеству каскады Хаара. Тем не менее это простой подход, и он часто встречается в готовом к использованию виде. Если не требуется решать задачу с высоким качеством, а получить детектор нужно быстро и просто, каскады Хаара из библиотеки OpenCV — это отличный вариант.
Сегментация
Задачу сегментации в общем случае решить тоже несложно. Один из способов — отрезать пиксели выше какого-то порога и назначить их объекту, а пиксели ниже порога — фону.
Сегментация изображения
На этом примере видно, что монеты намного темнее, поэтому достаточно подобрать такую границу, чтобы они все оказались ниже. Вот код, который позволяет это сделать при помощи OpenCV:
Линейная фильтрация изображений
Важный класс преобразования изображений — это линейные фильтры. С их помощью решаются задачи поиска границ, уголков, удаления шумов.
Скользящее среднее — свертка
Проще всего объяснить, что такое линейная фильтрация, на примере. Пусть требуется подсчитать среднее в окне 3 × 3 для каждого пикселя. Вычисление среднего можно записать так:
Переписав формулу в следующем виде, можно получить выражение для свертки:
где f — это изображение (двухмерная функция, характеризующая картинку), k, l — координаты пикселя, f — яркость пикселя, h — ядро свертки (матрица 3 × 3, состоящая из единиц).
Если ядро свертки — матрица, то свертка — это скользящее среднее. В OpenCV произвести такую свертку можно следующим образом:
Картинка при этом становится более размытой. Также размытие изображения можно получать при помощи свертки с гауссовской функцией.
Фото до применения скользящего среднего, после и после применения гауссовского размытия
Детекция границ
Свертки также можно применять для детекции границ. С помощью сверток, как на картинке ниже, можно получить вертикальные и горизонтальные границы изображения. Если объединить результаты этих двух сверток, можно получить все границы.
Свертки для получения границ: слева — горизонтальных, справа — вертикальных
Границы изображения, полученные с помощью применения свертки. Слева — горизонтальные, в середине — вертикальные, справа — все границы, полученные объединением результатов двух сверток
Такие ядра являются частью преобразования Превитта, их использование — это самый простой способ найти границы изображения.
На самом деле существует много способов определения границ. Каждый из них применяется в разных условиях, и, в зависимости от задачи, необходимо использовать тот или иной способ.
Корреляция
Другой пример линейного преобразования — это корреляция. Она очень похожа на свертку, но записывается немного в другом виде:
В отличие от свертки корреляция используется, чтобы показать меру похожести двух изображений. Это может быть использовано для поиска объектов. Например, требуется найти лицо футболиста.
На рисунке слева показан результат применения корреляции для поиска лица. Белое пятно — это место, где оно найдено. Корреляцию можно использовать с различными параметрами: нормировать, применять ее различные вариации.
Получается, что корреляция — это очень простой способ поиска объектов на изображении, если имеется их точные копии.
Компьютерное зрение — революционная технология, позволяющая автоматизировать многие процессы, связанные с работой, обучением и безопасностью. В этой статье мы подробно расскажем о сферах применения компьютерного зрения и перспективах этой технологии.
Перспективы компьютерного зрения
Развитие этой технологии – важная задача, без решения которой прогресс в мире интеллектуальных технологий будет идти слишком медленно. Итак, компьютерное зрение обладает следующими перспективами:
- возможность использования в качестве коммерческого продукта;
- полное исключение человеческого фактора;
- автоматизация контроля безопасности, возможность создания автономных систем на основе компьютерного зрения.
Беспилотные автомобили
Автономные автомобили – первое, что приходит на ум при упоминании компьютерного зрения. Видеокамеры, установленные в корпус автомобиля, отслеживают и классифицируют движущиеся объекты, а также предсказывают их направление. Производители предупреждают, что пользоваться возможностями автономного управления машиной стоит только тогда, когда водитель полностью контролирует ситуацию и держит руки на руле. Самая масштабная разработка в этой сфере принадлежит Google и именуется SLAM. Отечественный «Яндекс» уже протестировал свои машины на улицах Москвы, и испытания прошли успешно.
Контроль производственных процессов на заводах и фабриках
Автоматизация производства – мечта магнатов, которые хотят сократить расходы на персонал и уменьшить травмы в процессе работы. Производственные помещения могут оснащаться специальными камерами, которые смогут следить за производством лучше человека и контролировать все помещения и процессы одновременно. Анализ материалов в таких системах происходит практически мгновенно, что делает их совершенными.
Распознавание патологий на снимках МРТ или флюорографии
Неверное диагностирование онкологии на снимках – вина неопытных специалистов, из-за действий которых гибнут тысячи людей по всему миру. Диагноз, поставленный программным обеспечением, обученным на качественных наборах данных, в 93% случаев оказывается верным. Компьютерное зрение исключает человеческий фактор, который становится решающим в вопросе излечения онкологических заболеваний.
Видеоаналитика для обеспечения безопасности
Массовые теракты – проблема, которая появилась в конце 20 века и продолжается по сей день. Камеры, оснащённые специальным программным обеспечением, могут распознавать предметы в руках людей, выделять подозрительных личностей и помечать бывших преступников, ссылаясь на полицейские базы данных.
Распознавание лиц при проходе куда-либо вместо пропуска
Места с повышенной безопасностью требуют современных решений. Если сейчас для попадания в школу, госпиталь или на военный объект используются системы пропусков и турникетов, то в будущем они будут заменены на системы распознавания лиц. Здесь всё очень просто – датчик передаёт информацию программе, которая идентифицирует посетителя и делает выбор: впустить человека или нет.
Контроль поведения учеников в школах
Проблема буллинга в школах – основная причина подростковых самоубийств и испорченной детской психики. Камеры, установленные по всему учреждению, могут фиксировать агрессию со стороны учеников и вовремя сообщать об этом психологам, родителям и администрации.
Подсчёт количества машин и пешеходов для адаптивного управления дорожным движением
Регулирование трафика при помощи технологических средств – это философия интеллектуальных транспортных систем, которые не могут существовать без компьютерного зрения. Умные камеры будут использоваться для анализа числа машин на дорогах, а также пешеходов, чтобы собирать информацию, которая будет использоваться в оптимизации дорожного движения.
Диагностика состояния искусственных сооружений
Ситуации, когда здания разваливаются на части нередки. Часто это происходит с ветхими домами, которые отжили своё, но муниципальные службы не заметили, или не захотели заметить, факт разрушения здания. Компьютерное зрение может использоваться для постоянного наблюдения за сооружениями с целью избежать нежелательного исхода в виде обвала здания. К сооружениям, за которыми нужен контроль компьютерного зрения относятся:
- мосты;
- эстакады;
- асфальтное покрытие;
- сооружения культурного значения.
Контроль калорий при приёме пищи
Ожирение – результат слишком простой и комфортной жизни, при которой человеку остаётся только кушать и спать. Для похудения используется метод дефицита калорий, когда человек тратит больше энергии, чем получает. Разрабатываемые сейчас приложения, используя камеру смартфона как датчик, могут выявлять то, какие ингредиенты были использованы для приготовления блюда и рассчитать его общую калорийность. Единственный минус такой системы – невозможность автоматического определения объёма блюда, поэтому на помощь худеющим придут кухонные электронные весы.
Видеоигры и обучение с подкреплением для ИИ-систем
OpenAI – некоммерческая организация Илона Маска, которая занимается исследованием способов обучения нейронных сетей сложным действиям. Их разработка OpenAI Five успешно используется в DOTA 2 для игры с профессиональными игроками. Система не имеет полной информации о мире игры, что делает её честной по отношению к игрокам. Бот смог победить в 99% игр, проведённых в апреле 2019 года.
Заключение
Компьютерное зрение – важнейшее направление в мире искусственного интеллекта, которое может использоваться во всех сферах, начиная медициной, и заканчивая видеоиграми.
Без компьютерного зрения (англ. computer vision) нынче никуда. Посредством технического зрения могут быть автоматизированы рутинные задачи везде, где есть зрительная информация. Средства computer vision во многих областях уже позволяют добиться лучших результатов, чем человек. Не только по продуктивности, но и, например, относительно качества распознавания объектов.
Профессионалы области востребованы на рынке труда, и сами формируют его, организуя свои компании. Повышается разрешение фото- и видеокамер, растет количество визуальных данных, растут и вычислительные возможности. Компьютеры справляются со всё более трудными задачами распознавания, фильтрации, преобразования и генерации изображений.
Представленный учебный план направлен на то, чтобы вы начали использовать известные решения в области компьютерного зрения для претворения в жизнь собственных идей.
Computer vision – это набор технологий, позволяющих распознавать и интерпретировать визуальную картину мира. Данные – это не только изображения и видео (последовательности кадров), но и трёхмерные объекты. Работа с 3D-сценами особенно актуальна для виртуальной и дополненной реальностей, автопилотов.
Чтобы лучше представлять решаемые с помощью компьютерного зрения проблемы, приведём несколько примеров:
Данный список, конечно, не исчерпывающий. С другими примерами вы встретитесь, занимаясь с перечисленными ниже материалами.
Стоит понимать, что эволюция технологий компьютерного зрения не всегда была связана с искусственным интеллектом и глубоким обучением. Методы компьютерного зрения развиваются более полувека. Но сейчас computer vision часто воспринимается как одна из составляющих искусственного интеллекта.
Действительно, развитие нейросетей повысило интерес к области компьютерного зрения. Однако традиционные методы позволяют результативно реорганизовать данные до того, как они передаются на входной слой нейронной сети. А многие кейсы эффективно решаются и без применения глубокого обучения. Поэтому не пренебрегайте освоением классических идей компьютерного зрения.
Предварительно необходимый багаж знаний следующий:
- Уверенное владение синтаксисом Python (наша подборка ресурсов, для конкретики подойдёт курс на edX).
- Математический анализ (иллюстративный видеокурс).
- Линейная алгебра (иллюстративный видеокурс).
Относительно математики достаточно такого объёма знаний, чтобы вы понимали шпаргалки по матанализу и алгебре.
Инструменты, которые нужно освоить в первую очередь:
И у OpenCV, и у TensorFlow есть интерфейсы Python.
Можно выделить 4 уровня видения графических данных:
- Низкоуровневое видение. Предварительная обработка изображений, то есть преобразование одного изображения в другое. Например, изменение яркости или чёрно-белое представление.
- Среднеуровневое видение. Вычленение особенных свойств, признаков. Например, выделение окружностей или других линий. Базовая сегментация.
- Совмещение различных видов одного предмета. Например, множество представлений одного объекта или его выделение из трёхмерной сцены.
- Высокоуровневое видение. Анализ обнаруженных атрибутов. Детектирование и классификация объектов. Современное глубокое обучение.
Очевидно, что там, где одному достаточно и недели, другой справится лишь за месяц. Всё предопределяется свободным временем и опытом. Для удобства образовательные блоки мы будем далее называть неделями. Каждому из перечисленных уровней преобразования данных в учебном плане отвечают две недели обучения.
Первая неделя посвящена техническим основам, что вы наверняка использовали, если работали с графическими редакторами вроде Adobe Photoshop:
- Изменение освещённости: яркость, контраст, гамма, выравнивание гистограммы.
- Модификация цветовой палитры: ч/б-преобразование, оттенки серого, насыщенность, баланс белого.
- Линейная фильтрация: размытие и зернистость, детектирование краёв, конволюция.
- Нелинейная фильтрация: медианный и билатеральный фильтры. : квантизация изображений, алгоритм Флойда–Стейнберга.
Достаточные сведения о подобных процедурах можно получить из YouTube-плейлиста "Древние секреты компьютерного зрения". В особенности с первой по пятую лекции. В качестве учебника советуем книгу Ричарда Шелиски "Компьютерное зрение: Алгоритмы и приложения". Пока будет достаточно третьей главы.
Чтобы закрепить полученные знания, попробуйте себя в преобразовании изображений с помощью OpenCV. На сайте есть уйма пошаговых электронных пособий, руководствуясь которыми можно во всём разобраться.
Под оптическим потоком подразумевается последовательность изображений объектов, получаемая в результате перемещения наблюдателя или предметов относительно сцены. Для процессов обработки движения объектов подойдёт курс по компьютерному зрению на Udacity, в особенности урок 6. В дополнение к нему полезно посмотреть восьмое видео из упомянутого YouTube-списка и лекцию об оптическом потоке и трекинге. Пригодится и учебник Шелиски, разделы 10.5 и 8.4.
В качестве учебного проекта разберитесь с тем, как с помощью OpenCV отслеживать объект в видеофрейме.
Сегментация предполагает разбиение сцены на совокупность составляющих сегментов (суперпикселей). Алгоритмы сегментации обычно направлены на выделение значимых элементов. Так, преобразование Хафа позволяет найти круги и линии. Настоящим вопросам посвящены две видеолекции. В той же книге о сегментации повествуют разделы 5.2-5.4.
Проект этой недели – вычленение из снимков дороги линий, разделяющих полосы движения. Бесспорно, подобные задачи чрезвычайно важны для компьютерного зрения самоуправляемых электромобилей.
Нередко необходимо найти такие параметры, что в компактной форме опишут имеющиеся зрительные данные. Это позволяет выделять из оптического потока ограниченное количество информации, с которой можно оперативно работать. Для различных данных требуется специфичный подход к фитингу и свои алгоритмы. Посмотрите видео 6 и 7 из этого YouTube-плейлиста. В книге понадобятся пункты 4.3.2 и 5.1.1.
В качестве задания для самостоятельной работы проанализируйте проблему определения координаты места схождения линий на горизонте перспективы.
Что можно сделать при наличии нескольких изображений одного и того же предмета, снятого с разных позиций? К примеру, собрать панораму или трёхмерное представление объекта. Потребуется научиться находить локальный инвариант, преобразовывать и выравнивать изображения, разбираться в гомографии, эпиполярной геометрии и стереометрии.
Если такой набор слов пугает, есть и YouTube-плейлист, и сопроводительное чтение. Для проекта можно взять собственные данные. Например, сфотографировать с разных сторон что-то из кухонной утвари и сделать в OpenCV из альбома плоских изображений 3D-объект.
Итак, умея создавать 3D-объекты из плоских изображений, можно попробовать создать и трёхмерную реальность. Или дополнить имеющуюся. Для этого полезно целиком пройти курс по стереозрению и трекингу на Coursera, а также девятое видео из данного списка.
Как говорилось выше, в качестве фреймворка для глубокого обучения удобно использовать TensorFlow. Это один из наиболее популярных фреймворков, поэтому вы без труда отыщете достаточно примеров. Для начала работы с изображениями в TensorFlow пройдите этот туториал. Далее, пользуясь ссылками, рассмотрите следующие темы:
-
: категоризация объектов, сцен, деятельности
- Обнаружение объектов (non max подавление, скользящие окна, ограничивающие боксы и якоря, подсчёт элементов) и Darknet, нейросети для предложения областей (region proposal networks) (обучение с учителем)
В качестве проекта создайте в TensorFlow нейросеть, определяющую по изображению марку автомобиля или породу собаки.
Хотя нейросетевые технологии и компьютерное зрение эволюционировали независимыми путями, сейчас глубокое обучение представляется одним из стандартов обработки зрительной информации. Современное состояние вопроса раскрывают лекции Стенфордского курса, а также видео 19-20 этого плейлиста. Если захотите большего, по теме Deep Learning у нас тоже есть учебный план.
Проектом заключительной недели можно взять построение генеративно-состязательной нейросети для детектирования лиц. Или любую другую идею, которая наверняка появится к этому времени. У вас будет уже достаточно знаний, чтобы подступиться к её воплощению.
Читайте также: