Niedawno prezentowaliśmy nowy układ Movidiusa - Myriad X. Firma kontynuuje rozwijanie tej technologii, a jednocześnie prezentuje oparty na starszej konstrukcji, Myriad 2, nowatorski akcelerator - Neural Compute Stick.
Systemy sztucznej inteligencji są jednym z tych osiągnięć, jak np. czysta energia atomowa, które rewolucjonizują ludzkie społeczeństwo na lata. Postępy w zakresie systemów uczenia maszynowego, sieci neuronowych etc, jakie ostatnio nastąpiły, przybliżają nas do praktycznego, realnego wykorzystania systemów sztucznej inteligencji w coraz większej liczbie aplikacji. Problemem jednakże bardzo często jest moc obliczeniowa potrzebna do realizacji tych algorytmów, a co za tym idzie moc elektryczna, jaką pobiera taki system. W wielu wypadkach uniemożliwia to lokalne prowadzenie obliczeń np. w smartfonie.
Movidius, obecnie należący do Intela, postanowił pochylić się nad tym problemem. Firma stworzyła sprzętowe akceleratory systemów sztucznej inteligencji, dedykowane do zastosowań w przenośnych systemach wbudowanych. Jeden z tych układów - Myriad 2 - to system analizy obrazu, który dostarcza programowalnych algorytmów do analizy, przy bardzo niskim poborze mocy.
Aby ułatwić rozwijanie aplikacji uczenia maszynowego i analizy obrazów, Movidius opracował prosty moduł, podłączany do dowolnego komputera, który umożliwia testowanie i rozwijanie oprogramowania korzystającego z Myriad 2. Moduł ten nazwano Neural Compute Stick i wyglądem nie różni się od zwykłego pendrive.
100 gigaflopów z jednego wata
Wprowadzony właśnie przez Movidiusa do oferty Neural Compute Stick dostarcza ogromnych możliwości przetwarzania obrazów w dowolnym systemie. Układ ten pobiera zaledwie około jednego wata i dostarcza aż 100 gigaflopów mocy obliczeniowej. Wszystko możliwe dzięki wykorzystaniu taktowanego 600 MHz dedykowanego układu integrującego w sobie 12 128 bitowych procesorów wizyjnych, komunikujących się ze sobą i z wbudowaną pamięcią (2 MB) z prędkością 400 Gbps.
Kluczowe możliwości układu to między innymi:
* Wsparcie dla wielu operacji na liczbach całkowitych i zmiennoprzecinkowych (FP16 i FP32) dla uzyskania dowolnego poziomu dokładności (8, 16 lub 32 bity).
* Inferencja w czasie rzeczywistym, bez konieczności korzystania z usług w chmurze.
* Możliwość implementacji istniejących konwolucyjnych algorytmów sieci neuronowych.
* Dane dostarczane poprzez jeden port USB 3.0 z komputera
* Możliwość pracy z wykorzystaniem USB 2.0
* Możliwość podłączenia wielu układów do jednego komputera PC np. poprzez hub USB.
Wsparcie dla framneworka Caffe
System wspiera aplikacje głębokiego uczenia poprzez otwarty framework Caffe, opracowany przez Laboratorium Sztucznej Inteligencji z Berkeley. Podstawowe cechy Caffe to:
* Wyrażenia - modele i ich optymalizacja zapisywane jako zwykły tekst, a nie kod.
* Szybkość - przetwarzanie ogromnych ilości danych jest kluczową cechą systemów uczenia maszynowego.
* Modułowość - łatwość dodawania nowych zadań w elastyczny sposób.
* Otwartość - w pełni otwarty kod środowiska.
* Wsparcie środowiska - framework ten aktywnie wspierany jest przez środowisko akademickie, start-upy i innych.
Na stronie projektu możemy pobrać wszystkie potrzebne pliki, aby rozpocząć korzystanie z frameworku, a także zapoznać się z dokumentacją. Framework ten jest bardzo rozbudowany i każdy implementator systemu sztucznej inteligencji znajdzie tam coś dla siebie, jednakże nie ma co się martwić - cały system jest relatywnie prosty. Opracowane przez Movidiusa Neural Compute SDK wraz z frameworkiem i sprzętem pozwala na prostą implementację istniejących modeli sieci neuronowych. Mówiąc wprost - niewiele czasu trzeba na uruchomienie na tym sprzęcie naszej sieci neuronowej, której używaliśmy wcześniej na innych platformach.
Instalacja SDK
Do instalacji SDK potrzebujemy komputer z Ubuntu 16.04. Być może SDK działa i na innych dystrybucjach, ale pod tą było testowane i działa na pewno. Instalacja przebiega w kilku prostych krokach. Po pobraniu spakowanego SDK wraz z dokumentacją w konsoli wpisujemy:
Instalacja SDK może zająć chwile, gdyż instalowane są rozmaite zależności środowiska. Skrypt instalacyjny aktualizuje plik ~/.bashrc aby ustawić zmienną środowiskową PYTHONPATH tak, aby Python mógł komunikować się z Caffe. Jeśli zainstalowaliśmy SDK w domyślnym miejscu to do zmiennej dodana zostanie ścieżka:
Jeśli chcemy umożliwić wykorzystanie SDK innym użytkownikom musimy zmienić wpis w pliku ~/.bashrc także na ich kontach.
Teraz, nadal pozostając w folderze bin zainstalowanego SDK możemy zainstalować modele dla Caffe, na przykład:
Jeśli teraz cofniemy się do folderu gdzie rozpakowaliśmy SDK możemy doinstalować API:
W pobranym pakiecie znajduje się szereg przykładów. Mogą być one uruchamiane z folderu bin, gdzie znajduje się SDK:
Jeden z przykładów to inferencja dla strumienia wideo:
Możemy teraz przejść do ciekawszych przykładów. Ich uruchomienie wymaga posiadania urządzenia wejścia wideo, czyli np. kamery. Doskonale sprawdza się tutaj Logitech C920 Full HD, gdyż ma świetne wsparcie pod Linuksem.
Wyniki nie są na początku zbyt zachęcające
, ale to nie wina systemu ani Neural Compute Stick, moduł ten odpowiada tylko za obliczenia. To wina słabej zaimplementowanej sieci neuronowej, która dokonała takiej a nie innej decyzji. Z kubkiem do kawy system poradził sobie o wiele lepiej. Podobnie jak z innymi przedmiotami.
Powyższy opis pokazuje jak łatwo jest uruchomić przykładowe projekty na Neural Compute Stick. Zadziwiająca jest też szybkość działania systemu.
Domyślnie wykorzystywany model, implementowany w stream_infer.py nazywa się SqueezeNet. To sieć, która osiąga podobne wyniki jak znana AlexNet, ale jest od niej o około 4 lata starsza. Uczona była wykorzystując 1,3 miliona obrazków w wysokiej jakości. Sieć ta klasyfikuje obiekty do jednej z 1000 różnych klas. Dzięki odpowiedniej optymalizacji SqueezeNet jest 5109 razy mniejsza niż AlexNet.
W pliku stream_infer.py możemy skonfigurować jaka sieć jest implementowana w naszym przypadku. Pozwoli to na porównanie ich wydajności. Aby zmienić to wystarczy odkomentować i zakomentować kilka linii w pliku Pythona w programie. Jak widać zaimplementowano tam i inne modele, takie jak Gender czy GoogleNet. Można je skonfigurować wpisując na przykład:
Program w przykładzie stream_infer.py szukać będzie plików takich jak “graph", "stat.txt" and "categories.txt" w folderze do którego ścieżkę wpiszemy w NETWORK_DIRECTORY.
Wiedząc gdzie się znajdują poszczególne sieci możemy łatwo porównać ich wielkości. Na przykład różnica w AlexNet i SqueezeNet jest od razu widoczna:
W tym przykładzie może nie jest to 510 razy dla tej pary, jednakże nadal różnią się one w sposób istotny.
Jeśli teraz stworzymy własną sieć neuronową, którą nauczymy korzystając z dowolnmego dedykowanego do tego zadania frameworku możemy ją skompilować do odpowiednich plików i wykorzystać w Neural Compute Stick wykorzystując do tego SDK.
Jakkolwiek API jak o Toolik systemu musi być zainstalowane na tym samym komputerze z Ubunti, to biblioteki itp mogą znajdować się na innej platformie. Szereg systemów wyposażone jest w odpowiednie biblioteki. Oznacza to że i na nich powinno być możliwe uruchomienie takiego systemu. Pakiety dla SDK dostępne są np. w Raspbianie Jessie, co oznacza że po zainstalowani wszystkich bibliotek i ich zależności możemy wykorzystać Neural Compute Stick wraz z komputerem Raspberry Pi.
Typowe aplikacje
Układy analizy obrazu od Movidiusa wykorzystane zostaną na przykład w najnowszym telefonie Motoroli, Moto Mod. Inne potencjalne aplikacje tego rodzaju układu obejmują:
* Drony i roboty.
* Systemy rzeczywistości wirtualnej i rozszerzonej.
* Urządzenia elektroniki noszonej.
* Inteligentne systemy zabezpieczającej.,
Z uwagi na fakt, jak łatwo jest zaimplementować ten niewielki moduł wraz z np. kamerą CCTV, można sobie wyobrazić, że stworzenie systemu np. identyfikującego auto pozostawione na parkingu, albo odróżniające włamywacza od zwierzaka w naszym ogródku nie są zbyt problematyczne. Tak samo łatwo można by zaimplementować taki układ wraz z kamerą w autonomicznym odkurzaczu, aby lepiej odnajdywał się w mieszkaniu czy też w dronie, który mógłby być zaprogramowany aby poszukiwać konkretnego typu obiektów. Są to oczywiście tylko niektóre z potencjalnych zastosowań układów produkowanych przez Movidiusa.
Podsumowanie
Technologia opracowana przez Movidiusa, mimo że jest dopiero w powijakach, już pozwala w prosty sposób analizować i przetwarzać obrazy w systemach wbudowanych, telefonach czy dronach etc. Wprowadzenie do sprzedaży Neural Compute Stick sprawi, że tego rodzaju systemy staną się jeszcze popularniejsze z uwagi na ułatwienie startu z sieciami neuronowymi, ich tworzeniem, testowaniem i implementacją w nowych i istniejących platformach.
Źródło: https://www.rs-online.com/designspark/movidius-takes-deep-learning-to-the-edge
Systemy sztucznej inteligencji są jednym z tych osiągnięć, jak np. czysta energia atomowa, które rewolucjonizują ludzkie społeczeństwo na lata. Postępy w zakresie systemów uczenia maszynowego, sieci neuronowych etc, jakie ostatnio nastąpiły, przybliżają nas do praktycznego, realnego wykorzystania systemów sztucznej inteligencji w coraz większej liczbie aplikacji. Problemem jednakże bardzo często jest moc obliczeniowa potrzebna do realizacji tych algorytmów, a co za tym idzie moc elektryczna, jaką pobiera taki system. W wielu wypadkach uniemożliwia to lokalne prowadzenie obliczeń np. w smartfonie.
Movidius, obecnie należący do Intela, postanowił pochylić się nad tym problemem. Firma stworzyła sprzętowe akceleratory systemów sztucznej inteligencji, dedykowane do zastosowań w przenośnych systemach wbudowanych. Jeden z tych układów - Myriad 2 - to system analizy obrazu, który dostarcza programowalnych algorytmów do analizy, przy bardzo niskim poborze mocy.
Aby ułatwić rozwijanie aplikacji uczenia maszynowego i analizy obrazów, Movidius opracował prosty moduł, podłączany do dowolnego komputera, który umożliwia testowanie i rozwijanie oprogramowania korzystającego z Myriad 2. Moduł ten nazwano Neural Compute Stick i wyglądem nie różni się od zwykłego pendrive.
100 gigaflopów z jednego wata
Wprowadzony właśnie przez Movidiusa do oferty Neural Compute Stick dostarcza ogromnych możliwości przetwarzania obrazów w dowolnym systemie. Układ ten pobiera zaledwie około jednego wata i dostarcza aż 100 gigaflopów mocy obliczeniowej. Wszystko możliwe dzięki wykorzystaniu taktowanego 600 MHz dedykowanego układu integrującego w sobie 12 128 bitowych procesorów wizyjnych, komunikujących się ze sobą i z wbudowaną pamięcią (2 MB) z prędkością 400 Gbps.
Kluczowe możliwości układu to między innymi:
* Wsparcie dla wielu operacji na liczbach całkowitych i zmiennoprzecinkowych (FP16 i FP32) dla uzyskania dowolnego poziomu dokładności (8, 16 lub 32 bity).
* Inferencja w czasie rzeczywistym, bez konieczności korzystania z usług w chmurze.
* Możliwość implementacji istniejących konwolucyjnych algorytmów sieci neuronowych.
* Dane dostarczane poprzez jeden port USB 3.0 z komputera
* Możliwość pracy z wykorzystaniem USB 2.0
* Możliwość podłączenia wielu układów do jednego komputera PC np. poprzez hub USB.
Wsparcie dla framneworka Caffe
System wspiera aplikacje głębokiego uczenia poprzez otwarty framework Caffe, opracowany przez Laboratorium Sztucznej Inteligencji z Berkeley. Podstawowe cechy Caffe to:
* Wyrażenia - modele i ich optymalizacja zapisywane jako zwykły tekst, a nie kod.
* Szybkość - przetwarzanie ogromnych ilości danych jest kluczową cechą systemów uczenia maszynowego.
* Modułowość - łatwość dodawania nowych zadań w elastyczny sposób.
* Otwartość - w pełni otwarty kod środowiska.
* Wsparcie środowiska - framework ten aktywnie wspierany jest przez środowisko akademickie, start-upy i innych.
Na stronie projektu możemy pobrać wszystkie potrzebne pliki, aby rozpocząć korzystanie z frameworku, a także zapoznać się z dokumentacją. Framework ten jest bardzo rozbudowany i każdy implementator systemu sztucznej inteligencji znajdzie tam coś dla siebie, jednakże nie ma co się martwić - cały system jest relatywnie prosty. Opracowane przez Movidiusa Neural Compute SDK wraz z frameworkiem i sprzętem pozwala na prostą implementację istniejących modeli sieci neuronowych. Mówiąc wprost - niewiele czasu trzeba na uruchomienie na tym sprzęcie naszej sieci neuronowej, której używaliśmy wcześniej na innych platformach.
Instalacja SDK
Do instalacji SDK potrzebujemy komputer z Ubuntu 16.04. Być może SDK działa i na innych dystrybucjach, ale pod tą było testowane i działa na pewno. Instalacja przebiega w kilku prostych krokach. Po pobraniu spakowanego SDK wraz z dokumentacją w konsoli wpisujemy:
Kod: Bash
Instalacja SDK może zająć chwile, gdyż instalowane są rozmaite zależności środowiska. Skrypt instalacyjny aktualizuje plik ~/.bashrc aby ustawić zmienną środowiskową PYTHONPATH tak, aby Python mógł komunikować się z Caffe. Jeśli zainstalowaliśmy SDK w domyślnym miejscu to do zmiennej dodana zostanie ścieżka:
Kod: Bash
Jeśli chcemy umożliwić wykorzystanie SDK innym użytkownikom musimy zmienić wpis w pliku ~/.bashrc także na ich kontach.
Teraz, nadal pozostając w folderze bin zainstalowanego SDK możemy zainstalować modele dla Caffe, na przykład:
Kod: Bash
Jeśli teraz cofniemy się do folderu gdzie rozpakowaliśmy SDK możemy doinstalować API:
Kod: Bash
W pobranym pakiecie znajduje się szereg przykładów. Mogą być one uruchamiane z folderu bin, gdzie znajduje się SDK:
Kod: Bash
Jeden z przykładów to inferencja dla strumienia wideo:
Możemy teraz przejść do ciekawszych przykładów. Ich uruchomienie wymaga posiadania urządzenia wejścia wideo, czyli np. kamery. Doskonale sprawdza się tutaj Logitech C920 Full HD, gdyż ma świetne wsparcie pod Linuksem.
Kod: Bash
Wyniki nie są na początku zbyt zachęcające
Powyższy opis pokazuje jak łatwo jest uruchomić przykładowe projekty na Neural Compute Stick. Zadziwiająca jest też szybkość działania systemu.
Domyślnie wykorzystywany model, implementowany w stream_infer.py nazywa się SqueezeNet. To sieć, która osiąga podobne wyniki jak znana AlexNet, ale jest od niej o około 4 lata starsza. Uczona była wykorzystując 1,3 miliona obrazków w wysokiej jakości. Sieć ta klasyfikuje obiekty do jednej z 1000 różnych klas. Dzięki odpowiedniej optymalizacji SqueezeNet jest 5109 razy mniejsza niż AlexNet.
W pliku stream_infer.py możemy skonfigurować jaka sieć jest implementowana w naszym przypadku. Pozwoli to na porównanie ich wydajności. Aby zmienić to wystarczy odkomentować i zakomentować kilka linii w pliku Pythona w programie. Jak widać zaimplementowano tam i inne modele, takie jak Gender czy GoogleNet. Można je skonfigurować wpisując na przykład:
Kod: Python
Program w przykładzie stream_infer.py szukać będzie plików takich jak “graph", "stat.txt" and "categories.txt" w folderze do którego ścieżkę wpiszemy w NETWORK_DIRECTORY.
Wiedząc gdzie się znajdują poszczególne sieci możemy łatwo porównać ich wielkości. Na przykład różnica w AlexNet i SqueezeNet jest od razu widoczna:
W tym przykładzie może nie jest to 510 razy dla tej pary, jednakże nadal różnią się one w sposób istotny.
Jeśli teraz stworzymy własną sieć neuronową, którą nauczymy korzystając z dowolnmego dedykowanego do tego zadania frameworku możemy ją skompilować do odpowiednich plików i wykorzystać w Neural Compute Stick wykorzystując do tego SDK.
Jakkolwiek API jak o Toolik systemu musi być zainstalowane na tym samym komputerze z Ubunti, to biblioteki itp mogą znajdować się na innej platformie. Szereg systemów wyposażone jest w odpowiednie biblioteki. Oznacza to że i na nich powinno być możliwe uruchomienie takiego systemu. Pakiety dla SDK dostępne są np. w Raspbianie Jessie, co oznacza że po zainstalowani wszystkich bibliotek i ich zależności możemy wykorzystać Neural Compute Stick wraz z komputerem Raspberry Pi.
Typowe aplikacje
Układy analizy obrazu od Movidiusa wykorzystane zostaną na przykład w najnowszym telefonie Motoroli, Moto Mod. Inne potencjalne aplikacje tego rodzaju układu obejmują:
* Drony i roboty.
* Systemy rzeczywistości wirtualnej i rozszerzonej.
* Urządzenia elektroniki noszonej.
* Inteligentne systemy zabezpieczającej.,
Z uwagi na fakt, jak łatwo jest zaimplementować ten niewielki moduł wraz z np. kamerą CCTV, można sobie wyobrazić, że stworzenie systemu np. identyfikującego auto pozostawione na parkingu, albo odróżniające włamywacza od zwierzaka w naszym ogródku nie są zbyt problematyczne. Tak samo łatwo można by zaimplementować taki układ wraz z kamerą w autonomicznym odkurzaczu, aby lepiej odnajdywał się w mieszkaniu czy też w dronie, który mógłby być zaprogramowany aby poszukiwać konkretnego typu obiektów. Są to oczywiście tylko niektóre z potencjalnych zastosowań układów produkowanych przez Movidiusa.
Podsumowanie
Technologia opracowana przez Movidiusa, mimo że jest dopiero w powijakach, już pozwala w prosty sposób analizować i przetwarzać obrazy w systemach wbudowanych, telefonach czy dronach etc. Wprowadzenie do sprzedaży Neural Compute Stick sprawi, że tego rodzaju systemy staną się jeszcze popularniejsze z uwagi na ułatwienie startu z sieciami neuronowymi, ich tworzeniem, testowaniem i implementacją w nowych i istniejących platformach.
Źródło: https://www.rs-online.com/designspark/movidius-takes-deep-learning-to-the-edge
Fajne? Ranking DIY