Hvordan man bygger en alders- og kønsopgave-multi-task prediktor med dyb læring i TensorFlow

Kilde: https://www.go Governmentciomedia.com/ai-takes-face-recognition-new-frontiers

I min sidste tutorial lærte du, hvordan man kombinerer et indviklet neuralt netværk og lang kortvarig hukommelse (LTSM) for at oprette billedtekster, der får et billede. I denne tutorial lærer du, hvordan man bygger og træner en læringsmodel med flere opgaver til at forudsige alder og køn på et emne i et billede.

Oversigt

  • Introduktion til alders- og kønsmodel
  • Opbygning af en multi-task Tensorflow Estimator
  • Uddannelse

Forudsætninger

  • grundlæggende forståelse af indviklede neurale netværk (CNN)
  • grundlæggende forståelse af TensorFlow
  • GPU (valgfrit)

Introduktion til alder og kønsmodel

I 2015 offentliggjorde forskere fra Computer Vision Lab, D-ITET, et DEX-papir og offentliggjorde deres IMDB-WIKI bestående af 500K + ansigtsbilleder med alders- og kønsmærker.

IMDB-WIKI Datasætkilde: https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/

DEX skitserer en neural netværksarkitektur, der involverer en foruddrevet imagenet vgg16-model, der estimerer den tilsyneladende alder i ansigtsbilleder. DEX placeret først i ChaLearn LAP 2015 - en konkurrence, der handler med at genkende mennesker i et billede - der er bedre end menneskelig reference.

Alder som klassificeringsproblem

En konventionel måde at tackle et aldersestimeringsproblem med et billede som input ville være at bruge en regressionsbaseret model med middel-kvadratisk fejl som tabsfunktion. DEX modellerer dette problem som en klassificeringsopgave ved hjælp af en softmax-klassifikator med hver alder repræsenteret som en unik klasse i området fra 1 til 101 og tværantropi som tabsfunktion.

Multi-task læring

Multi-task learning er en teknik til træning på flere opgaver gennem en delt arkitektur. Lag i begyndelsen af ​​netværket lærer en fælles generaliseret repræsentation, der forhindrer overfitting til en bestemt opgave, der kan indeholde støj.

Ved at træne med et multi-task-netværk, kan netværket trænes parallelt på begge opgaver. Dette reducerer infrastrukturkompleksiteten til kun en træningsrørledning. Derudover reduceres den beregning, der kræves til træning, da begge opgaver trænes samtidig.

Multi-task CNN-kilde: https://murraycole.com

Opbygning af et multi-task netværk i TensorFlow

Nedenfor bruger du TensorFlows estimatorabstraktion til at oprette modellen. Modellen trænes ud fra rå billedinput til at forudsige ansigtbilledets alder og køn.

Projektstruktur

.
├── Dockerfile
├── alderen_køn_estimation_tutorial
│ ├── cnn_estimator.py
│ ├── cnn_model.py
│ └── datasæt.py
├── skraldespand
│ ├── download-imdb.sh
│ ├── forudsige.py
│ ├── preprocess_imdb.py
│ └── tog.py
├── krav.txt

Miljø

For miljøet bruger du Docker til at installere afhængigheder. En GPU-version leveres også for nemheds skyld.

docker build -t colemurray / age-gender-estimation-tutorial -f Dockerfile.

Data

For at træne denne model skal du bruge IMDB-WIKI datasættet, der består af 500K + billeder. For at gøre det lettere skal du downloade de forkornede imdb-billeder (7GB). Kør scriptet herunder for at downloade dataene.

chmod + x bin / download-imdb-crop.sh
./bin/download-imdb-crop.sh

forbehandling

Du behandler nu datasættet for at rense billeder i lav kvalitet og beskære input til en fast billedstørrelse. Derudover formaterer du dataene som en CSV for at forenkle læsning i TensorFlow.

docker run -v $ PWD: / opt / app \
-e PYTHONPATH = $ PYTHONPATH: / opt / app \
-det colemurray / alderskøn-estimering-tutorial \
python3 /opt/app/bin/preprocess_imdb.py \
--db-path /opt/app/data/imdb_crop/imdb.mat \
--photo-dir / opt / app / data / imdb_crop \
--output-dir / opt / app / var \
--min-score 1.0 \
- størrelse 224

Efter cirka 20 minutter har du et behandlet datasæt.

Dernæst bruger du TensorFlow's datapipeline-modul tf.data til at levere data til estimatoren. Tf.data er en abstraktion til at læse og manipulere et datasæt parallelt ved at bruge C ++ -tråde til ydeevne.

Her bruger du TensorFlow's CSV Reader til at analysere dataene, forarbejde billederne, oprette batches og blande.

Model

Nedenfor opretter du en grundlæggende CNN-model. Modellen består af tre vindinger og to fuldt tilsluttede lag med et softmax klassificeringshoved til hver opgave.

Fælles tabsfunktion

Til træningsoperationen bruger du Adam Optimizer. For en tabsfunktion vil du gennemsnit krydsantropifejlen for hvert hoved og skabe en delt tabsfunktion mellem hovederne.

alders- og kønsledsfunktion

TensorFlow estimator

TensorFlow-estimatorer giver en simpel abstraktion til grafisk oprettelse og runtime-behandling. TensorFlow har specificeret en interface model_fn, der kan bruges til at oprette tilpassede estimatorer.

Nedenfor tager du det netværk, der er oprettet ovenfor og opretter træning, evaluering og forudsigelse. Disse specifikationer vil blive brugt af TensorFlows estimatorklasse til at ændre grafens opførsel.

Tog

Nu, hvor du har forarbejdet dataene og oprettet modelarkitektur og datapipeline, begynder du at træne modellen.

docker run -v $ PWD: / opt / app \
-e PYTHONPATH = $ PYTHONPATH: / opt / app \
-det colemurray / alders-køn-estimering-tutorial: gpu \
python3 /opt/app/bin/train.py \
--img-dir / opt / app / var / crop \
--train-csv /opt/app/var/train.csv \
--val-csv /opt/app/var/val.csv \
--model-dir / opt / app / var / cnn-model \
- størrelse 224 \
- antal trin 200000

Forudsige

Nedenfor indlæser du din alder og køn TensorFlow-model. Modellen indlæses fra disken og forudsiges på det medfølgende billede.

# Opdater modelstien nedenfor med din model
docker run -v $ PWD: / opt / app \
-e PYTHONPATH = $ PYTHONPATH: / opt / app \
-det colemurray / alderskøn-estimering-tutorial \
python3 /opt/app/bin/predict.py \
--image-path /opt/app/var/crop/25/nm0000325_rm2755562752_1956-1-7_2002.jpg \
- model-dir / opt / app / var / cnn-model-3 / servering / 
Forudsagt: M / 46 Faktisk: M / 46

Konklusion

I denne tutorial lærte du, hvordan du bygger og træner et netværk med flere opgaver til at forudsige et motivs alder og image. Ved at bruge en delt arkitektur kan begge mål trænes og forudsiges samtidigt.

Næste skridt:

  • Evaluer på dit eget datasæt
  • Prøv en anden netværksarkitektur
  • Eksperimenter med forskellige hyperparametre

Spørgsmål / emner? Åbn et problem her på GitHub

Komplet kode her.

Opfordring til handling

Hvis du nød denne tutorial, skal du følge og anbefale!

Er du interesseret i at lære mere om Deep Learning / Machine Learning? Tjek mine andre tutorials:

- Opbygning af en billedtekstgenerator med Deep Learning i Tensorflow

- Opbygning af en ansigtsgenkendelsesrørledning med dyb læring i tensorflow

- Deep Learning CNN'er i Tensorflow med GPU'er

- Deep Learning med Keras på Google Compute Engine

- Anbefalingssystemer med Apache Spark på Google Compute Engine

Andre steder kan du finde mig: