Глубокое обучение — это интересно!

Создание модели глубокого обучения для различных вариантов использования в реальном мире всегда будет вызывать смешанные эмоции из-за ее сложности и способности обнаруживать реальные сценарии. Этот блог призван внести ясность в популярную методологию обнаружения объектов глубокого обучения, а также продемонстрировать, как мы используем ее для создания реальных сценариев использования, а также продуктов искусственного интеллекта с коммерческой ценностью. Давайте начнем !!

Общие сведения о выбоине и трещине дорожного покрытия

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

Виды повреждений дорожного покрытия

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

Наша миссия

Здесь мы разрабатываем модель глубокого обучения для выполнения многообъектной классификации конкретно по 7 типам повреждений дорожного покрытия, как показано на рисунке 1.

Давайте углубимся в особенности среды обучения, архитектуры модели, методологии и структуры обучения.

Необходимые программы и инструменты

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

  • ТензорФлоу 2.0
  • Платформа обнаружения объектов TensorFlow
  • Трансферное обучение
  • Открыть резюме
  • Google Колаб

Примечание 1. Я бы рекомендовал использовать Google Colab, чтобы мы могли быстро обучить модель без особых затрат на подготовку среды. Будьте уверены, этот блог поможет вам подготовить вашу среду, а также прояснить ключевые концепции обучения моделей.

Примечание 2. Я бы также рекомендовал использовать Google Colab Pro. Причина в том, что мы здесь для проведения обучения на основе глубокой нейронной сети на больших наборах данных, для чего потребуется графический процессор. Поэтому я рекомендую, чтобы GPU поддерживал локальную среду или Google Colab Pro или любую другую аналогичную среду облачных вычислений в Интернете (Azure, Aws, Databricks и т. д.).

Методика обучения

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

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

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

Платформа обнаружения объектов TensorFlow TFOD 2.0

TensorFlow Object Detection API — это популярная платформа с открытым исходным кодом, разработанная Google, которая предоставляет набор предварительно обученных моделей и инструментов для создания и развертывания моделей обнаружения объектов с использованием TensorFlow.

API обнаружения объектов позволяет разработчикам и исследователям создавать мощные модели компьютерного зрения для таких задач, как обнаружение объектов, сегментация экземпляров и т. д. Я объясню подробные шаги по обучению нашей модели в TFOD 2.0.

Архитектура модели

Здесь для этого варианта использования мы будем использовать модель Faster R-CNN. Мы загружали предварительно обученную модель из зоопарка Tensorflow и выполняли трансферное обучение на наборе данных наших клиентов.

Faster R-CNN (Region-based Convolutional Neural Network) — популярная модель обнаружения объектов, имеющая ряд преимуществ:

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

Сказав, что у каждой модели тоже есть ограничения. Быстрее R-CNN — не самая быстрая модель с точки зрения обнаружения объектов.

Данные для обучения

Для проведения трансферного обучения в рамках TFOD 2.0 нам потребуется аннотировать данные изображения и преобразовать их в формат VOC XML.

Для этого проекта мы будем использовать набор данных из roboflow, который уже аннотирован и доступен в формате VOC XML. Вы можете войти и загрузить набор данных. Убедитесь, что вы загрузили XML-файл VOC XML Format.

Время взяться за руки

Откройте Google Colab и создайте новый блокнот. Отсюда внимательно следуйте каждому шагу и не пропускайте ни один шаг.

Свяжите свой диск Google и ноутбуки Google Colab. Используйте приведенный ниже код для связывания.

# Mount your drive
# Run this cell, then you’ll see a link, click on that link, allow access


from google.colab import drive
drive.mount('/content/gdrive')

Мы будем использовать диск Google в качестве репозитория для хранения наших изображений, XML-файлов и окончательной модели. Я объясню каждый шаг по мере продвижения вперед.

Включите графический процессор сейчас

Перейдите в меню «Правка» ›› «Настройки ноутбука». См. изображение ниже.

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

import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))

Установите API обнаружения объектов TensorFlow

Теперь, когда у нас есть готовый блокнот, давайте установим TensorFlow Object Detection API.

pip install tensorflow-object-detection-apip

Приведенный выше код установит TFOD API в ваш кластер среды выполнения. Расслабьтесь и дайте коду установить пакет API.

После установки я бы посоветовал проверить версию TensorFlow. Используйте приведенный ниже код.

import tensorflow as tf
print(tf.__version__)

Моя версия 2.12.0 версия. Если ваш TensorFlow меньше 2.0, обновите его до 2.0. Используйте этот код для установки › Pip install tensorflow==2.12.0

Затем установите репозиторий TensorFlow Model.git. Здесь мы получаем полный репозиторий в том виде, в котором он находится в нашей папке времени выполнения. Используйте приведенный ниже код bash.

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

Вывод должен выглядеть так:

Также обратите внимание, что теперь создана новая папка с именем «models». См. изображение ниже.

Далее нам нужно установить «protos». Protos» — это буфер короткого протокола (также известный как protobuf). Буферы протоколов — это независимый от языка, платформы, расширяемый механизм Google для сериализации структурированных данных. Платформе обнаружения объектов Tensflow требуется объект Protos, и поэтому нам нужно скомпилировать тот же самый. Для этого нам нужно сделать два шага.

Установите текущий каталог на «cd /content/models/research». Потому что именно здесь эти прото спят, нам нужно их разбудить!!

Используйте код ниже 2 в правильной последовательности.

cd /content/models/research
!protoc object_detection/protos/*.proto --python_out=.

Далее нам нужно установить coco api. COCO API — http://cocodataset.org/ COCO — это большой набор данных изображений, предназначенный для обнаружения объектов, сегментации, обнаружения ключевых точек людей, сегментации материалов и создания подписей. Мы устанавливаем только API, предназначенный для TFOD 2.0.

Используйте приведенный ниже код в точной последовательности.

Загрузите репозиторий github для Cocoapi, аналогичный Model.git на предыдущем шаге.

!git clone https://github.com/cocodataset/cocoapi.git

Смените каталог на папку Cocoapi и установите! создать и выполнить копирование файла.

cd cocoapi/PythonAPI
!make
cp -r pycocotools /content/models/research

Установите пакеты обнаружения объектов

Установите текущий каталог в model/research . Выполните в приведенной ниже последовательности.

cd /content/models/research
cp object_detection/packages/tf2/setup.py .
!python -m pip install .
# From within content/models/research/
python object_detection/builders/model_builder_tf2_test.py

Приведенная выше команда предназначена для вызова программы Python для тестирования среды. Вы должны что-то вроде изображения ниже

Настройка папки в Google Colab и Google Диске

Теперь нам нужно настроить необходимые папки в google colab и google drive.

Ниже я делюсь своей папкой на диске для справки. Накопитель содержит все необходимые материалы для преформирования обнаружения этого объекта.

Общий диск: pothole_crack_detection

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

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

  • export_tflite_graph_tf2.py
  • exporter_main_v2.py
  • generate_tfrecord.py
  • model_main_tf2.py

Затем скопируйте изображения тренировок, загруженные из roboflow, и поместите их на свой диск Google.

Изображения ›train : здесь хранятся ваши тренировочные изображения и xml

Images›test : здесь хранятся тестовые изображения и xml

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

Примечание. Та же структура папок, которую я просил вас создать как в Google Colab, так и на Google Диске. Причина в том, что я использую папку совместно. Эти одноразовые файлы TFOD 2.0 будут находиться в Google Colab, а тот, который нам нужен после обучения модели, находится на Google Диске.

  • Аннотации: я буду использовать диск Google для хранения документов с аннотациями.
  • Экспортированная модель: я буду использовать Google Drive для хранения окончательной обученной модели, которая нам нужна для конвейера прогнозирования.
  • изображения : я рекомендую использовать Google Drive, так как мы имеем дело с 9000 изображений для обучения.
  • модели и предварительно обученные модели: я буду гуглить папки colab, поскольку они используются во время обучения, а затем бесполезны.
  • Вы можете отложить мой подход и получить все это на Google Диске. Это еще один хороший подход.

Загрузите нужную модель: Faster_Rcnn_resnet

Скачиваем нужную модель с tensorflow zoo. В нашем случае это будет быстрее_rcnn_resnet101_v1_640x640. Он загрузит формат tar.gz и поместит его в предварительно обученные модели. После загрузки нам нужно извлечь tar.gz. Используйте следующий код в последовательности

cd /content/training_demo/pre-trained-models
!wget http://download.tensorflow.org/models/object_detection/tf2/20200711/faster_rcnn_resnet101_v1_640x640_coco17_tpu-8.tar.gz
!tar -xvf faster_rcnn_resnet101_v1_640x640_coco17_tpu-8.tar.gz

Создайте label_map.bptxt и запись TF

Теперь нам нужно создать простой текстовый файл с именем lavel_map.bptxt. Я поделился этим файлом на своем диске в папке аннотаций. Вы тоже создаете то же самое и размещаете его аналогично. Этот текстовый файл содержит количество классов объектов с их точным именем класса. Это имя должно совпадать с именем класса в xml. Для этого проекта вам не нужно редактировать этот текстовый файл, он уже сохранен в соответствии с требованиями.

Нам нужно создать запись TF. Запись формата TF в основном представляет собой формат TensorFlow для обучения модели. Запись TF будет содержать ссылки на изображения и путь xml.

Обе записи label_map.pbtxt и TF я разместил на своем диске Google. вы также можете поместить его в папку colab, но я предпочитаю, чтобы он был на моем диске Google, поскольку диск уже подключен к нашему ноутбуку Google Colab.

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

# Create train data:
!python generate_tfrecord.py -x "/content/gdrive/My Drive/iss/project/pothole/images/train" -l "/content/gdrive/My Drive/iss/project/pothole/annotations/label_map.pbtxt" -o "/content/gdrive/My Drive/iss/project/pothole/annotations/train.record"

# Create test data:
!python generate_tfrecord.py -x "/content/gdrive/My Drive/iss/project/pothole/images/test" -l "/content/gdrive/My Drive/iss/project/pothole/annotations/label_map.pbtxt" -o "/content/gdrive/My Drive/iss/project/pothole/annotations/test.record"

Pipeline.config и обучение модели

Хорошо, вы добрались до самой критической части пайплайна. Перед тренировкой нам нужно отредактировать файл под названием пайплайн.config.

  • Создайте вложенную папку с именем «/my_faster_rcnn_101_v1» в папке model в ваших папках colab. Например, content/training_demo/model//my_faster_rcnn_101_v1
  • В Pre-trained-model, если вы копаетесь в подпапках, вы найдете pipe.config. Точный путь: /content/training_demo/pre-trained-models/faster_rcnn_resnet101_v1_640x640_coco17_tpu-8/pipeline.config
  • Загрузите этот файл pipe.config. После загрузки загрузите обратно в content/training_demo/model//my_faster_rcnn_101_v1
  • Отредактируйте этот файл pipe.config в соответствии с нашим вариантом использования (вы можете сослаться на файл pipe.config на моем диске Google в разделе «Модели папок»), выполните следующие действия и измените значение переменной, как указано.
  • num_classes: 7 (у нас есть 7 классов объектов)
  • batch_size: 2 (Примечание: ранее я сохранял 8, и обучение не удалось из-за OOM: нехватка памяти, мне пришлось уменьшить размер пакета до 2)
  • total_steps: 15000 (по умолчанию 25000, я уменьшил до 15000)
  • num_steps: 15000 (то же, что и выше)
  • обратитесь к тем, которые выделены оранжевой линией на изображении ниже.

Примечание. Для Fine_tune_checkpoint я использовал локальный каталог colab. Для всего остального я использовал свой гугл диск. Конвейер обучения должен получить все эти файлы, легко доступные по заданному пути.

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

!python model_main_tf2.py --model_dir=/content/training_demo/models/my_faster_rcnn_101_v1 --pipeline_config_path=/content/training_demo/models/my_faster_rcnn_101_v1/pipeline.config

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

Сядьте поудобнее, расслабьтесь и наслаждайтесь тренировочным полетом !!

Экспорт модели

Поздравляем !!, вы достигли важной вехи, теперь вам нужно экспортировать модель на свой диск Google, а затем мы делаем пробный запуск. Используйте код экспорта, как указано ниже. Если вам нужна модель в другом месте, измените путь в приведенный ниже код соответственно.

!python exporter_main_v2.py --input_type image_tensor --pipeline_config_path /content/training_demo/models/my_faster_rcnn_101_v1/pipeline.config --trained_checkpoint_dir /content/training_demo/models/my_faster_rcnn_101_v1 --output_directory "/content/gdrive/MyDrive/iss/project/pothole/exported_models/my_model"

Время протестировать модель

Я поделился утилитой тестирования для тестирования любого изображения. Блокнот находится в папке «Batch_Image Testing Colab_Notebook».

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

Примеры результатов тестирования:

Заключение

В заключение я надеюсь, что этот блог помог вам понять процесс обучения пользовательской модели с использованием трансферного обучения в рамках Tensorflow TFOD 2.0. Я поделился своей папкой на диске в этом блоге, в которой также есть все коды ноутбуков, файл модели и файлы конфигурации. Для изображений данных вы можете загрузить их с портала roboflow, как я объяснил в предыдущих шагах (сбор данных). На этом спасибо, что посетили мой блог, я буду следить за вашими комментариями и отзывами в разделе комментариев. Еще раз, спасибо !!