██╗ ██╗ ██████╗ ██╗ █████╗ ██████╗████████╗
╚██╗ ██╔╝██╔═══██╗██║ ██╔══██╗██╔════╝╚══██╔══╝
╚████╔╝ ██║ ██║██║ ███████║██║ ██║
╚██╔╝ ██║ ██║██║ ██╔══██║██║ ██║
██║ ╚██████╔╝███████╗██║ ██║╚██████╗ ██║
╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝
Простая, полностью сверточная модель для сегментации экземпляров в реальном времени. Это код для наших документов:
Модель RESNET50 от YOLACT ++ работает со скоростью 33,5 кадров в секунду на Titan XP и достигает 34,1 карты на test-dev Coco (посмотрите на нашу журнальную статью здесь).
Чтобы использовать Yolact ++, убедитесь, что вы составляете код DCNV2. (См. Установку)
Некоторые примеры из нашей модели базового желтка (33,5 кадров в секунду на титане XP и 29,8 карты на test-dev Коко):



git clone https://github.com/dbolya/yolact.git
cd yolactconda env create -f environment.yml # Cython needs to be installed before pycocotools
pip install cython
pip install opencv-python pillow pycocotools matplotlib ./data/coco . sh data/scripts/COCO.shtest-dev , загрузите test-dev с помощью этого сценария. sh data/scripts/COCO_test.sh cd external/DCNv2
python setup.py build develop Вот наши модели YOLACT (выпущенные 5 апреля 2019 г.) вместе с их FPS на Titan XP и MAP на test-dev :
| Размер изображения | Магистраль | Кадр | карта | Вес | |
|---|---|---|---|---|---|
| 550 | RESNET50-FPN | 42,5 | 28.2 | yolact_resnet50_54_800000.pth | Зеркало |
| 550 | Darknet53-Fpn | 40.0 | 28,7 | yolact_darknet53_54_800000.pth | Зеркало |
| 550 | RESNET101-FPN | 33,5 | 29,8 | yolact_base_54_800000.pth | Зеркало |
| 700 | RESNET101-FPN | 23.6 | 31.2 | yolact_im700_54_800000.pth | Зеркало |
Модели YOLACT ++ (выпущенные 16 декабря 2019 г.):
| Размер изображения | Магистраль | Кадр | карта | Вес | |
|---|---|---|---|---|---|
| 550 | RESNET50-FPN | 33,5 | 34.1 | yolact_plus_resnet50_54_800000.pth | Зеркало |
| 550 | RESNET101-FPN | 27.3 | 34.6 | yolact_plus_base_54_800000.pth | Зеркало |
Чтобы оценить модель, поместите соответствующий файл веса в каталог ./weights и запустите одну из следующих команд. Имя каждой конфигурации - это все, что номера в имени файла (например, yolact_base для yolact_base_54_800000.pth ).
# Quantitatively evaluate a trained model on the entire validation set. Make sure you have COCO downloaded as above.
# This should get 29.92 validation mask mAP last time I checked.
python eval.py --trained_model=weights/yolact_base_54_800000.pth
# Output a COCOEval json to submit to the website or to use the run_coco_eval.py script.
# This command will create './results/bbox_detections.json' and './results/mask_detections.json' for detection and instance segmentation respectively.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --output_coco_json
# You can run COCOEval on the files created in the previous command. The performance should match my implementation in eval.py.
python run_coco_eval.py
# To output a coco json file for test-dev, make sure you have test-dev downloaded from above and go
python eval.py --trained_model=weights/yolact_base_54_800000.pth --output_coco_json --dataset=coco2017_testdev_dataset # Display qualitative results on COCO. From here on I'll use a confidence threshold of 0.15.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --display # Run just the raw model on the first 1k images of the validation set
python eval.py --trained_model=weights/yolact_base_54_800000.pth --benchmark --max_images=1000 # Display qualitative results on the specified image.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --image=my_image.png
# Process an image and save it to another file.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --image=input_image.png:output_image.png
# Process a whole folder of images.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --images=path/to/input/folder:path/to/output/folder # Display a video in real-time. "--video_multiframe" will process that many frames at once for improved performance.
# If you want, use "--display_fps" to draw the FPS directly on the frame.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=my_video.mp4
# Display a webcam feed in real-time. If you have multiple webcams pass the index of the webcam you want instead of 0.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=0
# Process a video and save it to another file. This uses the same pipeline as the ones above now, so it's fast!
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=input_video.mp4:output_video.mp4 Как вы можете сказать, eval.py может сделать кучу вещей. Запустите команду --help , чтобы увидеть все, что она может сделать.
python eval.py --helpПо умолчанию мы тренируемся на Коко. Обязательно загрузите весь набор данных, используя вышеуказанные команды.
./weights .resnet101_reducedfc.pth отсюда.resnet50-19c8e357.pth отсюда.darknet53.pth отсюда.*_interrupt.pth на текущей итерации../weights по умолчанию с именем файла <config>_<epoch>_<iter>.pth . # Trains using the base config with a batch size of 8 (the default).
python train.py --config=yolact_base_config
# Trains yolact_base_config with a batch_size of 5. For the 550px models, 1 batch takes up around 1.5 gigs of VRAM, so specify accordingly.
python train.py --config=yolact_base_config --batch_size=5
# Resume training yolact_base with a specific weight file and start from the iteration specified in the weight file's name.
python train.py --config=yolact_base_config --resume=weights/yolact_base_10_32100.pth --start_iter=-1
# Use the help option to see a description of all available command line arguments
python train.py --helpЙолакт теперь плавно поддерживает несколько графических процессоров во время тренировок:
export CUDA_VISIBLE_DEVICES=[gpus]nvidia-smi .8*num_gpus с помощью команд обучения выше. Сценарий обучения автоматически масштабирует гиперпараметры до нужных значений.--batch_alloc=[alloc] , где [Alloc] является списком разделенного запятой, содержащим количество изображений на каждом графическом процессоре. Это должно суммировать batch_size . Йолакт теперь регистрирует обучение и информацию о проверке по умолчанию. Вы можете отключить это с помощью --no_log . Руководство по тому, как визуализировать эти журналы, скоро появится, но теперь вы можете посмотреть на LogVizualizer в utils/logger.py для помощи.
Мы также включаем конфигурацию для обучения по аннотациям Pascal SBD (для быстрых экспериментов или сравнения с другими методами). Чтобы тренироваться на Pascal SBD, выполните следующие шаги:
benchmark.tgz ).dataset/img . Создайте каталог ./data/sbd (где . Jyolact's root) и скопируйте dataset/img to ./data/sbd/img ../data/sbd/ .--config=yolact_resnet50_pascal_config . Проверьте эту конфигурацию, чтобы увидеть, как расширить его на другие модели. Я скоро автоматизирую все это с помощью сценария, не волнуйтесь. Кроме того, если вам нужен сценарий, который я использовал для преобразования аннотаций, я вкладываю его в ./scripts/convert_sbd.py , но вам придется проверить, как это работает, чтобы иметь возможность использовать его, потому что на самом деле я не помню.
Если вы хотите проверить наши результаты, вы можете скачать наши веса yolact_resnet50_pascal_config отсюда. Эта модель должна получить 72,3 маски AP_50 и 56,2 Маски AP_70. Обратите внимание, что «все» AP не совпадает с «VOL» AP, сообщенным в других статьях для Pascal (они используют средние значения порогов от 0.1 - 0.9 с шагом 0.1 вместо того, что использует Коко).
Вы также можете тренироваться на своем собственном наборе данных, выполнив эти шаги:
infoliscenseimage : license, flickr_url, coco_url, date_capturedcategories (мы используем наш собственный формат для категорий, см. Ниже)dataset_base в data/config.py (см. Комментарии в dataset_base для объяснения каждого поля): my_custom_dataset = dataset_base . copy ({
'name' : 'My Dataset' ,
'train_images' : 'path_to_training_images' ,
'train_info' : 'path_to_training_annotation' ,
'valid_images' : 'path_to_validation_images' ,
'valid_info' : 'path_to_validation_annotation' ,
'has_gt' : True ,
'class_names' : ( 'my_class_id_1' , 'my_class_id_2' , 'my_class_id_3' , ...)
})class_names . Если это не так для вашего файла аннотации (например, в Coco), см. Полевой label_map в dataset_base .python train.py --help ), train.py будет выводить карту проверки для первых 5000 изображений в наборе данных каждые 2 эпох.yolact_base_config в том же файле измените значение для 'dataset' на 'my_custom_dataset' или как вы назвали объект конфигурации выше. Затем вы можете использовать любую из команд обучения в предыдущем разделе. Смотрите этот хороший пост от @amit12690 для советов о том, как аннотировать пользовательский набор данных и подготовить его для использования с помощью Yolact.
Если вы используете Yolact или этот кодовый базу в вашей работе, пожалуйста, цитируйте
@inproceedings{yolact-iccv2019,
author = {Daniel Bolya and Chong Zhou and Fanyi Xiao and Yong Jae Lee},
title = {YOLACT: {Real-time} Instance Segmentation},
booktitle = {ICCV},
year = {2019},
}
Для Yolact ++ цитируйте
@article{yolact-plus-tpami2020,
author = {Daniel Bolya and Chong Zhou and Fanyi Xiao and Yong Jae Lee},
journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence},
title = {YOLACT++: Better Real-time Instance Segmentation},
year = {2020},
}
Для вопросов о нашей статье или коде, пожалуйста, свяжитесь с Даниэлем Болеей.