Wąsy, łapy i ogon: jak sieć neuronowa rozpoznaje koty i inne obiekty. Wąsy, łapy i ogon: jak sieć neuronowa rozpoznaje koty i inne obiekty Sieć neuronowa rysuje koty bez rejestracji

Wąsy, łapy i ogon: jak sieć neuronowa rozpoznaje koty i inne obiekty. Wąsy, łapy i ogon: jak sieć neuronowa rozpoznaje koty i inne obiekty Sieć neuronowa rysuje koty bez rejestracji

13.10.2023

Niedawno programista Christopher Hesse pokazał światu swoje dzieło - projekt. Za pomocą sieci neuronowej narysowane koty zamieniają się w „prawdziwe”. Pomysł opiera się na systemie uczenia maszynowego od Google o nazwie TensorFlow. Edges2cats jest podzielony na dwa „pola”. W pierwszym użytkownik rysuje kota (lub coś do niego podobnego), a w drugim sieć neuronowa stara się, aby rysunek przypominał prawdziwe zwierzę.

Internautom spodobała się prosta zabawa. Zaczęli masowo publikować swoje nowe zwierzaki na Twitterze. W wielu przypadkach „obraz” tworzony przez sieć neuronową wyglądał bardzo realistycznie, jakbyśmy patrzyli na fotografię prawdziwego żywego stworzenia. Niektórzy użytkownicy próbowali uczynić koty uroczymi (czasami to nawet działało), ale w wielu przypadkach rodziły się prawdziwe potwory.

Należy pamiętać, że system rozpoznawania oczu nie zawsze działa prawidłowo, dlatego na niektórych zdjęciach zwierzęta w ogóle nie mają oczu, a na innych źrenica może znajdować się tam, gdzie powinien znajdować się nos.



Co dzieci kochają najbardziej? Oczywiście kreskówki. W tej sekcji zebraliśmy różnorodne kreskówki zagraniczne i krajowe. Wśród ogromnej oferty z pewnością znajdzie się taki, który Twoje dziecko szczególnie pokocha. Jeśli masz dużo do zrobienia lub po prostu chcesz się zrelaksować, a dziecko prosi o ciągłą uwagę, a jeśli jej nie ma, to zaczyna „psuć”, to na ratunek przyjdą bajki. Włączając kreskówkę dla dziecka, możesz odwrócić jego uwagę na co najmniej pół godziny, a nawet dwie lub trzy.


Forma sztuki, taka jak animacja, istnieje już od dłuższego czasu. W tym czasie jakość uległa poprawie, co jest dobrą wiadomością. Dzieci wszystkich pokoleń absolutnie uwielbiają kreskówki; wszyscy w dzieciństwie uwielbiali kreskówki. Wielu dorosłych w pewnym momencie musiało czekać na telewizję i oglądać to, co było pokazane. Niektórzy ludzie mieli kiedyś szczęście, jeśli ich rodzice kupili kasety lub płyty. A nowe pokolenie może już oglądać, co chce, nie wydając pieniędzy z portfela rodziców, ponieważ prawie w każdym domu jest już komputer i Internet, za pomocą którego można otworzyć ogromny indeks kart z kreskówkami na każdy gust i kolor .


Dla najmłodszych idealne są radzieckie klasyki, które słyną z prostoty, życzliwości i przyjemnych obrazków. Na przykład „Krokodyl Gena”, „Prostokvashino”, „Cóż, poczekaj chwilę!”, „Muzycy z Bremy”, „Latający statek”, „Kubuś Puchatek”, „Dziecko i Carlson” i wiele innych. Można nawet usiąść z dzieckiem i powspominać dzieciństwo. Również dla małych dzieci istnieje wiele nowoczesnych kreskówek edukacyjnych, które różnią się nie tylko jaśniejszymi obrazami, ale także treścią.


Dla dzieci, które już kończą przedszkole lub uczą się w szkole podstawowej, odpowiednie są zabawne kreskówki, w których bohaterowie ratują kogoś, a nawet cały świat. Należą do nich zagraniczne bajki o superbohaterach z komiksów, o czarodziejach czy wróżkach, a także krajowe o bohaterach.


Te dzieci, które już powoli i pewnie wkraczają w okres dojrzewania, mogą już zacząć interesować się kreskówkami o szczególnie różnej fabule. W takich kreskówkach dzieci w zrelaksowany sposób zmuszane są do myślenia o poważnych sprawach i przeżywania wielu emocji. Nadają się do oglądania w gronie całej rodziny, gdyż dzięki przemyślanej fabule nie mniej zaciekawią dorosłych. Takie bajki można bezpiecznie umieścić na tej samej półce, co filmy familijne.


Nastolatki, mimo że uważają się za dorosłe, nadal uwielbiają oglądać kreskówki. Dla nastolatków są już bardziej odważni i nie tak nieszkodliwi jak dzieci. Dominują w nich rozrywka, dowcipy dorosłych i problemy nastolatków. Są to głównie zagraniczne wieloczęściowe kreskówki, takie jak „The Simpsons”, „Family Guy”, „Futurama” itp.


Nie zapomnij o dorosłych. Tak, rysują też dla dorosłych, tyle że są trochę podobne do nastolatków, ale bardziej niegrzeczne, mogą pojawiać się przekleństwa, podtekst intymny i poruszane są problemy dorosłych (życie rodzinne, praca, kredyty, kryzys wieku średniego itp.).


Kreskówki to forma sztuki, w której ręce autora są całkowicie wolne, ponieważ można przedstawić absolutnie wszystko i jednocześnie dodać uroczą historię. Zapraszamy już teraz do ich obejrzenia i dobrej zabawy.

Program nie zawsze działa poprawnie. Efektem końcowym są potwory z czterema oczami i bez uszu, rozciągnięte w kształcie gwiazdy i rozłożone na płótnie. Możesz sam stworzyć potwora, rysując coś absurdalnego w pierwszym oknie.


Program jest łatwy w użyciu. Po lewej stronie znajduje się okno rysunku. Poniżej znajdują się trzy przyciski: anuluj, wyczyść i losowy wzór. Pomiędzy kwadratami znajduje się przycisk „proces”. Zamienia rysunek w kota.

Program opiera się na samouczącej się „sieci neuronowej”. Jak pisze deweloper, maszyna przetworzyła 20 tysięcy zdjęć kotów. Podkreśliłam w nich elementy takie jak uszy, sierść, nos, oczy, usta. Nauczyłam się je rozpoznawać i odróżniać po zarysie.


Oczy są przerażające.

Nie działa idealnie. Szczególnie źle jest, gdy leczone są oczy. Definicja granic obrazu nie zawsze jest jasna. Z tego powodu pojawiają się dodatkowe oczy lub w ogóle się nie pojawiają.

Okazuje się zabawne. Usługa nie ogranicza się do kotów. Na stronie można zbudować dom z klocków, przykleić buty i wymodelować torbę na przyszły sezon.

Modna torebka na lato. Ekskluzywny projekt!

Rozpoznawanie obrazu jest klasycznym przykładem wykorzystania sieci neuronowych. Przypomnijmy, jak przebiega proces uczenia sieci, gdzie pojawiają się trudności i po co wykorzystywać biologię w rozwoju. Szczegóły pod rozcięciem.

Dmitrij Sosznikow, ewangelista techniczny Microsoftu, członek Rosyjskiego Stowarzyszenia Sztucznej Inteligencji, nauczyciel programowania funkcjonalnego i logicznego AI w Moskiewskim Instytucie Lotniczym, Moskiewskim Instytucie Fizyki i Technologii oraz Wyższej Szkole Ekonomicznej, a także na naszych kursach, pomóż nam w tej historii.

Wyobraź sobie, że mamy wiele zdjęć, które należy posortować na dwa stosy za pomocą sieci neuronowej. Jak można to zrobić? Oczywiście wszystko zależy od samych obiektów, ale zawsze możemy wyróżnić pewne cechy.

Musimy poznać jak najwięcej informacji o danych wejściowych i uwzględnić je przy ręcznym wprowadzaniu danych, jeszcze przed uczeniem sieci. Przykładowo, jeśli naszym zadaniem jest wykrycie na obrazku wielobarwnych kotów, ważny będzie nie kolor, a kształt obiektu. Kiedy pozbędziemy się koloru i przejdziemy na obraz czarno-biały, sieć będzie uczyć się znacznie szybciej i skuteczniej: będzie musiała rozpoznać kilkukrotnie mniej informacji.

Do rozpoznawania dowolnych obiektów, takich jak koty i żaby, kolor jest oczywiście ważny: żaba jest zielona, ​​ale koty nie. Jeśli opuścimy kanały kolorów, dla każdej palety sieć uczy się na nowo rozpoznawać obiekty na obrazie, ponieważ ten kanał kolorów jest przekazywany do innych neuronów.

A co, jeśli chcemy zniszczyć słynny mem o kotach i chlebie, ucząc sieć neuronową wykrywania zwierzęcia na dowolnym obrazku? Wydawałoby się, że kolory i kształt są w przybliżeniu takie same. Co wtedy zrobić?

Banki filtrów i wizja biologiczna

Używając różnych filtrów, możesz wyróżnić różne części obrazu, które następnie zostaną wykryte i zbadane jako indywidualne właściwości. Na przykład jako dane wejściowe podawaj tradycyjne uczenie maszynowe lub sieci neuronowe. Jeśli sieć neuronowa posiada dodatkową informację o strukturze obiektów, z którymi współpracuje, wówczas wzrasta jakość jej pracy.

W dziedzinie widzenia komputerowego opracowano banki filtrów - zestawy filtrów do podkreślania głównych cech obiektów.

Podobna „architektura” stosowana jest w biologii. Naukowcy uważają, że ludzki wzrok nie determinuje całego obrazu, ale podkreśla charakterystyczne cechy, unikalne cechy, dzięki którym mózg identyfikuje obiekt. W związku z tym w celu szybkiego i prawidłowego rozpoznania obiektu można określić najbardziej unikalne cechy. Na przykład u kotów może to być wąsy - na obrazku poziome linie w kształcie wachlarza.

Dzielenie się wagą

Aby sieć nie musiała osobno uczyć się rozpoznawania kotów w różnych częściach obrazu, „dzielimy” wagi odpowiedzialne za rozpoznawanie pomiędzy różne fragmenty sygnałów wejściowych.

Wymaga to wyspecjalizowanej architektury sieciowej:

  • sieci splotowe do pracy z obrazami
  • sieci rekurencyjne do pracy z tekstem/sekwencjami
Sieci neuronowe efektywnie wykorzystywane w rozpoznawaniu obrazów, które wykorzystują specjalne warstwy splotu (ang. Convolution Layers).

Główną ideą jest to:

  • Używamy podziału wagi, aby utworzyć „okno filtra” biegnące przez obraz
  • Filtr zastosowany do obrazu pomaga wyróżnić fragmenty ważne dla rozpoznania
  • Podczas gdy w tradycyjnej wizji maszynowej filtry projektowano ręcznie, sieci neuronowe pozwalają nam projektować optymalne filtry poprzez uczenie się
  • Filtrowanie obrazu można w naturalny sposób połączyć z obliczeniami sieci neuronowej


Splot służy do przetwarzania obrazu, podobnie jak w przetwarzaniu sygnału.

Opiszmy funkcję splotu następującymi parametrami:

  • kernel - jądro splotu, macierz wag
  • pad - ile pikseli należy dodać do obrazu wokół krawędzi
  • krok - częstotliwość stosowania filtra. Przykładowo dla stride=2 co drugi piksel obrazu będziemy brać w pionie i w poziomie, zmniejszając rozdzielczość o połowę
In: def convolve(image, kernel, pad = 0, stride = 1): wiersze, kolumny = image.shape wynik_wiersza = wiersze // krok wynik_kolumny = kolumny // krok wynik = np.zeros((wiersze_wyjścia, kolumny_wyjścia)) if pad > 0: image = np.pad(image, pad, "stała") kernel_size = kernel.size kernel_length = kernel.shape half_kernel = kernel.shape half_kernel = kernel_length // 2 kernel_flat = kernel.reshape(kernel_size, 1) offset = wbudowane.abs( half_kernel-pad) dla r w zakresie (przesunięcie, wiersze - przesunięcie, krok): dla c w zakresie (przesunięcie, kolumny - przesunięcie, krok): rr = r - half_kernel + pad cc = c - half_kernel + pad patch = wynik obrazu = np.dot(patch.reshape(1, kernel_size), kernel_flat) zwraca wynik
In: def show_convolution(kernel, stride = 1): """Wyświetla efekt splotu z danym jądrem.""" fig = pylab.figure(figsize = (9,9)) gs = gridspec.GridSpec(3, 3, height_ratios=) start=1 dla i w zakresie(3): image = Images_train conv = convolve(image, kernel, kernel.shape//2, stride) ax = fig.add_subplot(gs[i]) pylab.imshow (obraz, interpolation="najbliższy") ax.set_xticks() ax.set_yticks() ax = fig.add_subplot(gs) pylab.imshow(kernel, cmap="szary", interpolacja="najbliższy") ax.set_xticks() ax.set_yticks() ax = fig.add_subplot(gs) pylab.imshow(conv, interpolation="najbliższy") ax.set_xticks() ax.set_yticks() pylab.show()
W : rozmycie_kernel = np.array([, , , , ], dtype="float32") rozmycie_kernel /= 273

Filtry

Plama

Filtr rozmycia pozwala wygładzić nierówności i podkreślić ogólny kształt obiektów.


W: show_convolution(blur_kernel)

Pionowe krawędzie

Możesz wymyślić filtr, który podkreśla pionowe przejścia jasności na obrazie. Tutaj kolor niebieski wskazuje przejście z czarnego na biały, żółty - odwrotnie.


W : jądra_pionowe = np.array([, , , ], dtype="float32") pionowe_jądro_edge /= 166
W: show_convolution(vertical_edge_kernel)

Krawędzie poziome

Podobny filtr można zbudować, aby wyróżniać poziome obrysy na obrazie.


In : poziome_bar_jądro = np.array([, [-2, -8, -13, -8, -2], , [-2, -8, -13, -8, -2], ], dtype=" float32") poziome_bar_jądro /= 132
W: show_convolution(horizontal_bar_kernel)

Filtr pętli

Możesz także zbudować filtr 9x9, który podkreśli kontury obrazu.


W: blob_kernel = np.array([, , , , , , , , ], dtype="float32") blob_kernel /= np.sum(np.abs(blob_kernel))
W: show_convolution(blob_kernel)
Tak działa klasyczny przykład rozpoznawania liczb: każda liczba ma swoje charakterystyczne cechy geometryczne (dwa koła – ósemka, przecinek na połowie obrazu – jednostka itp.), na podstawie których sieć neuronowa może określić, jakiego rodzaju to jest obiekt. Tworzymy filtry charakteryzujące każdą cyfrę, przepuszczamy każdy filtr po obrazie i redukujemy błąd do minimum.


Jeśli zastosujesz podobne podejście do wyszukiwania kotów na zdjęciu, szybko stanie się jasne, że czworonożne zwierzę ma wiele znaków do treningu sieci neuronowej i wszystkie są różne: ogony, uszy, wąsy, nosy, futro i kolorystyka. A każdy kot może nie mieć nic wspólnego z innym. Sieć neuronowa posiadająca niewielką ilość danych o budowie obiektu nie będzie w stanie zrozumieć, że jeden kot leży, a drugi stoi na tylnych łapach.

Podstawowa idea sieci splotowej

  • Tworzymy warstwę splotową w sieci neuronowej, która zapewnia nałożenie filtra na obraz.
  • Uczymy wagi filtrów za pomocą algorytmu propagacji wstecznej
Mamy na przykład obraz I, 2 filtry splotowe w z wyjściami o. Elementy obrazu wyjściowego zostaną obliczone w następujący sposób:

Trening siłowy

Algorytm jest następujący:
  • Do wszystkich pikseli obrazu stosowany jest filtr o tych samych wagach.
  • W tym przypadku filtr „biega” po całym obrazie.
  • Chcemy wytrenować te wagi (wspólne dla wszystkich pikseli) za pomocą algorytmu propagacji wstecznej.
  • W tym celu należy zredukować zastosowanie filtra do mnożenia pojedynczej macierzy.
  • W przeciwieństwie do w pełni połączonej warstwy, będzie mniej ciężarów do treningu i więcej przykładów.
  • Sztuczka - im2col

im2kol

Zacznijmy od obrazu x, gdzie każdemu pikselowi odpowiada litera:

© 2023 skypenguin.ru - Wskazówki dotyczące opieki nad zwierzętami