Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 1/12
Кратко:
- Для решения сложных задач нужно познакомиться со свёрточными сетями.
- Обучение свёрточным сетям с помощью библиотеки Keras.
- Аугментация данных и архитектура ResNet.
- 10 уроков по 10-15 минут.
- Улучшение результатов классификации одежды и построение нейросети для овощей и фруктов в магазине.
Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 2/12
Кратко:
- Свёртка решает проблему работы с большими изображениями для полносвязных сетей.
- Свёртка применяет одинаковые операции к каждому пикселю изображения.
- Одномерная свёртка применяется к последовательностям, вычисляя скалярное произведение между весами и элементами последовательности.
- Двумерная свёртка работает с двумерными изображениями и матрицами весов, суммируя произведения элементов.
- Горизонтальные контуры изображения можно обнаружить с помощью ядра свёртки, разработанного американскими учёными Ирвином Собелем и Гари Фельдманом.
- Вертикальные контуры изображения можно обнаружить с помощью другого ядра свёртки.
Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 3/12
Кратко:
- Сверточные слои - основная часть вычислительной работы свёрточных нейронных сетей (CNN).
- Свёрточные слои состоят из настраиваемых и обучаемых фильтров - наборов весов, применяемых к изображению.
- Фильтр - квадратная матрица размером KxK пикселей, для цветных изображений добавляется глубина.
- В свёрточных слоях меньше параметров, чем в полносвязных, что облегчает обучение.
- В свёрточных слоях используются padding и stride для настройки работы фильтров.
- Размер выходного тензора после свёрточного слоя вычисляется по формуле, учитывая размер входного изображения, фильтр, padding и шаг.
- Визуализатор на GitHub помогает лучше понять работу свёрток с разными параметрами.
Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 4/12
Кратко:
- Свёрточные слои Keras создаются с помощью keras.layers.Conv2D()
- Параметры слоя: filters (количество фильтров), kernel_size (размер фильтра), strides (размер шага свёртки), padding (толщина отбивки из нулей), activation (активация после свёртки)
- Для передачи результатов свёрточного слоя полносвязному слою нужно подключить слой Flatten
- Обучать модели от начала до конца не стоит, сначала нужно научиться применять свёрточные сети, а затем обучить их на графических картах
Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 5/12
Кратко:
- Пулинг - это техника, которая уменьшает количество параметров модели.
- Max Pooling (англ. «максимальный пулинг») выбирает максимальное значение в каждом окне из четырех пикселей.
- Average Pooling (англ. «средний пулинг») возвращает среднее значение из группы пикселей внутри канала.
- LeNet - популярная архитектура для классификации изображений размером 20-30 пикселей.
- LeNet состоит из 2-3 сверточных слоев размером 5x5 и Average Pooling размером 2x2.
- Количество фильтров растет от слоя к слою, чтобы не потерять важную информацию.
- В конце сети идут 1-2 полносвязных слоя, которые собирают все признаки и классифицируют их.
Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 6/12
Кратко:
- Алгоритм Adam является альтернативой градиентному спуску (SGD) для обучения нейронных сетей.
- Он автоматически подбирает шаг обучения, что ускоряет процесс обучения и улучшает качество модели.
- Алгоритм Adam использует адаптивную оценку моментов для подбора параметров обучения.
- Визуализация Эмильена Дюпона показывает, что Adam быстрее находит минимум, чем SGD.
- В Keras алгоритм Adam записывается как model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['acc']).
- Основной настраиваемый гиперпараметр алгоритма Adam - скорость обучения (learning rate), которая может быть уменьшена для улучшения качества модели.
Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 7/12
Кратко:
- Руководство магазина разработало систему компьютерного зрения для определения фруктов и овощей на весах.
- Датасет с фотографиями плодов находится в папке /datasets/fruits_small/.
- В наборе данных есть несколько папок с изображениями фруктов и овощей.
- В библиотеке Keras есть удобный загрузчик ImageDataGenerator.
- Чтобы обучить модель на этих данных, передайте объект datagen_flow в метод fit().
- В методе fit() должна быть не только обучающая, но и валидационная выборка.
Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 8/12
Кратко:
- Аугментации в Keras позволяют увеличить выборку изображений для повышения качества моделей.
- В ImageDataGenerator есть опции для добавления аугментаций, которые по умолчанию отключены.
- Для обучающей и валидационной выборок нужно создать разные генераторы.
- Чтобы обучающая и валидационная выборки не содержали общих элементов, задайте объектам одинаковое значение seed.
Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 9/12
Кратко:
- Построить и обучить свёрточную нейронную сеть для классификации фруктов.
- Использовать три функции: загрузка обучающей выборки, создание модели, запуск модели.
- Добиться значения accuracy не менее 90% на тестовой выборке.
- Обучить простую сеть на одной эпохе без аугментации для проверки работоспособности кода.
- Не применять повороты сразу, они увеличивают время обучения.
- Время обучения однослойной сети и архитектуры из 7-8 слоёв может быть одинаковым.
- Перейти на курс "Компьютерное зрение - практика обучения нейронных сетей", тема "Свёрточные сети", урок "Свёрточные сети для классификации фруктов (GPU)".
Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 10/12
Кратко:
- ResNet - самая известная архитектура сверточных нейросетей.
- ResNet решает проблему затухающего градиента в глубоких сетях.
- Главная особенность ResNet - использование Shortcut Connections.
- ResNet состоит из блоков с повторяемыми слоями и свёрточных слоев.
- Количество слоев в ResNet определяется глубиной сети.
- ResNet и его модификации используются для решения различных задач компьютерного зрения.
- Семейство архитектур ResNet является популярным решением для задач компьютерного зрения.
Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 11/12
Кратко:
- Импортировать архитектуру ResNet в Keras можно с помощью from tensorflow.keras.applications.resnet import ResNet50.
- Аргументы включают размер входного изображения, количество классов и инициализацию весов.
- include_top=True указывает на наличие двух слоев в конце архитектуры ResNet.
- Чтобы адаптировать ResNet50 к задаче, можно убрать верхушку и сконструировать модель заново.
- Для уменьшения переобучения можно "заморозить" часть сети, оставив только 1-2 полносвязных слоя наверху.
- Заморозка позволяет избавиться от переобучения и повысить скорость обучения сети.
- Веса модели ResNet50 можно загрузить на сервер и указать путь к файлу в аргументе weights.
Спринт 19/25 → Тема 4/6: Свёрточные сети → Урок 12/12
Заключение