Wie man ein neuronales Netzwerk in Python 3 mit OpenCV und PyTorch austrickst

Blog

Könnte ein neuronales Netz zur Tierklassifizierung getäuscht werden? Einen Tierklassifizierer zu täuschen mag wenig Konsequenzen haben, aber was wäre, wenn unser Gesichtsauthentifizierer getäuscht werden könnte? Oder die Software unseres selbstfahrenden Autoprototyps? Glücklicherweise stehen Legionen von Ingenieuren und Forschern zwischen einem Prototyp eines Computer-Vision-Modells und Modellen in Produktionsqualität auf unseren mobilen Geräten oder Autos. Dennoch haben diese Risiken erhebliche Auswirkungen und sind als Praktiker des maschinellen Lernens wichtig zu berücksichtigen.



roku:com/link

In diesem Tutorial werden Sie versuchen, einen Tierklassifikator zu täuschen oder auszutricksen. Während Sie das Tutorial durcharbeiten, verwenden Sie |_+_|, eine Computer-Vision-Bibliothek, und |_+_|, eine Deep-Learning-Bibliothek. Folgende Themen werden Sie im zugehörigen Bereich der Gegnerisches maschinelles Lernen :

  • Ein ... kreieren gezieltes gegnerisches Beispiel . Wählen Sie ein Bild, sagen wir, von einem Hund. Wählen Sie a Ziel Klasse, sagen wir, eine Katze. Ihr Ziel ist es, dem neuronalen Netz vorzutäuschen, dass der abgebildete Hund eine Katze ist.
  • Erstelle ein gegnerische Verteidigung . Kurz gesagt, schützen Sie Ihr neuronales Netzwerk vor diesen kniffligen Bildern, ohne zu wissen, was der Trick ist.

Am Ende des Tutorials haben Sie ein Werkzeug zum Austricksen neuronaler Netze und wissen, wie Sie sich gegen Tricks verteidigen können.



Schritt 1 – Erstellen Ihres Projekts und Installieren von Abhängigkeiten

Lassen Sie uns einen Arbeitsbereich für dieses Projekt erstellen und die benötigten Abhängigkeiten installieren. Sie nennen Ihren Arbeitsbereich |_+_|:

OpenCV

Navigieren Sie zum |_+_| Verzeichnis:



PyTorch

Erstellen Sie ein Verzeichnis für alle Ihre Assets:

AdversarialML

Erstellen Sie dann eine neue virtuelle Umgebung für das Projekt:

mkdir ~/AdversarialML

Aktivieren Sie Ihre Umgebung:

AdversarialML

Dann installieren PyTorch , ein Deep-Learning-Framework für Python, das Sie in diesem Tutorial verwenden werden.

Installieren Sie Pytorch unter macOS mit dem folgenden Befehl:

cd ~/AdversarialML

Verwenden Sie unter Linux und Windows die folgenden Befehle für einen Nur-CPU-Build:

mkdir ~/AdversarialML/assets

Installieren Sie jetzt vorgefertigte Binärdateien für |_+_| und |_+_|, die Bibliotheken für Computer Vision bzw. lineare Algebra sind. |_+_| bietet Dienstprogramme wie Bilddrehungen und |_+_| bietet lineare Algebra-Dienstprogramme wie eine Matrixinversion:

python3 -m venv adversarialml

Auf Linux-Distributionen müssen Sie |_+_| installieren:

source adversarialml/bin/activate

Lassen Sie uns mit den installierten Abhängigkeiten einen Tierklassifizierer namens ResNet18 ausführen, den wir als Nächstes beschreiben.

Schritt 2 – Ausführen eines vortrainierten Tierklassifizierers

Die |_+_| library, die offizielle Computer Vision-Bibliothek für PyTorch, enthält vortrainierte Versionen häufig verwendeter neuronaler Computer Vision-Netzwerke. Diese neuronalen Netze sind alle darauf trainiert ImageNet 2012 , ein Datensatz von 1,2 Millionen Trainingsbildern mit 1000 Klassen. Diese Klassen umfassen Fahrzeuge, Orte und vor allem Tiere. In diesem Schritt führen Sie eines dieser vortrainierten neuronalen Netze namens ResNet18 aus. Wir werden ResNet18, das auf ImageNet trainiert wurde, als Tierklassifikator bezeichnen.

Was ist ResNet18? ResNet18 ist das kleinste neuronale Netzwerk in einer Familie neuronaler Netzwerke namens restliche neuronale Netze , entwickelt von MSR (Er et al.). Kurz gesagt fand er heraus, dass ein neuronales Netz (bezeichnet als Funktion |_+_|, mit Eingabe |_+_| und Ausgabe |_+_|) mit einer Restverbindung |_+_| besser funktionieren würde. Diese Restverbindung wird in modernen neuronalen Netzen auch heute noch häufig verwendet. Zum Beispiel, FBNetV2 , FBNetV3 .

Herunterladen dieses bild von einem hund mit folgendem Befehl:

python -m pip install torch==1.2.0 torchvision==0.4.0

Erstellen Sie als Nächstes ein Skript, um Ihr vortrainiertes Modell auf dem Hundebild auszuführen. Erstellen Sie eine neue Datei namens |_+_|:

pip install torch==1.2.0+cpu torchvision==0.4.0+cpu -f https://download.pytorch.org/whl/torch_stable.html pip install torchvision

Fügen Sie zunächst die Python-Boilerplate hinzu, indem Sie die erforderlichen Pakete importieren und ein |_+_| . deklarieren Funktion:

step_2_pretrained.py

OpenCV

Laden Sie als Nächstes die Zuordnung von der Ausgabe des neuronalen Netzwerks in für Menschen lesbare Klassennamen. Fügen Sie dies direkt nach Ihren Importanweisungen und vor Ihrem |_+_| . hinzu Funktion:

step_2_pretrained.py

numpy

Erstellen Sie eine Bildtransformationsfunktion, die sicherstellt, dass Ihr Eingabebild erstens die richtigen Abmessungen hat und zweitens korrekt normalisiert ist. Fügen Sie die folgende Funktion direkt nach der letzten hinzu:

step_2_pretrained.py

OpenCV

In |_+_| definieren Sie eine Reihe verschiedener Transformationen, die auf die Bilder angewendet werden sollen, die an Ihr neuronales Netzwerk übergeben werden:

  • |_+_|: Ändert die Größe der kleineren Seite des Bildes auf 224. Wenn Ihr Bild beispielsweise 448 x 672 groß ist, würde dieser Vorgang das Bild auf 224 x 336 verkleinern.
  • |_+_|: Nimmt einen Ausschnitt aus der Mitte des Bildes in der Größe 224 x 224.
  • |_+_|: Konvertiert das Bild in einen PyTorch-Tensor. Alle PyTorch-Modelle benötigen PyTorch-Tensoren als Eingabe.
  • |_+_|: Standardisiert Ihre Eingabe, indem Sie den Mittelwert subtrahieren und dann durch die Standardabweichung dividieren. Genauer wird dies im |_+_| . beschrieben Dokumentation .

Fügen Sie ein Dienstprogramm hinzu, um die Tierklasse anhand des Bildes vorherzusagen. Diese Methode verwendet die beiden vorherigen Dienstprogramme, um die Tierklassifizierung durchzuführen:

step_2_pretrained.py

numpy

Hier die |_+_| Die Funktion klassifiziert das bereitgestellte Bild mithilfe eines vortrainierten neuronalen Netzes:

  • |_+_|: Lädt ein vortrainiertes neuronales Netzwerk namens ResNet18.
  • |_+_|: Modifiziert das Modell an Ort und Stelle so, dass es im „Auswertungs“-Modus ausgeführt wird. Der einzige andere Modus ist der Trainingsmodus, aber der Trainingsmodus wird nicht benötigt, da Sie das Modell in diesem Tutorial nicht trainieren (d. h. die Parameter des Modells aktualisieren).
  • |_+_|: Führt das neuronale Netzwerk auf dem bereitgestellten, transformierten Bild aus.
  • |_+_|: Das neuronale Netz gibt für jede mögliche Klasse eine Wahrscheinlichkeit aus. Dieser Schritt berechnet den Index der Klasse mit der höchsten Wahrscheinlichkeit. Wenn beispielsweise |_+_|, dann |_+_|.
  • |_+_|: Erhält eine Zuordnung vom Klassenindex zu für Menschen lesbaren Klassennamen. Die Zuordnung könnte beispielsweise |_+_| lauten.
  • |_+_|: Konvertiert den vorhergesagten Klassenindex in einen Klassennamen. Die Beispiele in den letzten beiden Aufzählungspunkten würden |_+_| ergeben.

Als nächstes fügen Sie nach der letzten Funktion ein Dienstprogramm zum Laden von Bildern hinzu:

step_2_pretrained.py

python -m pip install opencv-python==3.4.3.18 numpy==1.14.5

Dadurch wird ein Bild aus dem im ersten Argument angegebenen Pfad in das Skript geladen. |_+_| wendet die in den vorherigen Zeilen definierte Sequenz von Bildtransformationen an.

Füllen Sie schließlich Ihre |_+_| Funktion wie folgt, um Ihr Bild zu laden und das Tier im Bild zu klassifizieren:

step_2_pretrained.py

libSM.so

Überprüfen Sie, ob Ihre Datei mit unserem letzten Skript für Schritt 2 unter |_+_| . übereinstimmt auf GitHub. Speichern und beenden Sie Ihr Skript und führen Sie den Tierklassifizierer aus:

python step_2_pretrained.py Assets/dog.jpg'>   

www.digitalocean.com

Wie man ein neuronales Netzwerk in Python 3 mit OpenCV und PyTorch austrickst

Erfahren Sie, wie Sie ein neuronales Netzwerk in Python 3 mit OpenCV, einer Computer-Vision-Bibliothek, und PyTorch, einer Deep-Learning-Bibliothek, austricksen. Sie verfügen über ein Werkzeug zum Austricksen neuronaler Netze und wissen, wie Sie sich gegen Tricks verteidigen können.