Scraper Обновлено: 26 March, 2019

Практическое руководство по TensorFlow: обучение ResNet-50 с нуля с использованием набора данных ImageNet

  Перевод   Ссылка на автора

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

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

Мы покрываем все, что вам нужно сделать, начиная с запуска TensorFlow, загрузки и подготовки ImageNet, вплоть до документирования и подготовки отчетов. Все эксперименты и тренировки проводились на Точное Валентное Рабочее место использование 2 графических процессоров NVIDIA RTX 2080 Ti.

В чем смысл? Разве я не могу просто использовать трансферное обучение?

Да, однако это руководство является хорошим упражнением для обучения большой нейронной сети с нуля с использованием большого набора данных (ImageNet). Хотя трансферное обучение - замечательная вещь, и вы можете загрузить предварительно обученные версии ResNet-50, вот несколько убедительных причин, по которым вы можете захотеть пройти это учебное упражнение:

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

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

Шаг 1) Запустите контейнер TensorFlow Docker.

Прежде всего, вы захотите запустить свою среду TensorFlow. Нам нравится работать с Docker, поскольку он дает нам максимальную гибкость и воспроизводимую среду. Откройте окно терминала и начните!

ПРИМЕЧАНИЕ. Обязательно укажите свой тег -v, чтобы создать интерактивный том в контейнере.

nvidia-docker run -it -v /data:/datasets tensorflow/tensorflow:nightly-gpu bash

ИЛИесли вы планируете запускать Tensorboard в Docker-контейнере, обязательно укажите-p 6006: 6006и используйте следующую команду вместо этого.

nvidia-docker run -it -v /data:/datasets -p 6006:6006 tensorflow/tensorflow:nightly-gpu bash

Шаг 2) Загрузите и предварительно обработайте набор данных ImageNet.

Мы решили включить этот шаг, так как он, кажется, вызывает небольшую путаницу. ПРИМЕЧАНИЕ: вы захотите убедиться, что у вас есть более 300 ГБ дискового пространства (как мы выяснили), когда вы делаете этот шаг, так как шаг загрузки и предварительной обработки требует этого!

2.1) Для первого шага вам необходимо установить «git», если он не является частью вашей среды.

apt-get install git

2.2) Во-вторых, вы должны клонировать репозиторий TPU в своей среде (Нет, мы не используем TPU Google, но здесь содержатся важные сценарии предварительной обработки!)

git clone https://github.com/tensorflow/tpu.git

2.3) В-третьих, вам нужно установить зависимости GCS (даже если вы не используете GCS, вам все равно нужно это запустить!)

pip install gcloud google-cloud-storage

2.4) Наконец, вам нужно будет запуститьimagenet_to_gcs.pyскрипт, который загружает файлы с Image-Net.org и обрабатывает их в TFRecords, но не загружает их в GCS (отсюда«Nogcs_upload»флаг) полные варианты Вот, Также«Local_scratch_dir =»должен указать, где вы хотите сохранить набор данных.

python imagenet_to_gcs.py --local_scratch_dir=/data/imagenet --nogcs_upload

Примечание: ImageNet ОГРОМНЫЙ, в зависимости от вашего соединения, загрузка полного набора данных может занять несколько часов (возможно, в одночасье)!

Шаг 3) Загрузите модели TensorFlow.

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

git clone https://github.com/tensorflow/models.git

Шаг 4) Экспорт PYTHONPATH.

Экспортируйте PYTONPATH в папку, где находится папка моделей на вашем компьютере. Команда ниже, где модели были расположены на моей машине! Обязательно замените«/ наборы данных / модели»синтаксис с указанием пути к папке с вашими моделями!

export PYTHONPATH="$PYTHONPATH:/datasets/models"

Шаг 5) Установите зависимости (Вы почти готовы!)

Перейдите в папку моделей (если вы еще не там) и выполните следующую команду

pip install --user -r official/requirements.txt

илиесли вы используете Python3

pip3 install --user -r official/requirements.txt

ВАЖНОЕ ПРИМЕЧАНИЕ: Вы почти готовы тренироваться! По нашему опыту, для того, чтобы скрипт обучения работал правильно, вам необходимо скопировать (или переместить) данные из папки проверки и переместить их в папку поезда !!!

Шаг 6) Установите параметры тренировки, тренируйте ResNet, расслабьтесь.

Запустите обучающий скрипт pythonimagenet_main.pyи установить параметры обучения. Ниже приведено то, что я использовал для обучения ResNet-50, 120 тренировочных эпох для этого упражнения сильно излишни, но мы просто хотели подтолкнуть наши графические процессоры В зависимости от вашей вычислительной мощности, тренировка по полному набору данных может занять несколько дней!

python imagenet_main.py --data_dir=/data/imagenet/train --num_gpus= 2 --batch_size=64 --resnet_size= 50 --model_dir=/data/imagenet/trained_model/Resnet50_bs64 --train_epochs=120

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

Вышеупомянутые только некоторые из вариантов, доступных для обучения модели. Видеть resnet_run_loop.py для полного списка опций (вам придется копаться в коде).

Вы сделали! Теперь давайте посмотрим результаты в TensorBoard!

Вы также можете увидеть свои результаты, используя TensorBoard:

tensorboard --logdir=/data/imagenet/trained_model/Resnet50_bs64

TensorBoard Выходы

Если вы выполнили шаги, описанные выше, правильно (и использовали схожие параметры), вы должны получить аналогичные результаты ниже. Обратите внимание, что эти результаты соответствуют официальным результатам TensorFlow. Давайте посмотрим, что вы можете сделать!

точность

train_accuracy_1

accuracy_top_5

train_accuracy_top_5_1

потеря

l2_loss

cross_entropy_1

learning_rate_1

сек

Последние мысли

Вот и все! Пожалуйста, дайте нам знать, если у вас есть какие-либо проблемы в обучении ResNet. Кроме того, какие советы и приемы вы используете при обучении моделей в TensorFlow? Дай мне знать!

Первоначально опубликовано на https://blog.exxactcorp.com 26 марта 2019 г.