Görüntü tanıma, sinir ağlarının kullanımının klasik bir örneğidir. Ağ öğrenme sürecinin nasıl gerçekleştiğini, hangi zorlukların ortaya çıktığını ve gelişimde neden biyolojinin kullanılması gerektiğini hatırlayalım. Detaylar kesimin altında.

Dmitry Soshnikov, Microsoft teknik evangelisti, Rusya Yapay Zeka Derneği üyesi, Moskova Havacılık Enstitüsü, Moskova Fizik ve Teknoloji Enstitüsü ve Ekonomi Yüksek Okulu'nda işlevsel ve mantıksal AI programlama öğretmeni ve kurslarımız , bize hikayede yardımcı olacak.

Bir sinir ağı kullanarak iki yığına ayrılması gereken çok sayıda resmimiz olduğunu hayal edin. Bu nasıl yapılabilir? Tabii ki, her şey nesnelerin kendilerine bağlıdır, ancak her zaman bazı özellikleri vurgulayabiliriz.

Ağı eğitmeden önce bile, giriş verileri hakkında mümkün olduğunca fazla bilgi bilmemiz ve manuel girişte dikkate almamız gerekir. Örneğin bir resimdeki çok renkli kedileri tespit etmek gibi bir görevimiz varsa cismin rengi değil şekli önemli olacaktır. Giderek renkten kurtulduğumuzda siyah ve beyaz, ağ çok daha hızlı ve daha başarılı öğrenecek: birkaç kat daha az bilgiyi tanımak zorunda kalacak.

Kediler ve kurbağalar gibi rastgele nesnelerin tanınması için renk açıkça önemlidir: kurbağa yeşildir, ancak kediler değildir. Renk kanallarından ayrılırsak her palet için ağ, görüntüdeki nesneleri yeniden tanımayı öğrenir çünkü bu renk kanalı diğer nöronlara beslenir.

Peki ya herhangi bir resimdeki bir hayvanı algılamak için bir sinir ağını öğreterek kediler ve ekmek hakkındaki ünlü memi yok etmek istiyorsak? Görünüşe göre renkler ve şekil yaklaşık olarak aynı. O zaman ne yapmalı?

Bankaları ve biyolojik vizyonu filtreleyin

Farklı filtreler kullanarak görüntünün farklı bölümlerini vurgulayabilirsiniz, bunlar daha sonra algılanır ve ayrı özellikler olarak incelenir. Örneğin, geleneksel makine öğrenimine veya sinir ağlarına girdi. Sinir ağı varsa Ek Bilgilerçalıştığı nesnelerin yapısı hakkında, işin kalitesi artar.

Yapay görme alanında, filtre bankaları geliştirilmiştir - nesnelerin ana özelliklerini vurgulamak için filtre setleri.

Benzer bir "mimari" biyolojide kullanılır. Bilim adamları, insan vizyonunun tüm görüntüyü bir bütün olarak belirlemediğine inanıyor, ancak vurgular özellikler, beynin bir nesneyi tanımladığı benzersiz özellikler. Buna göre, bir nesnenin hızlı ve doğru tanınması için en benzersiz özellikleri belirlemek mümkündür. Örneğin, kedilerin bıyıkları olabilir - görüntüde yelpaze şeklinde yatay çizgiler.

Ağırlık Paylaşımı

Böylece ağ, kedileri ayrı ayrı tanımayı öğrenmek zorunda kalmaz. farklı parçalar resimlerde, giriş sinyallerinin farklı parçaları arasında tanınmadan sorumlu ağırlıkları "paylaşırız".

Bu, özel bir ağ mimarisi gerektirir:

  • görüntülerle çalışmak için evrişimli ağlar
  • metin / dizilerle çalışmak için tekrarlayan ağlar
Görüntü tanımada etkin bir şekilde kullanılan, özel evrişim katmanları (Convolution Layers) kullanan sinir ağları.

Ana fikir şudur:

  • Görüntü üzerinde çalışan bir "filtre penceresi" oluşturmak için ağırlık paylaşımını kullanma
  • Görüntüye uygulanan filtre, tanıma için önemli olan parçaların vurgulanmasına yardımcı olur.
  • Geleneksel makine görüşünde filtreler elle tasarlanırken, sinir ağları öğrenme yoluyla en uygun filtreleri tasarlamamıza izin verir.
  • Görüntü filtreleme, doğal olarak sinir ağı hesaplamasıyla birleştirilebilir


Görüntü işleme için, sinyal işlemede olduğu gibi evrişim kullanılır.

Evrişim fonksiyonunu aşağıdaki parametrelerle tanımlayalım:

  • çekirdek - evrişim çekirdeği, ağırlık matrisi
  • ped - görüntünün kenarlarına kaç piksel ekleneceği
  • adım - filtre uygulama frekansı. Örneğin, adım=2 için görüntünün her ikinci pikselini dikey ve yatay olarak alacağız ve çözünürlüğü yarıya indireceğiz.
: def convolve(image, kernel, pad = 0, adım = 1): satırlar, sütunlar = image.shape output_rows = satırlar // adım output_columns = sütunlar // adım sonucu = np.zeros((output_rows, output_columns)) ise ped > 0: görüntü = np.pad(görüntü, ped, "sabit") kernel_size = kernel.size kernel_length = kernel.shape half_kernel = kernel_length // 2 kernel_flat = kernel.reshape(kernel_size, 1) offset = buildins.abs( aralıktaki r için half_kernel-pad) (kaydırma, satırlar - ofset, adım): aralıktaki c için (kaydırma, sütunlar - ofset, adım): rr = r - half_kernel + pad cc = c - half_kernel + pad patch = görüntü sonucu = np.dot(patch.reshape(1, kernel_size), kernel_flat) dönüş sonucu
In : def show_convolution(çekirdek, adım = 1): """Görüntüler etki verilen çekirdekle evrilme.""" 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, adım) ax = fig.add_subplot(gs[i]) pylab.imshow(image, interpolation="en yakın") ax.set_xticks() ax.set_yticks( ) ax = fig.add_subplot(gs) pylab.imshow(kernel, cmap="gray", interpolation="en yakın") ax.set_xticks() ax.set_yticks() balta = fig.add_subplot(gs) pylab.imshow(conv) , interpolation="en yakın") ax.set_xticks() ax.set_yticks() pylab.show()
İçinde: blur_kernel = np.array([, , , , ], dtype="float32") blur_kernel /= 273

Filtreler

Bulanıklık

Bulanıklaştırma filtresi, tümsekleri düzeltmenize ve nesnelerin genel şeklini vurgulamanıza olanak tanır.


İçinde: show_convolution(blur_kernel)

Dikey kenarlar

Görüntüdeki parlaklığın dikey geçişlerini öne çıkaran bir filtre oluşturabilirsiniz. Burada mavi, siyahtan beyaza geçişi gösterir, sarı - tam tersi.


İçinde: vertical_edge_kernel = np.array([, , , , ], dtype="float32") vertical_edge_kernel /= 166
İçinde: show_convolution(vertical_edge_kernel)

yatay kenarlar

Bir görüntüdeki yatay vuruşları vurgulamak için benzer bir filtre oluşturulabilir.


İçinde: yatay_bar_kernel = np.array([, [-2, -8, -13, -8, -2], , [-2, -8, -13, -8, -2], ], dtype=" float32") yatay_bar_kernel /= 132
İçinde: show_convolution(horizontal_bar_kernel)

kontur filtresi

Ayrıca görüntünün dış hatlarını vurgulayacak bir 9x9 filtre de oluşturabilirsiniz.


İçinde: blob_kernel = np.array([, , , , , , , , ], dtype="float32") blob_kernel /= np.sum(np.abs(blob_kernel))
İçinde: show_convolution(blob_kernel)
Klasik rakam tanıma örneği böyle çalışır: her rakamın kendine özgü geometrik özellikleri vardır (iki daire - sekiz rakamı, görüntünün ortasındaki bir eğik çizgi - bir vb.), buna göre sinir ağı ne tür bir nesne belirleyebilir. Her basamağı karakterize eden filtreler oluşturuyor, filtrelerin her birini görüntü üzerinde çalıştırıyor ve hatayı minimuma indiriyoruz.


Bir resimde kedi aramaya benzer bir yaklaşım uygularsak, dört ayaklının bir sinir ağını eğitmek için birçok işareti olduğu ve bunların hepsinin farklı olduğu çabucak anlaşılır hale gelecektir: kuyruklar, kulaklar, bıyıklar, burunlar, kürkler ve renkler. . Ve her kedinin diğeriyle ortak hiçbir yanı olamaz. Nesnenin yapısı hakkında az miktarda veriye sahip bir sinir ağı, bir kedinin yattığını ve diğerinin arka ayakları üzerinde durduğunu anlayamayacaktır.

Evrişimsel bir ağın temel fikri

  • Sinir ağında, filtrenin görüntüye uygulanmasını sağlayan bir evrişim katmanı oluşturuyoruz.
  • Geri yayılım algoritmasını kullanarak filtre ağırlıklarını eğitiyoruz
Örneğin, bir resmimiz var. i, 2 konvolüsyonel filtre wçıkışları ile Ö. Çıktı görüntüsünün öğeleri aşağıdaki gibi hesaplanacaktır:

Ağırlık çalışması

Algoritma:
  • Görüntüdeki tüm piksellere aynı ağırlıkta bir filtre uygulanır.
  • Bu durumda, filtre tüm görüntü üzerinde "çalışır".
  • Bu ağırlıkları (tüm pikseller için ortak) bir geri yayılım algoritması kullanarak eğitmek istiyoruz.
  • Bunu yapmak için, filtrenin uygulamasını tek bir matris çarpımına indirgememiz gerekir.
  • Tam bağlantılı bir katmandan farklı olarak, eğitim için daha az ağırlık ve daha fazla örnek olacaktır.
  • kurnaz - im2col

im2col

Her pikselin bir harfe karşılık geldiği x resmiyle başlayalım:

Program her zaman doğru çalışmıyor. Çıktı, dört gözlü, kulaksız, yıldız şeklinde uzatılmış ve tuval üzerine yayılmış canavarlardır. İlk pencerede bir absürtlük çizerek kendiniz bir canavar yaratabilirsiniz.


Programı kullanmak basittir. Solda çizim penceresi var. Altında üç düğme bulunur: iptal, temizleme ve rastgele çizim. Kareler arasında "işlem" düğmesi bulunur. Çizimi bir kediye çevirir.

Program kendi kendine öğrenen bir "sinir ağına" dayanmaktadır. Geliştiriciye göre, makine 20.000 kedi fotoğrafını işlemiştir. İçlerindeki kulak, yün, burun, göz, ağız gibi unsurları vurguladım. Onları tanımayı ve ana hatlarıyla ayırt etmeyi öğrendim.


Gözler korkutucu.

Kusursuz çalışır. Özellikle gözler işlendiğinde kötüdür. Resmin sınırlarının tanımı her zaman net değildir. Bu nedenle, ek gözler ortaya çıkar veya hiç görünmezler.

Komik çıkıyor. Hizmet kedilerle sınırlı değildir. Sitede bloklardan bir ev inşa edebilir, ayakkabı yapıştırabilir ve gelecek sezon için bir çanta modelleyebilirsiniz.

Yaz için moda çanta. Özel tasarım!

Daha yakın zamanlarda, geliştirici Christopher Hesse dünyaya beynini - projeyi açıkladı. Bir sinir ağının yardımıyla çizilmiş kediler “gerçek” kedilere dönüşür. Fikrin merkezinde, Google'ın TensorFlow adlı bir makine öğrenme sistemi var. Edges2cats iki "alan"a bölünmüştür. İlkinde, kullanıcı bir kedi (veya ona benzer bir şey) çizer ve ikincisinde sinir ağı, çizimi gerçek bir hayvan gibi göstermeye çalışır.

Basit eğlence, İnternet kullanıcılarının ilgisini çekti. Yeni evcil hayvanlarını toplu halde Twitter'da yayınlamaya başladılar. Bazı durumlarda, sinir ağının yarattığı “görüntü” sanki gerçek bir canlının fotoğrafı varmış gibi çok gerçekçi görünüyordu. Bazı kullanıcılar kedileri sevimli hale getirmeye çalıştı (hatta bazen başardılar), ancak çoğu durumda gerçek canavarlar doğdu.

Göz tanıma sisteminin her zaman doğru çalışmadığına dikkat edin, bu nedenle bazı resimlerde hayvanların gözleri prensipte yoktur, diğerlerinde ise gözbebeği burnun olması gereken yerde olabilir.



Çocuklar en çok neyi sever? Tabii ki çizgi filmler. Yerli ve yabancı çeşitli çizgi filmleri bu bölümde topladık. Büyük seçim arasında, özellikle çocuğunuza aşık olacak biri mutlaka vardır. Yapacak çok şeyiniz varsa veya sadece rahatlamak istiyorsanız ve çocuk sürekli dikkat istiyorsa ve istemiyorsa “kirlenmeye” başlarsa, karikatürler kurtarmaya gelecektir. Bir çocuk için bir çizgi film açarak, en az yarım saat, hatta iki veya üç saat dikkatini dağıtabilirsiniz.


Animasyon olarak bu tür sanatlar uzun zamandır var. Bu süre zarfında kalite arttı, bu sevinemeyecek ama sevinemeyecek. Çizgi filmler, herhangi bir neslin çocuklarına delice aşıktır, herkes çocukken çizgi filmlere bayılırdı. Birçok yetişkin aynı anda televizyonda beklemek ve gösterilenleri izlemek zorunda kaldı. Ebeveynleri kaset veya disk satın alırsa, bir zamanlar şanslıydı. Ve yeni nesil zaten istediklerini ve ebeveynlerinin cüzdanından harcamadan izleyebilir, çünkü hemen hemen her evde zaten bir bilgisayar ve İnternet vardır, bu sayede her zevke ve renk için büyük bir karikatür kart dosyası açılır.


Küçükler için, sadeliği, nezaketi ve hoş bir resmi ile ünlü Sovyet klasiği mükemmeldir. Örneğin, "Crocodile Gena", "Prostokvashino", "Pekala, bir dakika!", "Bremen Mızıkacıları", "Uçan Gemi", "Winnie the Pooh", "Kid and Carlson" ve diğerleri. Hatta çocuğunuzla oturabilir ve çocukluğunuzu anabilirsiniz. Ayrıca küçük çocuklar için, yalnızca daha parlak bir resimde değil, içerikte de farklılık gösteren birçok modern eğitici çizgi film vardır.


Anaokulunu bitiren veya anaokulunda okuyan çocuklar için ilkokul, eğlenceli çizgi filmler uygundur, burada kahramanlar birini ve hatta tüm dünyayı kurtarır. Bunlar, çizgi romanlardan süper kahramanlar, büyücüler veya periler hakkında ve ayrıca kahramanlar hakkında yerli karikatürler.


Zaten yavaş ve emin adımlarla ergenliğe doğru ilerleyen çocuklar, özellikle konusu farklı olan çizgi filmlere ilgi duymaya başlayabilirler. Bu tür karikatürlerde rahat bir biçimde, çocuk ciddi şeyler düşünmeye ve çok fazla duygu yaşamaya zorlanır. Tüm aile tarafından izlenmeye uygundurlar, çünkü iyi düşünülmüş arsa nedeniyle yetişkinler için daha az ilginç olmayacaklardır. Bu tür çizgi filmler, aile filmleriyle aynı rafa güvenle yerleştirilebilir.


Gençler kendilerini yetişkin olarak görmelerine rağmen hala çizgi film izlemeyi seviyorlar. Gençler için zaten daha cüretkarlar ve çocuklar kadar zararsız değiller. Eğlence, yetişkin şakaları, genç problemler hakimdir. Bunlar çoğunlukla The Simsons, Family Guy, Futurama, vb. gibi yabancı dizi çizgi filmleridir.


Yetişkinler hakkında unutma. Evet, yetişkinler için de çizim yapıyorlar, sadece gençlere biraz benziyorlar, ancak daha kabalar, küfürlü sözler, samimi imalar olabilir ve yetişkin sorunları etkilenir (aile hayatı, iş, krediler, orta yaş krizi vb.). ).


Karikatürler, yazarın ellerinin tamamen çözüldüğü bir sanat biçimidir, çünkü kesinlikle her şeyi tasvir edebilir ve aynı zamanda büyüleyici bir hikaye ekleyebilirsiniz. Sizleri hemen onları izlemeye ve büyük keyif almaya davet ediyoruz.