Программа "Компьютерное зрение" – Центр непрерывного образования – Национальный исследовательский университет «Высшая школа экономики. Как компьютерное зрение меняет рынки Яндекс компьютерное зрение

«Ничто в биологии не имеет смысла, кроме как в свете эволюции», — написал в 1970-х ученый Феодосий Добржанский. Сегодня его знаменитый афоризм можно переформулировать: «Ничто в современном мире не имеет смысла, кроме как в свете искусственного интеллекта ». Искусственный интеллект, машинное обучение, компьютерное зрение и другие технологии применяются теперь везде, от беспилотных автомобилей до смартфонов.

Новое зрение

Развитие искусственного интеллекта по сути подарило нам еще один орган чувств: компьютерное зрение использует анализ миллионов изображений, чтобы люди и машины лучше ориентировались в мире. Компьютерное зрение помогает проводить операции хирургам, объезжать препятствия автомобилям и ловить покемонов детям.
Принцип работы компьютерного зрения становится понятным, если разобраться с тем, как видят сами люди, ведь машины мы создаем себе подобными. Сначала мы фиксируем взгляд на том или ином объекте, затем наш мозг анализирует его, распознавая формы, цвета и детали. Компьютерные алгоритмы действуют похожим образом: заранее обучившись на множестве картинок, они начинают «понимать», что именно попало в объектив камеры.

Мировой рынок компьютерного зрения к 2023 году превысит 25 млрд долларов.

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

Новый транспорт

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

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

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

Новый ритейл

Сначала Amazon сделал популярными электронные книги, потом принялся за голосовых помощников, а теперь очередь дошла и до практического применения компьютерного зрения. Новый гаджет Echo Look — это как ассистент Alexa, только с «глазами». Echo Look дает своему владельцу модные советы: что надеть, с чем комбинировать разные предметы одежды и как организовать гардероб. Стилистам и персональным шоперам придется несладко: искусственный интеллект за 200 долларов справится с рекомендациями лучше любого человека.

Угадать точный размер детской обуви порой сложно, но приложение SpeedSmith решает эту проблему. Достаточно сфотографировать ногу ребенка, и программа быстро определит размер. Так компьютерное зрение делает жизнь родителей проще, избавляя от ошибок при покупках.
Компьютерное зрение поможет не только людям, но и компаниям. X5 Retail Group тестирует в нескольких магазинах «Перекресток» и «Пятерочка» программу, которая использует технологию для анализа заполняемости полок. Система распознает около 1500 наименований товаров и сообщает, когда пора добавить закончившийся продукт на полку. Кроме того, искусственный интеллект следит за очередями: если алгоритм понимает, что в очереди стоят больше пяти человек, управляющий магазином получает уведомление.

Всевидящее око

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

  • Машинное обучение
  • Последние лет восемь я активно занимаюсь задачами, связанными с распознаванием образов, компьютерным зрением, машинным обучением. Получилось накопить достаточно большой багаж опыта и проектов (что-то своё, что-то в ранге штатного программиста, что-то под заказ). К тому же, с тех пор, как я написал пару статей на Хабре, со мной часто связываются читатели, просят помочь с их задачей, посоветовать что-то. Так что достаточно часто натыкаюсь на совершенно непредсказуемые применения CV алгоритмов.
    Но, чёрт подери, в 90% случаев я вижу одну и ту же системную ошибку. Раз за разом. За последние лет 5 я её объяснял уже десяткам людей. Да что там, периодически и сам её совершаю…

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

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

    Сама по себе задача, на мой взгляд, скорее решаема. Если брать отметки как опорные точки и сравнивать теми же методами, которыми сравнивают . Но, опять же, пока не протестируешь базу хотя бы на пару сотен примеров - никогда не узнаешь, можно ли работу успешно выполнить. Но почему-то такое предложение не понравилось автору статьи… Жаль!
    Это два наиболее осмысленных и репрезентативных, на мой взгляд, примера. По ним можно понять, почему нужно абстрагироваться от идеи и смотреть реальные кадры.
    Ещё несколько примеров, с которыми я встречался, но уже в двух словах. Во всех этих примерах у людей не было ни единой фотографии на момент, когда они начали спрашивать о реализуемости задачи:
    1) Распознавание номеров у марафонцев на футболках по видеопотоку (картинка из Яндыкса)


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

    2) Распознавание текста на фотографиях экранов телефонов


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

    Хорошие
    Но не всё так плохо! Ситуация, когда задача ставится идеально, встречается часто. Моя любимая: «Нужно ПО для автоматического подсчета лосей на фото.
    Пример фото с лосями высылаю.»



    Оба фото кликабельны.
    До сих пор жалею, что с этой задачей не срослось. Сначала кандидатскую защищал и был занят, а потом заказчик как-то энтузиазм потерял (или нашёл других исполнителей).
    В постановке нет ни малейшей трактовки решения. Только две вещи: «что нужно сделать», «входные данные». Много входных данных. Всё.

    Мысль - вывод

    Единственный способ поставить задачу - набрать базу и определить методологию работы по этой базе. Что вы хотите получить? Какие границы применимости алгоритма? Без этого вы не только не сможете подойти к задаче, вы не сможете её сдать. Без базы данных заказчик всегда сможет сказать «У вас не работает такой-то случай. Но это же критичная ситуация! Без него я не приму работу».

    Как сформировать базу

    Наверное, всё это был приквел к статье. Настоящая статья начинается тут. Идея того, что в любой задаче CV и ML нужна база для тестирования - очевидна. Но как набрать такую базу? На моей памяти три-четыре раза первая набранная база спускалась в унитаз. Иногда и вторая. Потому что была нерепрезентативна. В чём сложность?
    Нужно понимать, что «сбор базы» = «постановка задачи». Собранная база должна:
    1. Отражать проблематику задачи;
    2. Отражать условия, в которых будет решаться задача;
    3. Формулировать задачу как таковую;
    4. Приводить заказчика и исполнителя к консенсусу относительно того, что было сделано.
    Время года
    Пару лет назад мы с другом решили сделать систему, которая могла бы работать на мобильниках и распознавать автомобильные номера.. На тот момент мы были весьма умудрённые в CV системах. Знали, что нужно собирать такую базу, чтобы плохо было. Чтобы посмотрел на неё и сразу понял все проблемы. Мы собрали такую базу:


    Сделали алгоритм, и он даже неплохо работал. Давал 80-85% распознавания выделенных номеров.
    Ну да… Только летом, когда все номера стали чистые и хорошие точность системы просела процентов на 5…
    Биометрия
    Достаточно много в своей жизни мы работали с биометрией ( , ). И, кажется, наступили на все возможные грабли при сборе биометрических баз.
    База должна быть собрана в разных помещениях. Когда аппарат для сбора базы стоит только у разработчиков - рано или поздно выяснится, что он завязан на соседнюю лампу.
    В биометрических базах нужно иметь 5-10 снимков для каждого человека. И эти 5-10 снимков должны быть сделаны в разные дни, в разное время дня. Подходя к биометрическому сканеру несколько раз подряд, человек сканируется одним и тем же способом. Подходя в разные дни - по-разному. Некоторые биометрические характеристики могут немножко меняться в течении суток.
    База, собранная из разработчиков нерепрезентативна. Они подсознательно считываются так, чтобы всё сработало…
    У вас новая модель сканера? А вы уверены, что он работает со старой базой?
    Вот глаза собранные с разных сканеров. Разные поля работы, разные блики, разные тени, разные пространственные разрешения, и.т.д.





    База для нейронных сетей и алгоритмов обучения
    Если у вас в коде используется какой-то алгоритм обучения - пиши пропало. Вам нужно формировать базу для обучения с его учётом. Предположим, в вашей задаче распознавания имеется два сильно отличающихся шрифта. Первый встречается в 90% случаев, второй в 10%. Если вы нарежете эти два шрифта в данной пропорции и обучитесь по ним единым классификатором, то с высокой вероятностью буквы первого шрифта будут распознаваться, а буквы второго нет. Ибо нейронная сеть/SVM найдёт локальный минимум не там, где распознаётся 97% первого шрифта и 97% второго, а там где распознаётся 99% первого шрифта и 0% второго. В вашей базе должно быть достаточно примеров каждого шрифта, чтобы обучение не ушло в другой минимум.

    Как сформировать базу при работе с реальным заказчиком

    Одна из нетривиальных проблем при сборе базы - кто это должен делать. Заказчик или исполнитель. Сначала приведу несколько печальных примеров из жизни.
    Я нанимаю вас, чтобы вы решили мне задачу!
    Именно такую фразу я услышал однажды. И блин, не поспоришь. Но вот только базу нужно было бы собирать на заводе, куда бы нас никто не пустил. А уж тем более, не дал бы нам монтировать оборудование. Те данные, которые давал заказчик были бесполезны: объект размером в несколько пикселей, сильно зашумлённая камера с импульсными помехами, которая периодически дергается, от силы двадцать тестовых картинок. На предложения поставить более хорошую камеру, выбрать более хороший ракурс для съёмки, сделать базу хотя бы на пару сотен примеров, заказчик ответил фразой из заголовка.
    У нас нет времени этим заниматься!
    Однажды директор весьма крупной компании (человек 100 штата + офисы во многих странах мира) предложил пообщаться. В продукте, который выпускала эта компания часть функционала была реализована очень старыми и очень простыми алгоритмами. Директор рассказал нам, что давно грезит о модификации данного функционала в современные алгоритмы. Даже нанимал две разных команды разработчиков. Но не срослось. Одна команда по его словам слишком теоретизировала, а вторая никакой теории не знала и тривиальщину делала. Мы решили попробовать.
    На следующий день нам выдали доступ к огромному массиву сырой информации. Сильно больше, чем я бы сумел просмотреть за год. Потратив на анализ информации пару дней мы насторожились спросили: «А что собственно вам нужно от новых алгоритмов?». Нам назвали десятка два ситуаций, когда текущие алгоритмы не работают. Но за пару дней я видел лишь одну-две указных ситуации. Просмотрев ещё пачку данных смог найти ещё одну. На вопрос: «какие ситуации беспокоят ваших клиентов в первую очередь?», - ни директор ни его главные инженеры не смогли дать ответа. У них не было такой статистики.
    Мы исследовали вопрос и предложили алгоритм решения, который мог автоматически собрать все возможные ситуации. Но нам нужно было помочь с двумя вещами. Во-первых, развернуть обработку информации на серверах самой фирмы (у нас не было ни достаточной вычислительной мощности, ни достаточного канала к тому месту, где хранились сырые данные). На это бы ушла неделя работы администратора фирмы. А во-вторых, представитель фирмы должен был классифицировать собранную информацию по важности и по тому как её нужно обрабатывать (это ещё дня три). К этому моменту мы уже потратили две-три недели своего времени на анализ данных, изучение статей по тематике и написание программ для сбора информации (никакого договора подписано на этот момент не было, всё делали на добровольных началах).
    На что нам было заявлено: «Мы не можем отвлекать на эту задачу никого. Разбирайтесь сами». На чём мы откланялись и удалились.
    Заказчик даёт базу
    Был и другой случай. На этот раз заказчик поменьше. А система, которой занимается заказчик разбросана по всей территории страны. Зато заказчик понимает, что мы базу не соберём. И из всех сил старается собрать базу. Собирает. Очень большую и разнообразную. И даже уверяет, что база репрезентативна. Начинаем работать. Почти доделываем алгоритм. Перед сдачей выясняется, что на собранной базе-то алгоритм работает. И условиям договора мы удовлетворяем. Но вот база-то была нерепрезентативной. В ней нет 2/3 ситуаций. А те ситуации, что есть - представлены непропорционально. И на реальных данных система работает сильно хуже.
    Вот и получается. Мы старались. Всё что обещали - сделали, хотя задача оказалась сильно сложнее, чем планировали. Заказчик старался. Потратил много времени на сбор базы.
    Но итоговый результат - хреновый. Пришлось что-то придумывать на ходу, хоть как-то затыкать дырки…
    Так кто должен сформировать базу?
    Проблема в том, что очень часто задачи компьютерного зрения возникают в сложных системах. Системах, которые делались десятки лет многими людьми. И разобраться в такой системе часто сильно дольше, чем решить саму задачу. А заказчик хочет чтобы разработка началась уже завтра. И естественно, предложение заплатить за подготовку ТЗ и базы сумму в 2 раза больше стоимости задачи, увеличить сроки в 3 раза, дать допуск к своим системам и алгоритмам, выделить сотрудника, который всё покажет и расскажет, вызывает у него недоумение.
    На мой взгляд решение любой задачи компьютерного зрения требует постоянного диалога между заказчиком и исполнителем, а так же желания заказчика сформулировать задачу. Исполнитель не видит всех нюансов бизнеса заказчика, не знает систему изнутри. Я ни разу не видел чтобы подход: «вот вам деньги, завтра сделайте мне решение» сработал. Решение-то было. Но работало ли оно как нужно?
    Сам я как огня пытаюсь шарахаться от таких контрактов. Работаю ли я сам, или в какой-то фирме, которая взяла заказ на разработку.
    В целом ситуацию можно представить так: предположим, вы хотите устроить свою свадьбу. Вы можете:
    Продумать и организовать всё самому от начала до конца. По сути данный вариант - «решать задачу самому».
    Продумать всё от начала до конца. Написать все сценарии. И нанять исполнителей для каждой роли. Тамаду для того чтобы гости не скучали, ресторан, чтобы все приготовили и провели. Написать основную канву для тамады, меню для ресторана. Этот вариант - это диалог. Обеспечить данными исполнителя, расписать всё, что требуется.
    Можно продумать большими блоками, не вникая в детали. Нанять тамаду, пусть делает, что делает. Не согласовывать меню ресторана. Заказать модельеру подбор платья, причёски, имиджа. Головной боли минимум, но когда начнутся конкурсы на раздевание, то можно понять что что-то было сделано не так. Далеко не факт, что сформулировав задачу в стиле «распознайте мне символ» исполнитель и заказчик поймут одно и то же.
    А можно всё заказать свадебному агентству. Дорого, думать совсем не надо. Но вот, что получится - уже не знает никто. Вариант - «сделайте мне хорошо». Скорее всего, качество будет зависеть от стоимости. Но не обязательно

    Есть ли задачи, где база не нужна

    Есть. Во-первых, в задачах, где база - это слишком сложно. Например, разработка робота, который анализирует видео, и по нему принимает решения. Нужен какой-то тестовый стенд. Можно сделать базы на какие-то отдельные функции. Но сделать базу по полному циклу действий зачастую нельзя. Во-вторых, когда идёт исследовательская работа. Например, идёт разработка не только алгоритмов, но и устройства, которым будет набираться база. Каждый день новое устройство, новые параметры. Когда алгоритм меняется по три раза в день. В таких условиях база бесполезна. Можно создавать какие-то локальные базы, изменяющиеся каждый день. Но что-то глобальное неосмысленно.
    В-третьих, это задачи, где можно сделать модель. Моделирование это вообще очень большая и сложная тема. Если возможно сделать хорошую модель задёшево, то конечно нужно её делать. Хотите распознать текст, где есть только один шрифт - проще всего создать алгоритм моделирования (
  • Обработка изображений
  • Область применения компьютерного зрения очень широка: от считывателей штрихкодов в супермаркетах до дополненной реальности. Из этой лекции вы узнаете, где используется и как работает компьютерное зрение, как выглядят изображения в цифрах, какие задачи в этой области решаются относительно легко, какие трудно, и почему.

    Лекция рассчитана на старшеклассников – студентов Малого ШАДа, но и взрослые смогут почерпнуть из нее много полезного.

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

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

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

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

    Кроме того, человек при распознавании объекта всегда учитывает окружение. Если выдернуть объект из привычного окружения, узнать его станет заметно труднее. Тут тоже играет роль накопленный за жизнь опыт, которого у компьютера нет.

    Мальчик или девочка?
    Представим, что нам нужно научиться с одного взгляда определять пол человека (одетого!) по фотографии. Для начала нужно определить факторы, которые могут указывать на принадлежность к тому или иному объекту. Кроме того, нужно собрать обучающее множество. Желательно, чтобы оно было репрезентативным. В нашем случае возьмем в качестве обучающей выборки всех присутствующих в аудитории. И попробуем на их основе найти отличительные факторы: например, длина волос, наличие бороды, макияжа и одежда (юбка или брюки). Зная, у какого процента представителей одного пола встречались те или иные факторы, мы сможем создать достаточно четкие правила: наличие тез или иных комбинаций факторов с некоей вероятностью позволит нам сказать, человек какого пола на фотографии.
    Машинное обучение
    Конечно, это очень простой и условный пример с небольшим количеством верхнеуровневых факторов. В реальных задачах, которые ставятся перед системами компьютерного зрения, факторов гораздо больше. Определять их вручную и просчитывать зависимости – непосильная для человека задача. Поэтому в таких случаях без машинного обучения не обойтись никак. Например, можно определить несколько десятков первоначальных факторов, а также задать положительные и отрицательные примеры. А уже зависимости между этими факторами подбираются автоматически, составляется формула, которая позволяет принимать решения. Достаточно часто и сами факторы выделяются автоматически.
    Изображение в цифрах
    Чаще всего для хранения цифровых изображений используется цветовое пространство RGB. В нем каждой из трех осей (каналов) присваивается свой цвет: красный, зеленый и синий. На каждый канал выделяется по 8 бит информации, соответственно, интенсивность цвета на каждой оси может принимать значения в диапазоне от 0 до 255. Все цвета в цифровом пространстве RGB получаются путем смешивания трех основных цветов.

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

    Но существуют и другие цветовые пространства. Весьма интересно в нашем контексте пространство HSV (Hue, Saturation, Value). В нем присутствует ось Value, обозначающая количество света. На него выделен отдельный канал, в отличие от RGB, где это значение нужно вычислять каждый раз. Фактически, это черно-белая версия изображения, с которой уже можно работать. Hue представляется в виде угла и отвечает за основной тон. От значения Saturation (расстояние от центра к краю) зависит насыщенность цвета.

    HSV гораздо ближе к тому, как мы представляем себе цвета. Если показать человеку в темноте красный и зеленый объект, он не сможет различить цвета. В HSV происходит то же самое. Чем ниже по оси V мы продвигаемся, тем меньше становится разница между оттенками, так как снижается диапазон значений насыщенности. На схеме это выглядит как конус, на вершине которого предельно черная точка.

    Цвет и свет
    Почему так важно иметь данные о количестве света? В большинстве случаев в компьютерном зрении цвет не имеет никакого значения, так как не несет никакой важной информации. Посмотрим на две картинки: цветную и черно-белую. Узнать все объекты на черно-белой версии не намного сложнее, чем на цветной. Дополнительной нагрузки для нас цвет в данном случае не несет никакой, а вычислительных проблем создает великое множество. Когда мы работаем с цветной версией изображения, объем данных, грубо говоря, возводится в степень куба.

    Цвет используется лишь в редких случаях, когда это наоборот позволяет упростить вычисления. Например, когда нужно детектировать лицо: проще сначала найти его возможное расположение на картинке, ориентируясь на диапазон телесных оттенков. Благодаря этому отпадает необходимость анализировать изображение целиком.

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

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

    Детектирование и сегментация
    В компьютерном зрении этот процесс называется детектированием и сегментацией. Сегментация – это разделение изображения на множество частей, связанных друг с другом визуально, либо семантически. А детектирование – это обнаружение объектов на изображении. Детектирование нужно четко отличать от распознавания. Допустим, на той же картинке с автомобилем можно детектировать дорожный знак. Но распознать его невозможно, так как он повернут к нам обратной стороной. Так же при распознавании лиц детектор может определить расположение лица, а «распознаватель» уже скажет, чье это лицо.

    Дескрипторы и визуальные слова
    Существует много разных подходов к распознаванию.

    Например, такой: на изображении сначала нужно выделить интересные точки или интересные места. Что-то отличное от фона: яркие пятна, переходы и т.д. Есть несколько алгоритмов, позволяющих это сделать.

    Один из наиболее распространенных способов называется Difference of Gaussians (DoG). Размывая картинку с разным радиусом и сравнивая получившиеся результаты, можно находить наиболее контрастные фрагменты. Области вокруг этих фрагментов и являются наиболее интересными.

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

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

    Дескрипторы можно записывать в числовом виде. Дескриптор можно представить в виде точки в многомерном массиве. У нас на иллюстрации двумерный массив. В него попали наши дескрипторы. И мы можем их кластеризовать – разбить на группы.

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

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

    Совпадение дескрипторов – еще не гарантия идентичности содержащих их объектов. Один из способов дополнительной проверки – геометрическая валидация. В этом случае проводится сравнение расположения дескрипторов относительно друг друга.

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

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

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

    После завершения обучения компьютерное зрение можно применять в деле. Для компьютера изображение - это набор пикселей, у каждого из которых есть своё значение яркости или цвета. Чтобы машина смогла получить представление о содержимом картинки, ее обрабатывают с помощью специальных алгоритмов. Сначала выявляют потенциально значимые места. Это можно делать несколькими способами. Например, исходное изображение несколько раз подвергают размытию по Гауссу, используя разный радиус размытия. Затем результаты сравнивают друг с другом. Это позволяет выявить наиболее контрастные фрагменты - яркие пятна и изломы линий.


    После того как значимые места найдены, компьютер описывает их в числах. Запись фрагмента картинки в числовом виде называется дескриптором. С помощью дескрипторов можно достаточно точно сравнивать фрагменты изображения без использования самих фрагментов. Чтобы ускорить вычисления, компьютер проводит кластеризацию или распределение дескрипторов по группам. В один и тот же кластер попадают похожие дескрипторы с разных изображений. После кластеризации важным становится лишь номер кластера с дескрипторами, наиболее похожими на данный. Переход от дескриптора к номеру кластера называется квантованием, а сам номер кластера - квантованным дескриптором. Квантование существенно сокращает объём данных, которые необходимо обработать компьютеру.


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