Kako izgraditi suludo dobar klasifikator slike za manje od 10 minuta

Posljednjih godina jedna od najvećih primjena strojnog učenja bila je klasifikacija slika - sposobnost da računalo inteligentno prepozna objekt. Takav se posao radi u najvećim tehnološkim kompanijama i od tada se pobudio ovaj neopravdani pojam ekskluzivnosti. Izradili smo narativ da, kako biste umazali ruke od strojnog učenja i umjetne inteligencije, morate biti neka vrsta provjerljivog genija ili barem diplomirani inženjer, samo da biste se mogli ubiti. Mislim da je to sranje, pa ja ' pokazat ću vam kako za manje od 10 minuta možete izgraditi potpuno funkcionirajući klasifikator slike koji može prepoznati bilo koji (da, bilo koji) objekt s nevjerojatno visokim vjerojatnostima. I neću upotrebljavati nijednu buzzword.

Ako vas zanima pogled na klasifikaciju slika na visokoj razini, molim vas pogledajte moj gornji video. Prekrivam osnove izbora značajki, skupova treninga, postavljanja okruženja i općeg pregleda. Ovaj će udžbenik biti malo mehaničniji - želim te podignuti i pokrenuti što je brže moguće.

Prvo, trebat će vam Python. To je jednostavan, učinkovit i potpuno lijep programski jezik koji se koristi u gotovo svakoj industriji. Također mislim da je učenje isto tako bitno kao i pismenost Microsofta.

Stranica za instalaciju je ovdje. Zgrabite Python 2.7 i neželjenu poštu kliknite svoj put kroz postavljanje. Slijedi TensorFlow, knjižnica otvorenog koda za programiranje protoka podataka. Ako ste na Macu, možete otvoriti terminal i jednostavno pokrenuti:

pip instalacija tensorflow

Ako to ne uspije, pogledajte ovdje stranicu za instalaciju. Odaberite svoj operativni sustav i instalirajte ga u skladu s izvornim pip smjernicama. Najlakše ih je pratiti i provoditi.

Sjajno! Sada imamo sve potrebne ovisnosti. Započnimo s kloniranjem spremišta TensorFlow. Koristimo posebnu varijantu koju je pružio Google i koja sadrži neke fantastične skripte. Otvorite svoj terminal i pokrenite:

git klon https://github.com/googlecodelabs/tensorflow-for-poets-2
cd tensorflow-za-pjesnike-2

Sada morate odabrati svoje slike! Izbor je u potpunosti vaš - samo provjerite jesu li odvojene mape kategorijama koje želite klasificirati (slike dolje). Na primjer, ako želimo upotrijebiti slike cvijeta navedene u primjeru, možemo pokrenuti (budite sigurni da se nalazite u pravom direktoriju pomoću gore navedenih redaka):

curl http://download.tensorflow.org/example_images/flower_photos.tgz
    | tar xz -C tf_files

Ovo preuzima slike pet različitih vrsta cvijeća u naše spremište.

ls tf_files / flower_photos

Trebalo bi ispisati sve dodatne mape u imeniku flower_photos.

tratinčica/
maslačak/
ruže/
suncokreti /
lala/
license.txt

Možete koristiti sve slike koje želite. Što je bolje, to je cilj (nekoliko tisuća). Odvojite ih prema gore opisanim kategorijama i provjerite nalaze li se u mapi zvanoj tf_files. Pronašao sam sjajan dodatak koji omogućuje grupno preuzimanje slika na Google Chromeu - olakšat će pronalazak podataka o treningu. Ovde je povezano.

Slijedio sam istu strukturu mape iznad i izgradio klasifikator smeća (o tome više kasnije). Evo kako je moj set izgledao kao vizualna referenca:

Obratite pažnju samo na smeće_fotografije. Ostale mape su za korake nakon treninga.Unutar smeća_fotografije. Sve bi vaše slike trebale biti odvojene od kategorije.Katalog stakla kao primjer.

Sada smo spremni obučiti naš model! Jedini način na koji računala možemo prepoznati objekte je ako ga naučimo od svih slika koje smo upravo preuzeli. Srećom, za to je potrebno samo nekoliko redaka Pythona. Ako želite detaljnije objašnjenje znanosti i teorije, pogledajte moj video iznad .

IMAGE_SIZE = 224
Arhitektura = "mobilenet_0.50 _ $ {IMAGE_SIZE}"
python -m scriptpts.retrain \
  --bottleneck_dir = tf_files / uska grla \
  --model_dir = tf_files / models / "$ {ARCHITECTURE}" \
  --summaries_dir = tf_files / training_summaries / "$ {ARCHITECTURE}" \
  --output_graph = tf_files / prekvalificirani_graph.pb \
  --output_labels = tf_files / prekvalificirani_labeti.txt \
  --architecture = "$ {ARCHITECTURE}" \
  --image_dir = tf_files / YOUR_IMAGE_DIRECTORY_HERE

Ispunite YOUR_IMAGE_DIRECTORY_HERE s mapom slika koje ste preuzeli. Korak treninga trajat će od 30 minuta do sat vremena. Ne brinite ako vam treba neko vrijeme - to uvelike ovisi o specifikacijama vašeg računala. Međutim, kada završite, imate klasifikator slika spreman za testiranje!

Preuzmite sliku s interneta ili je snimite sami telefonom i izvedite sljedeću naredbu:

python -m scriptpts.label_image \
    --graph = tf_files / prekvalificirani_graph.pb \
    --image = YOUR_PATH_TO_IMAGE_HERE

Ponovo zamijenite YOUR_PATH_TO_IMAGE_HERE s putanjom datoteke slike koju ste upravo preuzeli. Kad pokrenete liniju, trebali biste vidjeti vjerojatne rezultate o tome što slika sadrži!

Izgradio sam klasifikator smeća koji će prepoznati šest različitih vrsta smeća: karton, staklo, papir, metal, smeće i plastika. Evo nekoliko mojih primjera:

python -m scriptpts.label_image \
    --graph = tf_files / prekvalificirani_graph.pb \
    --image = / Trenutno korisnika / Nikhil / Desktop / beerbottle.jpg
Staklo s vjerojatnošću 0,996. Sve izgleda dobro!
python -m scriptpts.label_image \
    --graph = tf_files / prekvalificirani_graph.pb \
    --image = / Trenutno korisnika / Nikhil / Desktop / package.jpg
Otpad s vjerojatnošću 0,984.

Čestitamo! Uspješno ste izgradili klasifikator slike, a trebalo je samo opće znanje i ugradnju nekoliko paketa. Otkrićete da su čuda informatike lako dostupna - sve što morate učiniti je potražiti ih. Postoji toliko alata i knjižnica otvorenog koda koji su napravljeni za majstore i programere da bi postali kreativni. Napravite nešto za svog šefa ili priključite ovo na Raspberry Pi i napravite vlastiti sigurnosni sustav za dom. Bez obzira na to, samo znate da je bilo tko sposoban raditi velike stvari u strojnom učenju .