Эта лекционная сессия курса MIT OpenCourseWare посвящена переходу от простых нейронных сетей к продвинутым методам компьютерного зрения. Профессор Рама Рамакришнан (Rama Ramakrishnan) объясняет устройство сверточных нейронных сетей (CNN), принципы работы фильтров и пулинга, а также демонстрирует мощь трансферного обучения (Transfer Learning) на примере классификации объектов всего по 100 изображениям.
🖼️ Проблема «плоских» данных: почему обычные сети плохо видят 1:26
Традиционные полносвязные нейронные сети воспринимают изображение как простой вектор чисел. По словам Рамакришнана, при таком подходе теряется критически важная информация:
- Пространственная смежность (Spatial Adjacency): В обычном векторе пиксель в центре футболки «не знает», что соседние пиксели относятся к тому же объекту .
- Избыточность параметров: Для обработки цветного фото с iPhone (9 млн пикселей, 3 канала) даже один слой из 100 нейронов потребует 2,7 млрд параметров . Это неизбежно ведет к переобучению и требует колоссальных объемов данных.
- Отсутствие инвариантности к переносу (Translation Invariance): Сеть должна узнавать вертикальную линию независимо от того, находится она в углу или в центре кадра. Обычные сети обучаются детектировать объекты в каждой позиции «с нуля» .
🔍 Анатомия свертки: фильтры как детекторы черт 7:11
Сверточный слой состоит из фильтров — небольших квадратных матриц с числами. Спикер подчеркивает, что выбор чисел в фильтре определяет его специализацию:
- Детекция признаков: Одни фильтры реагируют на горизонтальные линии, другие — на вертикальные или изгибы .
- Операция свертки: Фильтр накладывается на изображение, соответствующие числа перемножаются и суммируются. После прохождения через функцию ReLU результат записывается в новую таблицу (тензор) .
- Обработка цвета: Для цветных RGB-изображений фильтры становятся трехмерными («кубическими»), имея глубину, равную количеству каналов .
Исторически фильтры создавались вручную экспертами по компьютерному зрению. Прорывом 2012 года (AlexNet) стало осознание, что числа в фильтрах — это просто веса, которые нейросеть может выучить сама через обратное распространение ошибки .
📉 Пулинг и иерархия признаков 30:56
Слои пулинга (pooling) служат для уменьшения размерности (Down-sampling).
- Max Pooling: Из окна (например, 2x2) выбирается максимальное значение. Это работает как логическое «ИЛИ»: если хоть в одном пикселе области найден нужный признак, он передается дальше .
- Абстракция: С каждым слоем сеть видит изображение во всё более высоком разрешении смыслов. На первых слоях это линии, на средних — части объектов (глаза, уши), на последних — целые лица .
- Геометрия тензора: В процессе обработки высота и ширина тензора уменьшаются, но глубина (количество фильтров) растет. Например, в ResNet вход 224x224x3 превращается в глубокий тензор 7x7x2048 .
🧠 Трансферное обучение: классификация на малых данных 1:00:23
Главная проблема глубокого обучения — «голод» до данных. Чтобы классифицировать сумки и обувь, имея всего по 100 примеров (всего 200 фото), обычная CNN покажет точность около 87%, быстро переобучаясь .
Решением становится Transfer Learning (Трансферное обучение):
- Использование предобученных моделей: Берётся сеть (например, ResNet), уже обученная на миллионах изображений датасета ImageNet .
- «Хирургическое» вмешательство: От предобученной сети отрезается последний слой (Headless model), который отвечал за классификацию 1000 категорий ImageNet .
- Адаптация: Вместо отрезанного слоя добавляется новый классификатор под конкретную задачу (сумка или обувь). Остальные веса сети уже «умеют» распознавать формы и текстуры реального мира.
Как утверждает Рамакришнан, использование предобученной ResNet позволяет достичь 100% точности на тестовом наборе даже при мизерном количестве данных .
🛠️ Инструментарий и HuggingFace 1:10:22
Профессор отмечает взрывной рост доступности готовых моделей. Если в прошлом году на платформе HuggingFace было около 50 000 моделей, то к моменту лекции их число превысило 500 000 .
Ключевые команды и параметры в Keras:
layers.Conv2D(filters=32, kernel_size=(2,2)): создание сверточного слоя .layers.MaxPool2D(): добавление пулинга .include_top=False: параметр при загрузке ResNet для удаления финального классификатора .- Data Augmentation: Включение слоев случайного поворота (
RandomRotation) и зума (RandomZoom) позволяет искусственно увеличить датасет, создавая вариации одного и того же фото .
В финале занятия Рама Рамакришнан провел живой демо-тест: модель успешно распознала кроссовок студента и рюкзак (классифицировав его как handbag) через веб-камеру в реальном времени .