Глубокое обучение — это интересно!
Создание модели глубокого обучения для различных вариантов использования в реальном мире всегда будет вызывать смешанные эмоции из-за ее сложности и способности обнаруживать реальные сценарии. Этот блог призван внести ясность в популярную методологию обнаружения объектов глубокого обучения, а также продемонстрировать, как мы используем ее для создания реальных сценариев использования, а также продуктов искусственного интеллекта с коммерческой ценностью. Давайте начнем !!
Общие сведения о выбоине и трещине дорожного покрытия
Выбоины и трещины на дорогах представляют значительную опасность для автомобилистов, велосипедистов и пешеходов. Они могут привести к авариям, повреждению автомобиля и травмам. Своевременно обслуживая дороги и устраняя выбоины и трещины, можно свести к минимуму риск несчастных случаев и травм.
Виды повреждений дорожного покрытия
Существуют различные категории повреждений дорожных трещин в дорожном покрытии. Однако для этого варианта использования мы рассмотрим 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, как я объяснил в предыдущих шагах (сбор данных). На этом спасибо, что посетили мой блог, я буду следить за вашими комментариями и отзывами в разделе комментариев. Еще раз, спасибо !!