Вместо этого используйте это: https://github.com/facebookresearch/maskrcnn-benchmark

Пример вывода E2E_MASK_RCNN-R-101-FPN_2X с использованием предварительного веса Detectron.

Соответствующий пример вывода из Detectron.

Пример вывода e2e_keypoint_rcnn-r-50-fpn_s1x с использованием предварительного веса Detectron.
Этот код следует архитектуре реализации Detectron. Поддерживается только часть функциональности. Проверьте этот раздел для получения дополнительной информации.
С этим кодом вы можете ...
Этот репозиторий изначально построен на Jwyang/Faster-rcnn.pytorch. Однако после многих модификаций структура сильно меняется, и теперь она больше похожа на Detectron. Я намеренно делаю все подобное или идентичное для реализации Detectron, чтобы воспроизводить результат непосредственно из официальных предварительных файлов веса.
Эта реализация имеет следующие функции:
Это чистый код питорха . Конечно, есть какой -то код CUDA.
Он поддерживает обучение партии с несколькими изображениями .
Он поддерживает несколько графических процессоров .
Он поддерживает три метода объединения . Обратите внимание, что только Align ROI пересмотрен в соответствии с реализацией в Caffe2. Итак, используйте его.
Это эффективная память . Для отсека данных существует две техноники, доступные для уменьшения использования памяти: 1) Группирование аспектов : групповые изображения с аналогичным соотношением сторон в партии 2) Аспект обрезки : изображения, которые слишком длинные. Группировка аспекта реализована в Detectron, поэтому она используется для дефолта. Аспект обрезки-это идея от jwyang/faster-rcnn.pytorch, и она не используется для дефолта.
Кроме того, я внедряю индивидуальный модуль nn.DataParallel , который обеспечивает различный размер партийной капли на разных графических процессорах. Проверьте мой раздел NN.Dataparallel для получения более подробной информации об этом.
Клонировать репо:
git clone https://github.com/roytseng-tw/mask-rcnn.pytorch.git
Протестировано под Python3.
Составьте код CUDA:
cd lib # please change to this directory
sh make.sh
Если вы используете Volta GPU, понаправляйтесь этой линией в lib/mask.sh и не забудьте поспорить обратную черту на линии выше. CUDA_PATH по умолчанию /usr/loca/cuda . Если вы хотите использовать библиотеку CUDA на другом пути, измените эту линию соответственно.
Он будет скомпилировать все необходимые вам модули, включая NMS, ROI_POOING, ROI_CROP и ROI_ALIGN. (На самом деле NMS GPU никогда не используется ...)
Обратите внимание, что, если вы используете CUDA_VISIBLE_DEVICES для установки графических процессоров, убедитесь, что при составлении кода виден хотя бы один графический процессор.
Создайте папку данных под репо,
cd {repo_root}
mkdir data
Coco : Загрузите Coco Images и Annotations с сайта Coco.
И обязательно поместите файлы в качестве следующей структуры:
coco
├── annotations
| ├── instances_minival2014.json
│ ├── instances_train2014.json
│ ├── instances_train2017.json
│ ├── instances_val2014.json
│ ├── instances_val2017.json
│ ├── instances_valminusminival2014.json
│ ├── ...
|
└── images
├── train2014
├── train2017
├── val2014
├──val2017
├── ...
Скачать кокосовые аннотации отсюда. Обратите внимание, что Minival точно эквивалентен недавно определенному набору VAL 2017 года. Точно так же союз Valminusminival и поезд 2014 года точно эквивалентны набору поездов 2017 года.
Не стесняйтесь размещать набор данных в любом месте, которое вы хотите, а затем мягкая свяжите набор данных под data/ папкой:
ln -s path/to/coco data/coco
Рекомендую поставить изображения на SSD для возможного лучшего обучения
Я использую предварительную веса ImageNet от Caffe для сетей магистралей.
Загрузите их и поместите в {repo_root}/data/pretrained_model .
Вы можете следующую команду, чтобы загрузить их все:
argparse_color_formater , colorama , requests python tools/download_imagenet_weights.py
Примечание : предварительно пребываемые веса Caffe имеют немного лучшую производительность, чем Pytorch Pretered. Предложите использовать предварительную модели Caffe из приведенной выше ссылки, чтобы воспроизвести результаты. Кстати, Detectron также использует предварительно проведенные веса из Caffe.
Если вы хотите использовать предварительно обученные модели Pytorch, не забудьте транспонировать изображения от BGR в RGB, а также используйте ту же предварительную обработку данных (минус среднее и нормализовать), что используется в предварительной модели Pytorch.
Помимо использования предварительно подготовленных весов для Resnet выше, вы также можете использовать веса из Detectron, изменив соответствующую строку в файле конфигурации модели следующим образом:
RESNETS:
IMAGENET_PRETRAINED_WEIGHTS: 'data/pretrained_model/R-50.pkl'
R-50-GN.PKL и R-101-GN.PKL необходимы для GN_BASELINES.
X-101-32X8D.PKL, X-101-64X4D.PKL и X-152-32x8d-in5k.pkl требуются для резист.
Не измените ничего в предоставленных файлах конфигурации (configs/**/xxxx.yml), если вы не знаете, что делаете
Используйте переменную среды CUDA_VISIBLE_DEVICES для управления, какие графические процессоры использовать.
batch_size: NUM_GPUS x TRAIN.IMS_PER_BATCH
Effecty_batch_size: batch_size x iter_size
Изменение чего -то: new value of something / old value of something
Следующие параметры конфигурации будут скорректированы автоматически в соответствии с фактическими обучающими настройками: 1) Количество графических процессоров NUM_GPUS , 2) Размер партии на GPU TRAIN.IMS_PER_BATCH , 3) Период обновления iter_size
SOLVER.BASE_LR : отрегулировать непосредственно для смены batch_size.SOLVER.STEPS , SOLVER.MAX_ITER : настройка обратно пропорционально к изменению Effecty_batch_size.Возьмем, например, маска-RCNN с основой Res50.
python tools/train_net_step.py --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --use_tfboard --bs {batch_size} --nw {num_workers}
Используйте --bs , чтобы перезаписать размер партии по умолчанию до правильного значения, которое вписывается в ваши графические процессоры. Simliar для --nw , количество потоков загрузчика данных по умолчанию до 4 в config.py.
Укажите —-use_tfboard , чтобы зарегистрировать потери на Tensorboard.
Примечание . Используйте --dataset keypoints_coco2017 при обучении для клавиатуры rcnn.
--iter_size Как и в Caffe, обновить сеть один раз ( optimizer.step() ) Каждое итерации iter_size (вперед + назад). Таким образом, должен иметь больший эффективный размер партии для обучения. Обратите внимание, что количество шагов увеличивается только после обновления сети.
python tools/train_net_step.py --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --bs 4 --iter_size 4
iter_size по умолчанию до 1.
python tools/train_net_step.py ... --load_ckpt {path/to/the/checkpoint}
или с помощью файла контрольной точки Detectron
python tools/train_net_step.py ... --load_detectron {path/to/the/checkpoint}
python tools/train_net_step.py ... --load_ckpt {path/to/the/checkpoint} --resume
При возобновлении обучения, количество шагов и состояние оптимизатора также будет восстановлено с контрольной точки. Для SGD Optimizer состояние оптимизатора содержит импульс для каждого обучаемого параметра.
Примечание --load_detectron --resume
python tools/train_net_step.py ... --no_save --set {config.name1} {value1} {config.name2} {value2} ...
python tools/train_net_step.py ... --no_save --set DEBUG True
--no_save , чтобы избежать сохранения какой -либо контрольной точки или журнала. python train_net_step.py --help
Короче говоря, используйте train_net_step.py .
В train_net_step.py :
SOLVER.LR_POLICY: steps_with_decay поддерживается. (Устарел) в train_net.py Некоторые параметры конфигурации не имеют никаких эффектов и заслуживают того, чтобы заметить:
SOLVER.LR_POLICY , SOLVER.MAX_ITER , SOLVER.STEPS , SOLVER.LRS : На данный момент политика обучения контролируется этими аргументами командной строки:
--epochs : сколько эпох тренироваться. Одна эпоха означает, что один путешествует по всем тренировочным наборам. По умолчанию до 6.--lr_decay_epochs : Эпохи, чтобы разрушить скорость обучения. Разложение происходит в начале эпохи. Эпоха 0-индексированная. По умолчанию [4, 5]. Для получения дополнительных аргументов командной строки, пожалуйста, обратитесь к python train_net.py --help
SOLVER.WARM_UP_ITERS , SOLVER.WARM_UP_FACTOR , SOLVER.WARM_UP_METHOD : тренировочная разминка не поддерживается.
Например, тестовая маска RCNN на Coco2017 Val Set
python tools/test_net.py --dataset coco2017 --cfg config/baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml --load_ckpt {path/to/your/checkpoint}
Используйте --load_detectron для загрузки контрольной точки Detectron. Если доступно несколько графических процессоров, добавьте --multi-gpu-testing .
Укажите другой выходной направление, используйте --output_dir {...} . По умолчанию {the/parent/dir/of/checkpoint}/test
python tools/infer_simple.py --dataset coco --cfg cfgs/baselines/e2e_mask_rcnn_R-50-C4.yml --load_ckpt {path/to/your/checkpoint} --image_dir {dir/of/input/images} --output_dir {dir/to/save/visualizations}
--output_dir по умолчанию в infer_outputs .
Магистраль:
ResNet50_conv4_body , ResNet50_conv5_body , ResNet101_Conv4_Body , ResNet101_Conv5_Body , ResNet152_Conv5_Body[fpn_]ResNet101_Conv4_Body , [fpn_]ResNet101_Conv5_Body , [fpn_]ResNet152_Conv5_Bodyfpn_ResNet50_conv5_body , fpn_ResNet50_conv5_P2only_body , fpn_ResNet101_conv5_body , fpn_ResNet101_conv5_P2only_body fpn_ResNet152_conv5_body fpn_ResNet152_conv5_P2only_body Head Box: ResNet_roi_conv5_head , roi_2mlp_head , roi_Xconv1fc_head , roi_Xconv1fc_gn_head
Голова маски: mask_rcnn_fcn_head_v0upshare , mask_rcnn_fcn_head_v0up , mask_rcnn_fcn_head_v1up , mask_rcnn_fcn_head_v1up4convs , mask_rcnn_fcn_head_v1up4conv4convs mask_rcnn_fcn_head_v1up4convs_gn .
Направляемая клавиши: roi_pose_head_v1convX
Примечание : именование аналогично тому, что используется в Detectron. Просто удалите любое приготовление add_ .
На данный момент поддерживается только Коко. Тем не менее, вся реализация библиотеки наборов данных практически идентична Detectron's, поэтому должно быть легко добавить больше наборов данных, поддерживаемых Detectron.
Файлы, специфичные для конфигурации, помещаются в конфигурации. Общий файл конфигурации lib/core/config.py имеет почти все параметры с теми же значениями по умолчанию, что и в Detectron's , поэтому легко преобразовать конфигурации, специфичные для архитектуры из Detectron.
Некоторые параметры от Detectron не используются , потому что соответствующие функции еще не реализованы. Например, увеличение данных при тестировании.
MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS = True : загружать ли ImageNet предварительно проведенные веса.RESNETS.IMAGENET_PRETRAINED_WEIGHTS = '' : Путь к предварительному весам остаточной сети. Если начните с '/' , то это рассматривается как абсолютный путь. В противном случае рассматривать как относительный путь к ROOT_DIR .TRAIN.ASPECT_CROPPING = False , TRAIN.ASPECT_HI = 2 , TRAIN.ASPECT_LO = 0.5 : варианты для аспекта для ограничения диапазона соотношений аспектов изображения.RPN.OUT_DIM_AS_IN_DIM = True , RPN.OUT_DIM = 512 , RPN.CLS_ACTIVATION = 'sigmoid' : официальная реализация RPN имеет одинаковые входные и выходные каналы и используйте Sigmoid, что и функция активации для прогноза класса FG/BG. В реализации Jwyang он фиксирует номер выходного канала до 512 и использует Softmax в качестве функции активации.MODEL.NUM_CLASSES . Он будет установлен в соответствии с набором данных, указанным --dataset .TRAIN.WEIGHTS , TRAIN.DATASETS и TEST.DATASETSMODEL.CONV_BODY , FAST_RCNN.ROI_BOX_HEAD ...), удалите add_ в строке, если существует.RESNETS.IMAGENET_PRETRAINED_WEIGHTS указывающие на предварительно проведенный файл веса. Если нет, установите MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS в False .OUTPUT_DIR: . на последней строкеNUM_GPUS в файле конфигурации. Он используется для вывода исходного размера партии для обучения, а скорость обучения будет линейно масштабирован в соответствии с изменением размера партии. Правильная корректировка скорости обучения важна для обучения с различным размером партии.RESNETS.USE_GN: True . Benchmark.md