[PYTHON] Führen Sie Chainers Imagenet [zuverlässig] aus.

Einführung

Über diesen Artikel

Ich habe es geschafft, imagenet zum Laufen zu bringen, während ich mir einige Websites angesehen habe, also habe ich es geschrieben, um den Inhalt zu behalten. Es gibt viele Websites, auf denen das Chainer-Beispiel ausgeführt wurde, aber es ist möglich, dass es aufgrund unterschiedlicher Versionen und Codes hängen bleibt. Daher werde ich die Umgebung, in der es tatsächlich ausgeführt wurde, und die zu diesem Zeitpunkt verwendete Literatur (Artikel) zusammenfassen.

Ziel

Die Person, die die Probe von mnist gemacht hat. Anfänger (weil ich auch Anfänger bin)

Referenzierte Site

Memorandum zum Starten der Bildklassifizierung mit Chainer (v1.14.0)

Mit der NIN von Chainer können Sie Ihren eigenen Bildsatz gründlich lernen und erkennen

Umgebungskonstruktion mit pyenv (Mac OS)

CPickle.UnpicklingError in Chainer

Verfahren

Umgebung

Der gesamte Inhalt wurde diesmal unter MacOS erstellt. Ich wollte es mit python3 machen, aber es scheint, dass die obige Site 2.x verwendet hat, also habe ich Anaconda 2.1.0 (python2.7.13) verwendet. Ich habe anaconda 2.1.0 mit pyenv installiert und die Umgebung erstellt. In der Chainer-Version wurde Chainer == 1.20.0.1 verwendet.

Als allererstes

Leihen Sie Tools von git aus, die im ersten Artikel veröffentlicht wurden.

git clone https://github.com/shi3z/chainer_imagenet_tools.git

Schreiben Sie den Code wie im zweiten Artikel um. Es ist einfacher, diese beiden Dinge zuerst zu tun.

Bildvorbereitung, Lehrerdaten und Testdaten

Sie können Ihren Lieblingsdatensatz für Bilder verwenden. Alles sollte verwendbar sein, solange es [Verzeichnisname / Klassifizierungsklassenname / tatsächliche Datei] ist. Als erstes müssen Sie Klassifizierungslehrerdaten und Testdaten aus dem Datensatz erstellen. Git klonen Sie das im zweiten Artikel bereitgestellte Programm und verwenden Sie es.

wget http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz


So bereiten Sie den Datensatz vor Verwenden Sie den Code aus dem zweiten Artikel

python make_train_data.py 101_ObjectCategories

Auf diese Weise werden das Bildverzeichnis, das die Bilddaten sammelt, und die drei Dateien train.txt, test.txt und label.txt ausgegeben. Trainieren und testen Sie anhand des Inhalts den Pfad zum Bild und die Nummer der Klassifizierungsklasse, zu der es gehört.

Bildgröße ändern

Da die Bilder nicht zusammenhängend sind, ist es notwendig, sie auf die Eingabedimension dieses neuronalen Netzwerks zu reduzieren. Zu diesem Zweck wird im Artikel crop.py vorbereitet. Das generierte Bild wird in Zuschneidebildern gespeichert. Hier wird der Pfad zum Bild in train.txt und test.txt beschrieben. Da es sich bei dem diesmal verwendeten Bild jedoch um Cropimages handelt, ersetzen Sie es mit einem Editor oder ähnlichem durch images-> Cropimages.

Lernphase

Verwenden Sie hier compute_mean.py, das in [examples / imagenet /] von chainer vorhanden ist, um eine mittlere Datei zu generieren.

python compute_mean.py train.txt

Generieren Sie eine mittlere Datei mit. Schreiben Sie das Programm auch unter Bezugnahme auf den letzteren Artikel neu. Der Inhalt wird hier neu geschrieben, aber grob gesagt ändert sich die Verwendung von Pickel, um das Modell im Serializer zu speichern. Es scheint gut, diesen Bereich anhand des Chainer-Dokuments zu untersuchen. Die eigentliche neuronale Netzwerkklasse ist in nin.py beschrieben. Durch Anpassen können Sie mithilfe des von Ihnen definierten neuronalen Netzwerks lernen.

Selbst wenn Sie diesen Punkt erreichen, erhalten einige Benutzer einen Fehler in Bezug auf cPickel. Lesen Sie daher cPickle.UnpicklingError in Chainer und lesen Sie die mittlere Datei um die Zeilen 68-70.

mean_image = np.load(args.mean) #Mittlere Datei lesen

Umschreiben an. Sie sollten es endlich schaffen.

python train_imagenet.py -E 10 train.txt test.txt 2>&1 | tee log

Diese Ausführung gibt eine Modelldatei aus. (Dump des neuronalen Netzwerks nach dem Training)

Ausführung der Bildklassifizierung

In dem zu Beginn veröffentlichten Artikel wird das Ausgabemodell verwendet, um mit anderen Daten als den Testdaten zu experimentieren, um festzustellen, ob die Klassifizierung funktioniert. Das Verfahren besteht darin, die Größe des zu testenden Bildes zu ändern und es zu klassifizieren. Für das Bild wird das Bild des Motorrads im Artikel so verwendet, wie es ist

wget http://www.trago.co.uk/ekmps/shops/tragoshop/images/wk-650i-motorbike-35kw-restricted-version-for-a2-license-available-white-blue-35677-p.jpg

mv wk-650i-motorbike-35kw-restricted-version-for-a2-license-available-white-blue-35677-p.jpg bike.jpg 

mkdir resized

Alles was Sie tun müssen, ist zu rennen

python resize.py bike.jpg
python inspection.py resized/bike.jpg

Sie sollten das Ergebnis auf dem Bildschirm sehen.

Impressionen

Es gibt viele Materialien auf dem Markt, so dass Sie maschinelles Lernen leicht genießen können, indem Sie die Proben bewegen. Es tut mir leid, dass ich es auf python3 anstelle von python2.x ausführen wollte. In zukünftigen Artikeln möchte ich Gesichter aus Bildern ausschneiden und Personen klassifizieren, die sie verwenden.

Der Beispielcode von chainer scheint viele Dateien zu haben, aber nur train_imagenet.py und nin.py wurden für das Training verwendet. Da es sich um den Code zum Erstellen und Testen von Lehrerdaten handelt, lesen Sie hauptsächlich diese Codes Ich denke es ist leicht zu verstehen.

Recommended Posts

Führen Sie Chainers Imagenet [zuverlässig] aus.
Laden und Testen des von Chainer trainierten Imagenet-Modells