Автор оригинала: FreeCodeCapm Team.
Romroc.
Давайте продолжим наше путешествие, чтобы исследовать лучшие рамки обучения машины в компьютерном видении.
В Первая статья Мы изучили обнаружение объектов с официальными аписом Tensorflow. Вторая статья Был посвящен отличной структуре сегментации, маску MatterPort R-CNN на основе KERAS.
В этой статье мы изучаем KERAS Реализация обнаружения объекта ретинанета, разработанного Fizyr Отказ Ретинанет, как описано в Фокусные потери для густой обнаружения объекта , это состояние искусства для обнаружения объекта. Объект для выявления с обученной моделью будет моим маленьким козлом розой.
Ноутбук Colab и DataSet доступны в мой github repo. .
В этой статье мы проходим все шаги в одном ноутбуке Google Colab для обучения модели, начиная с пользовательского набора данных.
Мы будем иметь в виду эти принципы:
- иллюстрируйте, как сделать набор данных аннотации
- Опишите все шаги в одной ноутбуке
- Используйте бесплатное программное обеспечение, Google Colab и Google Drive, поэтому он основан исключительно на Бесплатные облачные ресурсы
В конце статьи вы будете удивлены простотой использования и хорошие результаты, которые мы получим через эту структуру обнаружения объектов.
Несмотря на свою простоту использования, Fizyr является отличным каркасом, также использованным победитель соревнования Kaggle “RSNA Pneumonia Destection Challence”.
Сделать набор данных
Мы начнем с создания аннотаций для набора данных обучения и валидации, используя инструмент LARFEIMG Отказ Этот отличный инструмент аннотации позволяет быстро аннотировать ограничивающие коробки объектов для обучения модели обучения машины.
LARFEIMG создает аннотации в формате Pascalvoc, поэтому нам нужно преобразовать аннотации в формат Fizyr:
- Создайте ZIP-файл, содержащий образование набора данных и аннотации с одним и тем же именем (проверьте мой пример набора данных в Github)
objdet_dataset.zip|- img1.jpg|- img1.xml|- img2.jpg|- img2.xml...
- Загрузить ZIP-файл в Google Drive, получите идентификатор файла привода и замените значение DataSet_Driveid
- Запустите ячейку, которая итерации на файлы XML и создает файл Annotaughts.csv
Примечание: вы можете увидеть мой ответ на StackoverFlow, чтобы получить идентификатор файла привода.
Модель обучения
Модель Обучение – это ядро ноутбука. Fizyr предлагает различные параметры, описанные в Github , чтобы запустить и оптимизировать этот шаг.
Это хороший вариант, чтобы начать с последующей модели вместо обучения модели с нуля. Fizyr выпустил модель на основе архитектуры Resnet50, претендую на набор данных Coco.
URL_MODEL = 'https://github.com/fizyr/keras-retinanet/releases/download/0.5.0/resnet50_coco_best_v2.1.0.h5'
Мы можем даже использовать нашу предварительную модель и продолжить обучение от нее. Этот вариант особенно полезен для тренировки для некоторых эпохи, поэтому сохраните его в Google Drive, а затем перезагрузите тренинг из сохраненной модели. Таким образом, мы можем обойти 12-часовой предел выполнения в Colab, и мы можем тренировать модель для многих эпох.
Из моих тестов высокое значение batch_size и шагов предлагает лучшие результаты, но они значительно увеличивают время выполнения каждой эпохи.
Мы можем начать обучение от нашего пользовательского набора данных с:
!keras_retinanet/bin/train.py --freeze-backbone --random-transform --weights {PRETRAINED_MODEL} --batch-size 8 --steps 500 --epochs 10 csv annotations.csv classes.csv
Давайте проанализируем каждый аргумент, переданный на сценарий Train.py.
- Freeze-Backbone: замораживание слоев позвоночника, особенно полезно, когда мы используем небольшой набор данных, чтобы избежать перенапряжения
- Случайное преобразование: случайным образом преобразовать набор данных, чтобы получить данные увеличения
- Вес: инициализировать модель с предварительной обработкой (ваша собственная модель или одна выпущена Fizyr)
- Размер партии: Обучающий размер партии, более высокое значение дает более плавное обучение кривой обучения
- Шаги: количество шагов для эпохи
- эпохи: количество эпох для тренировки
- CSV: файлы аннотаций, созданные скриптом выше
Выходной процесс обучения содержит описание слоев и метрик потери во время обучения, и, как вы можете видеть, снижение метрик потери во время каждой эпохи:
Using TensorFlow backend....Layer (type) Output Shape Param # Connected toinput_1 (InputLayer) (None, None, None, 3 0padding_conv1 (ZeroPadding2D) (None, None, None, 3 0 input_1[0][0] ...Total params: 36,382,957Trainable params: 12,821,805Non-trainable params: 23,561,152NoneEpoch 1/10500/500 [==============================] - 1314s 3s/step - loss: 1.0659 - regression_loss: 0.6996 - classification_loss: 0.3663Epoch 2/10500/500 [==============================] - 1296s 3s/step - loss: 0.6747 - regression_loss: 0.5698 - classification_loss: 0.1048Epoch 3/10500/500 [==============================] - 1304s 3s/step - loss: 0.5763 - regression_loss: 0.5010 - classification_loss: 0.0753
Epoch 3/10500/500 [==============================] - 1257s 3s/step - loss: 0.5705 - regression_loss: 0.4974 - classification_loss: 0.0732
Вывод
Последний шаг выполняет вывод тестовых изображений с обученной моделью. Fizyr Framework позволяет нам выполнять вывод с использованием процессора, даже если вы обучаете модель с GPU. Эта функция важна в типичных производственных средах, где люди обычно выбирают менее дорогие аппаратные инфраструктуры для вывода, без GPU.
Давайте подробно рассмотрим следующие строки:
model_path = os.path.join('snapshots', sorted(os.listdir('snapshots'), reverse=True)[0])print(model_path)
# load retinanet modelmodel = models.load_model(model_path, backbone_name='resnet50')model = models.convert_model(model)
Первая строка устанавливает файл модели как последней модели, создаваемой в каталоге процесса обучения в/снимках. Затем модель загружается из файловой системы и преобразована для запуска вывода.
Вы можете изменить значения THRES_SCORE, что представляет порог доверия для отображения обнаружения объекта.
Выводы
Мы прошли полное путешествие, чтобы сделать обнаружение объектов с помощью реализации ретинанета Fizyr. Мы создали набор набора данных, обучали модель, и вывернули вывод ( здесь – мой репо GitHub для ноутбука и набора данных).
Я был впечатлен следующими аспектами этой отличной основы:
- Эта рамка является Простота в использовании получить хороший вывод, даже без особой настройки
- Это было Просто для преобразования аннотаций к формату набора данных Fizyr по сравнению с другими рамками.
В целом Fizyr является хорошим выбором, чтобы начать проект обнаружения объектов, в частности, если вам нужно быстро получить хорошие результаты.
Если вам понравилось эту статью, оставьте несколько хлопов, она побудит меня исследовать дальнейшие возможности обучения машине:)