[PYTHON] Bildunterschriftengenerierung mit Chainer

Überblick

Ich habe die Erzeugung von Bildunterschriften mit Chainer implementiert. Wenn Sie ein Bild eingeben, wird dessen Beschreibung generiert. Der Quellcode ist unten. https://github.com/dsanno/chainer-image-caption

Ich habe den Algorithmus im folgenden Artikel verwendet. Show and tell: A neural image caption generator

Einige Leute haben die Untertitelgenerierung bereits in Chainer implementiert, daher habe ich auch darauf hingewiesen. Image caption generation by CNN and LSTM ~ Satoshi's Blog from Bloomington

Modell zur Erzeugung von Untertiteln

image_caption_model.png

Das in diesem Artikel verwendete Modell zur Erzeugung von Untertiteln ist grob in drei Netzwerke unterteilt.

--Konvertieren Sie das Bild in den Vektor $ {\ rm CNN} $ $ {\ rm CNN} $ enthält GoogleNet und VGG_ILSVRC_19_layers Verwenden Sie ein vorhandenes Modell für die Bildklassifizierung (z. B. / 3785162f95cd2d5fee77 # file-readme-md). --Wort, das $ W_e $ einbettet --Geben Sie einen Vektor ein und geben Sie die Wahrscheinlichkeit des Auftretens des nächsten Wortes $ {\ rm LSTM} $ aus

Modell für die Implementierung verwendet

Da der GPU-Speicher nicht ausreichte, wenn die Implementierung so war, wie sie in der Veröffentlichung beschrieben wurde, habe ich sie geändert und implementiert.

Ich werde anhand des Modells in den folgenden Abhandlungen erklären, aber ich denke, es ist nicht schwierig, es durch das tatsächlich verwendete Modell zu ersetzen.

Modelllernen

Die Lernziele sind $ W_e $ und $ {\ rm LSTM} $. $ {\ rm CNN} $ verwendet die trainierten Parameter so wie sie sind.

Die Trainingsdaten sind das Bild $ I $ und die Wortfolge $ \ {S_t \} (t = 0 ... N) $. $ S_0 $ ist jedoch das Startsymbol der Anweisung \ <S > und $ S_N $ ist das Endsymbol \ </ S >. Lerne wie folgt.

  1. Geben Sie das Bild $ I $ in $ {\ rm CNN} $ ein und extrahieren Sie die Ausgabe einer bestimmten Zwischenschicht als Merkmalsvektor.
  2. Geben Sie den Feature-Vektor in $ {\ rm LSTM} $ ein.
  3. Geben Sie $ S_t $ in der Reihenfolge von $ t = 0 $ bis $ N-1 $ ein und erhalten Sie bei jedem Schritt $ p_ {t + 1} $.
  4. Minimieren Sie die Kosten, die sich aus der Wahrscheinlichkeit der Ausgabe von $ S_ {t + 1} $ p_ {t + 1} (S_ {t + 1}) $ ergeben

Negative Log-Wahrscheinlichkeit als Kostenfunktion im Papier

L(I,S)=-\sum_{t=1}^{N}\log p_t(S_t)

Ich habe verwendet, aber in meiner Implementierung habe ich Softmax-Kreuzentropie verwendet. In dem Artikel wurde die Parameteraktualisierung mit SGD ohne Momentum durchgeführt, aber in meiner Implementierung habe ich Adam verwendet (Parameter ist der empfohlene Wert von Adam-Papier). .. Ich habe auch versucht, es mit logarithmischer Wahrscheinlichkeit und SGD zu implementieren, aber es scheint, dass es keinen Wert gibt, nur weil die Konvergenz des Lernens verlangsamt wird, aber ich verstehe nicht, warum es in das Papier übernommen wird. Ich habe auch Aussetzer wie in der Zeitung verwendet. In dem Artikel erwähnte ich, dass "Ensembling-Modelle" verwendet wurden, aber ich habe es nicht implementiert, weil ich die spezifische Implementierungsmethode nicht kannte.

Untertitelgenerierung

Bei der Erzeugung einer Beschriftung unter Verwendung eines trainierten Modells wird die Wahrscheinlichkeit des Auftretens von Wörtern wie unten gezeigt in der Reihenfolge von Anfang an berechnet, und die Wortfolge mit dem höchsten Produkt der Wahrscheinlichkeit des Auftretens von Wörtern wird als Beschriftung verwendet.

  1. Geben Sie das Bild in $ {\ rm CNN} $ ein und extrahieren Sie die Ausgabe einer bestimmten Zwischenschicht als Merkmalsvektor.
  2. Geben Sie den Feature-Vektor in $ {\ rm LSTM} $ ein.
  3. Konvertieren Sie das Anweisungsstart-Symbol \ <S > mit $ W_e $ in einen Vektor und geben Sie es in $ {\ rm LSTM} $ ein.
  4. Da die Erscheinungswahrscheinlichkeit von Wörtern aus der Ausgabe von $ {\ rm LSTM} $ bekannt sein kann, wählen Sie die obersten $ M $ -Wörter aus.
  5. Konvertieren Sie die Wortausgabe im vorherigen Schritt mit $ W_e $ in einen Vektor und geben Sie sie in $ {\ rm LSTM} $ ein.
  6. Berechnen Sie aus der Ausgabe von $ {\ rm LSTM} $ das Produkt der Wahrscheinlichkeiten der bisher ausgegebenen Wörter und wählen Sie die obersten M Wortketten aus.
  7. Wiederholen Sie die Schritte 5 und 6, bis die Wortausgabe das Beendigungssymbol \ </ S > ist.

In dieser Implementierung setzen wir $ M = 20 $

Trainingsdaten

Für die Trainingsdaten haben wir den Bilddatensatz mit Annotation of MSCOCO verwendet. Anstelle der von MSCOCO verteilten Daten habe ich jedoch die auf den folgenden Websites verteilten Daten verwendet. Die mit VGG_ILSVRC_19_layers aus dem Bild extrahierten Merkmalsvektordaten und die Anmerkungswortzeichenfolgendaten werden auf dieser Site verteilt. Durch die Verwendung dieser Daten konnten wir die Mühe des Extrahierens des Merkmalsvektors aus dem Bild und die Mühe des Vorverarbeitens von Anmerkungen (Teilen des Satzes in Wörter) sparen.

Deep Visual-Semantic Alignments for Generating Image Descriptions

Laut der folgenden Website scheinen die Annotation-Daten von MSCOCO aufgrund starker Notationsschwankungen schwierig zu verarbeiten zu sein (Sätze beginnen mit Groß- oder Kleinschreibung, mit oder ohne Punkte).

Ich habe den Microsoft COCO (MS COCO) -Datensatz zusammengefasst - ich kann 3 Tassen Reis zum Thema künstliche Intelligenz haben

Von den in den Trainingsdaten enthaltenen Wörtern wurden nur die Wörter verwendet, die fünfmal oder öfter vorkommen, und die anderen wurden als unbekannte Wörter gelernt.

Auswertung der generierten Untertitel

Es scheint, dass es Indikatoren wie BLEU, METEOR und CIDER gibt, um die generierten Untertitel zu bewerten, aber diesmal habe ich die Indikatoren nicht berechnet.

Beispiel für die Untertitelgenerierung

Bildunterschriften wurden mit gemeinfreien Bildern erstellt, die von PublicDomainPictures.net heruntergeladen wurden. Platzieren Sie die Top 5 der generierten Zeichenfolgen.

Uhr

``` a clock on the side of a building a clock that is on the side of a building a clock on the side of a brick building a close up of a street sign on a pole a clock that is on top of a building ```

Ist die Verkehrskontrolle im Gange? Polizist

``` a man riding a skateboard down a street a man riding a skateboard down a road a man riding a skateboard down the street a man riding a skateboard down a sidewalk a man riding a skateboard down the side of a road ``` Skateboard. .. .. ??

Frau mit einem Tennisschläger

``` a woman holding a tennis racquet on a tennis court a man holding a tennis racquet on a tennis court a woman holding a tennis racquet on a court a woman holding a tennis racquet on top of a tennis court a man holding a tennis racquet on a court ``` Der zweite und fünfte sind "Mann", aber manchmal verwechsle ich Mann mit Frau.

Lebendiges Sofa

``` a cat laying on top of a bed a cat sitting on top of a bed a cat sitting on top of a couch a black and white cat laying on a bed a cat laying on a bed in a room ``` Es scheint, dass das Kissen für eine Katze gehalten wird.

Einige wurden korrekt generiert, während andere eindeutig falsch waren.

Verweise

Recommended Posts

Bildunterschriftengenerierung mit Chainer
Erzeugung von Verlaufsbildern mit Python [1] | np.linspace
Seq2Seq (1) mit Chainer
Probieren Sie ganz einfach die automatische Bilderzeugung mit DCGAN-Tensorfluss aus
Bilderkennung mit Caffe Model Chainer Yo!
[Kleine Geschichte] Testen Sie die Bilderzeugung mit Python / OpenCV
Bildverarbeitung mit MyHDL
Bilderkennung mit Keras
Verwenden Sie Tensorboard mit Chainer
Bildverarbeitung mit Python
Bildverarbeitung mit PIL
JPEG-Bilderzeugung durch Angabe der Qualität mit Python + OpenCV
Automatische Quizgenerierung mit COTOHA
Bildverarbeitung mit Python (Teil 2)
Bildverarbeitung mit PIL (Pillow)
Versuchen Sie, RBM mit Chainer zu implementieren.
Bildbearbeitung mit Python OpenCV
Lernen Sie mit Chainer elliptische Bahnen
Satzerzeugung mit GRU (Keras)
Sortieren von Bilddateien mit Python (2)
Sortieren von Bilddateien mit Python (3)
Seq2Seq (3) ~ CopyNet Edition ~ mit Chainer
Verwendung von Chainer mit Jetson TK1
Erstellen Sie den Image Viewer mit Tkinter
Bildverarbeitung mit Python (Teil 1)
Tweet mit Bild in Python
Bilddateien mit Python sortieren
Neuronales Netz beginnend mit Chainer
Bildverarbeitung mit Python (3)
Bedingte GAN mit Chainer implementiert
Holen Sie sich Bildfunktionen mit OpenCV
SmoothGrad mit Chainer v2 implementiert
Deep Embedded Clustering mit Chainer 2.0
Ein bisschen im Kettenschiff stecken
Bilderkennung mit Keras + OpenCV
[Python] Bildverarbeitung mit Scicit-Image
Schneiden Sie ein Bild mit Python aus
Grundlagen der Echtzeit-Bildverarbeitung mit opencv
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Beschleunigen Sie die Abfragegenerierung mit SQLAlchemy ORM
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Bildsegmentierung mit Scikit-Image und Scikit-Learn
[Chainer] Lernen von XOR mit mehrschichtigem Perzeptron
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Bildklassifizierung mit Weitwinkel-Fundusbilddatensatz
Lassen Sie uns mit Python Image Scraping durchführen
Erste Anime-Gesichtserkennung mit Chainer
Führen Sie eine Inferenz mit dem Chainer 2.0 MNIST-Beispiel durch
Passwort für Lehrbuch mit Python generieren
Verwenden von Chainer mit CentOS7 [Umgebungskonstruktion]
CSRF-Token-Generierung für Gegenmaßnahmen mit Python
Finden Sie Bildähnlichkeit mit Python + OpenCV
Versuchen Sie, das Bild mit opencv2 zu verwischen
Konvertieren Sie PDF in Image mit ImageMagick
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Versuchen Sie Common Representation Learning mit Chainer
Vergleichen Sie zwei Bilder mit dem Bild-Hash
Ich habe versucht, Sätze mit GPT-2 zu generieren
Sende Bild mit Python und speichere mit PHP
Seq2Seq (2) ~ Achtung Model Edition ~ mit Chainer