10 prostych kroków do wykrywania obiektów z Tensorflow

Jak rozpocząć wykrywanie obiektów wykorzystując głębokie sieci neuronowe w Tensorflow? W tym tutorialu skupimy się na Tensorflow 1.8. Poznasz kolejne kroki, dzięki którym będziesz wykorzystywać modele tensorflow do wykrywania obiektów!

Ta instrukcja pozwoli Ci zainstalować Tensorflow na komputerze z kartą graficzną Nvidia oraz bez. Jeśli nie masz karty graficznej od Nvidii musisz pominąć instalację CUDA, CUDNN i zainstalować Tensorflow bez GPU.

Możesz próbować wykonać te kroki na systemie Windows, natomiast będziesz potrzebować trochę cierpliwości. Będzie trzeba znaleźć sposób jak poszczególne kroki zrobić na Windowsie.

0. System operacyjny

Polecam Ubuntu 16.04 / 18.04. Można na Windowsie, natomiast Tensorflow nie udostępnia przekompilowanej wersji GPU. Apple Mac już od paru lat nie ma kart graficznych Nvidia’i. W tym tutorialu skupimy się na instalacji na Ubuntu, zwracając uwagę na różne smaczki i pułapki.

1. Zainstaluj CUDA Toolkit 9.0

Czemu 9.0, a nie 9.1 czy 9.2? Ponieważ Tensorflow jest zbudowany z 9.0 (przynajmniej w wersji 1.8, w przyszłych to się zmieni), więc o ile nie chcesz tracić kilku dni na kompilację, polecam ściągnąć pasującą wersję CUDA’y.

Z archiwum pobierz wersję odpowiednią dla Twojego systemu. W przypadku Ubuntu nie używaj run-file ponieważ ten instalator uniemożliwia ponowne zalogowanie niszcząc powłokę graficzną. Nie widzę dobrego sposobu by przywrócić poprawne działanie systemu, a więc deb remote albo local.

Pobierz tutaj: https://developer.nvidia.com/cuda-90-download-archive

2. Zanistaluj CUDNN w wersji 7.0.5 dla CUDA 9.0

CUDNN to biblioteka z funkcjami przygotowanymi pod sieci neuronowe, wykorzystują ją różne programy i biblioteki między innymi Tensorflow. Przy pobieraniu ekstremalnie ważne jest aby nasza wersja pasowała nie tylko do systemu operacyjnego, ale także do wersji CUDA’y i Tensorflow.

Aby pobrać musisz się darmowo zarejestrować.

https://developer.nvidia.com/rdp/cudnn-archive

3. Zaintaluj pythona

Tutaj możemy zrobić to na różne sposoby. Jeśli już programujesz w pythonie możesz przejść do następnego punktu. Powiem tu o trzech sposobach na instalację pythona: anaconda, virtualenv i instalacja natywna.

Anaconda jak i Virtualenv pozwalają na posiadanie wielu środowisk python z różnymi wersjami bibliotek. Pozwala to na łatwe uruchamianie różnego oprogramowania bez wzajemnych kolizji wersji bibliotek.

Anaconda

Aby zainstalować należy pobrać stąd: https://www.anaconda.com/download/

Virtualenv

Tutaj znajdziesz instrukcję jak zainstalować: https://virtualenv.pypa.io/en/stable/installation/

Python natywnie

Potrzebujemy zainstalować pythona i narzędzie do instalacji pakietów pip. Tutaj wklejam prostą instrukcję do instalacji python3 na Ubuntu.

sudo apt-get update
sudo apt-get install -y build-essential libssl-dev libffi-dev python3-dev python3 python3-pip

4. Zainstaluj Tensorflow

Gdy już masz przygotowane środowisko python bardzo łatwo zainstalujesz tensorflow:

Instalacja z GPU:

pip install tensorflow-gpu

Instalacja bez GPU:

pip install tensorflow

5. Pobierz repozytorium tensorflow

Jeśli nie masz gita, to zainstaluj gita! Git będzie nam potrzebny do pobrania repozytorium. Oczywiście można ściągnąć zip, ale warto używać gita. Tu poleciłbym kurs Gita, site on jeszcze nie powstał: Kurs Gita

sudo apt install -y git

A teraz pobieramy repozytorium tensorflow i tensorflow models

git clone https://github.com/tensorflow/tensorflow
cd tensorflow
git clone https://github.com/tensorflow/models

Tu można jeszcze wybrać sobie wersję, ale zwykle ostatni commit nie jest zły. Repozytorium posiada tagi związane z wersjami.

6. Instalacja Object Detection API

Już jest nieźle! Teraz potrzebujemy zgodnie z instrukcją https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md

Instalujemy niezbędne biblioteki

sudo apt-get install protobuf-compiler python-pil python-lxml python-tk
pip install --user Cython
pip install --user contextlib2
pip install --user jupyter
pip install --user matplotlib

7. Instalacja COCO API

To będzie potrzebne gdybyśmy trenowali model, ale warto od razu zadbać o instalację. Zamień <path_to_tensorflow> na ścieżkę do katalogu z pobranym Tensorflow.

git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
make
cp -r pycocotools <path_to_tensorflow>/models/research/

8. Instalacja Protoc

Tu możemy pobrać protoc: https://github.com/google/protobuf/releases

Dla Ubuntu na systemie 64-bitowym pobierz: protoc-3.6.0-linux-x86_64.zip

Po pobraniu uruchamiamy następujące polecenie:

# From tensorflow/models/research/
protoc object_detection/protos/*.proto --python_out=.

Problemy:

  1. Nie znaleziono protoc. W tej sytuacji można:
    1. Zainstalować protoc w systemie
    2. Uruchomić go podając pełną ścieżkę
  2. Protoc zwraca cokolwiek (powinno być pusto).
    1. Zainstaluj najnowszą wersję.
    2. Upewnij się, że nie masz zainstalowanej paczki systemowej w Ubuntu

9. Zainstaluj object detection

Aby uruchamiać skrypty bez problemów i zastanawiania polecam, wbrew instrukcji, dodać poniższą linię do .bashrc. Oczywiście należy uzupełnić <path_to_tensorflow> ścieżką do katalogu z tensorflow (zastąp ~ napisem $HOME).

export PYTHONPATH=$PYTHONPATH:<path_to_tensorflow>/models/research/:<path_to_tensorflow>/models/research/slim

10. Zainstaluj Jupyter Notebook

To świetne narzędzie – pozwala pisać kod w pythonie wygodnie w przeglądarce i uruchamiać krok po kroku.

Tu instrukcja instalacji: http://jupyter.org/install

Jeśli notebook to dla Ciebie nowe narzędzie:

  • tak można pobrać kod i uruchomić bez notebooka wybierając polecenie z menu
  • daj sobie czas, notebooki nie są złe, są wygodne do szybkiego sprawdzenia jak coś działa
  • można uruchamiać polecenia systemowe! Wykorzystując właśnie wykrzyknik: !ls -laW ten sposób możesz na przykład instalować niezbędne pakiety w systemie
  • spróbuj!

11. Uruchom przykład!

Teraz już możesz uruchomić przykład! Uruchomimy https://github.com/tensorflow/models/blob/master/research/object_detection/object_detection_tutorial.ipynb.

cd tensorflow/models/research/object_detection
jupyter-notebook object_detection_tutorial.ipynb

I już klikając run all cells, albo uruchamiając komórki po koleji, możesz zobaczyć wykrycia na przykładowych obrazach. Po wykonaniu kodu z ostatniej komórki ujrzysz wykrycia na wszystkich dwóch przykładowych obrazach z katalogu test_images.

Tensorflow Object Detection API - SSD Mobilenet V2
Tensorflow Object Detection API – SSD Mobilenet V2

Inne modele

W tym notebooku możesz sprawdzić także inne modele, wystarczy że zmienisz MODEL_NAMEna nazwę innego modelu.

MODEL_NAME = 'mask_rcnn_inception_v2_coco_2018_01_28'

Dostępne modele znajdziesz tutaj: Model ZOO

Uwaga: jeśli chcesz wykorzystać model wytrenowany na innym zbiorze danych niż MS COCO to musisz zmienić także PATH_TO_LABELS

Inne modele pozwalają na wykrywanie masek zamiast samych ramek:

Tensorflow Object Detection - Mask RCNN
Tensorflow Object Detection – Mask RCNN

Co dalej?

Jeśli potrafisz już uruchomić wykrywanie obiektów dla pojedynczych zdjęć to możesz spróbować zrealizować jeden z poniższych pomysłów:

  • przetestuj sieć na swoich zdjęciach – wystarczy że pojawią się w katalogu object_detection/test_images
  • sprawdź inne modele – wykrywają nie tylko ramkę, ale i maskę!
  • uruchom wykrywanie obiektów dla każdej klatki filmu – jak tutaj
  • spróbuj śledzić obiekty w filmie
  • przetestuj wykrywanie obiektów na swoim telefonie – jak tutaj

A może masz inne pomysły?
Czy masz jakieś pytania, problemy?
Napisz w komentarzu na dole!

Postaram się powyższe pomysły realizować w następnych postach!

Podsumowując!

Wiesz już jak w kilku prostych krokach uruchomić wykrywanie obiektów wykorzystując Tensorflow! Potrafisz przygotować środowisko do wykorzystania głębokich sieci neuronowych w Tensorflow. Nie zaskoczą Cię zasadzki, problemy podczas instalacji.

Daj znać czy udało Ci się przejść przez tę instrukcję bez problemów, albo jakie problemy wystąpiły.

Linki

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *