Sinir ağı resimler çizer. Ostagram: fotoğrafları ve süslemeleri sanatsal başyapıtlarda birleştiren sinir ağı tabanlı bir hizmet

Ağustos 2015'ten bu yana, Tübingen Üniversitesi'nden Alman araştırmacılar, stil aktarımı olasılığı konusunda kendi fikirlerini sundular. ünlü sanatçılar diğer fotoğraflarda bu fırsattan para kazanan hizmetler görünmeye başladı. Batı pazarında ve Rusya pazarında piyasaya sürüldü - tam kopyası.

yer imlerine

Ostagram, Aralık ayında piyasaya sürülmesine rağmen, Nisan ortasında sosyal ağlarda hızla popülerlik kazanmaya başladı. Aynı zamanda 19 Nisan itibariyle VKontakte'deki projede binden az kişi vardı.

Hizmeti kullanmak için iki resim hazırlamanız gerekir: işlenmesi gereken bir fotoğraf ve orijinal resmin üzerine bindirilecek stil örneğini içeren bir resim.

Hizmetin ücretsiz bir sürümü vardır: görüntünün en uzun kenarı boyunca minimum 600 piksele kadar çözünürlükte bir görüntü oluşturur. Kullanıcı, filtreyi fotoğrafa uygulama yinelemelerinden yalnızca birinin sonucunu alır.

İki ücretli sürümü vardır: Premium, en uzun kenar boyunca 700 piksele kadar bir görüntü üretir ve görüntüye 600 yinelemeli sinir ağı işleme uygular (ne kadar çok yineleme olursa, işleme o kadar ilginç ve yoğun olur). Böyle bir resim 50 rubleye mal olacak.

HD versiyonunda yineleme sayısını ayarlayabilirsiniz: 100, 50 rubleye ve 1000 - 250 rubleye mal olacak. Bu durumda görüntünün en uzun kenarı 1200 piksele kadar çözünürlüğe sahip olacak ve tuval üzerine baskı yapmak için kullanılabilir: Ostagram bu hizmeti 1800 ruble'den teslimatla sunuyor.

Şubat ayında Ostagram temsilcileri, "gelişmiş kapitalizme sahip ülkelerden" kullanıcılardan gelen görüntü işleme taleplerini kabul etmeyecek, ancak daha sonra dünyanın her yerinden VKontakte kullanıcıları için fotoğraf işlemeye erişim sağlayacak. GitHub'da yayınlanan Ostagram koduna bakılırsa, Nizhny Novgorod'da yaşayan 30 yaşındaki Sergey Morugin tarafından geliştirildi.

TJ temasa geçti Ticari yönetmen Andrey tarafından tanıtılan proje. Ona göre Ostagram, Instapainting'den önce ortaya çıktı, ancak Vipart adlı benzer bir projeden ilham aldı.

Ostagram, NNSTU'dan bir grup öğrenci tarafından geliştirilmiştir. Alekseeva: 2015'in sonunda dar bir arkadaş grubu üzerinde yapılan ilk testlerden sonra projeyi halka açmaya karar verdiler. Başlangıçta görüntü işleme tamamen ücretsizdi ve basılı tablo satarak para kazanmak planlanıyordu. Andrey'e göre baskının en büyük sorun olduğu ortaya çıktı: bir sinir ağı tarafından işlenen insanların fotoğrafları nadiren insan gözüne hoş geliyor ve son müşterinin sonucu tuvale uygulamadan önce uzun süre ayarlaması gerekiyor, bu da çok fazla makine kaynağı gerektirir.

Ostagram'ın yaratıcıları, görüntü işleme için Amazon bulut sunucularını kullanmak istediler, ancak kullanıcı akınından sonra, minimum yatırım getirisiyle bunların maliyetinin günde bin doları aşacağı anlaşıldı. Aynı zamanda projenin yatırımcısı olan Andrey, Nizhny Novgorod'da sunucu tesisleri kiraladı.

Projenin izleyici kitlesi günde yaklaşık bin kişi, ancak bazı günlerde projeyi yerli medyadan daha önce fark etmiş olan yabancı medyadan geçişler nedeniyle (Ostagram Avrupalı ​​DJ'lerle bile işbirliği yapmayı başardı) bazı günlerde 40 bin kişiye ulaştı. Geceleri trafiğin düşük olduğu zamanlarda görüntü işleme 5 dakika, gündüzleri ise bir saate kadar sürebilir.

Daha önceki yabancı kullanıcıların görüntü işlemeye erişimi kasıtlı olarak kısıtlandıysa (bunun Rusya'dan para kazanmaya başladığı düşünülüyordu), şimdi Ostagram zaten daha çok Batılı bir izleyici kitlesine güveniyor.

Bugüne kadar, geri ödeme beklentileri şartlı. Her kullanıcı işleme için 10 ruble ödediyse, belki de karşılığını verirdi. […]

Ülkemizde para kazanmak çok zor: İnsanlarımız bir hafta beklemeye hazır ama bunun için bir kuruş ödemeyecekler. Avrupalılar buna daha elverişli - hızlandırma, kaliteyi artırma açısından - bu nedenle oryantasyon bu pazara gidiyor.

Andrey, Instagram temsilcisi

Andrey'e göre, Instagram ekibi üzerinde çalışıyor Yeni sürüm sosyalliğe güçlü bir şekilde odaklanan bir site: "Tanınmış bir hizmet gibi görünecek, ama ne yapmalı." Facebook'un Rusya'daki temsilcileri projeyle zaten ilgilendiler, ancak anlaşma henüz satış müzakerelerine gelmedi.

Servis iş örnekleri

Ostagram web sitesindeki beslemede, hangi görüntü kombinasyonlarının son çekimlerle sonuçlandığını da görebilirsiniz: genellikle bu, sonucun kendisinden bile daha ilginçtir. Aynı zamanda, filtreler - işleme için bir efekt olarak kullanılan resimler - daha sonra kullanılmak üzere kaydedilebilir.

Selamlar Habr! Elbette, çeşitli fotoğraflar için stil oluşturma temasının fark etmişsinizdir. sanatsal stiller bu internetlerinizde aktif olarak tartışılmaktadır. Tüm bu popüler makaleleri okurken, bu uygulamaların altında bir sihir olduğunu ve sinir ağının gerçekten hayal kurduğunu ve görüntüyü sıfırdan yeniden çizdiğini düşünebilirsiniz. Öyle oldu ki ekibimiz benzer bir görevle karşı karşıya kaldı: dahili bir kurumsal hackathon'un parçası olarak bir video stili yaptık çünkü. fotoğraflar için zaten bir uygulama vardı. Bu gönderide, ağın görüntüleri nasıl "yeniden çizdiğine" ve bunu mümkün kılan makalelere göz atacağız. Bu materyali okumadan önce son gönderiyi ve genel olarak evrişimli sinir ağlarının temellerini öğrenmenizi tavsiye ederim. Bazı formüller, bazı kodlar (Theano ve Lasagne'den örnekler vereceğim) ve bir sürü resim bulacaksınız. Bu gönderi yerleşiktir kronolojik sıralama makalelerin görünümü ve buna bağlı olarak fikirlerin kendileri. Bazen onu son deneyimlerimizle seyrelteceğim. İşte dikkat çekmek için cehennemden gelen bir çocuk.


Evrişimli Ağları Görselleştirme ve Anlama (28 Kasım 2013)

Her şeyden önce, yazarların bir sinir ağının bir kara kutu değil, tamamen yorumlanabilir bir şey olduğunu gösterebildikleri makaleden bahsetmeye değer (bu arada, bugün bu sadece bilgisayar için evrişimli ağlar hakkında söylenemez. görüş). Yazarlar, gizli katman nöronlarının aktivasyonlarını nasıl yorumlayacaklarını öğrenmeye karar verdiler, bunun için birkaç yıl önce önerilen dekonvolüsyonel sinir ağını (deconvnet) kullandılar (bu arada, bu yayının yazarları olan aynı Zeiler ve Fergus tarafından) Peki). Dekonvolüsyonel bir ağ aslında ters sırada uygulanan evrişimler ve havuzlamalarla aynı ağdır. Deconvnet üzerindeki orijinal çalışma, görüntüleri oluşturmak için ağı denetimsiz bir öğrenme modunda kullandı. Bu sefer, yazarlar bunu basitçe ağ üzerinden orijinal görüntüye ileri geçişten sonra elde edilen özelliklerden geri geçiş için kullandılar. Sonuç, nöronlar üzerinde bu aktivasyona neden olan bir sinyal olarak yorumlanabilecek bir görüntüdür. Doğal olarak şu soru ortaya çıkıyor: evrişim ve doğrusal olmama durumundan geriye doğru geçiş nasıl yapılır? Ve daha da fazlası, maksimum havuzlama yoluyla, bu kesinlikle tersine çevrilmiş bir işlem değildir. Üç bileşene de bakalım.

Ters ReLu

Evrişimli ağlarda, aktivasyon fonksiyonu sıklıkla kullanılır. ReLu(x) = maks(0, x), bu da katmandaki tüm aktivasyonları negatif olmayan hale getirir. Buna göre, doğrusal olmayandan geri dönerken, negatif olmayan sonuçlar da elde etmek gerekir. Bunun için yazarlar aynı ReLu'yu kullanmayı teklif ediyorlar. Theano mimarisi açısından, işlemin gradyan işlevini geçersiz kılmak gerekir (sonsuz değerli defter lazanya tariflerindedir, oradan ModifiedBackprop sınıfının ne olduğuna dair ayrıntıları toplayacaksınız).

Sınıf ZeilerBackprop(ModifiedBackprop): def grad(self, inputs, out_grads): (inp,) = inputs (grd,) = out_grads #return (grd * (grd > 0).astype(inp.dtype),) # açıkça düzelt return (self.nonlinearity(grd),) # verilen lineer olmayanı kullan

Ters Evrişim

Burada biraz daha karmaşık, ancak her şey mantıklı: aynı evrişim çekirdeğinin aktarılmış sürümünü uygulamak yeterli, ancak çıkışlara ileri geçişte kullanılan önceki katman yerine ters ReLu'dan. Ama korkarım ki kelimelerle o kadar açık değil, hadi bu prosedürün görselleştirilmesine bakalım (daha fazla kıvrım görselleştirmesi bulacaksınız).


Adım=1 olduğunda evrişim

Adım=1 olduğunda evrişim ters versiyon

adım = 2 olduğunda evrişim

adım = 2 olduğunda evrişim ters versiyon

Ters Havuzlama

Bu işlem (öncekilerden farklı olarak) genellikle tersine çevrilemez. Ama yine de ters geçiş sırasında bir şekilde maksimumdan geçmek isteriz. Bunu yapmak için yazarlar, doğrudan geçiş sırasında maksimumun nerede olduğunu gösteren bir harita kullanmayı önermektedir (maksimum konum anahtarları). Ters geçiş sırasında, giriş sinyali, orijinal sinyalin yapısını yaklaşık olarak koruyacak şekilde havuzdan çıkarmaya dönüştürülür, görmek burada anlatmaktan gerçekten daha kolaydır.



Sonuç

Görselleştirme algoritması son derece basittir:

  1. Düz bir geçiş yapın.
  2. İlgilendiğimiz katmanı seçin.
  3. Bir veya daha fazla nöronun aktivasyonunu düzeltin ve gerisini sıfırlayın.
  4. Bir çıkarım yapın.

Aşağıdaki görüntüdeki her gri kare, bir filtrenin görselleştirilmesine (evrişim için uygulanan) veya tek bir nöronun ağırlıklarına karşılık gelir ve her biri renkli resim karşılık gelen nöronu aktive eden orijinal görüntünün o kısmıdır. Anlaşılır olması için, bir katmandaki nöronlar, tematik gruplar. Genel olarak, sinir ağının Hubel ve Weisel'in ödül aldıkları görsel sistemin yapısı üzerine yaptıkları çalışmalarda tam olarak ne hakkında yazdıklarını öğrendiği aniden ortaya çıktı. Nobel Ödülü 1981'de Bu makale sayesinde, evrişimli bir sinir ağının her katmanda ne öğrendiğinin görsel bir temsilini elde ettik. Oluşturulan görüntünün içeriğini daha sonra manipüle etmeye izin verecek olan bu bilgidir, ancak bu hala çok uzaktadır, önümüzdeki birkaç yıl sinir ağlarının "trepanasyonu" yöntemlerini geliştirmeye gitti. Buna ek olarak, makalenin yazarları, elde etmek için bir evrişimli sinir ağı mimarisinin en iyi nasıl inşa edileceğini analiz etmenin bir yolunu önerdiler. en iyi sonuçlar(ancak ImageNet 2013'ü kazanamadılar, ancak zirveye yerleştiler; güncelleme: Kazandıkları ortaya çıktı, Clarifai onlar).


Özellik görselleştirme


İşte deconvnet kullanarak aktivasyonların görselleştirilmesine bir örnek, bugün bu sonuç zaten öyle görünüyor, ancak o zaman bir atılımdı.


Deconvnet kullanan Belirginlik Haritaları

Derin İç Evrişimli Ağlar: Görüntü Sınıflandırma Modellerini ve Belirginlik Haritalarını Görselleştirme (19 Nisan 2014)

Bu makale, evrişimli bir sinir ağında bulunan bilgi görselleştirme yöntemlerinin incelenmesine ayrılmıştır. Yazarlar, gradyan inişine dayalı iki görselleştirme yöntemi önermektedir.

Sınıf Modeli Görselleştirme

Öyleyse, bir sınıflandırma problemini belirli sayıda sınıfa çözmek için eğitilmiş bir sinir ağımız olduğunu hayal edin. Sınıfa karşılık gelen çıkış nöronunun aktivasyon değeri olarak belirtin C. Ardından, aşağıdaki optimizasyon problemi bize tam olarak seçilen sınıfı maksimize eden görüntüyü verir:



Bu görevi Theano kullanarak çözmek kolaydır. Genellikle çerçeveden model parametrelerinin türevini almasını isteriz, ancak bu sefer parametrelerin sabit olduğunu ve türevin giriş görüntüsünden alındığını varsayıyoruz. Aşağıdaki işlev, çıktı katmanının maksimum değerini seçer ve girdi görüntüsüne göre türevi hesaplayan bir işlev döndürür.


def compile_saliency_function(net): """ Belirginlik haritalarını ve belirli bir mini toplu giriş görüntüsü için tahmin edilen sınıfları hesaplamak için bir işlev derler. """ inp = net["input"].input_var outp = lasagne.layers.get_output(net ["fc8"], deterministic=True) max_outp = T.max(outp, eksen=1) belirginlik = theano.grad(max_outp.sum(), wrt=inp) max_class = T.argmax(outp, eksen=1) dönüş theano.function(, )

Muhtemelen internette köpeklerin garip resimlerini gördünüz - DeepDream. Orijinal makalede, yazarlar sonraki süreç seçilen sınıfı en üst düzeye çıkaran görüntüler oluşturmak için:

  1. İlk görüntüyü sıfırlarla başlat.
  2. Bu görüntüden türevin değerini hesaplayın.
  3. Türevden elde edilen görüntüyü ekleyerek görüntüyü değiştirin.
  4. 2. adıma dönün veya döngüden çıkın.

Ortaya çıkan görüntüler:




Peki ya ilk görüntüyü gerçek bir fotoğrafla başlatır ve aynı işlemi başlatırsanız? Ama her yinelemede rastgele bir sınıf seçeceğiz, gerisini sıfıra alıp türevin değerini hesaplayacağız, o zaman böyle derin bir rüya görüyoruz.


Dikkat 60mb


Neden bu kadar çok köpek yüzü ve gözü var? Çok basit: Görüntü netinde 1000 sınıftan yaklaşık 200 köpek var, onların gözleri var. Ve ayrıca sadece insanların olduğu birçok sınıf.

Sınıf Belirginliği Çıkarma

Bu işlem gerçek bir fotoğraf ile başlatılırsa, ilk iterasyondan sonra durdurulur ve türevin değeri çizilirse, böyle bir görüntü elde ederiz, orijinaline hangisini eklersek, seçilen sınıfın aktivasyon değerini artırırız.


Türev Kullanarak Belirginlik Haritaları


Yine, sonuç "so-so". Bunun not edilmesi önemlidir yeni yol aktivasyonların görselleştirilmesi (hiçbir şey, aktivasyonların değerlerini son katmanda değil, genel olarak ağın herhangi bir katmanında sabitlememizi ve giriş görüntüsüne göre türevi almamızı engellemez). Bir sonraki makale, önceki iki yaklaşımı birleştirecek ve bize daha sonra açıklanacak olan stil aktarımını nasıl kuracağımıza dair bir araç verecek.

Sadelik İçin Çabalamak: Tüm Evrişimli Ağ (13 Nis 2015)

Bu makale genellikle görselleştirme ile ilgili değil, havuzlamayı büyük bir adımla bir evrişimle değiştirmenin kalite kaybına yol açmadığı gerçeğiyle ilgilidir. Ancak araştırmalarının bir yan ürünü olarak yazarlar, modelin öğrendiklerini daha doğru bir şekilde analiz etmek için uyguladıkları özellikleri görselleştirmenin yeni bir yolunu önerdiler. Fikirleri şu: Eğer basitçe türevi alırsak, giriş görüntüsünde sıfırdan küçük olan özellikler ters evrişim sırasında geri gitmez (giriş görüntüsü için ReLu kullanılarak). Bu da yayılan arka görüntüde negatif değerlerin görünmesine yol açar. Öte yandan, dekonvnet kullanırsanız, ReLu'nun türevinden başka bir ReLu alınır - bu, negatif değerleri geri atlamamanızı sağlar, ancak gördüğünüz gibi sonuç "so-so" olur. Peki ya bu iki yöntemi birleştirirsek?




class GuidedBackprop(ModifiedBackprop): def grad(self, inputs, out_grads): (inp,) = inputs (grd,) = out_grads dtype = inp.dtype return (grd * (inp > 0).astype(dtype) * (grd > 0).astype(dtype),)

Ardından tamamen temiz ve yorumlanabilir bir görüntü elde edersiniz.


Rehberli Geri Yayılım Kullanan Belirginlik Haritaları

Daha derine git

Şimdi düşünelim, bu bize ne veriyor? Size her evrişimli katmanın, girdi olarak üç boyutlu bir tensör alan ve ayrıca çıktı olarak, belki farklı bir boyutta üç boyutlu bir tensör üreten bir fonksiyon olduğunu hatırlatmama izin verin. D X w X H; D derinlik, katmandaki nöronların sayısıdır, her biri boyuta sahip bir özellik haritası oluşturur. w sekizinci x H sekiz.


VGG-19 ağında aşağıdaki deneyi deneyelim:



dönş1_2

Evet, neredeyse hiçbir şey görmüyorsunuz çünkü. alıcı alan çok küçük, bu sırasıyla ikinci evrişim 3x3, toplam alan 5x5. Ancak yakınlaştırdığımızda, özelliğin sadece bir gradyan detektörü olduğunu görüyoruz.




dönüşüm3_3


dönş4_3


dönüşüm5_3


havuz5


Ve şimdi, plaka üzerindeki maksimum yerine, giriş görüntüsü üzerindeki plakanın tüm elemanlarının toplamının değerinin türevini alacağımızı hayal edin. O zaman belli ki nöron grubunun alıcı alanı tüm girdi görüntüsünü kaplayacaktır. İlk katmanlar için, bunların renk detektörleri, ardından degradeler, sonra sınırlar ve daha karmaşık desenler olduğunu çıkardığımız parlak haritalar göreceğiz. Katman ne kadar derin olursa, daha sönük görüntü elde edilir. Bu, daha derin katmanların algıladıkları daha karmaşık bir modele sahip olması ve karmaşık bir modelin basit bir modelden daha az sıklıkla görünmesi ve bu nedenle aktivasyon haritasının karartılması gerçeğiyle açıklanır. İlk yol, karmaşık desenlere sahip katmanları anlamak için uygundur ve ikincisi, basit olanlar için uygundur.


dönş1_1


dönş2_2


dönş4_3


Birkaç resim için daha eksiksiz bir aktivasyon veritabanı indirebilirsiniz ve .

Sanatsal Tarzın Sinir Algoritması (2 Eylül 2015)

Böylece, sinir ağının ilk başarılı trepanasyonundan bu yana birkaç yıl geçti. Biz (insanlık anlamında) sinir ağının ne öğrendiğini anlamamıza ve öğrenmesini gerçekten istemediğimiz şeyleri ortadan kaldırmamıza izin veren güçlü bir araca sahibiz. Bu makalenin yazarları, bir görüntünün bazı hedef görüntülere ve hatta muhtemelen birden fazlasına benzer bir aktivasyon haritası oluşturmasına izin veren bir yöntem geliştiriyorlar - bu, stilin temelidir. Girdiye beyaz gürültü besleriz ve derin rüyadakine benzer yinelemeli bir süreçte bu görüntüyü, özellik haritalarının hedef görüntüye benzer olduğu bir görüntüye getiririz.

içerik kaybı

Daha önce bahsedildiği gibi, sinir ağının her katmanı, bir boyutta üç boyutlu bir tensör üretir.




Çıktıyı gösterelim Ben olarak girişten inci katman. Ardından, giriş görüntüsü arasındaki artıkların ağırlıklı toplamını en aza indirirsek ve arzuladığımız bazı görüntüler C, o zaman tam olarak ihtiyacınız olanı alırsınız. Belki.



Bu makaleyi denemek için, hesaplamaların yapıldığı (hem GPU'da hem de CPU'da) bu büyülü dizüstü bilgisayarı kullanabilirsiniz. GPU, sinir ağının özelliklerini ve maliyet fonksiyonunun değerini hesaplamak için kullanılır. Theano, amaç fonksiyonunun gradyanını hesaplayabilen bir fonksiyon üretir. eval_grad giriş resmine göre X. Bu daha sonra lbfgs'ye beslenir ve yinelemeli süreç başlar.


# Noise image ile başlatıııt_image.set_value(floatX(np.random.uniform(-128, 128, (1, 3, IMAGE_W, IMAGE_W)))) x0 = oluşturulmuş_image.get_value().astype("float64") xs = xs.append(x0) # Optimize et, sonucu aralık(8) içinde periyodik olarak kaydet: print(i) scipy.optimize.fmin_l_bfgs_b(eval_loss, x0.flatten(), fprime=eval_grad, maxfun=40) x0 = oluşturulmuş_image.get_value().astype("float64") xs.append(x0)

Böyle bir işlevin optimizasyonunu çalıştırırsak, hızla hedef olana benzer bir görüntü elde ederiz. Artık bir içerik görüntüsü gibi görünen beyaz gürültüden görüntüleri yeniden oluşturabiliriz.


İçerik Kaybı: conv4_2



Optimizasyon süreci




Ortaya çıkan görüntünün iki özelliğini fark etmek kolaydır:

  • kayıp renkler - bu, özel örnek sadece conv4_2 katmanı kullanıldı (veya başka bir deyişle, w ağırlığı onun için sıfır ve diğer katmanlar için sıfırdı); hatırladığınız gibi, renkler ve gradyan geçişleri hakkında bilgi içeren ilk katmanlardır ve sonraki katmanlar daha büyük ayrıntılar hakkında bilgi içerir, gözlemlediğimiz şey budur - renkler kaybolur, ancak içerik kaybolmaz;
  • bazı evler "hadi gidelim", yani düz çizgiler hafif kavislidir - bunun nedeni, katman ne kadar derinse, içerdiği özelliğin uzamsal konumu hakkında o kadar az bilgi olmasıdır (kıvrımların ve havuzlamaların uygulanmasının sonucu).

Erken katmanlar eklemek, durumu renklerle hemen düzeltir.


İçerik Kaybı: conv1_1, conv2_1, conv4_2


Umarız şimdiye kadar beyaz gürültü görüntüsüne neyin yeniden çizileceğini kontrol ettiğiniz hissine kapılırsınız.

stil kaybı

Ve şimdi en ilginç olana geldik: stili nasıl aktarabiliriz? stil nedir? Açıkçası, stil, Content Loss'ta optimize ettiğimiz şey değil, çünkü özelliklerin uzamsal konumları hakkında birçok bilgi içeriyor, bu nedenle yapılacak ilk şey, bu bilgiyi her katmanda alınan görünümlerden bir şekilde kaldırmak.


Yazar aşağıdaki yöntemi önermektedir. Bir katmanın çıkışındaki tensörü alalım, uzaysal koordinatlarda genişletelim ve plakalar arasındaki kovaryans matrisini hesaplayalım. Bu dönüşümü şu şekilde gösterelim G. Gerçekten ne yaptık? Plaka içindeki özelliklerin çiftler halinde ne sıklıkta ortaya çıktığını saydığımız veya başka bir deyişle plakalardaki özelliklerin dağılımını çok değişkenli bir normal dağılıma yaklaştırdığımız söylenebilir.




Daha sonra Style Loss aşağıdaki gibi girilir, burada S tarzı olan bir görüntü:



Vincent için deneyelim mi? Prensip olarak, beklenen bir şey elde ediyoruz - Van Gogh tarzında gürültü, özelliklerin uzamsal düzenlemesi hakkındaki bilgiler tamamen kayboluyor.


Vincent




Bir stil görseli yerine bir fotoğraf koysak ne olur? Zaten tanıdık özellikler, tanıdık renkler elde edersiniz, ancak uzamsal konum tamamen kaybolur.


Stil kaybı olan fotoğraf


Neden başka bir şey değil de kovaryans matrisini hesapladığımızı merak etmişsinizdir herhalde? Ne de olsa, uzamsal koordinatların kaybolması için özellikleri bir araya getirmenin birçok yolu vardır. Bu gerçekten ucu açık bir soru ve çok basit bir şey alırsanız sonuç dramatik bir şekilde değişmeyecektir. Bunu kontrol edelim, kovaryans matrisini değil, sadece her plakanın ortalama değerini hesaplayacağız.




basit stil kaybı

Kombine kayıp

Doğal olarak, bu iki maliyet fonksiyonunu karıştırmak arzusu var. Ardından, beyaz gürültüden öyle bir görüntü oluşturacağız ki, içerik görüntüsündeki (uzaysal koordinatlara bağlanan) özellikleri koruyacak ve ayrıca uzamsal koordinatlara bağlı olmayan "stil" özellikleri olacak, yani. umarım içerik resmi ayrıntılarını olduğu gibi tutar, ancak doğru stille yeniden çizeriz.



Aslında, bir düzenleyici de var, ancak basitlik için onu atlayacağız. Geriye şu soruyu cevaplamak kalıyor: optimizasyonda hangi katmanlar (ağırlıklar) kullanılacak? Ve korkarım ki bu soruya bir cevabım yok ve makalenin yazarları da yok. Aşağıdakileri kullanmak için bir önerileri var, ancak bu, başka bir kombinasyonun daha kötü çalışacağı anlamına gelmez, arama alanı çok büyük. Modeli anlamaktan çıkan tek kural, komşu katmanları almanın mantıklı olmadığıdır, çünkü işaretleri birbirinden çok farklı olmayacağından, stile her conv*_1 grubundan bir katman eklenir.


# Kayıp fonksiyon kayıplarını tanımla = # içerik kaybı kayıpları.append(0.001 * içerik_kaybı(foto_features, gen_features, "conv4_2")) # stil kaybı kayıpları.append(0.2e6 * stil_kaybı(art_features, gen_features, "conv1_1")) kayıpları.append (0.2e6 * stil_kaybı(art_features, gen_features, "conv2_1")) lost.append(0.2e6 * style_loss(art_features, gen_features, "conv3_1")) lost.append(0.2e6 * style_loss(art_features, gen_features, "conv4_1") ) lost.append(0.2e6 * style_loss(art_features, gen_features, "conv5_1")) # total varyasyon ceza lost.append(0.1e-7 * total_variation_loss(generated_image)) total_loss = sum(losss)

Nihai model aşağıdaki biçimde sunulabilir.




Ve işte Van Gogh'lu evlerin sonucu.



Süreci kontrol etmeye çalışmak

Önceki bölümleri hatırlayalım, şu anki makaleden iki yıl kadar önce, diğer bilim adamları sinir ağının gerçekte ne öğrendiğini araştırıyorlardı. Tüm bu makalelerle donanmış olarak, çeşitli stillerde özellik görselleştirmeleri oluşturabilirsiniz. çeşitli görüntüler, farklı çözünürlük ve boyutlarda ve hangi katmanları hangi ağırlıkla alacağınızı anlamaya çalışın. Ancak katmanları yeniden ağırlıklandırmak bile, olup bitenler üzerinde tam kontrol sağlamıyor. Buradaki sorun daha kavramsal: yanlış işlevi optimize ediyoruz! Nasıl yani, soruyorsun? Yanıt basit: Bu işlev kalıntıyı en aza indirir... Pekala, anladınız. Ama asıl istediğimiz görüntüyü beğenmek. İçerik ve stil kaybı işlevlerinin dışbükey bileşimi, aklımızın neyi güzel bulduğunun bir ölçüsü değildir. Şekillendirmeye çok uzun süre devam edilirse, maliyet fonksiyonunun doğal olarak daha da düştüğü, ancak sonucun estetik güzelliğinin keskin bir şekilde düştüğü gözlemlendi.




Tamam, bir sorun daha var. Diyelim ki ihtiyacımız olan özellikleri çıkaran bir katman bulduk. Bazı dokuların üçgen olduğunu varsayalım. Ancak bu katman, ortaya çıkan görüntüde gerçekten görmek istemediğimiz daireler gibi diğer birçok özelliği hala içerir. Genel olarak konuşursak, bir milyon Çinliyi işe alabilseydik, bir stil görüntüsünün tüm özelliklerini görselleştirebilir ve kapsamlı bir arama yaparak ihtiyacımız olanları işaretleyebilir ve bunları yalnızca maliyet işlevine dahil edebilirdik. Ama bariz sebeplerden dolayı, o kadar kolay değil. Ancak, sonuçta görünmesini istemediğimiz tüm daireleri stil sayfasından kaldırırsak ne olur? O zaman dairelere yanıt veren karşılık gelen nöronların aktivasyonu basitçe çalışmayacaktır. Ve tabii ki, sonuçta ortaya çıkan resimde bu görünmeyecek. Çiçeklerde de durum aynıdır. Birçok renkle parlak bir görüntü sunun. Renklerin dağılımı alan boyunca çok lekeli olacak, ortaya çıkan görüntünün dağılımı aynı olacak, ancak optimizasyon işlemi sırasında orijinaldeki tepe noktaları muhtemelen kaybolacaktır. Bit derinliğinde basit bir azalma olduğu ortaya çıktı Renk paleti bu sorunu çözer Çoğu rengin dağılım yoğunluğu sıfıra yakın olacak ve birkaç alanda büyük tepe noktaları olacaktır. Böylece Photoshop'ta orijinali manipüle ederek, görüntüden çıkarılan özellikleri manipüle ediyoruz. Bir kişinin isteklerini görsel olarak ifade etmesi, matematik dilinde formüle etmeye çalışmaktan daha kolaydır. Hoşçakal. Sonuç olarak, Photoshop ve özellikleri görselleştirmek için betiklerle donanmış tasarımcılar ve yöneticiler, matematikçilerin ve programcıların yaptıklarından üç kat daha hızlı sonuca ulaştılar.


Özelliklerin rengini ve boyutunu manipüle etmeye bir örnek


Ve hemen basit bir görüntüyü stil olarak alabilirsiniz.



sonuçlar








Ve işte bir vidosik, ama sadece doğru doku ile

Doku Ağları: Dokuların ve Stilize Edilmiş Görüntülerin İleri Beslemeli Sentezi (10 Mart 2016)

Görünüşe göre bu, bir nüans olmasa da durdurulabilir. Yukarıdaki şekillendirme algoritması çok uzun süre çalışır. CPU'da lbfgs'nin çalıştırıldığı bir uygulama alırsak, işlem yaklaşık beş dakika sürer. Optimizasyonun GPU'ya gitmesi için yeniden yazarsanız, işlem 10-15 saniye sürer. Bu iyi değil. Belki de bunun ve bir sonraki makalenin yazarları aynı şeyi düşündüler. Her iki yayın da bir önceki makaleden neredeyse bir yıl sonra, 17 gün arayla bağımsız olarak çıktı. Mevcut makalenin yazarları, önceki makalenin yazarları gibi, doku oluşturma ile uğraştılar (Stil Kaybını sıfırlarsanız, elde ettiğiniz şey yaklaşık olarak budur). Beyaz gürültüden elde edilen bir görüntüyü değil, stilize bir görüntü oluşturan bazı sinir ağlarını optimize etmeyi önerdiler.




Şimdi, şekillendirme işlemi herhangi bir optimizasyon içermiyorsa, yalnızca bir ileri geçiş yapılması gerekir. Ve optimizasyon, jeneratör ağını eğitmek için yalnızca bir kez gereklidir. Bu makale, aşağıdaki her birinin bulunduğu bir hiyerarşik oluşturucu kullanır zöncekinden daha büyüktür ve doku oluşturma durumunda gürültüden ve stilizatör eğitimi için bazı görüntü veri tabanlarından örneklenir. İmaj ağının eğitim kısmından başka bir şey kullanmak çok önemlidir, çünkü Kayıp ağı içindeki özellikler, sadece eğitim kısmında eğitilen ağ tarafından hesaplanır.



Gerçek Zamanlı Stil Aktarımı ve Süper Çözünürlük için Algısal Kayıplar (27 Mart 2016)

Adından da anlaşılacağı gibi, bir üretim ağı fikriyle yalnızca 17 gün geciken yazarlar, görüntülerin çözünürlüğünü artırmakla meşguldü. En son imaj ağında artık öğrenmenin başarısından ilham almış görünüyorlar.




Buna göre artık blok ve dönüşüm bloğu.



Böylece, artık style kontrolüne ek olarak, elimizde hızlı bir jeneratör de var (bu iki makale sayesinde, bir görüntünün üretim süresi onlarca ms ile ölçülüyor).

Bitirme

İlk video şekillendirme uygulaması için başka bir şekillendirme uygulaması oluşturmak için, incelenen makalelerden alınan bilgileri ve yazarların kodunu bir başlangıç ​​noktası olarak kullandık:



Bunun gibi bir şey üret.


En sıradan fotoğraflarda çok sayıda ve tamamen ayırt edilemeyen varlıklar görünür. Çoğu zaman bir nedenden dolayı köpekler. Bu tür görüntüler, sinir ağlarına dayalı ve görüntü işleme için tasarlanmış ilk açık hizmetlerden biri olan Google'dan DeepDream'in piyasaya sürüldüğü Haziran 2015'te İnternet'i doldurmaya başladı.

Yaklaşık olarak şu şekilde gerçekleşir: algoritma fotoğrafları analiz eder, içlerinde ona bazı tanıdık nesneleri hatırlatan parçalar bulur ve bu verilere göre görüntüyü bozar.

Önce proje açık kaynak olarak ortaya kondu ve ardından aynı prensipler üzerine oluşturulan çevrimiçi hizmetler internette ortaya çıktı. En uygun ve popüler olanlardan biri Deep Dream Generator: burada küçük bir fotoğrafı işlemek yalnızca yaklaşık 15 saniye sürüyor (önceden, kullanıcıların bir saatten fazla beklemesi gerekiyordu).

Sinir ağları bu tür görüntüleri oluşturmayı nasıl öğrenir? Ve bu arada, onlara neden böyle deniyor?

Yapay sinir ağları, tasarımlarında canlı bir organizmanın gerçek sinir ağlarını taklit eder, ancak bunu matematiksel algoritmalar yardımıyla yaparlar. Temel bir yapı oluşturduktan sonra onu makine öğrenimi yöntemlerini kullanarak eğitebilirsiniz. Örüntü tanımadan bahsediyorsak, sinir ağından binlerce görüntünün geçirilmesi gerekir. Sinir ağının görevi farklıysa, eğitim egzersizleri de farklı olacaktır.

Örneğin satranç oynamak için algoritmalar, satranç oyunlarını analiz eder. Aynı yol üzerinde, Google'ın DeepMind'ın AlphaGo algoritması, Go'nun satrançtan çok daha karmaşık ve doğrusal olmadığı için bir atılım olarak selamlanan Çin oyunu Go'ya girdi.

    Basitleştirilmiş bir sinir ağı modeliyle oynayabilir ve ilkelerini daha iyi anlayabilirsiniz.

    YouTube'da ayrıca bir dizi anlaşılır elle çizilmiş resim vardır. silindirler sinir ağlarının nasıl çalıştığı hakkında.

Bir diğer popüler hizmet ise, sadece köpekleri hayal etmekle kalmayan, aynı zamanda çeşitli resim stillerini taklit edebilen Dreamscope. Buradaki görüntü işleme de çok basit ve hızlıdır (yaklaşık 30 saniye).

Görünüşe göre hizmetin algoritmik kısmı, daha önce tartıştığımız Neural style programının bir modifikasyonu.

Daha yakın zamanlarda, siyah beyaz görüntüleri gerçekçi bir şekilde boyayan bir program ortaya çıktı. Önceki sürümlerde, benzer programlar işlerini çok daha az iyi yapıyordu ve insanların en az %20'sinin gerçek bir resim ile bilgisayar renklisi arasındaki farkı anlayamaması büyük bir başarı olarak kabul ediliyordu.

Üstelik burada renklendirme sadece yaklaşık 1 dakika sürüyor.

Aynı geliştirme şirketi, resimlerde tanıyan bir hizmet de başlattı farklı şekiller nesneler.

Bu hizmetler sadece eğlenceli eğlence gibi görünebilir, ancak aslında her şey çok daha ilginç. Yeni teknolojiler insan sanatçıların pratiğine giriyor ve sanat anlayışımızı değiştiriyor. Belki de yakında insanlar yaratıcılık alanında makinelerle rekabet etmek zorunda kalacak.

Örüntü tanıma algoritmalarını öğretmek, AI geliştiricilerinin uzun süredir mücadele ettiği bir görevdir. Bu nedenle eski fotoğrafları renklendiren ve gökyüzüne köpek çizen programlar daha büyük ve merak uyandıran bir sürecin parçası olarak değerlendirilebilir.


Tepe