1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Mask_RCNN

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 23:20 437098f

Mask R-CNN для обнаружения и сегментации объектов

Это реализация Mask R-CNN на Python 3, Keras и TensorFlow. Модель генерирует ограничивающие рамки и маски сегментации для каждого экземпляра объекта на изображении. Она основана на Feature Pyramid Network (FPN) и магистрали ResNet101.

Репозиторий включает:

  • Исходный код Mask R-CNN, построенного на FPN и ResNet101;
  • Обучающий код для MS COCO;
  • Предварительно обученные веса для MS COCO;
  • Jupyter-ноутбуки для визуализации конвейера обнаружения на каждом этапе;
  • Класс ParallelModel для обучения на нескольких GPU;
  • Оценка по метрикам MS COCO (AP);
  • Пример обучения на собственном наборе данных.

Код документирован и разработан так, чтобы его было легко расширять. Если вы используете его в своих исследованиях, пожалуйста, рассмотрите возможность цитирования этого репозитория (bibtex ниже). Если вы работаете с 3D-видением, вам также может быть полезен недавно выпущенный набор данных Matterport3D (https://matterport.com/blog/2017/09/20/announcing-matterport3d-research-dataset/), созданный из 3D-реконструированных пространств, снятых нашими клиентами, которые согласились сделать их общедоступными для академического использования. Вы можете увидеть больше примеров здесь (https://matterport.com/gallery/).

Начало работы

  • demo.ipynb — это самый простой способ начать. Он показывает пример использования модели, предварительно обученной на MS COCO, для сегментации объектов на ваших собственных изображениях. Включает код для запуска обнаружения объектов и сегментации экземпляров на произвольных изображениях.
  • train_shapes.ipynb показывает, как обучить Mask R-CNN на вашем собственном наборе данных. Этот ноутбук представляет игрушечный набор данных (Shapes), чтобы продемонстрировать обучение на новом наборе данных.
  • (model.py, utils.py, config.py): Эти файлы содержат основную реализацию Mask RCNN.
  • inspect_data.ipynb. Этот ноутбук визуализирует различные шаги предварительной обработки для подготовки обучающих данных.
  • inspect_model.ipynb Этот ноутбук подробно описывает шаги, выполняемые для обнаружения и сегментации объектов. Предоставляет визуализации каждого этапа конвейера.
  • inspect_weights.ipynb Этот ноутбук проверяет веса обученной модели и ищет аномалии и странные паттерны.

Пошаговое обнаружение Чтобы помочь с отладкой и пониманием модели, есть 3 ноутбука (inspect_data.ipynb, inspect_model.ipynb, inspect_weights.ipynb), которые предоставляют множество визуализаций и позволяют запускать модель шаг за шагом, чтобы проверить вывод в каждой точке. Вот несколько примеров:

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

  2. Уточнение ограничивающих рамок Это пример окончательных коробок обнаружения (пунктирные линии) и уточнения, применённого к ним (сплошные линии) на втором этапе.

  3. Генерация масок Примеры сгенерированных масок. Затем они масштабируются и размещаются на изображении в нужном месте.

  4. Активации слоёв Часто бывает полезно проверить активации на разных слоях, чтобы найти признаки проблем (все нули или случайный шум).

  5. Гистограммы весов Ещё один полезный инструмент отладки — проверка гистограмм весов. Они включены в ноутбук inspect_weights.ipynb.

  6. Ведение журнала в TensorBoard TensorBoard — ещё один отличный инструмент для отладки и визуализации. Модель настроена на регистрацию потерь и сохранение весов в конце каждой эпохи.

  7. Компоновка различных частей в окончательный результат

  8. Обучение на MS COCO Мы предоставляем... Предварительно обученные веса для MS COCO упростят начало работы. Вы можете использовать эти веса в качестве отправной точки для обучения своей собственной вариации сети.

Код для обучения и оценки находится в samples/coco/coco.py. Вы можете импортировать этот модуль в Jupyter notebook (см. предоставленные ноутбуки для примеров) или запустить его прямо из командной строки следующим образом:

# Обучить новую модель, начиная с предварительно обученных весов COCO
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=coco

# Обучить новую модель, начиная с весов ImageNet
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=imagenet

# Продолжить обучение модели, которую вы обучали ранее
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=/path/to/weights.h5

# Продолжить обучение последней обученной модели. Это найдёт последние обученные веса в каталоге моделей.
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=last

Вы также можете запустить код оценки COCO с помощью:

# Запустить оценку COCO на последней обученной модели
python3 samples/coco/coco.py evaluate --dataset=/path/to/coco/ --model=last

Расписание обучения, скорость обучения и другие параметры должны быть установлены в samples/coco/coco.py.

Обучение на собственном наборе данных

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

Вкратце, чтобы обучить модель на своём собственном наборе данных, вам нужно расширить два класса:

Config: Этот класс содержит конфигурацию по умолчанию. Создайте подкласс и измените атрибуты, которые необходимо изменить.

Dataset: Этот класс предоставляет согласованный способ работы с любым набором данных. Он позволяет использовать новые наборы данных для обучения без необходимости изменения кода модели. Он также поддерживает одновременную загрузку нескольких наборов данных, что полезно, если объекты, которые вы хотите обнаружить, не все доступны в одном наборе данных.

См. примеры в samples/shapes/train_shapes.ipynb, samples/coco/coco.py, samples/balloon/balloon.py и samples/nucleus/nucleus.py.

Отличия от официальной статьи

Эта реализация в основном следует статье Mask RCNN, но есть несколько случаев, когда мы отклонились в пользу простоты кода и обобщения. Вот некоторые из различий, о которых мы знаем. Если вы обнаружите другие различия, пожалуйста, сообщите нам.

  • Изменение размера изображения: Чтобы поддерживать обучение нескольких изображений за пакет, мы изменяем размер всех изображений до одного размера. Например, 1024x1024px на MS COCO. Мы сохраняем соотношение сторон, поэтому, если изображение не квадратное, мы дополняем его нулями. В статье изменение размера выполняется таким образом, что наименьшая сторона составляет 800 пикселей, а наибольшая обрезается до 1000 пикселей.
  • Ограничивающие рамки: Некоторые наборы данных предоставляют ограничивающие рамки, а некоторые — только маски. Чтобы поддержать обучение на нескольких наборах данных, мы решили игнорировать ограничивающие рамки, которые поставляются с набором данных, и вместо этого генерировать их на лету. Мы выбираем наименьший прямоугольник, который охватывает все пиксели маски, в качестве ограничивающей рамки. Это упрощает реализацию и также позволяет легко применять преобразования изображений, которые в противном случае было бы трудно применить к ограничивающим рамкам, например, поворот изображения. Чтобы проверить этот подход, мы сравнили наши вычисленные ограничивающие прямоугольники с теми, которые предоставляются набором данных COCO. Мы обнаружили, что ~2% ограничивающих прямоугольников отличаются на 1 пиксель или более, ~0,05% отличаются на 5 пикселей или более и только 0,01% отличаются на 10 пикселей или более.
  • Скорость обучения: В статье используется скорость обучения 0,02, но мы обнаружили, что это слишком много и часто приводит к взрыву весов, особенно при использовании небольшого размера пакета. Это может быть связано с различиями между тем, как Caffe и TensorFlow вычисляют градиенты (сумма против среднего значения по пакетам и GPU). Или, возможно, официальная модель использует обрезку градиента, чтобы избежать этой проблемы. Мы используем обрезку градиентов, но не устанавливаем её слишком агрессивно. Дмитрий Кудинов, Дэниел Хеджес и Омар Махер.

Usiigaci: Label-free Cell Tracking in Phase Contrast Microscopy

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

Characterization of Arctic Ice-Wedge Polygons in Very High Spatial Resolution Aerial Imagery

Исследовательский проект, направленный на понимание сложных процессов между деградацией в Арктике и изменением климата. Авторы: Вейксинг Чжан, Чанди Витарана, Анна Лильедаль и Михаил Каневский.

Mask-RCNN Shiny

Проект компьютерного зрения от Ху Шиюй для применения эффекта цветного выделения к людям с красивыми результатами.

Mapping Challenge

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

GRASS GIS Addon

Для создания векторных масок из геопространственных изображений. Основан на магистерской диссертации Онджея Пешека.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Mask_RCNN.git
git@api.gitlife.ru:oschina-mirror/mirrors-Mask_RCNN.git
oschina-mirror
mirrors-Mask_RCNN
mirrors-Mask_RCNN
master