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

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

Содержание статьи:

  1. LeNet-5 (1998)

  2. AlexNet (2012)

  3. VGGNet (2014)

  4. GoogLeNet/Inception (2014) + Inception v2 и Inception v3

  5. ResNet (2015)

  6. DenseNet (2017)

  7. EfficientNet (2019) + метод NAS

  8. Vision Transformers (ViT, 2020)

Задача классификации

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

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

LeNet-5 (1998)

Первый прототип (LeNet-1) появился в 1989 году, разработан Яном Лекуном и его коллегами для задачи распознавания рукописных цифр на наборе данных MNIST. К 1998 году появилась версия LeNet-5, ставшая одним из первых успешных применений нейронных сетей для практических задач (сверточные и пуллинговые слои могут работать вместе для извлечения признаков и уменьшения размерности изображений, чтобы эффективно распознавать объекты) и продемонстрировала мощь глубокого обучения в компьютерном зрении. Так LeNet-5 является основополагающей для последующих разработок в области компьютерного зрения и глубинного обучения.

Особенности

  1. Применение сверточных слоев. LeNet-5 была одной из первых сетей, которая использовала сверточные слои для автоматического выделения признаков из изображений. Это позволило отказаться от традиционных методов ручного выделения признаков.

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

  3. Использование функции активации. В LeNet-5 используется функция активации tanh вместо современных функций, таких как ReLU. На момент создания сети это было стандартным решением.

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

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

Недостатки

Недостатки LeNet-5 связаны с ограниченными вычислительными мощностями:

  • сеть работает только с простыми объектами — небольшими изображениями с низким разрешением,

  • нет методов предварительной обработки изображений,

  • затухающий градиент,

  • высокая вероятность переобучения,

  • большое потребление памяти.

Подробнее

AlexNet (2012)

AlexNet (SOTA 2012) выиграла ImageNet Challenge 2012 (ILSVRC-2012). Для конкурса была использована выборка из 1,2 млн изображений с 1000 различными классами, среди которых были как обобщенные категории (например, «кошка», «собака»), так и более узкие (например, конкретные породы кошек или собак). Благодаря победе AlexNet в ILSVRC-2012 началась эра глубокого обучения. Эта архитектура была глубже и сложнее, чем предшествующая LeNet-5. AlexNet использует комбинацию сверточных слоев и полносвязных слоев: 5 сверточных и 3 полносвязных слоя, с общим количеством 60 млн параметров, пулинг и ReLU‑активацию вместо tanh. Для настройки архитектуры разработчики столкнулись с множеством проблем, связанных с подбором параметров, таких как размеры пуллинга, кернелов, страйдов и других гиперпараметров.

Особенности

1. ReLU. Так как сигмоид при производной дает очень малую величину, а ReLU — нет, то устраняется проблема затухающих градиентов.

2. Dropout на 0,5 на полносвязных слоях. При выключении некоторых нейронов система становится более робастной, привыкает к этим выключениям и адаптируется.

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

4. Local Response Normalization. Увеличивает скорость сходимости алгоритма. В отличие от Batch Normalization, LRN нормализует активность нейронов на основе активности соседних нейронов в пределах одного слоя, чтобы улучшить контрастность и стабилизировать обучение, особенно в глубоких сетях. Сейчас, в основном, применяется BatchNormalization и LayerNormalization, так как эти способы способны более стабилизировать сходимость алгоритма.

5. Регуляризация. Использование различных методов позволяет минимизировать переобучение и улучшить обобщающую способность модели.

6. Обучение на мульти‑GPU.

7. Динамическое управление коэффициентом скорости обучения. Коэффициент делится на 10, когда качество перестает улучшаться на валидационной выборке.

8. Max‑pooling. В отличие от LeNet-5, которая использует Average‑Pooling, AlexNet использует max‑pooling, что позволяет лучше захватывать важные признаки, такие как границы и текстуры, и делает сеть более инвариантной к сдвигам и деформациям объектов.

Недостатки

  • Большое число параметров (60 млн) требует значительных вычислительных ресурсов и памяти.

  • Высокий риск переобучения.

  • Сохраняется проблема затухающих градиентов.

  • Большое потребление ресурсов.

  • Ограниченная глубина сети, что ограничивает способность извлекать сложные иерархические признаки из изображений.

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

Подробнее

  1. Статья

  2. Код 1, код 2

VGG NET (2014)

Архитектура, предложенная исследовательской группой Visual Geometry Group Оксфордского университета. Участвовала в ILSVRC 2014 года и заняла второе место, уступив лишь GoogleNet. VGG NET состоит из сверточных фильтров 3×3, имеет несколько версий, которые отличаются количеством слоев. Наиболее известные: VGG-16 (13 сверток и 3 полносвязных слоя) и VGG-19 (16 сверток и 3 полносвязных слоя).

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

Особенности

  1. Маленькие фильтры (3×3):

    • VGG использует небольшие фильтры размером 3×3 во всех сверточных слоях, что позволяет захватывать детали изображения более точно. Кроме того, последовательное применение нескольких таких слоев с небольшими фильтрами эквивалентно применению большего фильтра (например, 5×5 или 7×7), но с меньшим количеством параметров.

    • Это отличается от AlexNet, где использовались более крупные фильтры, такие как 11×11 в первом сверточном слое.

  2. Использование max‑pooling:

    • VGG использует max‑pooling слои с размером окна 2×2 и шагом 2 для уменьшения размерности признаковых карт и обеспечения некоторой степени инвариантности к смещениям.

    • Этот подход схож с AlexNet, но VGG применяет pooling более регулярно, что способствует уменьшению размерности изображения.

  3. Полносвязные слои. В конце сети VGG содержатся три полносвязных слоя: первые два с 4096 нейронами каждый, и последний, выходной, с числом нейронов, соответствующим количеству классов (например, 1000 для ImageNet).

  4. Функция активации ReLU. VGG использует ReLU для активации, что позволяет сети обучаться быстрее и избегать проблем, связанных с затухающими градиентами.

  5. Отсутствие нормализации LRN. В отличие от AlexNet, VGG не использует Local Response Normalization (LRN), что упрощает архитектуру и уменьшает вычислительные затраты без значительных потерь в производительности.

  6. Объем данных и вычислительные ресурсы. VGG была обучена на наборе данных ImageNet, что требовало значительных вычислительных ресурсов, особенно из‑за большого числа слоев и параметров.

  7. Количество параметров. VGG16 имеет примерно 138 миллионов параметров (VGG19 имеет 144 миллиона параметров), что делает ее очень требовательной к памяти и вычислительным ресурсам. Для сравнения, AlexNet имеет около 60 миллионов параметров.

Недостатки

  • Высокие вычислительные затраты и использование памяти. VGG имеет большое количество параметров из‑за использования многих сверточных слоев с 3×3 фильтрами. Это приводит к высокому потреблению ресурсов и долгому времени обучения, особенно на крупных наборах данных.

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

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

  • Большой размер модели: VGG модели занимают много места в памяти. Например, VGG16 весит более 500 МБ, что неудобно для интеграции в мобильные устройства или приложения с ограниченными ресурсами.

  • Устаревшие методы оптимизации: Новые модели, такие как ResNet, использующие остаточные соединения, имеют более высокую точность при меньших вычислительных затратах и меньшем количестве параметров, что делает их более предпочтительными в современных приложениях.

Подробнее

  1. Статья

  2. Код

GoogLeNet/Inception (2014)

Архитектура, разработанная Google. Использует модуль Inception, основная идея которого заключается в комбинировании различных типов сверток с разными размерами фильтров и пуллинга для более эффективного извлечения признаков. Победитель ILSVRC 2014.

Особенности

  1. Inception‑блоки.

    • Основная идея Inception — использование Inception‑блоков, которые применяют сверточные операции с разными размерами фильтров (1×1, 3×3, 5×5) и max‑pooling параллельно. Это позволяет сети извлекать признаки на разных уровнях детализации.

    • Вместо того, чтобы выбирать один размер фильтра на каждом уровне, Inception‑блоки используют все размеры одновременно, а затем объединяют результаты, что позволяет сети эффективно извлекать и комбинировать признаки.

  2. 1×1 сверточные слои.

    • Inception активно использует сверточные слои с фильтрами 1×1 для уменьшения размерности (числа каналов) перед применением более крупных фильтров. Это снижает вычислительную нагрузку и позволяет использовать более сложные модели, не увеличивая существенно число параметров.

    • Свертки 1×1 также позволяют вводить нелинейности между слоями, что улучшает обучаемость сети.

    • 3×3 и 5×5 свертки для извлечения признаков на разных масштабах.

    • MaxPooling 3×3, позволяющий захватывать наиболее важные признаки.

  3. Эффективность вычислений.

    • Inception спроектирована с учетом необходимости повышения вычислительной эффективности. За счет использования различных размеров фильтров и объединения их результатов сеть может извлекать более разнообразные признаки без значительного увеличения количества параметров и вычислительной нагрузки.

    • В отличие от более глубоких моделей, таких как VGG, которые требуют значительных вычислительных ресурсов из‑за большого количества слоев, Inception достигает высокой точности при более разумных затратах.

  4. Архитектурное новшество.

    • Inception внесла концепцию смешанных признаков и мультиразмерных сверточных фильтров, что позволило значительно улучшить извлечение признаков на разных уровнях детализации.

    • Это отличает ее от предыдущих архитектур, таких как VGG и AlexNet, которые использовали последовательные слои с фиксированными размерами фильтров.

  5. Глубина сети. Первая версия Inception v1 (GoogleNet) содержит 22 слоя, что делает ее глубже, чем AlexNet и даже VGG, при этом структура отличается благодаря инновационному использованию Inception‑блоков.

  6. Auxiliary classifiers (вспомогательные классификаторы).

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

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

  7. Global average pooling. В финальном слое перед полносвязным слоем Inception использует глобальный средний пулинг (global average pooling), который значительно снижает количество параметров, в отличие от традиционных полносвязных слоев, что делает сеть более устойчивой к переобучению.

Недостатки

  • Модульная структура и разнообразие фильтров делает модель сложной для реализации, настройки и отладки.

  • Сложности с распараллеливанием операций.

  • Затухающие градиенты.

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

  • Хотя GoogleNet оптимизировала использование ресурсов по сравнению с VGG, она все равно требует значительных вычислительных ресурсов, особенно для обучения. Каждый блок Inception включает множество параллельных операций, что приводит к дополнительной нагрузке на память и процессор.

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

Подробнее

  1. Статья

  2. Код 1, код 2.

Inception v2 и Inception v3 — это улучшенные версии оригинальной архитектуры Inception. Обе версии сохраняют основные идеи предыдущей версии, но добавляют ряд улучшений для повышения точности и эффективности. Рассмотрим их подробнее.

Inception v2

Основные улучшения:

  1. Факторизация сверток. В Inception v2 предложен метод факторизации сверток, который разбивает большие свертки на более мелкие. Например, вместо свертки 5×5 используется последовательность двух сверток 3×3. Это значительно уменьшает количество параметров и вычислительные затраты, сохраняя при этом качество.

  2. Batch Normalization. Внедрение механизма пакетной нормализации (Batch Normalization) в каждый Inception блок помогает улучшить стабильность и скорость обучения, а также может повысить качество конечной модели. Нормализация снижает внутренние смещения и ускоряет сходимость.

  3. Упрощение блоков. Структура блоков была оптимизирована для лучшей производительности, сохраняя при этом концепцию параллельных слоев.

  4. Применение прямого соединения. Как и в предыдущих версиях, Inception v2 использует прямые соединения, которые помогают модели сохранять информацию от ранних слоев.

Inception v3

Основные улучшения:

  1. Оптимизация структуры. Inception v3 вводит еще более сложные структуры с улучшенной факторизацией сверток, включая использование сверток 1×3 и 3×1 для уменьшения пространственного разрешения. Это обеспечивает более эффективное представление информации.

  2. Смещение с использованием фрагментов (RMSProp). В Inception v3 используется оптимизатор RMSProp, который помогает избежать проблем с затухающими градиентами и способствует более стабильному обучению.

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

  4. Улучшение на уровне моделей. Inception v3 содержит больше параметров, что позволяет модели лучше обучаться и подстраиваться под разнообразные наборы данных, но также делает ее более требовательной к ресурсам.

  5. Переход к более глубоким структурам. Увеличена глубина сети, что позволяет улучшить представление и обработку информации на более высоких уровнях.

ResNet (2015)

ResNet (Residual Network) — это архитектура сверточных нейронных сетей, разработанная исследовательской группой Microsoft под руководством К. Хэ (Kaiming He), X. Жаня (Xiangyu Zhang), С. Жэня (Shaoqing Ren) и Д. Суна (Jian Sun) в 2015 году. Использует остаточные блоки (Residual Blocks), которые позволяют строить сверхглубокие сети (до 152 слоев) без проблемы затухающих градиентов. Завоевала первое место на конкурсе ILSVRC 2015.

ResNet стала одной из самых значимых архитектур в области глубокого обучения, поскольку она решает проблему обучения очень глубоких сетей. Стала основой для многих других архитектур, таких как ResNeXt, DenseNet и EfficientNet, которые также используют остаточные блоки и прямые переходы для достижения лучшей производительности.

Особенности

  1. Резидуальные связи (Residual Connections).

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

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

  2. Резидуальные блоки (Residual Blocks).

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

    • Обычно в блоке используются сверточные слои с фильтрами 3×3, хотя могут быть и другие конфигурации.

  3. Глубокие сети. ResNet позволила строить сети с очень большим числом слоев, например, ResNet-50, ResNet-101 и ResNet-152 (и другие модификации), где цифры обозначают количество слоев в сети. Эти сети значительно глубже, чем предыдущие архитектуры, такие как VGG, и при этом обучаются эффективно благодаря резидуальным связям.

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

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

  6. Сокращенные резидуальные блоки (Bottleneck Blocks). В более глубоких версиях ResNet (например, ResNet-50 и глубже) используется концепция bottleneck‑блоков, где резидуальный блок состоит из трех сверточных слоев: сначала 1×1 для сокращения размерности, затем 3×3 для свертки, и снова 1×1 для увеличения размерности обратно. Это снижает количество вычислений и параметров при сохранении высокой производительности.

Недостатки

  • Требуются значительные вычислительные ресурсы и память, особенно для ResNet-101 и ResNet-152. При этом увеличение числа слоев не всегда улучшает производительность, а может даже снижать точность модели или не давать значительных улучшений. Например, переход от ResNet-101 к ResNet-152 дает лишь незначительный прирост точности при большом увеличении вычислительных затрат.

  • Переобучение на глубоких уровнях.

  • Требуется сложное проектирование.

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

  • Усложнение архитектуры с использованием пропускных соединений делает анализ внутренней работы сети и интерпретацию ее решений сложнее по сравнению с более простыми архитектурами.

Подробнее

  1. Статья

  2. Код (показывает пример не из коробки, чтобы наглядно видеть, как собирается сама модель, как работают оптимизаторы и тд.)

DenseNet (2017)

DenseNet (Densely Connected Convolutional Networks) — это архитектура сверточных нейронных сетей, предложенная Гао Хуангом (Gao Huang), Зи Лиу (Zhuang Liu), Лораном ван дер Маатеном (Laurens van der Maaten) и Киллером Вайнбергером (Kilian Weinberger) в 2017 году. DenseNet стала важным шагом в развитии глубоких нейронных сетей благодаря новому подходу к соединению слоев, позволило улучшить передачу информации и градиентов через сеть.

Особенности

  1. Плотные соединения (Dense Connections).

    • В DenseNet каждый слой соединяется со всеми предыдущими слоями. То есть каждый слой получает в качестве входа не только результаты предыдущего слоя, но и выходы всех предыдущих слоев. Это приводит к тому, что в DenseNet имеется общее соединение всех слоев с каждым последующим слоем.

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

  2. Сокращение количества параметров.

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

    • Более эффективное использование параметров делает DenseNet менее подверженной переобучению.

  3. Улучшенная передача градиента. В DenseNet благодаря плотным соединениям улучшается передача градиента в обратном направлении, что облегчает обучение очень глубоких сетей. Проблемы затухающих градиентов, которые характерны для очень глубоких сетей, значительно смягчаются.

  4. Глубина сети и компоновка.

    • DenseNet включает в себя множество плотных блоков (Dense Blocks), между которыми располагаются переходные слои (Transition Layers). В каждом плотном блоке все слои полностью связаны между собой. Переходные слои выполняют функции понижающей выборки (downsampling) с помощью операций свертки и пулинга.

    • Например, архитектуры DenseNet могут быть настроены на различное количество плотных блоков и слоев внутри каждого блока, что позволяет настраивать глубину сети в зависимости от задачи.

  5. Growth rate (темп роста). В DenseNet введено понятие темпа роста (growth rate), которое определяет, насколько увеличивается количество каналов признаков при переходе от одного слоя к другому. Если темп роста составляет 32, это означает, что каждый слой добавляет 32 новых канала к уже существующим признакам.

  6. Использование Bottleneck‑слоев и переходных слоев.

    • Bottleneck‑слои — это сверточные слои с фильтрами 1×1, которые применяются для уменьшения размерности признаков перед подачей их в более глубокие слои. Это уменьшает вычислительные затраты и количество параметров.

    • Переходные слои (Transition Layers) используются для понижения размерности признаковых карт и выполнения pooling‑а, чтобы контролировать размер признаков и глубину сети.

Улучшения

  1. Эффективное использование признаков. В DenseNet каждый слой имеет доступ ко всем признакам, вычисленным предыдущими слоями, что улучшает извлечение признаков и делает сеть более эффективной в плане использования параметров. В отличие от ResNet, где слои соединены через пропуски (skip connections), в DenseNet создается гораздо больше связей между слоями, что улучшает обучение.

  2. Более эффективное обучение и передача градиента.

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

    • В сравнении с другими архитектурами, такими как VGG и Inception, DenseNet более устойчива к проблемам, связанным с обучением глубоких сетей.

  3. Меньшее количество параметров. Несмотря на большое количество соединений, DenseNet имеет меньше параметров, чем аналогичные архитектуры, такие как ResNet, за счет эффективного повторного использования признаков и применения bottleneck‑слоев. Это делает модель более компактной и менее подверженной переобучению.

  4. Лучшее использование вычислительных ресурсов. DenseNet более эффективно использует вычислительные ресурсы, чем другие глубокие сети, такие как VGG или ResNet, поскольку повторное использование признаков снижает необходимость в большом количестве нейронов и параметров.

Недостатки

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

  • Сложность архитектуры.

  • Трудность интерпретации — так как каждый слой получает данные от всех предыдущих слоев, усложняется анализ поведения модели и трассировка (какие признаки используются и где).

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

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

  • Меньшая адаптивность к легковесным решениям. Несмотря на то, что DenseNet уменьшает количество параметров, ее структура с плотными соединениями делает её менее подходящей для задач, где важны легкость и скорость выполнения (например, для мобильных устройств).

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

Подробнее

  1. Статья

  2. Код

EfficientNet (2019)

EfficientNet — это серия нейронных сетей, разработанная в 2019 году исследовательской командой Google Brain под руководством Мингжера Тана и Квок Ле для повышения эффективности сверточных нейронных сетей (CNN). Основная идея EfficientNet заключается в том, что масштабирование сети (увеличение числа слоев, ширины или разрешения) должно происходить сбалансированным образом для максимальной производительности и эффективности.

Особенности

  1. Масштабирование в трех измерениях. EfficientNet использует метод, называемый Compound Scaling (составное масштабирование), который позволяет одновременно увеличивать глубину, ширину и разрешение изображения сети. Это позволяет избегать проблемы неэффективности, когда увеличиваются только один или два аспекта архитектуры.

  2. EfficientNet‑B0 и автоматический поиск архитектуры. EfficientNet‑B0 — базовая модель, созданная с использованием автоматического поиска архитектуры сети, которая была улучшена за счет нейроэволюции с применением технологии Neural Architecture Search (NAS) (см. ниже). После этого на базе EfficientNet‑B0 были сгенерированы более крупные модели (B1-B7) путем применения составного масштабирования.

  3. Баланс производительности и вычислительных затрат. EfficientNet достигла значительных улучшений в производительности на таких бенчмарках, как ImageNet, в сравнении с другими архитектурами CNN, такими как ResNet и Inception, при меньших вычислительных затратах и сжатом размере модели.

  4. Эффективность. EfficientNet обеспечивает высокое соотношение точности и вычислительных затрат. Например, EfficientNet‑B7 достигает топовой точности при значительно меньшем числе параметров по сравнению с ResNet-152 и других глубоких сетей.

  5. Компактные модели. EfficientNet требует меньше параметров и вычислительных ресурсов для достижения аналогичных результатов по сравнению с предыдущими архитектурами.

Недостатки

  • Автоматизация поиска архитектуры. Автоматический поиск архитектуры с помощью NAS требует значительных вычислительных ресурсов на этапе поиска оптимальной модели.

  • Оптимизация под задачи. Хотя EfficientNet хорошо справляется с задачами классификации изображений, её производительность в других задачах (например, сегментации или обнаружении объектов) может потребовать дополнительных адаптаций.

  • Сложность настройки. Архитектура может быть сложна для адаптации к задачам, отличным от классификации изображений, без глубокой настройки и дополнительного обучения.

Подробнее

Статья

Метод NAS

NAS (Neural Architecture Search) — это метод автоматического поиска архитектур нейронных сетей, который применяется для оптимизации дизайна модели с минимальным вмешательством человека. Основная цель NAS — найти архитектуру, которая обеспечивает наилучшую производительность для конкретной задачи (например, классификации изображений, распознавания речи и т. д.), при этом минимизируя вычислительные затраты и количество параметров модели.

Основные этапы NAS:

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

  2. Метод поиска. Существует несколько методов поиска оптимальной архитектуры в пространстве архитектур:

    • Эволюционные алгоритмы. Используются принципы естественного отбора для эволюции архитектур.

    • Усиленное обучение (Reinforcement Learning). Агенты обучаются выбирать комбинации архитектур, чтобы максимизировать производительность модели на основе метрики качества (например, точности).

    • Градиентный спуск. Некоторые более новые подходы пытаются найти оптимальные архитектуры с использованием градиентных методов.

    • Байесовская оптимизация (Bayesian Optimization). Использует байесовские модели для выбора следующей архитектуры на основе предсказания производительности.

    • Методы ранней остановки (Early Stopping Methods). Прерывание обучения архитектур, которые показывают плохие результаты на ранних стадиях, для экономии ресурсов.

    • Методы передачи знаний (Transfer Learning‑based NAS). Использование предварительно обученных моделей или результатов поиска из одной задачи для ускорения поиска архитектуры в другой задаче.

    • Поиск в пространстве блоков (Cell‑based NAS). Архитектура разбивается на модульные блоки (ячейки), которые ищутся и оптимизируются отдельно. Найденные блоки затем объединяются для создания полной сети.

    • Суррогатное моделирование (Surrogate Model‑based NAS). Создание модели, которая предсказывает производительность архитектур без полного обучения, чтобы ускорить поиск.

  3. Оценка производительности. Каждая из сгенерированных архитектур обучается на тренировочных данных, и оценивается ее производительность (например, точность на валидационном наборе данных). Этот этап может быть очень затратным по времени, так как требует полноценного обучения каждой новой архитектуры.

Достоинства NAS:

  • Автоматизация процесса. NAS позволяет автоматически проектировать архитектуры, которые превосходят вручную спроектированные сети по производительности.

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

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

Недостатки NAS:

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

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

ViT (2020)

На данный момент существуют различные вариации transformer для компьютерного зрения, и рассказать про каждую из них в данной статье не представляется возможным. Статьи для базового понимания трансформеров, которые мне понравились: статья 1, статья 2, статья 3. И вот еще хороший материал с более глубоким объяснением ViT.

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

Vision Transformer (ViT) — это архитектура, предложенная в 2020 году исследователями из Google для обработки изображений с использованием трансформеров, которые ранее применялись, в основном, для задач обработки последовательностей, таких как NLP (обработка естественного языка). ViT стал революционным подходом в компьютерном зрении, предлагая конкурентоспособную производительность по сравнению с традиционными сверточными нейронными сетями (CNN).

Основные идеи ViT:

  1. Трансформеры для изображений. ViT использует архитектуру трансформеров, которая зарекомендовала себя в задачах обработки текста, таких как модели BERT и GPT, и адаптирует ее для задач обработки изображений. В отличие от CNN, которые основаны на свертках, ViT применяет механизмы self‑attention (самовнимание) для понимания глобальных и локальных взаимосвязей в изображениях.

  2. Разбиение изображения на патчи. Основная идея ViT заключается в разбиении изображения на небольшие квадратные блоки или патчи. Эти патчи рассматриваются как «слова» (как в NLP), которые затем передаются на вход трансформеру.

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

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

  5. Классификационная задача. ViT использует специальный токен [CLS] (class token), как в BERT, который обобщает информацию из всех патчей после обработки трансформером. Этот токен затем используется для классификации изображений.

Особенности:

  1. Глобальные отношения. Благодаря механизму self‑attention ViT может моделировать долгосрочные и глобальные зависимости между различными частями изображения, что трудно реализовать с помощью стандартных CNN, где фильтры обрабатывают локальные паттерны.

  2. Эффективность на больших данных. ViT демонстрирует превосходную производительность, особенно на больших наборах данных (например, ImageNet-21k). При достаточном объеме данных и вычислительных ресурсов ViT превосходит CNN в классификационных задачах.

  3. Универсальность. Модель можно легко масштабировать под различные задачи, изменяя количество слоев трансформера или размер патчей. ViT можно адаптировать к различным размерам входных изображений.

  4. Конкурентоспособность по отношению к CNN. ViT показал отличные результаты на таких крупных наборах данных, как ImageNet, и в некоторых случаях превосходит традиционные сверточные сети, такие как ResNet, EfficientNet и другие.

Недостатки ViT:

  1. Необходимость больших данных. ViT требует большого объема данных для обучения. На стандартных наборах данных, таких как ImageNet (1M изображений), ViT показывает результаты хуже CNN. Однако на более крупных наборах (например, ImageNet-21k или JFT-300M) модель демонстрирует свои преимущества.

  2. Вычислительные затраты. Трансформеры требуют больше вычислительных ресурсов по сравнению с CNN, особенно на уровне self‑attention механизмов, которые имеют квадратичную сложность по числу патчей. Это делает ViT менее эффективным для задач с высоким разрешением изображений.

  3. Плохая работа на малых данных. ViT нуждается в предобучении на больших наборах данных. Без предварительного обучения, производительность на небольших датасетах хуже, чем у CNN.

Подробнее

  1. Статья

  2. Репозиторий с кодом


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

Продолжение следует: в следующей статье я разберу сегментацию изображений.

Комментарии (1)


  1. IamSVP
    06.11.2024 08:27

    Отличный материал для подготовки к собесам! Жаль еще что ConvNext нет в списке)