Use esto en su lugar: https://github.com/facebookresearch/maskrcnn-benchmark

Ejemplo de salida de E2E_MASK_RCNN-R-101-FPN_2X usando el peso de detención de Detectron.

Salida de ejemplo correspondiente de Detectron.

Ejemplo de salida de E2E_KEYPOINT_RCNN-R-50-FPN_S1X USANDO PESO DETECTRON PRETIENTRADO.
Este código sigue la arquitectura de implementación de Detectron. Solo se admite parte de la funcionalidad. Consulte esta sección para obtener más información.
Con este código, puedes ...
Este repositorio se construye originalmente en jwyang/faster-rcnn.pytorch. Sin embargo, después de muchas modificaciones, la estructura cambia mucho y ahora es más similar a Detectron. Deliberadamente hago todo similar o idéntico a la implementación de Detectron, a fin de reproducir el resultado directamente de los archivos oficiales de peso previado.
Esta implementación tiene las siguientes características:
Es un código de pytorch puro . Por supuesto, hay algún código CUDA.
Admite entrenamiento por lotes de imágenes múltiples .
Admite múltiples capacitación en GPU .
Admite tres métodos de agrupación . Observe que solo el ROI Align está revisado para que coincida con la implementación en CAFFE2. Entonces, úsalo.
Es de memoria eficiente . Para el lote de datos, hay dos tecnologías disponibles para reducir el uso de la memoria: 1) Agrupación de aspecto : imágenes de grupo con una relación de aspecto similar en un lote 2) Curting de aspecto : imágenes de cultivos que son demasiado largas. La agrupación de aspecto se implementa en Detectron, por lo que se usa para el valor predeterminado. El recorte de aspecto es la idea de jwyang/fastaster-rcnn.pytorch, y no se usa para el valor predeterminado.
Además de eso, implemento un módulo nn.DataParallel personalizado que permite un tamaño de mancha de lotes diferente en diferentes GPU. Consulte mi sección nn.dataparallel para obtener más detalles sobre esto.
Clon el repositorio:
git clone https://github.com/roytseng-tw/mask-rcnn.pytorch.git
Probado bajo Python3.
Compilar el código CUDA:
cd lib # please change to this directory
sh make.sh
Si está utilizando las GPU de Volta, desenchufe esta línea en lib/mask.sh . CUDA_PATH predeterminado a /usr/loca/cuda . Si desea usar una biblioteca CUDA en una ruta diferente, cambie esta línea en consecuencia.
Compilará todos los módulos que necesita, incluidos NMS, Roi_pooing, ROI_CROP y ROI_ALIGN. (En realidad GPU NMS nunca se usa ...)
Tenga en cuenta que, si usa CUDA_VISIBLE_DEVICES para establecer GPU, asegúrese de que al menos una GPU sea visible cuando compile el código.
Crear una carpeta de datos en el repositorio,
cd {repo_root}
mkdir data
Coco : Descargue las imágenes y anotaciones de Coco desde el sitio web de Coco.
Y asegúrese de poner los archivos como la siguiente estructura:
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
├── ...
Descargue las mini anotaciones de Coco desde aquí. Tenga en cuenta que Minival es exactamente equivalente al conjunto Val 2017 recientemente definido. Del mismo modo, la Unión de ValminusMinival y el tren 2014 es exactamente equivalente al set de trenes 2017.
Siéntase libre de colocar el conjunto de datos en cualquier lugar que desee, y luego un enlace suave el conjunto de datos en los data/ carpeta:
ln -s path/to/coco data/coco
Recomendar poner las imágenes en un SSD para un posible mejor rendimiento de entrenamiento
Utilizo pesos pretratidos ImageNet de Caffe para las redes de la troncal.
Descárgalos y póngalos en el {repo_root}/data/pretrained_model .
Puede el siguiente comando para descargarlos todos:
argparse_color_formater , colorama , requests python tools/download_imagenet_weights.py
NOTA : Los pesos de caffe Pretraned tienen un rendimiento ligeramente mejor que el pytorch previado. Sugerir para usar modelos previos al caffe del enlace anterior para reproducir los resultados. Por cierto, Detectron también usa pesos previos a la aparición de Caffe.
Si desea utilizar modelos previamente capacitados de Pytorch, recuerde transponer imágenes de BGR a RGB, y también use el mismo preprocesamiento de datos (menos media y normalización) que se usa en el modelo de pytorch.
Además del uso de los pesos previos a la aparición para resnet anterior, también puede usar los pesos de Detectron cambiando la línea correspondiente en el archivo de configuración del modelo de la siguiente manera:
RESNETS:
IMAGENET_PRETRAINED_WEIGHTS: 'data/pretrained_model/R-50.pkl'
R-50-GN.PKL y R-101-GN.PKL son necesarios para GN_BASELINES.
X-101-32X8D.PKL, X-101-64X4D.PKL y X-152-32X8D-IN5K.PKL son necesarios para los retorno de resnext.
No cambie nada en los archivos de configuración proporcionados (config/**/xxxx.yml) a menos que sepa lo que está haciendo
Use la variable de entorno CUDA_VISIBLE_DEVICES para controlar qué GPU usar.
Batch_size: NUM_GPUS x TRAIN.IMS_PER_BATCH
efectivo_batch_size: batch_size x iter_size
Cambio de algo: new value of something / old value of something
Las siguientes opciones de configuración se ajustarán automáticamente de acuerdo con las configuraciones de capacitación reales: 1) Número de GPU NUM_GPUS , 2) Tamaño de lotes por tren TRAIN.IMS_PER_BATCH , 3) Actualizar iter_size
SOLVER.BASE_LR : ajuste directamente propocional al cambio de batch_size.SOLVER.STEPS , SOLVER.MAX_ITER : ajuste inversamente propocional al cambio de efectivo_batch_size.Tome Mask-RCNN con RES50 Backbone, por ejemplo.
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}
Use --bs para sobrescribir el tamaño de lote predeterminado a un valor adecuado que se ajuste a sus GPU. Simliar para --nw , el número de subprocesos de cargador de datos predeterminados a 4 en config.py.
Especifique —-use_tfboard para registrar las pérdidas en TensorBoard.
NOTA : Use --dataset keypoints_coco2017 cuando se entrene para KeyPoint-RCNN.
--iter_size Al igual que en Caffe, actualice la red una vez ( optimizer.step() ) cada iteraciones iter_size (hacia adelante + hacia atrás). Esta forma de tener un tamaño de lote efectivo más grande para el entrenamiento. Observe que el recuento de pasos solo aumenta después de la actualización de la red.
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 predeterminados a 1.
python tools/train_net_step.py ... --load_ckpt {path/to/the/checkpoint}
o utilizando el archivo de punto de control de 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
Cuando reanude la capacitación, el conteo de pasos y el estado de optimizador también se restaurarán desde el punto de control. Para SGD Optimizer, Optimizer State contiene el impulso para cada parámetro capacitable.
NOTA : --resume aún no es compatible para --load_detectron
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 para evitar guardar cualquier punto de control o registro. python train_net_step.py --help
En resumen, use train_net_step.py .
En train_net_step.py :
SOLVER.LR_POLICY: steps_with_decay . (Deprecido) En train_net.py algunas opciones de configuración no tienen efectos y vale la pena notar:
SOLVER.LR_POLICY , SOLVER.MAX_ITER , SOLVER.STEPS , SOLVER.LRS : por ahora, la política de capacitación está controlada por estos argumentos de línea de comando:
--epochs : cuántas épocas entrenar. Una época significa un viaje a través de todos los conjuntos de entrenamiento. Predeterminado a 6.--lr_decay_epochs : épocas para decaer la tasa de aprendizaje. La descomposición ocurre al comienzo de una época. La época está indexada por 0. El valor predeterminado a [4, 5]. Para obtener más argumentos de línea de comando, consulte python train_net.py --help
SOLVER.WARM_UP_ITERS , SOLVER.WARM_UP_FACTOR , SOLVER.WARM_UP_METHOD : el calentamiento de entrenamiento no es compatible.
Por ejemplo, prueba Mask-Rcnn en 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}
Use --load_detectron para cargar el punto de control de Detectron. Si hay varias GPU disponibles, agregue --multi-gpu-testing .
Especifique un directry de salida diferente, use --output_dir {...} . El valor predeterminado es {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 predeterminado a infer_outputs .
Columna vertebral:
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 Cabeza de caja: ResNet_roi_conv5_head , roi_2mlp_head , roi_Xconv1fc_head , roi_Xconv1fc_gn_head
Cabezal de Mask: mask_rcnn_fcn_head_v0upshare , mask_rcnn_fcn_head_v0up , mask_rcnn_fcn_head_v1up , mask_rcnn_fcn_head_v1up4convs , mask_rcnn_fcn_head_v1up4convs_gn
Cabeza de KeyPoints: roi_pose_head_v1convX
Nota : El nombre es similar al utilizado en Detectron. Simplemente elimine cualquier add_ prependente.
Solo Coco es compatible por ahora. Sin embargo, toda la implementación de la biblioteca de conjuntos de datos es casi idéntica a Detectron's, por lo que debería ser fácil agregar más conjuntos de datos compatibles con Detectron.
Los archivos de configuración específicos de la arquitectura se colocan en configuraciones. El archivo de configuración general lib/core/config.py tiene casi todas las opciones con los mismos valores predeterminados que en Detectron's , por lo que es fácil transformar las configuraciones específicas de la arquitectura de Detectron.
Algunas opciones de Detectron no se utilizan porque las funcionalidades correspondientes aún no se implementan. Por ejemplo, el aumento de datos en las pruebas.
MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS = True : si se debe cargar pesos de imagen previos a ImageNet.RESNETS.IMAGENET_PRETRAINED_WEIGHTS = '' : ruta a los pesos de red residuales previos a la red. Si comienza con '/' , entonces se trata como un camino absoluto. De lo contrario, trate como una ruta relativa a ROOT_DIR .TRAIN.ASPECT_CROPPING = False , TRAIN.ASPECT_HI = 2 , TRAIN.ASPECT_LO = 0.5 : Opciones para recortar aspecto para restringir el rango de relación de aspecto de la imagen.RPN.OUT_DIM_AS_IN_DIM = True , RPN.OUT_DIM = 512 , RPN.CLS_ACTIVATION = 'sigmoid' : el implemento oficial de RPN tiene los mismos canales de características de entrada y salida y usa sigmoide como la función de activación para la predicción de clases FG/BG. En la implementación de Jwyang, fija el número de canal de salida a 512 y usa Softmax como función de activación.MODEL.NUM_CLASSES . Se establecerá de acuerdo con el conjunto de datos especificado por --dataset .TRAIN.WEIGHTS , TRAIN.DATASETS y TEST.DATASETSMODEL.CONV_BODY , FAST_RCNN.ROI_BOX_HEAD ...), elimine add_ en la cadena si existe.RESNETS.IMAGENET_PRETRAINED_WEIGHTS que apuntan al archivo de peso previo a la aparición. Si no, establezca MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS a False .OUTPUT_DIR: . en la última líneaNUM_GPUS en el archivo de configuración. Se usa para inferir el tamaño de lote original para la capacitación, y la tasa de aprendizaje se escalará linealmente de acuerdo con el cambio de tamaño por lotes. El ajuste adecuado de la tasa de aprendizaje es importante para el entrenamiento con diferentes tamaños de lotes.RESNETS.USE_GN: True . Benchmark.md