Sende yapabilirsin! NVIDIA DIGITS ile görüntü bölümleme (üstte)

RAKAM nedir?

8 Temmuz'da, NVIDIA Deep Learning Academy'nin DLI çevrimdışı eğitim kampı Shenzhen'e geliyor. Konu, görüntü sınıflandırma, hedef algılama ve görüntü segmentasyonunun sıfır tabanlı geliştirilmesinin tanıtımı.

Dünyanın en iyi AI eğitim programı olmasına rağmen, DLI Çin'e çok geç girdi ve Çin web sayfası daha kısa süre içinde açıldı. Sonuç olarak, yerel geliştiriciler yalnızca Nvidianın grafik kartlarını biliyorlardı, ancak Nvidianın kablolu AI teknolojisini bilmiyorlardı. Eğitim. Daha önce, Lei Feng.com DLI hakkında bir makale yazmıştı, ayrıntılar için burayı tıklayın.

Daha fazla uzatmadan, bu Shenzhen DLI eğitim kampı temelde iki araç kullanır: DIGITS ve TensorFlow. Herkes TensorFlow'u bilir, bu yüzden onu tanıtmaya gerek yoktur. Ama DIGITS için çok yeni, nedir?

DIGITS, NVIDIA tarafından derin öğrenmeyi yaygınlaştırmak için geliştirilmiş bir grafik kullanıcı arayüzüdür. Kullanımı basit ve kolaydır, yeni başlayanların giriş engellerini aşmalarına ve hızlı bir şekilde başlamalarına yardımcı olmak için tasarlanmıştır. Bu nedenle, DLI'nin giriş eğitimi, öğrencilerin DIGITS ile başlamasını gerektirir.

Açıkça söylemek gerekirse DIGITS acemi bir araçtır. Bununla birlikte, DLI Çin'e yeni girdiğinden, DIGITS ile ilgili öğreticiler ve bilgiler yeterli değildir ve yeni başlayanlar için bilgi boşlukları yaratır. Bu nedenle Leifeng.com, Nvidia blogunda yayınlanan bu resmi öğreticiyi derledi. Bu öğretici, okuyucuları DIGITS 5 ve Caffe'yi görüntü bölümleme yapmak için kullanmaya yönlendirir. DLI'nın çevrimiçi laboratuvarları (çevrimiçi laboratuvarlar) eğitim kursundan doğmuştur. İkincisi ücretlidir ve sadece İngilizce olarak öğretilir ve üye olmayanlara açık değildir. Ancak bu eğitimden herkes bunun hakkında genel bir fikir edinebilir.

Daha da önemlisi, 8 Temmuz'da Shenzhen'deki DLI çevrimdışı eğitim kampında üç ana eğitim oturumu, görüntü sınıflandırması için DIGITS, hedef tespiti için DIGITS ve görüntü segmentasyonu için TensorFlow kullanılıyordu (ayrıntılar için buraya tıklayın). İlk iki oyunun içeriği bu öğreticiyle tutarlı olmasa da, sonuncusunun zorluğu bu makaleden çok daha fazladır ve Caffe yerine TensorFlow kullanır, ancak bu eğitim DLI ücretli eğitim içeriğine çok yakındır.

Üç çocuk ayakkabısı olan Zhu Ting, Peng Yanlei ve Ma Xiaopei'ye bu makaleyi derlerken sıkı çalışmaları için teşekkür ederiz.

Eğitim: DIGITS 5 ile görüntü segmentasyonu

Geçen yılın sonunda, NVIDIA DIGITS'e yeni özellikler ekleyen DIGITS 5'i piyasaya sürdü. Bunlardan ikisi bu eğitici için büyük ilgi görüyor, yani:

1. Görüntü bölümleme veri kümeleri oluşturmanıza ve bölümleme ağının çıktı sonuçlarını görselleştirmenize olanak tanıyan tam entegre bir bölümleme iş akışı;

2. DIGITS model deposu, ağ talimatlarını ve önceden eğitilmiş modelleri indirebileceğiniz halka açık bir çevrimiçi kaynak kitaplığıdır.

Bu makale, görüntü segmentasyonu konusunu inceleyecektir. SYNTHIA veri setindeki sentetik görüntülerdeki arabalar, yayalar, yol işaretleri ve çeşitli diğer kentsel nesneler için, tanıma ve konumlandırma için bir sinir ağını eğitmek için DIGITS 5'i kullanacağım.

Şekil 1 önizlemedir ve bu eğitim aracılığıyla yapmayı öğreneceğiniz şey budur:

Şekil 1: DIGITS 5.0 kullanılarak görüntü segmentasyonunun örnek görselleştirmesi. Bu dönüşümlü olarak girdi görüntüsünü, FCN-Alexnet tahmin sonuçlarının üst üste binmesini ve FCN-Alexnet tahmin sonuçlarının ve temel gerçeğin üst üste binmesini gösterir.

Görüntü sınıflandırmadan görüntü bölümlemeye

Otonom araçlar için görüntü anlama yazılımı tasarlamak istediğinizi varsayalım. Alexnet, GoogLeNet, VGG-16 ve diğer görüntü sınıflandırma sinir ağı mimarilerini duymuş olabilirsiniz, bu nedenle bunlarla başlayabilirsiniz. Bir köpek yavrusu resmi varsa, görüntü sınıflandırması bilgisayarın size resimde Wang'ın Wang olduğunu söylemesine izin verme işlemidir.

Görüntü sınıflandırma modelinin çıktısı, ayrı bir olasılık dağılımıdır; değeri, her bir eğitim kategorisinin olasılığını temsil etmek için kullanılan 0 ile 1 arasındadır. Şekil 2, DIGITS'te bir kedi görüntüsünü sınıflandırmak için Alexnet'in kullanılmasına bir örnektir. Sonuç çok iyi: Alexnet'in hayvanlar, müzik aletleri, sebzeler, araçlar vb. Dahil 1000 farklı nesne türü üzerinde eğitildiğini bilin. Şok edici olan,% 99 güven aralığında, makinenin görüntü konusunu doğru bir şekilde kedi olarak sınıflandırabilmesidir. Ben olsam bile, korkarım bundan başka bir şey değil. Bu kedinin Mısırlı mı, tekir mi yoksa tekir mi olduğunu anlayamıyorum.

Şekil 2: PASCAL VOC veri kümesindeki kedi görüntülerinin Alexnet sınıflandırması.

Bir resimde kedi ve köpek varsa, onu sınıflandırdığınızda ne olur? Sağduyuya göre, bir sinir ağı en sevdiğimiz iki evcil hayvan resmini sınıflandırdığında, onları her kategoriye ayırma olasılıklarının aynı olduğuna inanabilirsiniz. Deneyelim: Şekil 3 sonucu gösteriyor. Tahmin sonuçlarında kedi ve köpek karışımı var ancak AlexNet 50/50 puan vermiyor. Ara görüntüde, ilk 5 tahminde aslında hiç kedi yok. Bu gerçekten hayal kırıklığı yaratıyor, ancak diğer yandan, AlexNet 1,2 milyon görüntüden oluşan "küçük" bir dünya üzerinde eğitildi.Bu görüntülerde yalnızca bir nesne var, bu nedenle birden fazla nesnenin varlığını kabul edemezsiniz. İyi performans gösterdi.

Şekil 3 PASCAL VOC veri setinden kedi ve köpek görüntülerinin Alexnet sınıflandırması.

Sınıflandırma ağlarının bir başka sınırlaması, görüntüdeki nesnelerin konumunu ayırt edememeleridir. Bu anlaşılabilir bir durum çünkü bunu yapmak için eğitilmemişler. Yine de, bu bilgisayar görüşünün önünde büyük bir engeldir: otonom bir araç yolun yerini tespit edemezse, çok uzağa gidemez!

Görüntü bölümleme bazı dezavantajları çözer. Tüm görüntünün tek bir olasılık dağılımını tahmin etmez, ancak görüntüyü birden çok bloğa böler ve her bloğun olasılık dağılımını tahmin eder. En yaygın durum, görüntünün piksel düzeyine bölünmesi ve her pikselin sınıflandırılmasıdır: Görüntüdeki her piksel için ağ, belirtilen pikselin kategorisini tahmin etmek üzere eğitilir. Bu, ağın yalnızca her görüntüde birden fazla konu kategorisini tanımlamasına değil, aynı zamanda nesnenin konumunu da algılamasına olanak tanır. Görüntü bölümleme genellikle bir etiket görüntüsü oluşturur, görüntünün boyutu giriş görüntüsünün boyutuna eşittir ve pikselleri çeşitli kategorilere göre renk kodludur. Şekil 4 bir örneği göstermektedir: Bir görüntü 4 farklı kategoriye ayrılmıştır: masa, sandalye, kanepe ve saksı bitkileri.

Şekil 4: PASCAL VOC veri kümesinden görüntü bölümleme örneği (beyaz alanlar, nesne konturları ve sınıflandırılmamış nesneler gibi tanımlanmamış pikselleri işaretler).

Görüntü bölümlemenin daha da iyileştirilmesinde, yani örneğe duyarlı görüntü bölümlemesinde (IAIS), sinir ağı görüntüdeki her bir nesnenin konturunu tanımayı öğrenir. Bu özellikle uygulamalarda kullanışlıdır, kategoriler arasındaki sınırlar net olmadığında bile tek bir kategorinin her oluşumunu tanıyabilmelidir. Örneğin, Şekil 5'te: ortadaki görüntü, görüntü bölümleme sınıfı işaretidir ve en sağdaki görüntü, IAIS sınıf işaretidir (renk kodlamasının her bir kişiyi nasıl benzersiz şekilde tanımladığını not edin). IAIS konusunu derinlemesine tartışmayacağım, örnek segmentasyona odaklanacağım; ancak sizi Facebook'un IAIS üzerindeki SharpMask çalışmasına bir göz atmanızı tavsiye ederim.

Şekil 5: Görüntü bölümleme (orta) ve örneğe duyarlı görüntü bölümleme (sağda). Görüntü, PASCAL VOC veri kümesinden gelir.

Görüntüleri bölümlere ayırabilen bir ağın nasıl tasarlanacağına bir göz atalım.

CNN'den FCN'ye

Önceki bölüm, görüntü sınıflandırma modeli ile görüntü bölütleme modeli arasında bir ayrım yapmıştır: Birincisi her görüntünün olasılık dağılımını ve ikincisi her bir pikselin olasılık dağılımını tahmin etmektedir. Prensip olarak, bu kulağa benzer geliyor ve aynı teknolojiyi kullanacaklarını düşünebilirsiniz. Sonuçta, sorunun uzamsal boyutu büyümüştür. Bu makalede, bir sınıflandırma sinir ağını semantik segmentasyon sinir ağına dönüştürmek için sadece birkaç küçük ayarlamanın yeterli olduğunu göstereceğim. Bu makaledeki teknikleri kullanacağım (buna FCN kağıdı diyorum).

Başlamadan önce, bazı terminoloji hakkında konuşmama izin verin: Alexnet gibi tipik bir sınıflandırma ağını, evrişimli sinir ağı (CNN) olarak adlandırıyorum. Bu biraz kötüye kullanım, sonuçta, evrişimli sinir ağlarının görüntü sınıflandırmasının yanı sıra başka birçok kullanımı da var, ancak bu yaygın bir yaklaşımdır.

CNN'de yaygın bir yaklaşım, ağı iki kısma ayırmaktır: ilk kısım, özellik çıkarımı içindir ve veriler, birkaç evrişimli katmandan giderek daha karmaşık ve soyut özelliklere doğru kademeli olarak çıkarılır. Evrişimli katmanlar arasında genellikle doğrusal olmayan transfer fonksiyonları ve havuzlama katmanları vardır. Her evrişimli katman, belirli bir modda yüksek bir yanıtı tetikleyen bir dizi görüntü filtresi olarak görülebilir. Örneğin, Şekil 6, Alexnet'in ilk evrişimli katmanından gelen filtrenin ifadesini ve basit şekiller de dahil olmak üzere sanal görüntü üzerindeki aktivasyon sonucunu (çıktı) gösterir (ilginç bir şekilde AlexNet, görüntüyü bir duvar saati olarak sınıflandırır!) Bu filtreler, yatay ve dikey kenarlar ve köşeler gibi şekillerde yüksek tepki tetikler. Örneğin, sol alt köşedeki filtreye bakın, siyah beyaz dikey şeritlere benziyor. Şimdi ilgili etkinleştirme sonuçlarına ve dikey çizgideki yüksek tepkiye bakın. Benzer şekilde, sağdaki bir sonraki filtre, çapraz çizgi üzerinde yüksek bir tepki gösterir. Ağın daha derin evrişimli katmanları, çokgenler gibi daha karmaşık şekillerde yüksek tepkileri tetikleyebilecek ve nihayetinde çeşitli doğal nesnelerin dokularını ve bileşimini algılamayı öğrenecek. Evrişim katmanında, her bir evrişim çıktısı, her filtreyi girişteki pencereye uygulayarak (alıcı alan olarak da adlandırılır) ve pencereyi katmanın adım boyutuna göre girişin tamamı geçene kadar kaydırarak hesaplanır. . Alıcı alanın boyutu filtre ile aynıdır. Şekil 7'de gösterildiği gibi, bu, evrişim hesaplamasının açıklayıcı bir örneğidir. Giriş penceresinin, giriş görüntüsünün tüm kanallarını kapsadığına dikkat edin.

Şekil 6: Alexnet conv1 l katmanının DIGITS'deki performansı. Yukarıdan aşağıya: veri katmanı (giriş); conv1 katman filtresinin görselleştirilmesi; conv1 katmanının etkinleştirme sonucu (çıktı).

Şekil 7: Sol: Kırmızı renkteki giriş miktarına bir örnek ve birinci evrişimli katmanın nöron hacmine bir örnek. Evrişimli katmandaki her bir nöron, yalnızca giriş uzayındaki yerel bir alana bağlıdır, ancak tam derinliğe (yani tüm renk kanallarına) bağlıdır. Derinlik yönünde (örnekte 5) birden fazla nöron olduğuna dikkat edin, hepsi aynı giriş alanına bağlı; doğru: nöron hala ağırlığının ve girdisinin nokta çarpımını ve ardından doğrusal olmayan işlevi hesaplar, ancak bunlar Bağlantısı artık yerel alanla sınırlıdır. Kaynak: Stanford Üniversitesi CS231 kursu.

CNN'nin ikinci ve son bölümünde, sınıflandırıcı, tamamen bağlı birkaç katman içerir ve ilk tam olarak bağlı katmanın girişi, özellik çıkarıcıdan gelir. Bu katmanlar, özellikler arasındaki karmaşık ilişkileri öğrenir, böylece ağ, görüntü içeriğini yüksek düzeyde anlayabilir. Örneğin, büyük gözleriniz ve kürkünüz varsa, ağ kedilere yönelebilir. Sinir ağları, bir dereceye kadar şaşırtıcı olan bu özellikleri doğru bir şekilde anlayabilir, ancak bu aynı zamanda derin öğrenmenin cazibesidir. Bu yorumlanabilirlik eksikliği bazen eleştiriliyor, ama bu açıdan aslında biraz insan beyninin çalışma şekline benziyor: Belli bir resmin kedi olup olmadığını nasıl anlarsınız, açıklayabilir misiniz?

Tam Evrişimli Ağ (FCN), adından da anlaşılacağı gibi, yalnızca evrişimli katmanı ve yukarıda belirtilen geçici parametrik olmayan katmanı içerir. Daha güçlü görünen bir model oluşturmak için tamamen bağlantılı katman nasıl ortadan kaldırılır? Bu soruyu cevaplamak için başka bir soruyu ele alalım.

Şekil 8: Alexnet'in ilk tamamen bağlı katmanının (fcn6) girişleri, ağırlıkları ve aktivasyon fonksiyonları DIGITS'de gösterilmiştir.

Anahtar soru şudur: Tamamen bağlantılı bir katman ile tamamen evrişimli bir katman arasındaki fark nedir?

Bu çok basit: Tamamen bağlı katmanda, her bir çıkış nöronu, girdideki verilerin ağırlıklı toplamını hesaplar. Bunun aksine, her filtre alıcı alandaki verilerin ağırlıklı toplamını hesaplar. Bir dakika, bu aynı şey değil mi? Evet, ancak bu yalnızca bu katmanın giriş boyutu alıcı alanın boyutuyla aynı olduğunda olur. Giriş, alıcı alandan daha büyükse, evrişimli katman, başka bir ağırlıklı toplamı hesaplamak için giriş penceresini kaydıracaktır. Bu işlem, giriş resmi soldan sağa ve yukarıdan aşağıya taranıncaya kadar tekrarlanır. Son olarak, her filtre bir aktivasyon matrisi oluşturur; bu tür her matrise bir özellik haritası denir.

Bu bir ipucu sağlar: Tamamen bağlı katmanı eşdeğer bir evrişimli katmanla değiştirin, bu katmanın filtre boyutunu girişle aynı boyuta ayarlayın ve tamamen bağlı katmandaki nöron sayısıyla aynı sayıda filtre kullanın. Bunu Alexnet'in ilk tam bağlantılı katmanında (fcn6) göstereceğim: Şekil 8, ilgilenilen katmanın DIGITS görselleştirmesini göstermektedir. Fcn6'nın girdisini pool5'ten aldığını ve giriş şeklinin 2566 * 6 resim olduğunu görebilirsiniz. Ek olarak, fcn6'daki aktivasyon sonucu 4096 boyutlu bir uzun matristir, bu da fcn6'nın 4096 çıkış nöronuna sahip olduğu anlamına gelir. Görülüyor ki fcn6'yı eşdeğer bir evrişimli katmanla değiştirmek istersem, filtre boyutunu 6 * 6 olarak ayarlamam gerekir ve çıktı özelliği haritalarının sayısı 4096'dır. Küçük bir ayırma demek için bu katmanı düşünüyor musunuz? Kaç tane eğitilebilir parametre olacak? Her filtre için, alıcı alandaki her değer için bir önyargı terimi artı bir ağırlık vardır. Alıcı alanın derinliği 256'dır ve boyutu 6 * 6'dır, bu nedenle her filtrenin 256x6x6 + 1 = 9217 parametresi vardır. 4096 filtre olduğu için bu katmanda 37.752.832 parametre bulunmaktadır. Bu, fcn6'nın DIGITS'de sahip olduğu parametre sayısıdır. Şimdiye kadar her şey yolunda gidiyor.

Pratikte bu katmanı değiştirmek kolaydır. Caffe kullanıyorsanız, soldaki tanımı Tablo 1'deki sağdaki tanımla değiştirin.

Bu bilgiyle donanmış olarak, artık Alexnet'teki tüm tam bağlantılı katmanları karşılık gelen evrişimli katmanlara dönüştürmeye başlayabilirsiniz. Bu katmanlara yapılan girdinin şeklini hesaplamak için DIGITS kullanmanıza gerek olmadığını unutmayın; bunları manuel olarak hesaplayabilirsiniz. Bu kulağa ilginç gelse de, bunu 16 VGG-16 katmanında (artı orta havuz katmanında) yaparsanız sabrınızı kaybedeceğinizden eminim. Hesaplama kağıdınızı kaçınılmaz olarak kaybedeceğinizden bahsetmiyorum bile. Ek olarak, bir derin öğrenme meraklısı olarak, makinelerin bu görevleri yapmasına izin vermeye alışmalısınız. Öyleyse DIGITS sizin için çalışsın.

Ortaya çıkan FCN, temel CNN ile aynı sayıda öğrenilebilir parametreye, aynı ifade yeteneğine ve aynı hesaplama karmaşıklığına sahiptir. Aynı girdi verildiğinde üretilen çıktı da aynıdır. Şöyle düşünüyor olabilirsiniz: Modelleri dönüştürmek neden bu kadar zahmetli? Durum budur, CNN'nin temel "evrişimi" çok fazla esneklik sağlar. Model artık sabit bir girdi boyutunda (Alexnet'te 224 * 224 piksel boyutu) çalışmakla sınırlı değildir. Tüm girdiyi kayan bir pencere gibi tarayarak daha büyük bir görüntüyü işleyebilir Modelin tamamı için tek bir olasılık dağılımı oluşturmak yerine, her 224 * 224 pencere için bir olasılık oluşturur. Ağın çıktısı, KxHxW şeklinin bir tensörüdür, burada K kategori sayısını temsil eder, H dikey eksen boyunca kayan pencere sayısını ve W yatay eksen boyunca kayan pencere sayısını temsil eder.

Hesaplama verimliliği açısından: Teorik olarak, görüntü bloklarını tekrar tekrar seçerek ve ardından bu blokları işleme için CNN'ye girerek basit bir pencere kayması elde edebilirsiniz. Pratikte bu, hesaplamalarda çok verimsizdir: pencereyi kademeli olarak kaydırdığınızda, her adımda yalnızca birkaç yeni piksel değeri görülebilir. Bununla birlikte, ardışık bloklar arasında büyük miktarda çakışma olsa bile, her blok CNN tarafından tamamen işlenmelidir. Her piksel değeri sonunda birçok kez tekrarlanacaktır. FCN'de, bu hesaplamaların tümü ağ içinde gerçekleştiğinden, yalnızca birkaç işlemin gerçekleştirilmesi gerekir ve genel işlem hızı çok daha hızlıdır.

Sonuç olarak, bu bir kilometre taşıdır: sınıflandırma ağının çıktısına iki uzamsal boyut eklemek. Bir sonraki bölümde, modeli nasıl daha da geliştireceğimi göstereceğim.

(Devam edecek)

Leifeng.com tarafından derlenen nvidia aracılığıyla

Sıkı çalışan Chen Kun, "çıkmaktan" kurtulamıyor mu?
önceki
100 yıllık çalışma modelini kırarak, "dış sirkülasyonlu" ilk Haier Fresh Air kendi kendini temizleyen klima piyasaya çıktı
Sonraki
Şiddeti kontrol etmek için şiddet kullanmak gerçekten harika
Jingci Çin Uluslararası Moda Haftası'nda parlıyor, ilk aşk yüzü egzotik stille dolu
Gösterilmeden önce popüler olacak, "Fang Huo Fang Fei" nin kökeni biraz büyük.
Momo, YY: Bir yol, iki tür
Tamamen homomorfik MAC'a dayalı mesaj kimlik doğrulama algoritmasının tasarımı
Resmi duyuru! Chongqing Toplu Taşıma, tarama kodu sürüş modunu başlatır, nasıl çalıştırılacağını öğrenmek için buraya bakın!
Düşük sıcaklık kayması ve yüksek güç kaynağı reddetme oranı bant aralığı referans kaynağı tasarımı
Derin öğrenme altında tıbbi görüntü analizi (1)
Hollywood'un "yeni altı" değişikliği
FPGA tabanlı PCIe veri yolu arabirimi DMA denetleyicisinin "Akademik Belge" Tasarımı
DeepMind'ın kara kutunun şifresini çözmesi için ilk adım: Orijinal sinir ağının bilişsel prensibi, insanlarınkiyle aynıdır!
Merhaba, bu film büyük ölçekli bir uyuşturucu alma sahnesi gibi
To Top