Ayrılabilir evrişime temel giriş

Bu makale, AI Araştırma Enstitüsü tarafından derlenen, orijinal başlığı olan teknik bir blogdur:

Ayrılabilir Evrişimlere Temel Bir Giriş

Yazar | Chi-Feng Wang

Tercüme | Bütün gece, kel genç kafa Düzenle | Wang Liyu, Pide

Orijinal bağlantı:

https://towardsdatascience.com/a-basic-introduction-to-separable-convolutions-b99ec3102728

MobileNet mimarisini gören herkes, ayrılabilir kıvrımlar kavramıyla karşılaşacaktır. Ama "ayrılabilir evrişim" nedir ve standart evrişimden farkı nedir? İki ana ayrılabilir evrişim türü vardır:

  • Uzamsal ayrılabilir kıvrımlar

  • Derinlemesine ayrılabilir konvolüsyonlar (derinlemesine ayrılabilir konvolüsyonlar)

Mekansal olarak ayrılabilir evrişim

Kavramsal olarak, bu ikisinin daha kolayıdır ve bir evrişimi iki parçaya (iki evrişim çekirdeği) entegre etme fikrini gösterir, bu yüzden buradan başlayacağım. Ne yazık ki, uzaysal olarak ayrılabilir evrişimin bazı önemli sınırlamaları vardır, bu da derin öğrenmede yaygın olarak kullanılmadığı anlamına gelir.

Uzamsal olarak ayrılabilir evrişim bu şekilde adlandırılır çünkü esas olarak görüntünün uzamsal boyutlarıyla ve çekirdekle ilgilidir: genişlik ve yükseklik. (Diğer boyut, "derinlik" boyutu, görüntü başına kanal sayısıdır).

Uzamsal olarak ayrılabilir evrişim, evrişim çekirdeğini iki küçük evrişim çekirdeğine böler. En yaygın durum, aşağıda gösterildiği gibi 3x3 evrişim çekirdeğini 3x1 ve 1x3 evrişimli çekirdeklere bölmektir:

Şekil 1: 3x3 çekirdeğin uzayda ayrılması

Şimdi, 9 çarpma ile bir evrişim yapmak yerine, aynı etkiyi elde etmek için her seferinde 3 çarpımla (toplamda 6 kez) iki evrişim gerçekleştiriyoruz. Daha az çarpma, azaltılmış hesaplama karmaşıklığı ve daha hızlı ağ çalışması vardır.

Şekil 2: Basit ve uzamsal olarak ayrılabilir evrişim

Uzamsal olarak ayrılabilen en ünlü evrişim, kenar algılama için sobel evrişim çekirdeğidir:

Şekil 3: Ayrı Sobel evrişim çekirdeği

Uzamsal olarak ayrılabilir evrişimin temel sorunu, tüm evrişim çekirdeklerinin iki küçük evrişim çekirdeğine "ayrılamaması" dır. Bu, eğitim sırasında özellikle zahmetli hale gelir, çünkü ağ tüm olası evrişim çekirdeklerini kullanabilir ve yalnızca iki küçük evrişim çekirdeğine bölünebilen küçük bir kısmı kullanabilir.

Derinlik ayrılabilir evrişim

Uzamsal ayrılabilir evrişimin aksine, derinlikle ayrılabilir evrişim ve evrişim çekirdekleri iki küçük çekirdeğe "ayrıştırılamaz". Bu nedenle daha yaygın olarak kullanılmaktadır. Bu, keras.layers.SeparableConv2D veya tf.layers.separable_conv2d'de görülen ayrılabilir evrişim türüdür.

Derinlikle ayrılabilir evrişim, sadece uzamsal boyutu değil, aynı zamanda derinlik boyutunu (kanal sayısı) da içerdiği için bu şekilde adlandırılmıştır. Giriş görüntüsünün 3 kanalı olabilir: R, G, B. Birkaç evrişimden sonra, görüntünün birden fazla kanalı olabilir. Her kanalı görüntünün belirli bir yorumu olarak düşünebilirsiniz; örneğin, "kırmızı" kanal her pikselin "kırmızısını", "mavi" kanal ise her pikselin "mavisini" açıklar. "Yeşil" kanal, her pikselin "yeşilini" açıklar. 64 kanallı bir görüntü, görüntünün 64 farklı yorumuna sahiptir.

Uzamsal ayrılabilir evrişime benzer şekilde, derinlemesine ayrılabilir evrişim, evrişim çekirdeğini iki ayrı evrişim çekirdeğine böler ve bu iki evrişim çekirdeği iki evrişim gerçekleştirir: derin evrişim ve noktasal evrişim. Ama önce normal evrişimin nasıl çalıştığını görelim.

Standart evrişim:

Evrişimin iki boyutlu bir perspektifte nasıl çalıştığını bilmiyorsanız, lütfen bu makaleyi okuyun veya bu siteye bakın.

Bununla birlikte, tipik bir görüntü 2B değildir; aynı zamanda derinliği ve genişliği vardır. 12x12x3 piksellik bir girdi resmimiz, yani 12x12 boyutunda bir RGB resmimiz olduğunu varsayalım.

Resim üzerinde dolgu olmadan ve adım boyutu 1 olan 5x5'lik bir evrişim gerçekleştirelim. Görüntünün yalnızca genişliğini ve yüksekliğini dikkate alırsak, evrişim işlemi şöyle olur: 12x12- (5x5) - > 8x8. 5x5 evrişimli çekirdek, her 25 pikselde bir skaler çarpma gerçekleştirir ve her seferinde 1 sayı çıkarır. Dolgu olmadığı için (12-5 + 1 = 8) 8x8 piksel bir resim elde ederiz.

Ancak görüntü 3 kanala sahip olduğu için evrişim çekirdeğimizin de 3 kanala sahip olması gerekir. Bu, evrişim çekirdeği her hareket ettiğinde, 5x5 = 25 çarpma yerine 5x5x3 = 75 çarpma yaptığımız anlamına gelir.

İki boyutlu durumda olduğu gibi, her 25 pikselde bir skaler matris çarpımı yaparız ve 1 sayı çıkarırız. Bir 5x5x3 evrişim çekirdeğinden sonra, 12x12x3 bir görüntü, 8x8x1 görüntü haline gelecektir.

Şekil 4: 8x8x1 çıktılı standart evrişim

Çıktı görüntüsündeki kanal sayısını artırmak istersek ne olur? Ya 8x8x256 çıktı istiyorsak?

Peki, 256 adet 8x8x1 görüntü oluşturmak için 256 evrişim çekirdeği oluşturabilir ve ardından bunları bir 8x8x256 görüntü çıktısı oluşturmak için bir araya getirebiliriz.

Şekil 5: 8x8x256 çıkışlı standart evrişim

Standart evrişim bu şekilde çalışır. Bunu bir işlev olarak düşünmeyi seviyorum: 12x12x3- (5x5x3x256) - > 12x12x256 (burada 5x5x3x256, çekirdeğin yüksekliğini, genişliğini, giriş kanallarının sayısını ve çıkış kanallarının sayısını temsil eder). Bu, bunun bir matris çarpımı olmadığı anlamına gelmez; tüm görüntüyü evrişim çekirdeği ile çarpmak yerine, evrişim çekirdeğini görüntünün her bir parçasına taşır ve onu görüntünün küçük bir parçasıyla çarparız.

Derinlemesine ayrılabilir evrişim süreci iki bölüme ayrılabilir: derinlemesine evrişim ve noktasal evrişim.

Bölüm 1-derin evrişim:

İlk bölümde, derinlik evrişimi, derinliği değiştirmeden girdi görüntüsünü döndürüyoruz. 5x5x1 şeklinde 3 çekirdek kullanıyoruz.

Video 1: 3 kanallı bir görüntü üzerinden 3 çekirdeği yineleyin:

https://www.youtube.com/watch?v=D_VJoaSew7Q

Şekil 6: 12x12x3 bir görüntüyü 8x8x3 görüntüye dönüştürmek için 3 çekirdek kullanan derin evrişim

Her 5x5x1 çekirdek, görüntünün bir kanalını yineler (not: bir kanal, tüm kanallar değil) ve her 25 piksel grubunun skaler ürününü elde eder ve 8x8x1 görüntü elde eder. Bu görüntüleri üst üste bindirmek 8x8x3 bir görüntü oluşturabilir.

Bölüm 2 noktalı evrişim:

Orijinal evrişimin 12x12x3 boyutundaki bir görüntüyü 8x8x256 görüntüye dönüştürdüğünü unutmayın. Şu anda, derin evrişim 12x12x3 görüntüleri 8x8x3 görüntülere dönüştürmüştür. Şimdi, her bir görüntü için kanal sayısını artırmamız gerekiyor.

Noktasal evrişim, 1x1 çekirdek işlevi veya her noktayı geçen bir çekirdek işlevi kullandığı için bu şekilde adlandırılmıştır. Çekirdeğin derinliği, giriş görüntüsünün kaç kanala sahip olduğudur; bizim örneğimizde 3'tür. Bu nedenle, 8x8x1 görüntüyü elde etmek için 1x1x3 çekirdeği 8x8x3 görüntü boyunca yineliyoruz.

Şekil 7: Noktadan noktaya evrişim, 3 kanallı bir görüntüyü 1 kanallı bir görüntüye dönüştürme

256 adet 1x1x3 çekirdek oluşturabiliriz ve her bir çekirdek, 8x8x256 şeklinde son bir görüntü elde etmek için 8x8x1 görüntü çıkarır.

Şekil 8: 256 çekirdekli noktadan noktaya evrişim, 256 kanallı bir görüntü çıktısı

İşte bu! Evrişimi iki bölüme ayırıyoruz: derin evrişim ve noktasal evrişim. Daha soyut bir şekilde, eğer orijinal evrişim fonksiyonu 12x12x3- (5x5x3x256) 12x12x256 ise, bu yeni evrişimi 12x12x3- (5x5x1x1) olarak ifade edebiliriz - > (1x1x3x256) - > 12x12x256.

Tamam, ama derinlemesine ayrılabilir bir evrişim yaratmanın amacı nedir?

Bilgisayarın orijinal evrişimde yaptığı çarpma sayısını hesaplayalım. 8x8 kez hareket ettirilebilen 256 adet 5x5x3 çekirdek vardır. Bu 256 x3x5x5x8x8 = 1228800 çarpmadır.

Ayrılabilir evrişime ne dersiniz? Derin evrişimde, 8x8 kez hareket ettirilen 3 adet 5x5x1 çekirdeğimiz var. Yani 3x5x5x8x8 = 4800 kere. Noktasal evrişimde, 8x8 kez hareket ettirilen 256 adet 1x1x3 çekirdeğe sahibiz. Bu 256 x1x1x3x8x8 = 49152 çarpmadır. Bunları toplarsanız 53.952 çarpım elde edersiniz.

52.952, 1.228.800'den çok daha küçüktür. Daha az hesaplama, ağ daha kısa sürede daha fazla veriyi işleyebilir.

Ancak bu nasıl başarılır? Bu açıklamayla ilk karşılaştığımda sezgilerim onu gerçekten anlamadı. Bu iki evrişim aynı şeyi yapmıyor mu? Her iki durumda da görüntüyü 5x5 çekirdekten geçirip bir kanala küçültür ve sonra 256 kanala genişletiriz. Neden biri diğerinden iki kat daha hızlı?

Bir süre düşündükten sonra ana farkın şu olduğunu fark ettim: sıradan evrişimde görüntüyü 256 kez dönüştürüyoruz. Her dönüşüm 5x5x3x8x8 = 4800 çarpımı gerektirir. Ayrılabilir evrişimde, görüntüyü yalnızca bir kez derin evrişimde dönüştürürüz. Ardından, dönüştürülen görüntüyü 256 kanala genişletiyoruz. Görüntüyü tekrar tekrar dönüştürmek zorunda kalmadan bilgi işlem gücünden tasarruf edebiliriz.

Hem Keras hem de Tensorflow'un "derinlik çarpanı" adlı bir parametreye sahip olduğunu belirtmek gerekir. Varsayılan ayar 1'dir. Bu parametreyi değiştirerek, derin evrişimdeki çıktı kanallarının sayısını değiştirebiliriz. Örneğin, derinlik çarpanını 2 olarak ayarlarsak, her 5x5x1 çekirdek, 8x8x2'lik bir görüntü çıkaracak ve derinlik evrişiminin toplam çıktısını (yığın) 8x8x3 yerine 8x8x6 yapacaktır. Bazı insanlar, daha fazla özelliği daha iyi öğrenmek için sinir ağındaki parametre sayısını artırmak için derinlik çarpanını manuel olarak ayarlamayı seçebilir.

Derin ayrılabilir evrişimin dezavantajları nelerdir? Elbette! Evrişimdeki parametre sayısını azalttığı için, ağınız zaten küçükse, çok az parametre elde edebilirsiniz ve ağınız eğitim sırasında doğru şekilde öğrenemeyebilir . Bununla birlikte, doğru kullanılırsa, önemli ölçüde azaltmadan verimliliği artırabilir, bu da onu çok popüler bir seçim haline getirir.

1x1 çekirdek:

Son olarak, nokta-nokta evrişim bu kavramı kullandığından, 1x1 çekirdeklerin kullanımını tartışmak istiyorum.

Ayrılabilir evrişimlere ek olarak 1x1 çekirdek - veya daha doğrusu n 1x1xm çekirdek, burada n çıkış kanallarının sayısı ve m giriş kanallarının sayısıdır - kullanılabilir. 1x1 çekirdeğin açık bir amacı, görüntünün derinliğini artırmak veya azaltmaktır. Evrişimin çok fazla veya çok az kanala sahip olduğunu fark ederseniz, 1x1 çekirdek onu dengelemeye yardımcı olabilir.

Ancak benim için 1x1 çekirdeğin temel amacı doğrusal olmamayı uygulamaktır. Sinir ağının her katmanından sonra bir aktivasyon katmanı uygulayabiliriz. ReLU, PReLU, Softmax veya diğerleri olsun, evrişimli katmanın aksine, aktivasyon katmanı doğrusal değildir. Düz çizgilerin doğrusal kombinasyonu hala düz çizgilerdir. Doğrusal olmayan katman, modelin olanaklarını genişletir, bu nedenle "derin" ağlar genellikle "geniş" ağlardan daha iyidir. Doğrusal olmayan katmanların sayısını, parametreleri ve hesaplamaları önemli ölçüde artırmadan artırmak için 1x1 çekirdek uygulayabilir ve ardından bir aktivasyon katmanı ekleyebiliriz. Bu, ağa bir derinlik katmanı eklemeye yardımcı olur. Lei Feng Ağı Lei Feng Ağı Lei Feng Ağı

Herhangi bir sorunuz varsa, lütfen aşağıya bir yorum bırakın! Bu hikayeyi beğenmeyi unutmayın!

Bu makalenin ilgili bağlantılarını ve referanslarını görüntülemeye devam etmek ister misiniz?

Tıklamak Ayrılabilir evrişimin temel tanıtımı] ziyaret edebilirsiniz:

https://ai.yanxishe.com/page/TextTranslation/1639

Canlı Ön İzleme | AIS (ACL, IJCAI, SIGIR) 2019 Paper Conference

AlS 2019, Çin Çin Bilgi Toplumu Gençlik Çalışma Komitesi, Hangzhou Qiantang Yeni Bölge Yönetim Komitesi ve Sogou Search tarafından ortaklaşa düzenlenen bir rapor konferansıdır. Konferans 25 Mayıs - 26 Mayıs 2019 tarihleri arasında Hangzhou, Qiantang Yeni Bölgesi, Da Chuang Kasabası, Uluslararası İnovasyon Fuar Merkezi'nde gerçekleştirilecektir.

Yaşama zamanı:

25 Mayıs 09:00 - 17:30

26 Mayıs 09:00 - 18:00

Görüntüleme yöntemi:

[NLP paper] tartışma grubuna katıldıktan sonra izlemeye başlayabilirsiniz:

https://ai.yanxishe.com/page/paperGroup/42

heyecan verici! Yolda bir "itfaiye adamı" belirdi, adamı aldı ve koştu
önceki
Doumen, Jinan Üniversitesi ve Hefeng Ortaokulundan öğrencilerin katıldığı Zhu Hong Kong ve Makao gençleri için geleneksel bir Çinli yetişkin töreni düzenledi.
Sonraki
Bu bir felaket! Asırlık ünlü bir tablo, en az 1,3 milyon tahminle "Ayı Çocuk" tarafından parçalandı.
Şangay çocukları hayalleri için büyük bir parşömen çiziyor
İstanbul sahilinde puslu sabah sisi
18 yaşındaki adam 139 dolar aldı ve ketçap koydu! Polis geldikten sonra tamamen suskun kaldılar
Weishui! Guangzhou'daki en eski ejderha botu üretim üssü olan Xinlong Junshui'yi doğrudan vurdu ve nehre "sıçradı"
FPGA'ların ASIC düzeyinde yapay zeka performansına sahipken esnekliği korumaları mümkün müdür?
Şiddetli yağmur ve şimşek + 7 galibiyet! Sonra şiddetle tersine döndü! Korkarım bu insanlar bir sonraki Dragon Boat Festivali için tatil yapamayacaklar!
Tencent Auto Union'dan Zhong Xuedan ile röportaj: Pist kalabalık, WeChat arabası pisti nasıl kapıyor?
"Kendi sınıfınıza iyi bakın", bu ilkokul öğrencileri grubu gerçekten iyi bir iş çıkardı
ICRA2019 canlı bir şekilde açıldı, Li Feifei'nin dokunsal ve görsel kendi kendini denetleyen öğrenme robotu grubu en iyi kağıdı kazandı
Endişeli! Shenzhen ayı çocukları, 32. kattaki çatı korkuluğunun kenarına tırmandılar ve "tavuk yeme" oyununu oynamak için atladılar
Zhu Zhengting, Polaris ve diğerleri "Iron Armored Ambition 2" ye katıldı, geleceğin Legion savaşı başlamak üzere
To Top