Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шолле Ф. - Глубокое обучение на Python (Библиотека программиста) - 2023.pdf
Скачиваний:
6
Добавлен:
07.04.2024
Размер:
11.34 Mб
Скачать

272    Глава 8. Введение в глубокое обучение в технологиях зрения

8.2. ОБУЧЕНИЕ СВЕРТОЧНОЙ НЕЙРОННОЙ СЕТИ С НУЛЯ НА НЕБОЛЬШОМ НАБОРЕ ДАННЫХ

Необходимость.обучения.модели.классификации.изображений.на.очень.неболь- шом.объеме.данных.—.обычная.ситуация,.с.которой.вы.наверняка.столкнетесь. в.своей.практике,.если.будете.заниматься.распознаванием.образов.с.помощью. технологий.компьютерного.зрения.на.профессиональном.уровне..Под.небольшим.объемом.понимается.от.нескольких.сотен.до.нескольких.десятков.тысяч. изображений..В.качестве.практического.примера.рассмотрим.классификацию. изображений.собак.и.кошек.из.набора.данных,.содержащего.5000.изображений. (2500.кошек,.2500.собак)..Мы.будем.использовать.2000.изображений.для.обучения,.1000.для.проверки.и.2000.для.контроля.

В.этом.разделе.рассматривается.одна.простая.стратегия.решения.данной.задачи:.обучение.новой.модели.с.нуля.при.наличии.небольшого.объема.исходных. данных..Сначала.мы.обучим.маленькую.сверточную.нейронную.сеть.на.2000.обучающих.образцах.без.применения.регуляризации,.чтобы.задать.базовый.уровень.достижимого..Она.даст.нам.точность.классификации.около.70.%..С.этого. момента.начнет.проявляться.эффект.переобучения..Затем.вашему.вниманию. будет.представлен.эффективный.способ.уменьшения.степени.переобучения. в.распознавании.образов.—.обогащение данных.(data.augmentation)..С.его.по- мощью.мы.повысим.точность.классификации.до.80–85.%.

В.следующем.разделе.мы.рассмотрим.еще.два.важных.приема.глубокого.обучения. на.небольших.наборах.данных:.выделение признаков с использованием предварительно обученной модели.(поможет.поднять.точность.до.97,5.%).и.дообучение предварительно обученной сети.(поможет.достичь.окончательной.точности.98,5.%).. Вместе.эти.три.стратегии.—.обучение.малой.модели.с.нуля,.выделение.признаков. с.использованием.предварительно.обученной.модели.и.дообучение.этой.модели.—. станут.вашим.основным.набором.инструментов.для.решения.задач.классификации. изображений.с.обучением.на.небольших.наборах.данных.

8.2.1. Целесообразность глубокого обучения для решения задач с небольшими наборами данных

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

8.2. Обучение сверточной нейронной сети с нуля    273

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

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

А.пока.начнем.с.получения.данных.

8.2.2. Загрузка данных

Набор.данных.Dogs.vs..Cats,.который.мы.будем.использовать,.не.поставляется.

в.составе.Keras..Он.был.создан.в.ходе.состязаний.по.распознаванию.образов.

в.конце.2013.года,.когда.сверточные.нейронные.сети.еще.не.заняли.лидиру­ ющего.положения,.и.доступен.на.сайте.Kaggle..Этот.набор.можно.получить.по. адресу.www.kaggle.com/c/dogs-vs-cats/data .(вам.потребуется.создать.учетную.запись. на.сайте.Kaggle,.если.у.вас.ее.еще.нет,.но.не.волнуйтесь,.процесс.регистрации. очень.прост)..Также.есть.возможность.взять.Kaggle.API.для.загрузки.набора. данных.в.Colab,.как.описывается.во.врезке.«Загрузка.набора.данных.из.Kaggle.

в.Google.Colaboratory».

Этот.набор.содержит.изображения.в.формате.JPEG.со.средним.разрешением..

На.рис..8.8.показано.несколько.примеров.

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

274    Глава 8. Введение в глубокое обучение в технологиях зрения

ЗАГРУЗКА НАБОРА ДАННЫХ ИЗ KAGGLE В GOOGLE COLABORATORY

Kaggle поддерживает простой в использовании API для загрузки наборов данных программным способом. Вы можете использовать его, например, чтобы загрузить набор данных Dogs vs. Cats в блокнот Colab. API доступен в виде пакета kaggle, предустановленного в Colab. Чтобы загрузить этот набор данных, достаточно выполнить следующую команду в ячейке Colab:

!kaggle competitions download -c dogs-vs-cats

Однако этот API доступен только пользователям Kaggle, поэтому, прежде чем приступить к выполнению предыдущей команды, следует аутентифицировать себя. Пакет kaggle будет искать ваши учетные данные в JSON-файле ~/.kaggle/kaggle.json. Давайте создадим этот файл.

СначаласоздайтеключKaggleAPIизагрузитеегонасвойкомпьютер.Дляэтого войдитенасайтKaggleвбраузере,зарегистрируйтесьиперейдитенастраницу My Account (Моя учетная запись). В настройках учетной записи вы найдете раздел API. Нажмите кнопку Create New API Token (Создать новый токен API), чтобы сгенерировать файл ключа kaggle.json и загрузить его на свой компьютер.

Затем перейдите в блокнот Colab и выгрузите JSON-файл с ключом API в сеанс Colab, выполнив следующий код в ячейке блокнота:

from google.colab import files files.upload()

После этого появится кнопка Choose Files (Выбрать файлы). Щелкните на ней и выберите только что загруженный файл kaggle.json. После этого файл будет выгружен в локальную среду выполнения Colab.

Наконец, создайте папку ~/.kaggle (mkdir ~/.kaggle) и скопируйте в нее файл ключа (cp kaggle.json ~/.kaggle/). Для безопасности сделайте файл доступным для чтения только текущему пользователю (chmod 600):

!mkdir ~/.kaggle

!cp kaggle.json ~/.kaggle/ !chmod 600 ~/.kaggle/kaggle.json

Теперь можно загрузить данные, которые мы будем использовать:

!kaggle competitions download -c dogs-vs-cats

При первой попытке загрузки данных может возникнуть ошибка 403 Forbidden. Это объясняется необходимостью принять условия, связанные с набором данных, прежде чем загрузить их, — перейдите на страницу www.kaggle.com/c/ dogs-vs-cats/rules (предварительно зарегистрировавшись со своими учетными данными Kaggle) и нажмите кнопку I Understand and Accept (Я понимаю и принимаю). Это нужно сделать только один раз.

Кроме того, обучающие данные находятся в сжатом архиве train.zip. Распакуйте его (unzip) в режиме без вывода сообщений (-qq):

!unzip -qq train.zip

8.2. Обучение сверточной нейронной сети с нуля    275

Рис. 8.8. Примеры изображений из набора Dogs vs. Cats. Размеры не были изменены: изображения имеют разные размеры, ракурсы съемки и т. д.

Данный.набор.содержит.25.000.изображений.кошек.и.собак.(по.12.500.для. каждого.класса).общим.объемом.543.Мбайт.(в.сжатом.виде)..После.загрузки. и.распаковки.архива.мы.создадим.новый.набор,.разделенный.на.три.поднабора:. обучающий.набор.с.1000.образцов.каждого.класса,.проверочный.набор.с.500.образцами.каждого.класса.и.контрольный.набор.с.1000.образцов.каждого.класса.. «Зачем?».—.спросите.вы..Дело.в.том,.что.многие.наборы.изобразительных. данных,.с.которыми.вы.столкнетесь.в.своей.карьере,.содержат.всего.несколько. тысяч.образцов,.а.не.десятки.тысяч..Наличие.большего.количества.данных. усложнило.бы.задачу,.поэтому.рекомендуется.проводить.обучение.с.использованием.небольшого.набора.данных.

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

cats_vs_dogs_small/

...train/

......cat/

 

 

Содержит 1000 изображений кошек

 

 

......dog/

 

 

Содержит 1000 изображений собак

 

 

...validation/

 

 

......cat/

 

 

Содержит 500 изображений кошек

 

 

......dog/

 

 

Содержит 500 изображений собак

 

 

...test/

 

 

......cat/

 

 

Содержит 1000 изображений кошек

 

 

......dog/

 

 

Содержит 1000 изображений собак

 

 

Все.необходимое.можно.сделать.парой.вызовов.shutil.