Verwenden Sie dies stattdessen: https://github.com/facebookResearch/Maskrcrcnn-Benchmark

Beispielausgabe von e2e_mask_rcnn-r-101-fpn_2x mit dem vorab vorgezogenen DETECRONE-Gewicht.

Entsprechende Beispielausgabe aus dem DETECTRON.

Beispielausgabe von e2e_keypoint_rcnn-r-50-fpn_s1x unter Verwendung von detektronen vorgezogenem Gewicht.
Dieser Code folgt der Implementierungsarchitektur von DETECTRON. Nur ein Teil der Funktionalität wird unterstützt. Weitere Informationen finden Sie in diesem Abschnitt.
Mit diesem Code können Sie ...
Dieses Repository basiert ursprünglich auf jwyang/schneller-rcnn.pytorch. Nach vielen Modifikationen ändert sich die Struktur jedoch stark und ist dem DETECTRON nun ähnlicher. Ich mache absichtlich alles ähnlich oder identisch mit der Implementierung von DETECRONRON, um das Ergebnis direkt aus offiziellen Dateien mit vorabreichten Gewicht zu reproduzieren.
Diese Implementierung hat die folgenden Funktionen:
Es ist reiner Pytorch -Code . Natürlich gibt es einen Cuda -Code.
Es unterstützt das Multi-Image-Batch-Training .
Es unterstützt mehrere GPU -Schulungen .
Es unterstützt drei Pooling -Methoden . Beachten Sie, dass nur ROI -Align überarbeitet wird, um der Implementierung in Caffe2 zu entsprechen. Benutze es also.
Es ist maßstabsöffizient . Für die Datenmarkierung stehen zwei Techiniquen zur Reduzierung des Speicherverbrauchs zur Verfügung: 1) Aspektgruppierung : Gruppenbilder mit ähnlichem Seitenverhältnis in einem Stapel 2) Aspektzuschneiden : Erntebilder, die zu lang sind. Die Aspektgruppierung wird in Detektronen implementiert und wird daher für die Standardeinstellung verwendet. Aspekte Cropping ist die Idee von jwyang/faser-rcnn.pytorch und wird nicht für die Standardeinstellung verwendet.
Außerdem implementiere ich ein maßgeschneidertes nn.DataParallel -Modul, das eine andere Batch -Blob -Größe auf verschiedenen GPUs ermöglicht. Weitere Informationen dazu finden Sie in meinem Abschnitt Nn.Dataparallel.
Klonen Sie das Repo:
git clone https://github.com/roytseng-tw/mask-rcnn.pytorch.git
Getestet unter python3.
Kompilieren Sie den CUDA -Code:
cd lib # please change to this directory
sh make.sh
Wenn Sie Volta GPUs verwenden, wenden Sie sich an diese Zeile in lib/mask.sh . CUDA_PATH standardmäßig /usr/loca/cuda . Wenn Sie eine CUDA -Bibliothek auf einem anderen Pfad verwenden möchten, ändern Sie diese Zeile entsprechend.
Es wird alle Module kompilieren, die Sie benötigen, einschließlich NMS, ROI_POOING, ROI_CROP und ROI_ALIGN. (Tatsächlich wird GPU -NMS nie verwendet ...)
Beachten Sie, dass, wenn Sie mit CUDA_VISIBLE_DEVICES zum Festlegen von GPUs verwenden, sicherstellen, dass mindestens eine GPU beim Kompilieren des Codes sichtbar ist.
Erstellen Sie einen Datenordner unter dem Repo,
cd {repo_root}
mkdir data
Coco : Laden Sie die Coco -Bilder und Anmerkungen von der Coco -Website herunter.
Stellen Sie sicher, dass Sie die Dateien als folgende Struktur eingeben:
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
├── ...
Laden Sie hier Coco Mini -Anmerkungen herunter. Bitte beachten Sie, dass das Minival genau dem kürzlich definierten VAL -Set 2017 entspricht. In ähnlicher Weise entspricht die Union von Valminusminival und der Zug 2014 genau dem Zug der Zug 2017.
Fühlen Sie sich frei, den Datensatz an einem beliebigen Ort zu setzen, den Sie möchten, und dann den Datensatz unter dem data/ Ordner weich:
ln -s path/to/coco data/coco
Empfehlen Sie, die Bilder auf eine SSD zu setzen, um eine bessere Trainingsleistung zu erhalten
Ich benutze imagNet vorbereitete Gewichte aus Kaffe für die Rückgrat -Netzwerke.
Laden Sie sie herunter und legen Sie sie in die {repo_root}/data/pretrained_model ein.
Sie können den folgenden Befehl herunterladen, um sie alle herunterzuladen:
argparse_color_formater , colorama , requests python tools/download_imagenet_weights.py
HINWEIS : Caffe -Present -Gewichte haben eine etwas bessere Leistung als Pytorch -Presented. Schlagen Sie vor, dass Sie mit der obigen Verbindung von CAFFe -Vorbildern aus dem obigen Link die Ergebnisse reproduzieren. Übrigens verwendet DETECTRON auch vorbereitete Gewichte aus Kaffe.
Wenn Sie Pytorch-Modelle verwenden möchten, denken Sie bitte daran, Bilder von BGR auf RGB zu transponieren und die gleiche Datenvorverarbeitung (minus Mittelwert und Normalisierung) zu verwenden, wie sie im Pytorch-vorbereiteten Modell verwendet werden.
Neben der Verwendung der vorgenannten Gewichte für Resnet oben können Sie die Gewichte von DETECRON auch verwenden, indem Sie die entsprechende Linie in der Modellkonfigurationsdatei wie folgt ändern:
RESNETS:
IMAGENET_PRETRAINED_WEIGHTS: 'data/pretrained_model/R-50.pkl'
R-50-GN.PKL und R-101-GN.PKL sind für GN_BASELINES erforderlich.
X-101-32X8D.PKL, X-101-64X4D.PKL und X-152-32X8D-in5K.PKL sind für ResNext-Backbones erforderlich.
Ändern Sie nichts in den bereitgestellten Konfigurationsdateien (Konfigurationen/**/xxxx.yml), es sei denn, Sie wissen, was Sie tun
Verwenden Sie die Umgebungsvariable CUDA_VISIBLE_DEVICES um zu steuern, welche GPUs verwendet werden sollen.
batch_size: NUM_GPUS x TRAIN.IMS_PER_BATCH
effektiv_batch_size: batch_size x iter_size
Änderung von etwas: new value of something / old value of something
Die folgenden Konfigurationsoptionen werden automatisch gemäß den tatsächlichen Trainingseinstellungen angepasst: 1) Anzahl der GPUs NUM_GPUS , 2) Stapelgröße pro GPU TRAIN.IMS_PER_BATCH iter_size
SOLVER.BASE_LR : Stellen Sie sich direkt an die Änderung von batch_size an.SOLVER.STEPS , SOLVER.MAX_ITER : Passen Sie die umgekehrte Anpassung an die Änderung von effektiv_batch_size an.Nehmen Sie zum Beispiel Mask-RCNN mit dem RES50-Rückgrat.
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}
Verwenden Sie --bs , um die Standard -Stapelgröße auf einen geeigneten Wert zu überschreiben, der in Ihren GPUs passt. Simliar für --nw , Anzahl der Datenlader -Threads standardmäßig in config.py.
Geben Sie —-use_tfboard an, um die Verluste auf Tensorboard zu protokollieren.
HINWEIS : Verwenden Sie --dataset keypoints_coco2017 beim Training für Keypoint-RCNN.
--iter_size Wie in Caffe, aktualisieren Sie das Netzwerk einmal ( optimizer.step() ) jede iter_size -Iterationen (vorwärts + rückwärts). Diese Möglichkeit, eine größere effektive Chargengröße für das Training zu haben. Beachten Sie, dass die Schrittzahl erst nach dem Netzwerkaktualisierung erhöht wird.
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 bis 1.
python tools/train_net_step.py ... --load_ckpt {path/to/the/checkpoint}
oder verwenden
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
Wenn Sie das Training wieder aufnehmen, werden auch der Schrittzähl- und Optimierer -Status vom Kontrollpunkt wiederhergestellt. Für SGD Optimizer enthält der Optimiererzustand die Dynamik für jeden trainierbaren Parameter.
HINWEIS : --resume wird noch nicht für --load_detectron unterstützt
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 hinzu, um das Speichern von Checkpoint oder Protokollierung zu vermeiden. python train_net_step.py --help
Kurz gesagt, verwenden Sie train_net_step.py .
In train_net_step.py :
SOLVER.LR_POLICY: steps_with_decay wird unterstützt. (Veraltet) In train_net.py Einige Konfigurationsoptionen haben keine Auswirkungen und erwähnenswert:
SOLVER.LR_POLICY , SOLVER.MAX_ITER , SOLVER.STEPS , SOLVER.LRS : Die Schulungsrichtlinie wird vorerst durch diese Befehlszeilenargumente gesteuert:
--epochs : Wie viele Epochen trainieren. Eine Epoche bedeutet, dass man die gesamten Trainingsessätze durchläuft. Standardeinstellung auf 6.--lr_decay_epochs : Epochen zum Verfallen der Lernrate. Der Verfall findet am Beginn einer Epoche statt. Die Epoche ist 0-idexiert. Standardeinstellungen zu [4, 5]. Weitere Argumente für Befehlszeilen finden Sie unter python train_net.py --help
SOLVER.WARM_UP_ITERS , SOLVER.WARM_UP_FACTOR , SOLVER.WARM_UP_METHOD : Das Training warm wird nicht unterstützt.
Zum Beispiel Testmask-RCNN am 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}
Verwenden Sie --load_detectron , um den Checkpoint von DETECTRON zu laden. Wenn mehrere GPUs verfügbar sind, fügen Sie --multi-gpu-testing hinzu.
Geben Sie ein anderes Ausgangsdirektor an, verwenden Sie --output_dir {...} . Standardeinstellung zu {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 standards zu infer_outputs .
Rückgrat:
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 Box Head: ResNet_roi_conv5_head , roi_2mlp_head , roi_Xconv1fc_head , roi_Xconv1fc_gn_head
Maskenkopf: 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 ,
Tastoint Head: roi_pose_head_v1convX
HINWEIS : Die Benennung ähnelt dem im Detektronen verwendeten. Entfernen Sie einfach alle Vorab add_ .
Derzeit wird nur Coco unterstützt. Die gesamte Implementierung der Datensatzbibliothek ist jedoch nahezu identisch mit den DETECTRONS, daher sollte es einfach sein, weitere Datensätze hinzuzufügen, die von DETECTRON unterstützt werden.
Architekturspezifische Konfigurationsdateien werden unter Konfigurationen gestellt. Die allgemeine Konfigurationsdatei lib/core/config.py hat fast alle Optionen mit den gleichen Standardwerten wie bei den DETECTRONS . Daher ist es mühelos, die architekturspezifischen Konfigurationen von DETECTRON zu transformieren.
Einige Optionen aus dem Detektron werden nicht verwendet, da die entsprechenden Funktionen noch nicht implementiert werden. Zum Beispiel Datenvergrößerung bei Tests.
MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS = True : Ob im Bildnetier gewichtet werden soll.RESNETS.IMAGENET_PRETRAINED_WEIGHTS = '' : Pfad zu vorbereiteten Restnetzwerkgewichten. Wenn Sie mit '/' beginnen, wird es als absoluter Weg behandelt. Ansonsten als relativen Weg zu ROOT_DIR behandeln.TRAIN.ASPECT_CROPPING = False , TRAIN.ASPECT_HI = 2 , TRAIN.ASPECT_LO = 0.5 : Optionen für den Aspekt, um die Bild -Seitenverhältnis -Reichweite einzuschränken.RPN.OUT_DIM_AS_IN_DIM = True , RPN.OUT_DIM = 512 , RPN.CLS_ACTIVATION = 'sigmoid' : Die offizielle Implementierung von RPN hat die gleiche Eingabe- und Ausgangsfunktionskanäle und verwenden Sigmoid als Aktivierungsfunktion für die FG/BG -Klassenvorhersage. In der Implementierung von Jwyang repariert es die Ausgangskanalnummer auf 512 und verwendet Softmax als Aktivierungsfunktion.MODEL.NUM_CLASSES . Es wird gemäß dem von --dataset angegebenen Datensatz festgelegt.TRAIN.WEIGHTS , TRAIN.DATASETS und TEST.DATASETSMODEL.CONV_BODY , FAST_RCNN.ROI_BOX_HEAD ...) entfernen Sie add_ in der Zeichenfolge, wenn vorhanden.RESNETS.IMAGENET_PRETRAINED_WEIGHTS hinzu.imagenet_Pretrainierte_Weights, die auf die vorbereitete Gewichtsdatei hinweisen. Wenn nicht, setzen Sie MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS auf False .OUTPUT_DIR: . in der letzten ZeileNUM_GPUS in der Konfigurationsdatei. Es wird verwendet, um die ursprüngliche Chargengröße für das Training zu schließen, und die Lernrate wird nach der Veränderung der Stapelgröße linear skaliert. Die richtige Anpassung der Lernrate ist für das Training mit unterschiedlicher Chargengröße wichtig.RESNETS.USE_GN: True . Benchmark.md