Mustați, labe și coadă: cum recunoaște o rețea neuronală pisicile și alte obiecte. Mustați, labe și coadă: cum recunoaște o rețea neuronală pisicile și alte obiecte Transformarea unui desen într-o pisică

Programul nu funcționează întotdeauna corect. Rezultatul final sunt monștri cu patru ochi, fără urechi, întinși în formă de stea și răspândiți pe pânză. Puteți crea singur un monstru desenând ceva absurd în prima fereastră.


Programul este ușor de utilizat. În stânga este fereastra de desen. Sub el sunt trei butoane: anulare, ștergere și model aleatoriu. Între pătrate se află butonul „procesează”. Ea transformă desenul într-o pisică.

Programul se bazează pe o „rețea neuronală” de auto-învățare. După cum scrie dezvoltatorul, mașina a procesat 20 de mii de fotografii cu pisici. Am scos în evidență elemente în ele, precum urechi, blană, nas, ochi, gura. Am învățat să le recunosc și să le deosebesc după conturul lor.


Ochii sunt înfricoșători.

Nu funcționează perfect. Este deosebit de rău când ochii sunt tratați. Definiția limitelor imaginii nu este întotdeauna clară. Din această cauză, apar ochi suplimentari sau nu apar deloc.

Se dovedește amuzant. Serviciul nu se limitează la pisici. Pe site puteți construi o casă din blocuri, puteți lipi pantofi și modelați o geantă pentru sezonul următor.

Geanta la moda pentru vara. Design exclusivist!

Recunoașterea imaginilor este un exemplu clasic de utilizare a rețelelor neuronale. Să ne amintim cum are loc procesul de formare a rețelei, unde apar dificultăți și de ce folosim biologia în dezvoltare. Detalii sub croiala.

Dmitri Soshnikov, un evanghelist tehnic Microsoft, membru al Asociației Ruse de Inteligență Artificială, profesor de programare AI funcțională și logică la Institutul de Aviație din Moscova, Institutul de Fizică și Tehnologie din Moscova și Școala Superioară de Economie, precum și cursurile noastre, vor ajuta-ne in poveste.

Imaginați-vă că avem o mulțime de imagini care trebuie sortate în două grămezi folosind o rețea neuronală. Cum se poate face acest lucru? Desigur, totul depinde de obiectele în sine, dar putem evidenția oricând unele caracteristici.

Trebuie să cunoaștem cât mai multe informații despre datele de intrare și să le luăm în considerare în introducerea manuală, chiar înainte de antrenamentul rețelei. De exemplu, dacă sarcina noastră este să detectăm pisici multicolore într-o imagine, nu culoarea, ci forma obiectului va fi importantă. Când scăpăm de culoare și trecem la o imagine alb-negru, rețeaua va învăța mult mai repede și cu mai mult succes: va trebui să recunoască de câteva ori mai puține informații.

Pentru recunoașterea obiectelor arbitrare, cum ar fi pisicile și broaștele, culoarea este evident importantă: o broască este verde, dar pisicile nu. Dacă părăsim canalele de culoare, pentru fiecare paletă rețeaua învață să recunoască din nou obiectele din imagine, deoarece acest canal de culoare este alimentat către alți neuroni.

Ce se întâmplă dacă vrem să distrugem celebrul meme despre pisici și pâine, învățând o rețea neuronală să detecteze un animal în orice imagine? S-ar părea că culorile și forma sunt aproximativ aceleași. Ce să faci atunci?

Bănci de filtre și viziune biologică

Folosind diferite filtre, puteți evidenția diferite părți ale imaginii, care sunt apoi detectate și examinate ca proprietăți individuale. De exemplu, alimentați învățarea automată tradițională sau rețelele neuronale ca intrare. Dacă o rețea neuronală are informații suplimentare despre structura obiectelor cu care lucrează, atunci calitatea muncii sale crește.

În domeniul vederii computerizate au fost dezvoltate bănci de filtre - seturi de filtre pentru evidențierea principalelor caracteristici ale obiectelor.

O „arhitectură” similară este folosită în biologie. Oamenii de știință cred că vederea umană nu determină întreaga imagine, ci evidențiază trăsături caracteristice, trăsături unice prin care creierul identifică obiectul. În consecință, pentru recunoașterea rapidă și corectă a obiectelor, pot fi determinate cele mai unice caracteristici. De exemplu, la pisici poate fi o mustață - linii orizontale în formă de evantai în imagine.

Împărțirea greutății

Pentru a preveni nevoia rețelei de a învăța separat să recunoască pisicile în diferite părți ale imaginii, „împărțim” greutățile responsabile de recunoaștere între diferite fragmente de semnale de intrare.

Acest lucru necesită o arhitectură de rețea specializată:

  • rețele convoluționale pentru lucrul cu imagini
  • rețele recurente pentru lucrul cu text/secvențe
Rețele neuronale care sunt utilizate eficient în recunoașterea imaginilor, care utilizează straturi de convoluție speciale (straturi de convoluție).

Ideea principală este aceasta:

  • Folosim împărțirea greutății pentru a crea o „fereastră de filtrare” care rulează pe imagine
  • Un filtru aplicat unei imagini ajută la evidențierea fragmentelor care sunt importante pentru recunoaștere
  • În timp ce în tradiționale filtrele de viziune artificială au fost proiectate manual, rețelele neuronale ne permit să proiectăm filtre optime prin învățare
  • Filtrarea imaginilor poate fi combinată în mod natural cu calculul rețelei neuronale


Convoluția este folosită pentru procesarea imaginilor, la fel ca și în procesarea semnalului.

Să descriem funcția de convoluție cu următorii parametri:

  • miez - miez de convoluție, matrice de greutate
  • pad - câți pixeli ar trebui adăugați la imaginea din jurul marginilor
  • stride - frecvența de aplicare a filtrului. De exemplu, pentru stride=2 vom lua fiecare al doilea pixel al imaginii vertical și orizontal, reducând rezoluția la jumătate
În: def convolve(imagine, kernel, pad = 0, stride = 1): rows, columns = image.shape output_rows = rows // stride output_columns = columns // stride rezultat = np.zeros((output_rows, output_columns)) dacă pad > 0: imagine = np.pad(imagine, pad, "constant") kernel_size = kernel.size kernel_length = kernel.shape half_kernel = kernel_length // 2 kernel_flat = kernel.reshape(kernel_size, 1) offset = built-ins.abs half_kernel-pad) pentru r in range(offset, rows - offset, stride): pentru c in range (offset, coloane - offset, stride): rr = r - half_kernel + pad cc = c - half_kernel + pad patch = rezultat imagine = np.dot(patch.reshape(1, kernel_size), kernel_flat) returnează rezultatul
În: def show_convolution(kernel, stride = 1): """Afișează efectul convoluției cu nucleul dat.""" fig = pylab.figure(figsize = (9,9)) gs = gridspec.GridSpec(3, 3, height_ratios=) start=1 for i in range(3): image = images_train conv = convolve(image, kernel, kernel.shape//2, stride) ax = fig.add_subplot(gs[i]) pylab.imshow (imagine, interpolation="nearest") ax.set_xticks() ax.set_yticks() ax = fig.add_subplot(gs) pylab.imshow(kernel, cmap="gray", interpolation="nearest") ax.set_xticks() ax.set_yticks() ax = fig.add_subplot(gs) pylab.imshow(conv, interpolation="nearest") ax.set_xticks() ax.set_yticks() pylab.show()
În: blur_kernel = np.array([, , , , ], dtype="float32") blur_kernel /= 273

Filtre

Estompa

Filtrul de estompare vă permite să neteziți neregulile și să subliniați forma generală a obiectelor.


În: show_convolution(blur_kernel)

Margini verticale

Puteți veni cu un filtru care evidențiază tranzițiile verticale în luminozitate într-o imagine. Aici, culoarea albastră indică trecerea de la negru la alb, galben - invers.


În: vertical_edge_kernel = np.array([, , , ], dtype="float32") vertical_edge_kernel /= 166
În: show_convolution(vertical_edge_kernel)

Margini orizontale

Un filtru similar poate fi construit pentru a evidenția liniile orizontale dintr-o imagine.


În: horizontal_bar_kernel = np.array([, [-2, -8, -13, -8, -2], , [-2, -8, -13, -8, -2], ], dtype=" float32") horizontal_bar_kernel /= 132
În: show_convolution(horizontal_bar_kernel)

Filtru buclă

De asemenea, puteți construi un filtru 9x9 care va evidenția contururile imaginii.


În: blob_kernel = np.array([, , , , , , , , ], dtype="float32") blob_kernel /= np.sum(np.abs(blob_kernel))
În: show_convolution(blob_kernel)
Așa funcționează exemplul clasic de recunoaștere a numerelor: fiecare număr are propriile sale trăsături geometrice caracteristice (două cercuri - un opt, o bară oblică pe jumătate din imagine - o unitate etc.), prin care rețeaua neuronală poate determina ce fel de obiectul este. Creăm filtre care caracterizează fiecare cifră, rulăm fiecare filtru peste imagine și reducem eroarea la minimum.


Dacă aplicați o abordare similară pentru căutarea pisicilor într-o imagine, va deveni rapid clar că un animal cu patru picioare are o mulțime de semne pentru antrenarea unei rețele neuronale și toate sunt diferite: cozi, urechi, mustăți, nas, blana si colorant. Și fiecare pisică poate să nu aibă nimic în comun cu alta. O rețea neuronală cu o cantitate mică de date despre structura unui obiect nu va putea înțelege că o pisică stă întinsă, iar cealaltă stă pe picioarele din spate.

Ideea de bază a unei rețele convoluționale

  • Creăm un strat convoluțional în rețeaua neuronală, care asigură că filtrul este aplicat imaginii.
  • Antrenăm greutățile filtrului folosind algoritmul de backpropagation
De exemplu, avem o imagine i, 2 filtre de convolutie w cu ieșiri o. Elementele imaginii de ieșire vor fi calculate după cum urmează:

Antrenament cu greutati

Algoritmul este următorul:
  • Un filtru cu aceleași greutăți este aplicat tuturor pixelilor din imagine.
  • În acest caz, filtrul „se rulează” peste întreaga imagine.
  • Dorim să antrenăm aceste greutăți (comune tuturor pixelilor) folosind un algoritm de backpropagation.
  • Pentru a face acest lucru, este necesar să se reducă aplicarea filtrului la o singură multiplicare a matricei.
  • Spre deosebire de un strat complet conectat, vor exista mai puține greutăți pentru antrenament și mai multe exemple.
  • Trucul - im2col

im2col

Să începem cu o imagine x, unde fiecare pixel corespunde unei litere:

Mai recent, dezvoltatorul Christopher Hesse a arătat lumii creația sa - proiectul. Cu ajutorul unei rețele neuronale, pisicile desenate se transformă în unele „adevărate”. Ideea se bazează pe un sistem de învățare automată de la Google numit TensorFlow. Edges2cats este împărțit în două „câmpuri”. În primul, utilizatorul desenează o pisică (sau ceva similar cu ea), iar în al doilea, rețeaua neuronală încearcă să facă desenul să semene cu un animal adevărat.

Utilizatorilor de internet le-a plăcut distracția simplă. Au început să-și posteze noile animale de companie în masă pe Twitter. Într-un număr de cazuri, „imaginea” creată de rețeaua neuronală părea foarte realistă, de parcă ne-am uita la o fotografie a unei creaturi vii reale. Unii utilizatori au încercat să facă pisici drăguțe (uneori chiar a funcționat), dar în multe cazuri s-au născut adevărați monștri.

Rețineți că sistemul de recunoaștere a ochilor nu funcționează întotdeauna corect, așa că în unele imagini animalele nu au deloc ochi, în timp ce în altele pupila poate fi amplasată acolo unde ar trebui să fie nasul.



Ce iubesc copiii cel mai mult? Desigur, desene animate. În această secțiune am colectat o varietate de desene animate străine și interne. Printre selecția uriașă, cu siguranță va fi una pe care copilul dumneavoastră o va iubi în mod deosebit. Dacă aveți multe de făcut sau doriți doar să vă relaxați, iar copilul cere o atenție constantă, iar dacă nu există, atunci începe să „încurce”, atunci desenele animate vor veni în ajutor. Pornind un desen animat pentru un copil, îi puteți distrage atenția pentru cel puțin o jumătate de oră, sau chiar două sau trei.


O formă de artă precum animația există de destul de mult timp. În acest timp, calitatea s-a îmbunătățit, ceea ce este o veste bună. Copiii din orice generație iubesc desenele animate; toată lumea, în copilărie, iubea desenele animate. Mulți adulți au fost nevoiți la un moment dat să aștepte la televizor și au trebuit să se uite la ceea ce a fost difuzat. Unii oameni au fost norocoși la un moment dat dacă părinții lor cumpărau casete sau discuri. Iar noua generație poate deja să urmărească ceea ce își dorește fără a cheltui bani din portofelul părinților, pentru că aproape fiecare casă are deja un computer și internet, cu ajutorul căruia se poate deschide un uriaș card index de desene animate pentru orice gust și culoare. .


Pentru cei mici sunt perfecti clasicii sovietici, renumiti pentru simplitate, amabilitatea si pozele placute. De exemplu, „Crocodile Gena”, „Prostokvashino”, „Ei bine, așteaptă un minut!”, „Muzicieni din Bremen”, „Nava zburătoare”, „Winnie the Pooh”, „Baby și Carlson” și multe altele. Puteți chiar să vă așezați cu copilul și să vă amintiți despre copilărie. De asemenea, pentru copiii mici există multe desene animate educaționale moderne, care diferă nu numai prin imagini mai strălucitoare, ci și prin conținut.


Pentru copiii care termină deja grădinița sau care învață în școala elementară, desenele animate distractive sunt potrivite, în care eroii salvează pe cineva sau chiar întreaga lume. Acestea includ desene animate străine despre super-eroi din benzi desenate, despre vrăjitoare sau zâne, precum și cele autohtone despre eroi.


Acei copii care se îndreaptă deja încet și sigur către adolescență pot începe deja să fie interesați de desene animate care sunt deosebit de diferite ca intriga. În astfel de desene animate, într-o manieră relaxată, copiii sunt nevoiți să se gândească la lucruri serioase și să experimenteze o mulțime de emoții. Sunt potrivite pentru vizionare de către întreaga familie, deoarece datorită intrigii bine gândite, nu vor fi mai puțin interesante pentru adulți. Astfel de desene animate pot fi plasate în siguranță pe același raft ca și filmele de familie.


Adolescenții, în ciuda faptului că se consideră adulți, încă adoră să se uite la desene animate. Pentru adolescenți, ei sunt deja mai îndrăzneți și nu la fel de inofensivi ca copiii. Ei sunt dominați de divertisment, glume pentru adulți și probleme ale adolescenților. Acestea sunt în principal desene animate străine în mai multe părți, cum ar fi „The Simpsons”, „Family Guy”, „Futurama”, etc.


Nu uitați de adulți. Da, desenează și pentru adulți, doar că seamănă oarecum cu adolescenții, dar mai nepoliticos, pot exista blesteme, nuanțe intime și se abordează problemele adulților (viață de familie, muncă, împrumuturi, criză de mijloc etc.).


Desenele animate sunt o formă de artă în care mâinile autorului sunt complet libere, deoarece puteți descrie absolut orice și, în același timp, puteți adăuga o poveste fermecătoare. Vă invităm să le urmăriți chiar acum și să vă distrați de minune.