Как компьютер видит фотографию

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

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

Ступени распознавания: от линий к ушам и мордочкам

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

  1. Первые слои проверяют контраст между соседними пикселями и находят простейшие границы, горизонтальные полоски, диагональные штрихи и дуги.
  2. Средние слои объединяют найденные линии в более сложные геометрические элементы, углы, окружности, фрагменты шерсти, круги глаз и кончики носа.
  3. Глубокие слои собирают эти фрагменты в крупные характерные блоки, образуя треугольное стоячее ухо, висячее собачье ухо, форму пасти или усы.
  4. Финальный слой суммирует обнаруженные признаки и выдает результат в процентах, например восемьдесят девять процентов за кошку и одиннадцать процентов за собаку.

Как именно учится программа

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

Обучение строится на многократном повторении одного и того же цикла из трех шагов.

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

Этот процесс повторяется десятки тысяч раз на огромном наборе фотографий. Программисты называют такой набор датасетом. Самый известный пример в компьютерном зрении — соревнование ImageNet и набор данных Dogs vs. Cats, собранный сервисом Kaggle еще в 2013 году. В нем содержится двадцать пять тысяч заранее размеченных фотографий кошек и собак.

Почему нейросеть делает глупые ошибки

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

Как проверить это в школьном проекте

Для собственного исследовательского проекта по информатике не требуется писать сложный программный код на Python с нуля. Можно использовать готовые интерактивные конструкторы вроде Teachable Machine от Google.

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

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

Частые вопросы

Что произойдет, если показать сети лису или волка?

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

Почему сети нужно так много картинок для обучения, а человеку хватает пары штук?

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

Что такое переобучение нейросети?

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

Как размер картинки влияет на скорость и качество работы?

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