[PYTHON] Laden Sie das Kaffeemodell mit Chainer und klassifizieren Sie die Bilder

Laden Sie das Kaffeemodell mit Chainer und klassifizieren Sie die Bilder. Das Chainer-Beispiel hat auch eine Bildklassifizierung, aber ich kann nicht sagen, welches Bild in welche Kategorie klassifiziert wurde, indem ich nur die Erkennungsrate ausgebe. Ermöglicht die Ausgabe des Kategorienamens und der Punktzahl als Klassifizierungsergebnis. Den Quellcode finden Sie unter hier. (Eine klassifizierte Version des Codes in diesem Artikel) Wenn Sie Schwierigkeiten haben, den Artikel zu lesen, klonen Sie ihn bitte.

Laden Sie das Caffe-Modell herunter

Dieses Mal verwenden wir bvlc_googlenet als Modell. 1000 Kategorien können klassifiziert werden. Auf der Seite bvlc_googlenet befindet sich ein Link zur Caffemodel-Datei. Laden Sie ihn daher von dort herunter.

Generieren Sie eine Etikettendatei

Eine Etikettendatei wird generiert, damit die Kategorienummer des Klassifizierungsergebnisses und der Kategoriename verknüpft werden können. Unten finden Sie ein Skript zum Herunterladen von imagenet-bezogenen Dateien. https://github.com/BVLC/caffe/blob/master/data/ilsvrc12/get_ilsvrc_aux.sh Eine Etikettendatei wird durch Verarbeiten der in caffe_ilsvrc12.tar.gz enthaltenen synset_words.txt generiert.

synset_words.txt


n01440764 tench, Tinca tinca
n01443537 goldfish, Carassius auratus
n01484850 great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias
n01491361 tiger shark, Galeocerdo cuvieri

Führen Sie den folgenden Befehl aus

wget http://dl.caffe.berkeleyvision.org/caffe_ilsvrc12.tar.gz
tar -xf caffe_ilsvrc12.tar.gz
sed -e 's/^[^ ]* //g' synset_words.txt > labels.txt

Die Etikettendatei wird erstellt.

labels.txt


tench, Tinca tinca
goldfish, Carassius auratus
great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias
tiger shark, Galeocerdo cuvieri
hammerhead, hammerhead shark

Da es zwei Zeilen gibt, die als "Kran" bezeichnet werden, ist dies verwirrend. Ändern Sie daher die 135. Zeile in "Kran (Vogel)" und die 518. Zeile in "Kran (Maschine)".

Bild in Numpy-Array konvertieren

Verwenden Sie Pillow (https://pillow.readthedocs.org/en/3.0.x/), um das Bild zu lesen, seine Größe zu ändern, es zu beschneiden und es dann in ein Numpy-Array zu konvertieren

import numpy as np
from PIL import Image

#Definition der Eingabebildgröße
image_shape = (224, 224)

#Bild lesen und in das RGB-Format konvertieren
image = Image.open('sample.png').convert('RGB')

#Bildgröße ändern und ausschneiden
image_w, image_h = self.image_shape
w, h = image.size
if w > h:
    shape = (image_w * w / h, image_h)
else:
    shape = (image_w, image_h * h / w)
x = (shape[0] - image_w) / 2
y = (shape[1] - image_h) / 2
image = image.resize(shape)
image = image.crop((x, y, x + image_w, y + image_h))
pixels = np.asarray(image).astype(np.float32)

#Pixel sind 3D und jede Achse ist[Y-Koordinate,X-Koordinate, RGB]Repräsentiert
#Eingabedaten sind 4 Dimensionen[Bildindex, BGR,Y-Koordinate,X-Koordinate]Führen Sie also die Array-Konvertierung durch
#Konvertieren Sie von RGB in BGR
pixels = pixels[:,:,::-1]

#Tauschen Sie die Achsen
pixels = pixels.transpose(2,0,1)

#Zeichnen Sie ein durchschnittliches Bild
mean_image = np.ndarray((3, 224, 224), dtype=np.float32)
mean_image[0] = 103.939
mean_image[1] = 116.779
mean_image[2] = 123.68
pixels -= self.mean_image

#Machen Sie es 4 Dimensionen
pixels = pixels.reshape((1,) + pixels.shape)

Laden Sie das Kaffeemodell und klassifizieren Sie es

Laden Sie das Caffemodel und verwenden Sie das soeben generierte Array als Eingabedaten.

import chainer
import chainer.functions as F
from chainer.functions import caffe

#Laden Sie das Kaffeemodell
func = caffe.CaffeFunction('bvlc_googlenet.caffemodel')

#Schicht'loss3/classifier'Holen Sie sich die Ausgabe von und wenden Sie softmax an
x = chainer.Variable(pixels, volatile=True)
y, = func(inputs={'data': x}, outputs=['loss3/classifier'], disable=['loss1/ave_pool', 'loss2/ave_pool'], train=False)
prediction = F.softmax(y)

Das Ergebnis ausgeben

Das Klassifizierungsergebnis wird ausgegeben.

#Lesen Sie das Etikett
categories = np.loadtxt('labels.txt', str, delimiter="\n")

#Scores und Labels werden in absteigender Reihenfolge der Scores verknüpft und sortiert
result = zip(prediction.data.reshape((prediction.data.size,)), categories)
result = sorted(result, reverse=True)

#Zeigen Sie die Top 10 Ergebnisse an
for i, (score, label) in enumerate(result[:10]):
    print '{:>3d} {:>6.2f}% {}'.format(i + 1, score * 100, label)

Erkennungsbeispiel

Als ich das in Asakusa aufgenommene Landschaftsbild erkannte, wurde es wie folgt. Die oberste Kategorie ist Moschee. Ich möchte, dass Sie Wolkenkratzer und Türme erkennen, aber sie scheinen nicht in dieser Kategorie zu sein.

sample.png

  1  38.85% mosque
  2   6.07% fire engine, fire truck
  3   5.15% traffic light, traffic signal, stoplight
  4   3.97% radio, wireless
  5   3.25% cinema, movie theater, movie theatre, movie house, picture palace
  6   2.14% pier
  7   2.01% limousine, limo
  8   1.92% stage
  9   1.89% trolleybus, trolley coach, trackless trolley
 10   1.61% crane (machine)

Am Ende

Es werden mehrere geschulte Kaffeemodelle veröffentlicht, mit denen jeder Bilder klassifizieren kann. Dieses Mal wurde nur ein Bild eingegeben, es ist jedoch möglich, mehrere Bilder gleichzeitig einzugeben. Das Laden des Caffemodels dauert einige Zeit. Daher ist es besser, das Bild zu laden, während das Caffemodel geladen bleibt.

Referenz

Versuchen Sie auf einem Mac ohne CUDA, ein Caffe-Modell mit Chainer zur Bilderkennung zu importieren

Recommended Posts

Laden Sie das Kaffeemodell mit Chainer und klassifizieren Sie die Bilder
Installieren Sie Caffe unter OSX 10.10 und klassifizieren Sie Bilder nach Referenzmodell
Bilderkennung mit Caffe Model Chainer Yo!
Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
Laden Sie das GIF-Bild mit Python + OpenCV
Seq2Seq (2) ~ Achtung Model Edition ~ mit Chainer
Laden Sie Bilder mit Falcon hoch und laden Sie sie herunter
Lernen Sie mit Chainer, monochrome Bilder einzufärben
Klassifizieren Sie Anime-Gesichter mit tiefem Lernen mit Chainer
Bilder mit Pupil, Python und OpenCV aufnehmen
Importieren und Exportieren von GeoTiff-Bildern mit Python
Schneiden Sie Bilder aus und verbinden Sie sie mit ImageMagick
Implementieren Sie ein Modell mit Status und Verhalten
Laden Sie csv mit Pandas und spielen Sie mit Index
Kategorisieren Sie Gesichtsbilder von Anime-Charakteren mit Chainer
Lösen des Lorenz 96-Modells mit Julia und Python
Laden Sie die TensorFlow-Modelldatei .pb mit readNetFromTensorflow ().
Wavelet-Konvertierung von Bildern mit PyWavelets und OpenCV
Seq2Seq (1) mit Chainer
Prozedur zum Laden von MNIST mit Python und zur Ausgabe an png
Zeigen Sie eingebettete Bilder von MP3 und Flac mit Mutagen an
[# 2] Mach Minecraft mit Python. ~ Modellzeichnung und Player-Implementierung ~
Caffe Model Zoo für Anfänger [Alters- und Geschlechtsklassifizierung]
Erstellen Sie einen Stapel von Bildern und blasen Sie sie mit ImageDataGenerator auf
Conv in x-Richtung und Deconv in y-Richtung mit Chainer
Erstellen Sie mit PyQt5 und PyQtGraph einen 3D-Modell-Viewer
Tech Circle ML # 8 Chainer mit wiederkehrendem neuronalen Sprachmodell
Lernen Sie Wasserstein GAN mit Keras-Modell und TensorFlow-Optimierung