PV211: Image Search

Seznam.cz – vyhledávání obrázků

Vyzkoušejte si

Neuronové sítě pro vyhledávání obrázků

Použití virtuálního stroje

Minimal ConvNet Wrappers

Jako první ukázku vyzkoušejte neinteraktivní Minimal ConvNet Wrappers. Kód je připraven v adresáři ~/minimalconvnets/:

$ ~/minimalconvnets/
$ workon minimalconvnets  # Nastavení Python virtuálního prostředí, platí jen pro aktuální terminál!
$ ./analyze_image.py -w resnet_v1_50.ckpt -i dog.jpg
$ ./analyze_image.py -w resnet_v1_50.ckpt -i rabbit.jpg

Můžete vyzkoušet i s jinými obrázky. Využijte možnosti sdílené složky ~/_shared_folder/ mezi hostovaným a hostitelským systémem.

Deep Visualization Toolbox

V adresáři ~/deep-visualization-toolbox je připraven nástroj Deep Visualization Toolbox, která se dá použít pro vizualizaci práce deep learning frameworku Caffe s obrázky:

Použití Deep Visualization Toolbox

$ cd ~/deep-visualization-toolbox/
$ ./run_toolbox.py

Po spuštění stiskněte klávesu H pro nápovědu.

Využijte možnosti snadného předání vlastních obrázků z hostitelského systému:

# Místo Vimu můžete použít libovolný jiný oblíbený editor, např. `nano`.
$ vim ~/deep-visualization-toolbox/settings_local.py

Na konci souboru upravte nastavení tak, aby obsahovalo:

static_files_dir = '/home/pv211/_shared_folder'

Můžete samozřejmě odkazovat na libovolný podadresář ve sdílené složce. Po uložení znovu spusťte Deep Visualization Toolbox:

$ ./run_toolbox.py

Generování umělých „relevantních“ obrázků

Je popsáno v dokumentaci, můžete přímo vyzkoušet:

$ cd ~/deep-visualization-toolbox/
$ ./optimize_image.py --push-layer fc8 --push-channel 130 --decay 0.0001 --blur-radius 1.0 --blur-every 4  --max-iter 1000 --lr-policy constant --lr-params "{'lr': 100.0}"
$ la optimize_results/

Do adresáře ~/deep-visualization-toolbox/optimize_results se uloží uměle vytvořené obrázky, které výrazně odpovídají představě neuronové sítě o obrázku plameňáka.

Instruujte Deep Visualization Toolbox, aby jako vstup použil tento umělý obrázek a prohlédněte si výsledek:

# Místo Vimu můžete použít libovolný jiný oblíbený editor, např. `nano`.
$ vim ~/deep-visualization-toolbox/settings_local.py

Na konci souboru upravte nastavení tak, aby obsahovalo:

static_files_dir = '/home/pv211/deep-visualization-toolbox/optimize_results/'

Po uložení znovu spusťte Deep Visualization Toolbox:

$ ./run_toolbox.py

Hledání „relevantních“ obrázků ve vlastní databázi

Je popsáno v dokumentaci, můžete přímo vyzkoušet:

$ cd ~/deep-visualization-toolbox/find_maxes/
$ workon find_maxex  # Nastavení Python virtuálního prostředí, platí jen pro aktuální terminál!
# Pokud dosud nemáte, připojte si sdílenou složku, kde je dostupný malý testovací dataset obrázků
$ sudo mount ~/_shared_folder/
# Najde top-k vysoce relevantních obrázků a poznačí do souboru `_find_max_acts.output`
$ python find_max_acts.py \
  ../models/caffenet-yos/caffenet-yos-deploy.prototxt \
  ../models/caffenet-yos/caffenet-yos-weights \
  ~/_shared_folder/small_set/ \
  <(ls -1 ~/_shared_folder/small_set/ | awk '{printf("%s %d\n", $0, NR)}') \
  _find_max_acts.output
# Pro nalezené obrázky vygeneruje náhledy žádané vrstvy neuronové sítě pro Deep Visualization Toolbox
$ python crop_max_patches.py \
  --do-maxes --do-deconv --do-deconv-norm \
  --do-backprop --do-backprop-norm --do-info \
  _find_max_acts.output \
  ../models/caffenet-yos/caffenet-yos-deploy.prototxt \
  ../models/caffenet-yos/caffenet-yos-weights \
  ~/_shared_folder/small_set/ \
  <(ls -1 ~/_shared_folder/small_set/ | awk '{printf("%s %d\n", $0, NR)}') \
  _crop_max_patches.output \
  conv1

Příkaz je vhodné zopakovat pro všechny vrstvy sítě, tj. krom parametru conv1 použít také další ze sady
* conv1
* conv2
* conv3
* conv4
* conv5
* fc6
* fc7
* fc8
* prob

Dále je nutné výstupy v adresáři _crop_max_patches.output spojit do formátu očekávaného Deep Visualization Toolbox (viz např. obsah ~/deep-visualization-toolbox/models/caffenet-yos/unit_jpg_vis) a uložit např. do ~/deep-visualization-toolbox/models/caffenet-yos/unit_jpg_vis.my_small_set.

Následně nakonfigurujte a spusťte Deep Visualization Toolbox:

$ cd ~/deep-visualization-toolbox/
# Pokud nyní máte aktivní nějaké Python virtuální prostředí, nejdříve jej deaktivujte
$ deactivate
$ vim ~/deep-visualization-toolbox/settings_local.py

V souboru změně dva parametry:

static_files_dir = '/home/pv211/_shared_folder/small_set'
caffevis_unit_jpg_dir = '%DVT_ROOT%/models/caffenet-yos/unit_jpg_vis.my_small_set'

Po uložení znovu spusťte Deep Visualization Toolbox:

$ ./run_toolbox.py
Poznámka – testovací dataset obrázků

Pro testování můžeme použít volně dostupné obrázky např. ze serveru Pixabay.

Testovací obrázky ve sdílené složce byly stažení přes Pixabay API (pro použití nutné přihlášení – registrace je zdarma, dá se použít i přihlášení přes Google Account apod.):

# Stažení 200 obrázků králíků
$ curl -L 'https://pixabay.com/api/?key=PUT-YOUR-API-KEY-HERE&q=rabbit&image_type=all&per_page=200' \
  | python -m json.tool \
  | grep '"webformatURL"' \
  | perl -pe 's/^.*"(https.*)_\d+(\....)".*/$1_960$2/g' \
  | parallel -vv curl -LO '{}'
# Převod obrázků z PNG do JPG
$ parallel --bar -vv convert {} {.}.jpg\; rm -v {} ::: *.png

Využívá nástrojů GNU Parallel a ImageMagic convert.