Rakennat kuvatekstigeneraattorin Deep Learning in Tensorflow -sovelluksella

Viimeisessä opetusohjelmassa opit luomaan kasvojentunnistusputken Tensorflow'ssa konvoluutio-hermoverkoilla. Tässä opetusohjelmassa opit, kuinka konvoluutiohermoverkko (CNN) ja pitkä lyhytkestoinen muisti (LSTM) voidaan yhdistää luomaan kuvatekstigeneraattori ja luomaan kuvatekstejä omille kuvillesi.

Yleiskatsaus

  • Johdatus kuvansiirtomalliarkkitehtuuriin
  • Tekstitykset hakuongelmana
  • Tekstitysten luominen Tensorflow'ssa

Edellytykset

  • Perustiedot konvoluutio-hermoverkoista
  • Perustiedot LSTM: stä
  • Perustiedot Tensorflowista

Johdanto kuvan tekstitysmalliarkkitehtuuriin

CNN: n ja LSTM: n yhdistäminen

Vuonna 2014 Googlen tutkijat julkaisivat julkaisun Show And Tell: A Neural Image Caption Generator. Tuolloin tämä arkkitehtuuri oli uusinta MSCOCO-tietojoukossa. Se käytti CNN + LSTM: ää ottaakseen kuvan syötteeksi ja antamaan kuvatekstin.

CNN: n käyttö kuvien upottamiseen

Konvoluutiohermoverkkoa voidaan käyttää tiheän ominaisuusvektorin luomiseen. Tätä tiheää vektoria, jota kutsutaan myös upotukseksi, voidaan käyttää ominaisuuden syötteenä muihin algoritmeihin tai verkkoihin.

Kuvan kuvatekstimallissa tästä upotuksesta tulee kuvan tiheä esitys ja sitä käytetään LSTM: n alkutilana.

LSTM

LSTM on toistuva hermoverkkoarkkitehtuuri, jota käytetään yleisesti ajallisten riippuvuuksien ongelmissa. Se onnistuu sieppaamaan tietoja aikaisemmista tiloista informoidakseen paremmin nykyistä ennustetta muistisolutilan kautta.

LSTM koostuu kolmesta pääkomponentista: unohdusportti, syöttöportti ja lähtöportti. Jokainen näistä portteista on vastuussa solun muistitilan päivitysten muuttamisesta.

Jos haluat ymmärtää LSTM: ää syvemmin, tutustu Chris Olahin viestiin.

Ennakointi kuvan kanssa alkutilana

Lausekielimallissa LSTM ennustaa lauseen seuraavan sanan. Vastaavasti merkkikielimallissa LSTM yrittää ennustaa seuraavan merkin, kun otetaan huomioon aiemmin nähtyjen merkkien konteksti.

Kuvan tekstitysmallissa luot kuvan upottamisen. Tämä upotus syötetään sitten alkutilana LSTM: ään. Tästä tulee kielimallin ensimmäinen edellinen tila, joka vaikuttaa seuraaviin ennustettuihin sanoihin.

Kussakin aika-vaiheessa LSTM ottaa huomioon edellisen solutilan ja antaa ennusteen sekvenssin todennäköisimmälle seuraavalle arvolle. Tätä prosessia toistetaan, kunnes lopputunnus otetaan näytteestä, mikä merkitsee tekstityksen loppua.

Tekstitykset hakuongelmana

Kuvatekstin luomista voidaan pitää kaaviohakuongelmana. Tässä solmut ovat sanoja. Reunat ovat todennäköisyys siirtyä solmusta toiseen. Optimaalisen polun löytäminen merkitsee virkkeen todennäköisyyden maksimointia.

Näytteenotto ja todennäköisimmän seuraavan arvon valitseminen on ahne lähestymistapa tekstityksen luomiseen. Se on laskennallisesti tehokas, mutta voi johtaa alle-optimaaliseen tulokseen.

Kun otetaan huomioon kaikki mahdolliset sanat, ei ole laskennallisesti / avaruudellisesti tehokasta laskea kaikkia mahdollisia lauseita ja määrittää optimaalinen lause. Tämä estää optimaalisen polun löytämisen hakualgoritmilla, kuten syvyyshaku tai leveyshaku.

Säteen haku

Palkkihaku on laajin ensimmäinen hakualgoritmi, joka tutkii lupaavimmat solmut. Se luo kaikki mahdolliset seuraavat polut, ja vain kussakin iteroinnissa on parhaat N parasta ehdokasta.

Koska solmujen määrä, josta laajennetaan, on kiinteä, tämä algoritmi on tilaa säästävä ja sallii enemmän potentiaalisia ehdokkaita kuin paras ensin -haku.

Arvostelu

Tähän asti olet oppinut malliarkkitehtuurin luomisesta lauseen, kuvan antamiseksi. Tämä tapahtuu käyttämällä CNN: ää luomaan tiheä upotus ja syöttämällä tämä alkutilana LSTM: ään. Lisäksi olet oppinut luomaan parempia lauseita säteen haulla.

Seuraavassa osassa opit luomaan kuvatekstejä Tensorflow'n valmiiksi koulutetusta mallista.

Tekstitysten luominen Tensorflow'ssa

# Project Structure
├── Dockerfile├── bin│ └── download_model.py├── etc│ ├── show-and-tell-2M.zip│ ├── show-and-tell.pb│ └── word_counts.txt├── imgs│ └── trading_floor.jpg├── medium_show_and_tell_caption_generator│ ├── __init__.py│ ├── caption_generator.py│ ├── inference.py│ ├── model.py│ └── vocabulary.py└── requirements.txt

Ympäristön määritys

Täällä voit käyttää satamatyöläinen asentaa Tensorflow .

Docker on konttialusta, joka yksinkertaistaa käyttöönottoa. Se ratkaisee ongelman asentaa ohjelmisto-riippuvuudet eri palvelinympäristöihin. Jos olet uusi Docker, voit lukea lisää täältä. Asenna Docker suorittamalla:

curl //get.docker.com | sh

After installing Docker, you’ll create two files. A requirements.txt for the Python dependencies and a Dockerfile to create your Docker environment.

To build this image, run:

$ docker build -t colemurray/medium-show-and-tell-caption-generator -f Dockerfile .
# On MBP, ~ 3mins# Image can be pulled from dockerhub below

If you would like to avoid building from source, the image can be pulled from dockerhub using:

docker pull colemurray/medium-show-and-tell-caption-generator # Recommended

Download the model

Below, you’ll download the model graph and pre-trained weights. These weights are from a training session on the MSCOCO dataset for 2MM iterations.

To download, run:

docker run -e PYTHONPATH=$PYTHONPATH:/opt/app -v $PWD:/opt/app \-it colemurray/medium-show-and-tell-caption-generator \python3 /opt/app/bin/download_model.py \--model-dir /opt/app/etc

Next, create a model class. This class is responsible for loading the graph, creating image embeddings, and running an inference step on the model.

Download the vocabulary

When training an LSTM, it is standard practice to tokenize the input. For a sentence model, this means mapping each unique word to a unique numeric id. This allows the model to utilize a softmax classifier for prediction.

Below, you’ll download the vocabulary used for the pre-trained model and create a class to load it into memory. Here, the line number represents the numeric id of the token.

# File structure# token num_of_occurrances
# on 213612# of 202290# the 196219# in 182598
curl -o etc/word_counts.txt //raw.githubusercontent.com/ColeMurray/medium-show-and-tell-caption-generator/master/etc/word_counts.txt

To store this vocabulary in memory, you’ll create a class responsible for mapping words to ids.

Creating a caption generator

To generate captions, first you’ll create a caption generator. This caption generator utilizes beam search to improve the quality of sentences generated.

At each iteration, the generator passes the previous state of the LSTM (initial state is the image embedding) and previous sequence to generate the next softmax vector.

The top N most probable candidates are kept and utilized in the next inference step. This process continues until either the max sentence length is reached or all sentences have generated the end-of-sentence token.

Next, you’ll load the show and tell model and use it with the above caption generator to create candidate sentences. These sentences will be printed along with their log probability.

Results

To generate captions, you’ll need to pass in one or more images to the script.

docker run -v $PWD:/opt/app \-e PYTHONPATH=$PYTHONPATH:/opt/app \-it colemurray/medium-show-and-tell-caption-generator \python3 /opt/app/medium_show_and_tell_caption_generator/inference.py \--model_path /opt/app/etc/show-and-tell.pb \--input_files /opt/app/imgs/trading_floor.jpg \--vocab_file /opt/app/etc/word_counts.txt

You should see output:

Captions for image trading_floor.jpg: 0) a group of people sitting at tables in a room . (p=0.000306) 1) a group of people sitting around a table with laptops . (p=0.000140) 2) a group of people sitting at a table with laptops . (p=0.000069)

Conclusion

In this tutorial, you learned:

  • how a convolutional neural network and LSTM can be combined to generate captions to an image
  • how to utilize the beam search algorithm to consider multiple captions and select the most probable sentence.

Complete code here.

Next Steps:

  • Try with your own images
  • Read the Show and Tell paper
  • Luo sovellusliittymä tekstitysten näyttämistä varten

Kehotus toimintaan:

Jos pidit tästä opetusohjelmasta, seuraa ja suosittele!

Haluatko oppia lisää syvällisestä oppimisesta / koneoppimisesta? Katso muut opetusohjelmani:

- Kasvojentunnistuksen rakentaminen syvällisen oppimisen avulla tensorflow'ssa

- Deep Learning CNN: t Tensorflow'ssa GPU: iden kanssa

- Syvää oppimista Keraksen kanssa Google Compute Enginen kautta

- Suositusjärjestelmät, joissa on Apache Spark Google Compute Engine -sovelluksessa

Muita paikkoja, joissa voit löytää minut:

- Twitter: //twitter.com/_ColeMurray