Skorzystaj z systemów uczenia głębokiego, aby uprościć i przyspieszyć wdrażanie widzenia maszynowego (Machine Vision).
Wprowadzenie
Powiedzenie „obraz jest wart tysiąca słów” nigdy nie brzmiało tak dobrze w świecie widzenia maszynowego, jak ma to miejsce obecnie. Dzięki głębokiemu uczeniu się tysiące, a nawet miliony linii kodu można zastąpić prostą siecią neuronową wyszkoloną za pomocą obrazów i bardzo niewielkiej ilości kodu.
Wspaniałą wiadomością jest to, że głębokie uczenie się nie jest już metodą dostępną tylko dla naukowców lub osób o wysoce wyspecjalizowanych umiejętnościach i/lub dużych budżetach. Obecnie wiele narzędzi jest bezpłatnych, samouczki są łatwe do znalezienia, koszt sprzętu jest niski, a nawet dane szkoleniowe są dostępne bezpłatnie. Stwarza to zarówno szanse, jak i zagrożenia – pojawiają się nowi gracze, którzy mają na celu zmianę uznanych nazw i pobudzają innowacje. Daje również możliwość wykonywania przez maszynowe systemy wizyjne rzeczy wcześniej niewyobrażalnych – na przykład głębokie uczenie może służyć do rozpoznawania nieoczekiwanych anomalii, zazwyczaj bardzo trudnych lub prawie niemożliwych do osiągnięcia przy tradycyjnym kodowaniu.
Godną odnotowania korzyścią z wdrażania sieci neuronowych uczenia głębokiego jest to, że umożliwia to podejmowanie złożonych decyzji na brzegu sieci przy minimalnym sprzęcie i bardzo małej mocy obliczeniowej – umożliwiają to tanie systemy oparte na ARM lub FPGA oraz nowe kamery inferencyjne, takie jak FLIR Firefly DL.
W artykule poruszymy takie tematy, jak:
- Podstawowy słownik używany w głębokim uczeniu się
- Typy zadań widzenia maszynowego są najbardziej odpowiednie dla głębokiego uczenia
- 5 kroków tworzenia i wdrażania sieci neuronowej do wnioskowania na krawędzi
- Dostępne narzędzia i frameworki na początek
- Wskazówki dotyczące ułatwienia procesu
- Potencjalne wady uczenia głębokiego jakie należy rozważyć
Co to jest uczenie głębokie: podstawy
Głębokie uczenie to podzbiór uczenia maszynowego inspirowany sposobem działania ludzkiego mózgu. To, co sprawia, że uczenie głębokie jest „głębokie”, to fakt, że istnieje wiele „warstw” neuronów o różnej wadze, które pomagają sieci neuronowej w podjęciu decyzji. Uczenie głębokie można podzielić na dwa etapy: szkolenie i wnioskowanie.
Podczas fazy treningowej definiujesz liczbę neuronów i warstw, z których będzie się składać twoja sieć neuronowa i wystawiasz ją na działanie oznaczonych danych treningowych. Dzięki tym danym sieć neuronowa sama uczy się, co jest „dobre”, a co „złe”. Na przykład, jeśli oceniasz owoce, możesz wyświetlić obrazy sieci neuronowej owoców oznaczonych jako „Klasa A”, „Klasa B”, „Klasa C” i tak dalej. Następnie sieć neuronowa oblicza właściwości każdej klasy; takie jak rozmiar, kształt, kolor, konsystencja koloru i tak dalej. Nie musisz ręcznie definiować tych cech, a nawet programować, co jest za duże lub za małe, sieć neuronowa uczy się sama. Po zakończeniu etapu szkolenia wynikiem jest wytrenowana sieć neuronowa.
Proces oceny nowych obrazów za pomocą sieci neuronowej do podejmowania decyzji nazywa się wnioskami. Kiedy przedstawisz wytrenowanej sieci neuronowej nowy obraz, dostarczy on wnioskowania (tj. Odpowiedzi): na przykład „Klasa A z 95% pewnością”.
5 kroków tworzenia aplikacji do głębokiego uczenia
Rozwój aplikacji do głębokiego uczenia się obejmuje 5 kroków. Poniżej przedstawiono ogólny opis każdego kroku:
Krok 1] Zidentyfikuj odpowiednią funkcję głębokiego uczenia
W świecie głębokiego uczenia się zadania są podzielone na kilka funkcji. Te, które uważamy za najbardziej popularne w widzeniu maszynowym, to:
Klasyfikacja
Pierwszym i najbardziej podstawowym zastosowaniem głębokiego uczenia się jest klasyfikacja. Proces obejmuje sortowanie obrazów na różne klasy i grupowanie obrazów na podstawie wspólnych właściwości. Jako przykład można użyć klasyfikacji, aby oddzielić wadliwą część od dobrej na linii produkcyjnej w celu kontroli jakości lub podczas przeprowadzania inspekcji lutowania PCB – jak pokazano na rysunku 1 poniżej (przy użyciu kamery inferencyjnej FLIR Firefly DL).
Klasyfikacja używana do identyfikacji wadliwych lutów przy użyciu FLIR Firefly DL.
Wykrywanie i lokalizacja
Inne zadanie głębokiego uczenia, idealne dla widzenia maszynowego, to wykrywanie i lokalizacja. Korzystając z tych funkcji, można zidentyfikować cechy na obrazie i podać współrzędne obwiedni w celu określenia jego położenia i rozmiaru. Na przykład można to wykorzystać do wykrywania osoby naruszającej parametr bezpieczeństwa wokół robotów na linii produkcyjnej lub identyfikowania pojedynczej złej części w systemie przenośników linii produkcyjnej / montażowej.
Segmentacja
Trzecim rodzajem uczenia głębokiego jest segmentacja; zwykle używana do określenia, które piksele obrazu należą do odpowiednich obiektów. Segmentacja jest idealna do zastosowań, w których wymagane jest określenie kontekstu obiektu i jego relacji między sobą (np. Pojazd autonomiczny / Zaawansowane systemy wspomagania kierowcy, popularnie zwane ADAS).
Wykrywanie, lokalizacja i segmentacja wykorzystywane do identyfikacji obiektów i ich lokalizacji.
Wykrywanie anomalii
Tego typu zadania uczenia głębokiego można wykorzystać do zidentyfikowania regionów, które nie pasują do wzorca. Typowym przykładem aplikacji, w której wykrywanie anomalii może zwiększyć wartość, byłaby kontrola zapasów i zarządzanie zapasami w sklepach spożywczych, jak pokazano na rys. 4. Ta aplikacja polega na użyciu kamery inferencyjnej do wykrywania i podświetlania półek, które są puste lub mogą wymagać uzupełnienia, dostarczania powiadomień w czasie rzeczywistym i zwiększania wydajności.
Krok 2] Wybierz narzędzia
Po określeniu funkcji uczenia głębokiego, której zamierzasz użyć, będziesz potrzebować zestawu narzędzi (programiści nazywają to „frameworkiem”) najlepiej dostosowanego do Twoich potrzeb. Struktury te zapewnią wybór początkowych sieci neuronowych oraz narzędzi do szkolenia i testowania sieci.
Niektóre z największych na świecie firm technologicznych walczą o dominację na rynku uczenia głębokiego, platformy takie jak TensorFlow firmy Google, Caffe2 firmy Facebook i OpenVino firmy Intel (wszystkie bezpłatne) pokazują ilość inwestycji i zasobów wpływających na rynek uczenia głębokiego. Na drugim końcu tego spektrum masz również Pytorch, rozwiązanie typu open source, które jest teraz częścią Facebooka. Narzędzia te są łatwe w użyciu i dostarczają doskonałą dokumentację (w tym przykłady), dzięki czemu nawet początkujący użytkownik może wytrenować i wdrożyć sieć neuronową przy minimalnym wysiłku.
Omówienie wszystkich dostępnych frameworków wymagałoby osobnego artykułu, ale poniższe wskazówki wymieniają kluczowe zalety i wady trzech najpopularniejszych frameworków:
Pytorch
- Prosty i łatwy w użyciu.
- Używany w wielu projektach badawczych.
- Nie jest powszechnie używany do dużych wdrożeń.
- W pełni obsługiwane tylko w Pythonie.
TensorFlow
- Duża baza użytkowników z dobrą dokumentacją.
- Wyższa krzywa uczenia się w porównaniu do Pytorcha.
- Oferuje skalowalne wdrożenie produkcyjne i obsługuje wdrażanie mobilne.
Caffe 2
- Lekki, co przekłada się na wydajne wdrożenie.
- Jeden z najstarszych frameworków (szeroko obsługiwane biblioteki dla CNN i wizji komputerowej).
- Najlepiej nadaje się do urządzeń mobilnych korzystających z OpenCV.
Wybór sieci neuronowej będzie ostatecznie zależał od złożoności wykonywanego zadania i szybkości, z jaką musi przebiegać wnioskowanie. Na przykład. można wybrać sieć neuronową z większą liczbą warstw i większą liczbą neuronów, ale wnioskowanie przebiegałoby wolniej. Zazwyczaj wyszkolona sieć neuronowa wymaga bardzo małej mocy obliczeniowej i może dostarczyć wyniki w ciągu milisekund. Pozwala to na przeprowadzanie złożonych wnioskowań głębokiego uczenia na krawędzi z płytami ARM małej mocy lub wnioskowanie na krawędziach – za pomocą specjalnie wyprodukowanych kamer inferencyjnych, takich jak FLIR Firefly DL.
Ponadto nawet firmy, którym brakuje zasobów i pracowników, aby uczyć się i wdrażać rozwiązania do głębokiego uczenia się, mogą liczyć na konsultantów zewnętrznych; co może pomóc różnym interesariuszom w całym cyklu rozwoju – od konceptualizacji do wdrożenia. Jednym z takich przykładów jest Enigma Pattern.
Krok 3] Przygotowanie danych treningowych dla sieci neuronowej
W zależności od typu danych, które chcesz ocenić, będziesz potrzebować repozytorium obrazów o tylu cechach, które masz nadzieję wykorzystać w swojej ocenie, i muszą one być odpowiednio oznaczone. Na przykład, jeśli twoja sieć neuronowa musi odróżnić dobry ze złego lutu, wymagałoby setek odmian wyglądu dobrego lutu i podobnego zestawu złych lutów z etykietami, które identyfikują je jako takie.
Istnieje kilka sposobów uzyskania zbioru danych obrazów:
- W przypadku typowych przypadków użycia możesz znaleźć wstępnie oznaczony zestaw danych, który spełnia Twoje określone wymagania, i można go kupić online (w wielu przypadkach jest nawet bezpłatnie).
- Generowanie danych syntetycznych może być wydajną opcją dla kilku aplikacji; zwłaszcza, że etykietowanie nie jest wymagane. Firmy takie jak Cvedia; wspierane przez firmę FLIR (https://www.cvedia.com) wykorzystują technologię symulacji i zaawansowaną teorię widzenia komputerowego, aby tworzyć wysokiej jakości pakiety syntetycznych zestawów treningowych. Te zestawy danych są opatrzone adnotacjami i zoptymalizowane pod kątem uczenia algorytmów.
- Jeśli dwie pierwsze opcje nie są dostępne, musisz zrobić własne obrazy i indywidualnie je oznaczyć. Proces ten jest ułatwiony dzięki kilku narzędziom dostępnym na rynku (kilka narzędzi i technik skracających czas rozwoju zostało pokrótce omówionych poniżej).
Pomocne wskazówki:
W procesie tworzenia własnego kodu do głębokiego uczenia się kilku programistów otwiera swoje rozwiązanie i chętnie udostępnia je bezpłatnie. Jednym z takich narzędzi, które jest szczególnie przydatne, jeśli Twój zbiór danych nie jest wstępnie oznaczony, jest LabelImg; graficzne narzędzie do adnotacji obrazu, które pomaga oznaczać obiekty w obwiedniach na obrazach (https://github.com/tzutalin/labelImg). Alternatywnie cały proces można zlecić osobie trzeciej.
Innym sposobem na skrócenie etapu przygotowania danych jest powielenie jednego obrazu do wielu różnych obrazów poprzez wykonanie na nich przetwarzania obrazu (obracanie, zmiana rozmiaru, rozciąganie, rozjaśnianie / przyciemnianie… itp.). Pozwoliłoby to również wygenerować więcej czasu na rozwój, ponieważ proces przechwytywania danych treningowych i etykietowania obrazów można przerzucić na początkującego użytkownika.
Ponadto, jeśli masz określone ograniczenia lub preferencje sprzętowe, staje się to jeszcze ważniejsze, ponieważ narzędzia do głębokiego uczenia omówione w następnej sekcji obsługują ograniczony zestaw sprzętu i często nie są wymienne.
Krok 4] Wytrenuj i zweryfikuj sieć neuronową, aby zapewnić dokładność
Po przygotowaniu danych będziesz musiał przeszkolić, przetestować i zweryfikować dokładność swojej sieci neuronowej. Ten etap obejmuje konfigurowanie i uruchamianie skryptów na komputerze do momentu, gdy proces szkolenia zapewni akceptowalny poziom dokładności dla konkretnego przypadku użycia. Zalecaną najlepszą praktyką jest oddzielanie danych treningowych i testowych, aby mieć pewność, że dane testowe, które oceniasz, nie są używane podczas treningu.
Można to przyspieszyć, wykorzystując transfer uczenia się: proces ten obejmuje wykorzystanie wstępnie wyszkolonej sieci i ponowne jej przeznaczenie do innego zadania. Ponieważ wiele warstw głębokiej sieci neuronowej przeprowadza wyodrębnianie cech, warstwy te nie muszą być ponownie trenowane, aby sklasyfikować nowe obiekty. W związku z tym możesz zastosować techniki uczenia transferowego do wstępnie wytrenowanych sieci jako punkt wyjścia i przekwalifikować tylko kilka warstw, zamiast trenować całą sieć. Popularne frameworki, takie jak Caffe2 i TensorFlow, udostępniają je bezpłatnie.
Co więcej, dodawanie nowych funkcji do wykrywania już wyszkolonej sieci neuronowej jest tak proste, jak dodanie dodatkowych obrazów do uszkodzonego zestawu obrazów i zastosowanie uczenia transferu w celu ponownego przeszkolenia sieci. Jest to znacznie łatwiejsze i szybsze niż programowanie oparte na logice; gdzie należy dodać nową logikę do kodu, ponownie skompilować i wykonać, upewniając się, że nowo dodany kod nie wprowadza nieuzasadnionych błędów.
Jeśli nie masz doświadczenia w kodowaniu do trenowania własnej sieci neuronowej, istnieje kilka programów opartych na graficznym interfejsie użytkownika (GUI), które działają z różnymi strukturami. Te narzędzia sprawiają, że proces szkolenia i wdrażania jest bardzo intuicyjny, nawet dla mniej doświadczonych użytkowników. Matrox MIL jest jednym z takich przykładów ze świata widzenia maszynowego.
Krok 5 >> Wdróż sieć neuronową i przeprowadź wnioskowanie na nowych danych
Ostatni krok polega na wdrożeniu wytrenowanej sieci neuronowej na wybranym sprzęcie w celu przetestowania wydajności i zebrania danych w terenie. Pierwszych kilka faz wnioskowania najlepiej byłoby wykorzystać w terenie do zebrania dodatkowych danych testowych, które można wykorzystać jako dane szkoleniowe do przyszłych iteracji.
Poniższa sekcja zawiera krótkie podsumowanie typowych metod wdrażania, z towarzyszącymi im zaletami i wadami:
Wdrożenie w chmurze
- Znaczne oszczędności na kosztach sprzętu
- Możliwość szybkiego skalowania
- Możliwość wdrażania i propagowania zmian w kilku lokalizacjach
- Potrzeba połączenia z Internetem jest kluczową wadą
- Większe opóźnienia w porównaniu z wdrożeniem brzegowym (ze względu na ilość przesyłanych danych między lokalnym sprzętem a chmurą)
- Niższa niezawodność (problemy z połączeniem mogą powodować krytyczne awarie)
Edge (standardowy komputer)
- Idealny do zastosowań o wysokiej wydajności
- Wysoce konfigurowalny (kompilacja z częściami, które są odpowiednie dla aplikacji)
- Elastyczne ceny (ponieważ komponenty mogą być wybierane na podstawie aplikacji)
- Wyższy koszt
- Zwykle znacznie większy footprint
Edge (kamery ARM, FPGA i inference, takie jak FLIR Firefly DL)
- Niskie zużycie energii
- Znaczne oszczędności w sprzęcie peryferyjnym
- Wysoka niezawodność
- Idealny do zastosowań, które wymagają wielu kamer w jednym systemie (pomaga odciążyć przetwarzanie na kilka kamer).
- Bezpieczne (ponieważ sprzęt można odizolować od innych zakłóceń)
- Idealny do zastosowań wymagających niewielkich rozmiarów
- Nie nadaje się do zadań wymagających dużej mocy obliczeniowej
- Rozwiązanie oparte na VPU ma wyższy stosunek wydajności do mocy w porównaniu z rozwiązaniami FPGA
- Rozwiązanie FPGA ma lepszą wydajność w porównaniu do rozwiązania opartego na VPU
Przykład kamery inferencyjnej DL – FLIR Firefly DL
Potencjalne wady uczenia głębokiego
Teraz, gdy omówiliśmy już proces tworzenia i wdrażania, warto przyjrzeć się również niektórym niedociągnięciom.
- Uczenie głębokie jest w większości czarną skrzynką i bardzo trudno jest naprawdę zilustrować / zrozumieć, w jaki sposób sieć neuronowa podejmuje swoją decyzję. Może to być nieistotne dla niektórych zastosowań, ale firmy z branży medycznej, zdrowia i nauk przyrodniczych mają ścisłe wymagania dotyczące dokumentacji produktów, które mają być zatwierdzone przez FDA lub jej odpowiedniki w innych regionach. W większości przypadków musisz być w pełni świadomy tego, jak działa oprogramowanie i musisz szczegółowo udokumentować całą operację.
- Innym problemem, z którym należy się zmierzyć podczas wdrażania głębokiego uczenia się, jest to, że bardzo trudno jest zoptymalizować sieć neuronową w przewidywalny sposób. Wiele sieci neuronowych, które są obecnie trenowane i używane, wykorzystuje transfer uczenia się do ponownego szkolenia istniejących sieci, podczas gdy optymalizacja jest bardzo niewielka.
- Nawet drobne błędy w etykietowaniu danych szkoleniowych, które mogą występować dość często z powodu błędu ludzkiego, mogą zepsuć dokładność sieci neuronowej. Ponadto debugowanie problemu jest niezwykle uciążliwe, ponieważ może być konieczne przejrzenie wszystkich danych treningowych indywidualnie, aby znaleźć nieprawidłową etykietę.
Oprócz tych wad wiele aplikacji jest koncepcyjnie lepiej dostosowana do rozwiązań opartych na logice. Na przykład, jeśli Twój problem jest dobrze zdefiniowany, deterministyczny i przewidywalny, stosowanie rozwiązań opartych na logice może zapewnić lepsze wyniki w porównaniu z uczeniem głębokim. Typowe przykłady obejmują odczyt kodów kreskowych, wyrównanie części, precyzyjne pomiary i tak dalej.
Wnioski
Nawet przy niektórych niedociągnięciach wskazanych powyżej, potencjalne korzyści wynikające z głębokiego uczenia się znacznie przewyższają negatywne (szybki rozwój, umiejętność rozwiązywania złożonych problemów, łatwość użytkowania i wdrażania – żeby wymienić tylko kilka). Ponadto stale wprowadzane są ulepszenia w dziedzinie uczenia głębokiego, które przezwyciężają te niedociągnięcia. Na przykład mapy aktywacji można wykorzystać do wizualnego sprawdzenia, jakie piksele w obrazie są brane pod uwagę podczas podejmowania decyzji przez sieć neuronową, abyśmy mogli lepiej zrozumieć, w jaki sposób sieć doszła do wniosku. Ponadto, wraz z szerszym przyjęciem, wiele firm opracowuje teraz własne sieci neuronowe zamiast polegać na uczeniu się transferowym – poprawiając wydajność i dostosowując rozwiązania do konkretnych problemów. Nawet w aplikacjach, które są przystosowane do programowania opartego na logice, głębokie uczenie może pomóc podstawowej logice w zwiększeniu ogólnej dokładności systemu. Na koniec, rozpoczęcie tworzenia własnego systemu głębokiego uczenia jest łatwiejsze i tańsze niż kiedykolwiek wcześniej: kliknij tutaj, aby dowiedzieć się, jak zbudować system klasyfikacji DL za mniej niż 600 USD.
Chcesz wiedzieć więcej?
Jeżeli interesuje Cię temat sztucznej inteligencji i jej wykorzystania w swoim zakładzie, napisz do nas.