В моем предыдущем посте мы увидели, как выполнять распознавание изображений с помощью TensorFlow с использованием API Python на CPU без какого-либо обучения. Мы использовали предобученную модель Inception-v3, которую Google уже обучил на тысяче классов, но что, если мы хотим сделать то же самое, но с нашими собственными изображениями?
Перевод статьи Train Inception with Custom Images on CPU, автор — Sagar Sharma. Ссылка на оригинал — в подвале статьи.
- Мы будем использовать transfer learning, который поможет нам переобучить финальный слой уже обученной модели Inception-v3 новым категориям с нуля.
- Это займет около 30 минут на ноутбуке и не требует каких-либо графических процессоров.
- Мы будем обучать модель на открытой базе данных цветов, которая есть в TensorFlow и бесплатна для скачивания.
Прежде чем мы начнем, давайте сделаем проверку на случайном изображении одуванчика на моем компьютере.
А вот результат:
Мы будем использовать Python 3 и TensorFlow 1.4.
Если у вас установлена не последняя версия TensorFlow, используйте следующую команду для обновления:
pip install --upgrade tensorflow
Обучение на датасете произведем за 4 этапа.
1. Скачайте tensorflow-for-poets-2
Создайте новую папку Flowers_Tensorflow. Теперь откройте командную строку и введите:
git clone https://github.com/googlecodelabs/tensorflow-for-poets-2
Это позволит скачать папку «tenorflow-for-poets-2» из репозитория TensorFlow в папку Flower_Tensorflow.
Эта папка содержит такие файлы, как скрипты, tf_folder и т. д.
2. Скачайте датасет
Перейдите по ссылке и загрузите данные цветов. Затем извлеките папку «flower_photos» из только что загруженного файла .tgz и скопируйте ее в папку tf_files. Эта папка содержит 5 категорий: ромашка, одуванчик, роза, подсолнух, тюльпаны и файл LICENSE.txt.
3. Переобучите модель
Откройте командную строку в папке tenorsflow-for-poets-2 и введите
python scripts/retrain.py --output_graph=tf_files/retrained_graph.pb --output_labels=tf_files/retrained_labels.txt --image_dir=tf_files/flower_photos
Примечание: это одна строка. Просто скопируйте всю команду и вставьте ее в командную строку.
После нажатия Enter программа начнет создавать файлы .txt в папке C:/tmp/bottleneck/rose и т. д. Она создаст около 7300 файлов bottleneck.txt с и выдаст примерно такой результат:
После этого она начнет обучение и выполнит около 4000 итераций:
Пока ваш компьютер обучается на новом датасете цветов, я объясню смысл каждой части введенной команды.
Вся команда может быть разделена на 4 части:
Вызвать/запустить скрипт retrain.py.
python scripts/retrain.py
Создать новый файл графов в папке tf_files (после завершения обучения).
--output_graph=tf_files/retrained_graph.pb
Создать новый файл меток в папке tf_files (после завершения обучения).
--output_labels=tf_files/retrained_labels.txt
Указать путь к датасету цветов.
--image_dir=tf_files/flower_photos
Примечание: вы можете добавить/изменить аргументы в этой части команды.
Изменить модель, отличную от Inception-v3, «Mobilenet Models»
--architecture
mobilenet_1.0_224
Tensorboard
--summaries_dir=tf_files/training_summaries/${write the architecture here
}
Изменение расположения Bottleneck
--bottleneck_dir=tf_files/bottlenecks
Изменение количества итераций
--how_many_training_steps=500
4. Проверка переобученной модели
Чтобы проверить модель, просто скачайте любое изображение и скопируйте его в папку «tenorflow-for-poets-2», а затем введите (image.png — это имя файла):
python scripts/label_image.py --image image.png
Однако может вылезти ошибка:
Чтобы ее устранить, откройте файл label_image.py в папке scripts.
Перейдите к 74-й строке и измените значения или перейдите по ссылке.
Измените эти значения:
input_height = 224
input_width = 224
input_mean = 128
input_std = 128
input_layer = "input"
На эти:
input_height = 299
input_width = 299
input_mean = 0
input_std = 255
input_layer = "Mul"
Теперь, когда мы внесли изменения, давайте выполним проверку на других цветах.
Маргаритка
Роза
Подсолнух
Тюльпан
Думаю, можно закончить.
Если вы хотите провести такой же эксперимент на мобильной платформе, посмотрите этот пост. Но сначала попробуйте сделать описанное выше!