Verwendung der ROIPooling-Ebene mit einem vortrainierten ResNet34-Modell in MxNet-Gluon

9

Angenommen, ich verfüge über ein Resnet34-Modell in MXNet und möchte die in der API enthaltene vorgefertigte ROIPooling-Ebene hinzufügen:

Ссылка

Wenn der Code zum Initialisieren von Resnet wie folgt lautet: Wie kann ich ROIPooling auf der letzten Ebene der Resnet-Features vor dem Klassifizierer hinzufügen?

Wie kann ich eigentlich die ROIPooling-Funktion in meinem Modell im Allgemeinen nutzen?

Wie kann ich mehrere ROIs in die ROIpooling-Ebene integrieren? Wie sollten sie gespeichert werden? Wie sollte der Dateniterator geändert werden, um den von der ROIPooling-Funktion benötigten Batch-Index zu erhalten?

Nehmen wir an, ich nutze dies zusammen mit dem VOC 2012 Dataset für die Aufgabe der Aktionserkennung

%Vor%     
obelix 16.01.2018, 01:30
quelle

1 Antwort

3

ROIPooling-Layer werden normalerweise für Objekterkennungsnetzwerke wie R-CNN und ihre Varianten ( Schnelle R-CNN und schnellere R-CNN ). Der wesentliche Teil all dieser Architekturen ist eine Komponente (neuronale oder klassische CV), die regionale Vorschläge generiert. Diese Regionsvorschläge sind im Wesentlichen ROIs, die in die ROIPooling-Schicht eingespeist werden müssen. Die Ausgabe der ROIPooling-Ebene wird eine Gruppe von Tensoren sein, wobei jeder Tensor einen beschnittenen Bereich eines Bildes darstellt. Jeder dieser Tensoren wird unabhängig für die Klassifizierung verarbeitet. Zum Beispiel sind diese Tensoren in R-CNN Ausschnitte des Bildes in RGB, die dann durch ein Klassifikationsnetzwerk laufen. In Fast R-CNN und Faster R-CNN sind Tensoren Merkmale aus einem Faltungsnetzwerk, z. B. ResNet34.

In Ihrem Beispiel müssen Sie, ob durch einen klassischen Computer Vision Algorithmus (wie in R-CNN und Fast R-CNN) oder ein Region Proposal Network (wie in Faster R-CNN), einige ROIs erzeugen, die Kandidaten für das Objekt von Interesse enthalten. Sobald Sie diese ROIs für jedes Bild in einem Minibatch haben, müssen Sie sie zu einem NDArray von [[batch_index, x1, y1, x2, y2]] kombinieren. Was diese Dimensionierung bedeutet, ist, dass Sie grundsätzlich so viele ROIs haben können, wie Sie möchten, und für jeden ROI müssen Sie angeben, welches Bild in dem zuzuschneidenden Stapel (also batch_index ) und welche Koordinaten es beschneiden soll (daher der (x1, y1) für die obere linke Ecke und (x2,y2) für die Koordinaten der unteren rechten Ecke).

Wenn Sie also etwas Ähnliches wie R-CNN implementieren, übergeben Sie Ihre Bilder direkt an die RoiPooling-Ebene:

%Vor%

Wenn wir Dummy-Daten über das Netzwerk senden, können Sie sehen, dass, wenn roi array 4 rois enthält, die Ausgabe 4 Klassifikationsergebnisse enthalten wird:

%Vor%

Ausgaben:

%Vor%

Wenn Sie jedoch ROIPooling mit dem Fast R-CNN- oder Faster R-CNN-Modell verwenden möchten, benötigen Sie Zugriff auf die Funktionen des Netzwerks, bevor sie im Durchschnitt gepoolt werden. Diese Features werden dann ROIPooled, bevor sie an die Klassifizierung übergeben werden. Hier ein Beispiel, in dem die Funktionen vom vortrainierten Netzwerk stammen, ROIPoolings pooled_size ist 4x4 und ein einfaches GlobalAveragePooling gefolgt von einem Dense-Layer wird für die Klassifizierung nach ROIPooling verwendet. Beachten Sie, dass spatial_scale auf 1.0/32 gesetzt ist, weil das Bild über das ResNet-Netzwerk maximal um den Faktor 32 gepoolt wird, damit die ROIPooling-Ebene die Rois automatisch dafür kompensieren kann.

%Vor%

Wenn wir Dummy-Daten über das Netzwerk senden, können Sie sehen, dass, wenn roi array 4 rois enthält, die Ausgabe 4 Klassifikationsergebnisse enthalten wird:

%Vor%

Ausgaben:

%Vor%     
Sina Afrooze 01.03.2018, 01:58
quelle

Tags und Links