Найти в Дзене

Как видят мир нейросети? Объясняем работу машинного зрения

Зрение – это базовая функция человеческого тела. Хотя наше зрение работает достаточно сложным образом, мы об этом не думаем, ибо все видят мир плюс-минус одинаковыми глазами. Но вот каким образом научить видеть компьютер, у которого мало того, что нет глаз, так еще и мозг как бы не «аналоговый»? Как он может различать объекты, если всё, что он умеет – перебирать нули и единицы? О том, как работает компьютерное зрение, расскажет Игорь Позняев – автор канала «Блог системного администратора». Спойлер – всё совсем не так просто, как может показаться. Мы об этом не задумываемся, однако наши глаза – по сути, природные камеры – у них очень много общего, например, устройство. Когда мы на что-то смотрим, свет от объекта сначала проходит через своеобразный объектив (хрусталик – линза, радужная оболочка – диафрагма) и попадает на не менее своеобразную матрицу (на сетчатку), на которой располагаются колбочки и палочки, которые могут распознавать цвет и свет соответственно – практически как пиксели
Оглавление

Зрение – это базовая функция человеческого тела. Хотя наше зрение работает достаточно сложным образом, мы об этом не думаем, ибо все видят мир плюс-минус одинаковыми глазами. Но вот каким образом научить видеть компьютер, у которого мало того, что нет глаз, так еще и мозг как бы не «аналоговый»? Как он может различать объекты, если всё, что он умеет – перебирать нули и единицы?

О том, как работает компьютерное зрение, расскажет Игорь Позняев – автор канала «Блог системного администратора». Спойлер – всё совсем не так просто, как может показаться.

Зрение – это вообще не простая штука

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

Одна из первых систем машинного зрения «AutoVision ll», 1983 год. Авторство фото: ArnoldReinhold. Собственная работа, CC BY-SA 3.0
Одна из первых систем машинного зрения «AutoVision ll», 1983 год. Авторство фото: ArnoldReinhold. Собственная работа, CC BY-SA 3.0

Естественно, я тут всё это упрощаю, но нам важно это знать, чтобы понять одну интересную вещь: неживая камера и живой глаз, в общем-то, «видят» картинку одинаково. Однако на этапе интерпретации всё происходит совершенно по-разному. Цифровая камера переводит изображение в последовательность нулей и единиц, которыми закодирован каждый пиксель изображения. Человеческий мозг же этого не делает, так как, если по-простому, он – аналоговый.

Если говорить еще проще, то человек как бы «видит» фото, тогда как камера видит только последовательность нулей и единиц – ей неизвестно ни то, что изображено на фото, ни даже что такое «изображение», для нее – это просто код.

Так как заставить машину прозреть?

Для работы разных умных алгоритмов (начиная от автофокуса, заканчивая генерацией изображений), человечеству необходимо было научить компьютер видеть. Сложность в том, что компьютер видит ТОЛЬКО код, и ничего кроме, поэтому задача была еще сложнее – научить компьютер видеть изображение в коде. Но как?

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

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

ИИ же так думать не умеет, вместо этого он ищет закономерности. В его голове падение кружки выглядит как «кружка + падение = разбитая кружка в 90% случаев». И да, это тоже в какой-то степени правильный вывод, но сделанный не на основе понимания, а на основе информации, которую ИИ получил до этого. О чем мы? Ах да, изображения.

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

Классификация. Именно тут компьютер понимает, что на фото

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

Компьютер видит, что текстура напоминает шерсть, на голове есть уши, лап – четыре, хвост один, милота – зашкаливает. Он начинает искать в своей базе данных изображения с походими параметрами, и в 90% случаев похожие изображения помечены как «кот», следовательно, скорее всего, на фотографии тоже кот.

Слева – вход (изображение, которое мы загружаем в ИИ), в центре – анализ, справа – вывод
Слева – вход (изображение, которое мы загружаем в ИИ), в центре – анализ, справа – вывод

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

-3

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

Зачем мы вообще учим компьютеры видеть?

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

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

Вот такие артефакты и странности на изображении получаются потому, что ИИ не понимает, а рисует только нечто похожее на то, что он видел
Вот такие артефакты и странности на изображении получаются потому, что ИИ не понимает, а рисует только нечто похожее на то, что он видел

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

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

Теперь осталось только гадать, как скоро нас заменят робо-водители, робо-копы и робо-люди. Хотя это будет явно в не самом ближайшем будущем.

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