Tensorflow Object Detection

Első rész

Egy érdekes és fontos projekt számomra a Tensorflow és környezete, emiatt is többször próbáltam meg egy tábla felismerő szoftvert csinálni több-kevesebb sikerrel. A Tensorflow talán az egyik ha nem a legtöbbet használt könyvtár pythonban, ha machine learningről van szó. Ha valakit jobban érdekel, úgy mint engem, akkor egy bemutatónak kezdésnek tudom ajánlani Dr. Buzáné dr. Kis Piroska tanulmányát “A Tensorflow rendszer és a mély tanulás címmel“.

Na de akkor mit is tervezünk itt csinálni. Alapvetően végigmenni a hivatalos Tensorflow dokumentáción, hogyan kell telepíteni a rendszert, hogyan kell tanítani a rendszert és hogyan kell használni a rendszert. Az első részben telepítjük magát a Tensorflowt.

Ami célszerű hozzá, de nem kötelező az az Anaconda, amit ezen a linken lehet letölteni. Ezt mint minden más programot ugyanúgy kell telepíteni és a végén hozzá lehet adni az úgynevezett “Path”-hoz, amivel alapértelmezetté tudjuk tenni az anacondát, az alapértelmezett disztribúció lesz.

  1. lépésként hozzunk létre egy új virtuális környezetet. Ez azt fogja jelenteni, hogy amilyen változásokat végrehajtunk azokat csak ebben a környezetben fogjuk csinálni és nem a teljes rendszerben. Ez egy jó módja annak, hogy rendezettebbek legyünk.
  • Nyissunk meg egy új anaconda terminált
  • Írjuk bele a következő utasítást:
conda create -n tensorflow pip python=3.9
  • Ez azt fogja csinálni, hogy létrehoz egy tensorflow nevű virtuális környezetet a 3.9-es python verzióval.
  • Ezután aktiválnunk kell a környezetünket, amit egyszerűen meg is tehetünk:
conda activate tensorflow
  • miután ez megtörtént látni fogjuk, hogy zárójelek között megjelent a tensorflow felirat az elérési út előtt.

A Tensorflow telepítése

A dokumentáció szerint ezt 3 egyszerű lépésben meglehet tenni. Szóval nézzük is mi az a 3 egyszerű lépés.

Töltsük le a Tensorflow PIP csomagot – a pip kóddal lehet különféle csomagokat telepíteni pythonban

  • Írjuk be a következő utasítást a Terminálba
pip install --ignore-installed --upgrade tensorflow==2.5.0
  • Ezt tudjuk ellenőrizni is, hogy sikeres volt-e, méghozzá ezt a kódot kell beírni a Terminálba:
python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
  • Egy ehhez hasonló kiírást kell majd kapni:
2020-06-22 19:20:32.614181: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2020-06-22 19:20:32.620571: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2020-06-22 19:20:35.027232: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2020-06-22 19:20:35.060549: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1561] Found device 0 with properties:
pciBusID: 0000:02:00.0 name: GeForce GTX 1070 Ti computeCapability: 6.1
coreClock: 1.683GHz coreCount: 19 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2020-06-22 19:20:35.074967: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2020-06-22 19:20:35.084458: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cublas64_10.dll'; dlerror: cublas64_10.dll not found
2020-06-22 19:20:35.094112: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cufft64_10.dll'; dlerror: cufft64_10.dll not found
2020-06-22 19:20:35.103571: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'curand64_10.dll'; dlerror: curand64_10.dll not found
2020-06-22 19:20:35.113102: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusolver64_10.dll'; dlerror: cusolver64_10.dll not found
2020-06-22 19:20:35.123242: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusparse64_10.dll'; dlerror: cusparse64_10.dll not found
2020-06-22 19:20:35.140987: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-06-22 19:20:35.146285: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1598] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
Skipping registering GPU devices...
2020-06-22 19:20:35.162173: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2020-06-22 19:20:35.178588: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x15140db6390 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-06-22 19:20:35.185082: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-06-22 19:20:35.191117: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-06-22 19:20:35.196815: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1108]
tf.Tensor(1620.5817, shape=(), dtype=float32)

Lehetséges lenne, hogy GPU/videókártyát is befogjunk a tanításba, ami felgyorsítja a folyamatot, de mivel nekem nincs NVIDIA-s kártyám így ezt a részt kihagyom, de itt hagyom a linket ahol mindenki megnézheti magának, hogyan kell csinálni.

Tensorflow Object Detection API telepítése – Ez fogja lehetővé tenni, hogy minden féle/fajta modelt vizsgáljunk meg és használjunk

Első lépésbe le kell tölteni a Tensorflow Model Gardent

  • Hozzunk létre egy új mappát tetszés szerint bárhol, csak emlékezzünk rá és nevezzük el “Tensorflow”-nak.
  • Ezután a terminálon belül menjünk bele ebbe a mappába a cd utasítás segítségével
Út/A/könyvtár/előtt cd Tensorflow 
  • Ezután be kell klónoznunk ebbe a mappába a Tensorflow Models gyűjteményt, de ha ez nem sikerül akkor töltsük le és csomagoljuk ke a Tensorflow mappába. Letöltési link.
git clone https://github.com/tensorflow/models.git

Ezután egy picit bonyolultabb rész jön, legalábbis nekem az volt, sokat szenveedtem vele, aztán rájöttem, hogy csak béna voltam :D. Most kell letölteni a Protobuf-ot. Ennek a segítségével fogja a API oknfigurálni a modelt és a tanulási paramétereket.

Szóval, hogyan is kell ennek törénnie:

  • Menjünk el a Protoc oldalára
  • Onnan töltsük le a legújabb ‘protoc-*-*.zip’ file-t. (pl:protoc-3.12.3-win64.zip 64-bites windowshoz)
  • Ezután ezt csomagoljuk ki egy általunk kiválasztott könyvtárba
  • Azt a könyvtárat pedig adjon hozzá a ‘Path’-hoz.

Hogyan kell hozzáadni a ‘Path’-hoz:

  • A keresőbe írjuk be, hogy “environments variables”
  • Kattintsunk rá a “Környezeti Változók szerkesztése”(Edit the systme environment variables) gombra ami előhozza a rendszer tulajdonságokat (system properties)
  • Ezután nyomjunk rá a “Környezeti változók” (Environmemt Variables…) gombra.
  • A rendszer változók alatt (system variables), keressük meg a “Path” rendszer változót (system variable) és nyomjunk rá, hogy szerkesztés. Itt tudunk, hozzáadni elérési utakat.

Folytassuk a protoc telepítését:

  • Ezután a <Elérési_útja_a_kicsomagolt_protocnak>/bin-t adjuk hozzá a ‘Path’-hoz.
  • Egy új terminálban, ahol újra aktiválni kell a környezetünk, menjünk bele a Tensorflow/models/research könyvtárba a cd utasítás segítségével és írjuk be ezt az utasítást:
protoc object_detection/protos/*.proto --python_out=.

COCO API telepítése

Ezután telepítenünk kell a COCO API-t. Hogy tudjuk ezt megtenni?

Hát így:

pip install cython
pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

Megjegyzés: Ahhoz, hogy ezt sikeresen tudjuk telepíteni, le kell, hogy töltve legyen a Visual C++ 2015 build tools is, különben nem fog működni. Azt, hogy hogyan lehet letölteni, innen lehet megtudni. Annak is része kell, hogy legyen a ‘Path’-nak.

Object Detection API telepítése

Ezután utolsó,lépésben telepítenünk kell az Object Detection API-t. Ezt viszont két egyszerű utasítással megtudjuk tenni a Tensorflow/models/research mappán belülről.

cp object_detection/packages/tf2/setup.py .
python -m pip install --use-feature=2020-resolver .

Elképzelhető, hogy egy ilyen hiba fog megjelenni, ez azt jelenti, hogy nem lett sikeresen telepítve a pycocotools.

ERROR: Command errored out with exit status 1:
     command: 'C:\Users\sglvladi\Anaconda3\envs\tf2\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\sglvladi\\AppData\\Local\\Temp\\pip-install-yn46ecei\\pycocotools\\setup.py'"'"'; __file__='"'"'C:\\Users\\sglvladi\\AppData\\Local\\Temp\\pip-install-yn46ecei\\pycocotools\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\sglvladi\AppData\Local\Temp\pip-record-wpn7b6qo\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\sglvladi\Anaconda3\envs\tf2\Include\pycocotools'
         cwd: C:\Users\sglvladi\AppData\Local\Temp\pip-install-yn46ecei\pycocotools\
    Complete output (14 lines):
    running install
    running build
    running build_py
    creating build
    creating build\lib.win-amd64-3.8
    creating build\lib.win-amd64-3.8\pycocotools
    copying pycocotools\coco.py -> build\lib.win-amd64-3.8\pycocotools
    copying pycocotools\cocoeval.py -> build\lib.win-amd64-3.8\pycocotools
    copying pycocotools\mask.py -> build\lib.win-amd64-3.8\pycocotools
    copying pycocotools\__init__.py -> build\lib.win-amd64-3.8\pycocotools
    running build_ext
    skipping 'pycocotools\_mask.c' Cython extension (up-to-date)
    building 'pycocotools._mask' extension
    error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/
    ----------------------------------------
ERROR: Command errored out with exit status 1: 'C:\Users\sglvladi\Anaconda3\envs\tf2\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\sglvladi\\AppData\\Local\\Temp\\pip-install-yn46ecei\\pycocotools\\setup.py'"'"'; __file__='"'"'C:\\Users\\sglvladi\\AppData\\Local\\Temp\\pip-install-yn46ecei\\pycocotools\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\sglvladi\AppData\Local\Temp\pip-record-wpn7b6qo\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\sglvladi\Anaconda3\envs\tf2\Include\pycocotools' Check the logs for full command output.

Ilyenkor nem kell megijedni, menjünk vissza a COCO API telepítése részre és csináljuk újra, nézzük meg, mi mehetett félre.

Ha ez is sikeres volt, akkor ideje tesztelni, hogy működik-e. A Tensorflow/model/research-en belülről futtassuk ezt az utasítást a terminálban:

python object_detection/builders/model_builder_tf2_test.py

Ha ez sikeresen lefutott akkor egy ehhez hasonló üzenet kell, hogy kapjunk, ha ez is megvan akkor sikeresen telepítettük a Tensorflowt, mehetünk tovább a model tanításra.

...
[       OK ] ModelBuilderTF2Test.test_create_ssd_models_from_config
[ RUN      ] ModelBuilderTF2Test.test_invalid_faster_rcnn_batchnorm_update
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_invalid_faster_rcnn_batchnorm_update): 0.0s
I0608 18:49:13.183754 29296 test_util.py:2102] time(__main__.ModelBuilderTF2Test.test_invalid_faster_rcnn_batchnorm_update): 0.0s
[       OK ] ModelBuilderTF2Test.test_invalid_faster_rcnn_batchnorm_update
[ RUN      ] ModelBuilderTF2Test.test_invalid_first_stage_nms_iou_threshold
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_invalid_first_stage_nms_iou_threshold): 0.0s
I0608 18:49:13.186750 29296 test_util.py:2102] time(__main__.ModelBuilderTF2Test.test_invalid_first_stage_nms_iou_threshold): 0.0s
[       OK ] ModelBuilderTF2Test.test_invalid_first_stage_nms_iou_threshold
[ RUN      ] ModelBuilderTF2Test.test_invalid_model_config_proto
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_invalid_model_config_proto): 0.0s
I0608 18:49:13.188250 29296 test_util.py:2102] time(__main__.ModelBuilderTF2Test.test_invalid_model_config_proto): 0.0s
[       OK ] ModelBuilderTF2Test.test_invalid_model_config_proto
[ RUN      ] ModelBuilderTF2Test.test_invalid_second_stage_batch_size
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_invalid_second_stage_batch_size): 0.0s
I0608 18:49:13.190746 29296 test_util.py:2102] time(__main__.ModelBuilderTF2Test.test_invalid_second_stage_batch_size): 0.0s
[       OK ] ModelBuilderTF2Test.test_invalid_second_stage_batch_size
[ RUN      ] ModelBuilderTF2Test.test_session
[  SKIPPED ] ModelBuilderTF2Test.test_session
[ RUN      ] ModelBuilderTF2Test.test_unknown_faster_rcnn_feature_extractor
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_unknown_faster_rcnn_feature_extractor): 0.0s
I0608 18:49:13.193742 29296 test_util.py:2102] time(__main__.ModelBuilderTF2Test.test_unknown_faster_rcnn_feature_extractor): 0.0s
[       OK ] ModelBuilderTF2Test.test_unknown_faster_rcnn_feature_extractor
[ RUN      ] ModelBuilderTF2Test.test_unknown_meta_architecture
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_unknown_meta_architecture): 0.0s
I0608 18:49:13.195241 29296 test_util.py:2102] time(__main__.ModelBuilderTF2Test.test_unknown_meta_architecture): 0.0s
[       OK ] ModelBuilderTF2Test.test_unknown_meta_architecture
[ RUN      ] ModelBuilderTF2Test.test_unknown_ssd_feature_extractor
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_unknown_ssd_feature_extractor): 0.0s
I0608 18:49:13.197239 29296 test_util.py:2102] time(__main__.ModelBuilderTF2Test.test_unknown_ssd_feature_extractor): 0.0s
[       OK ] ModelBuilderTF2Test.test_unknown_ssd_feature_extractor
----------------------------------------------------------------------
Ran 24 tests in 29.980s
OK (skipped=1)

Ezután a vállalkozó szelleműek elmehetnek a Tensorflownak a példák részére és megnézhetik miket tudnak majd csinálni.


Disclaimer: Ez teljes mértékben a Tensorflow hivatalos dokumentációja és nem a saját ötletem.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük