CNN, öncelikli olarak görüntüleri analiz etmek için kullanılan popüler bir yapay sinir ağları türüdür. CNN'yi diğer yapay sinir ağlarından ayıran şey, "evrişimli katmanlar" adı verilen gizli katmandır. Evrişimli katmanlarla CNN, görüntülerdeki desenleri (örneğin, bir nesnenin kenarları, şekilleri ve hatta dokuları) algılayabilir. Bu desenler, evrişimli işlemde filtreler kullanılarak belirlenir.
Aşağıdaki yazıda, bir CNN'nin iki ana bileşenine daha derine ineceğiz: evrişimli katmanlar ve havuz katmanları (bazen isteğe bağlı, ancak oldukça önemli). Ardından, Alex Krizhevsky'nin adını taşıyan AlexNet adlı ünlü bir CNN mimarisini tartışacağız. Son olarak, AlexNet'in uçtan-uca bir uygulaması sonunda gösterilecektir.
Örnek olarak 6 * 6 * 1 bir görüntü alın (1, renk kanallarının sayısını ifade eder, bu durumda gri tonlamalı bir görüntü olduğunu varsayıyoruz).
Burada 3 * 3 filtre ( çekirdek olarak da adlandırılır , 3 * 3 çekirdek boyutudur) başlatılır. Filtredeki sayılar, bunun bir kenar detektörü olduğunu gösterir ve orijinal girdiden kenar özelliklerini çıkarır. Filtre, giriş görüntüsüyle birleşecek ve öne çıkan bir görüntü çıkaracaktır. Evrişim süreci Örnek 1'de gösterilmektedir.
Evrişimli katmandan sonraki çıktı görüntüsünün boyutunu hesaplamadan önce, ilk olarak şu iki önemli kavramı anlamalıyız: dolgu ve adımlar.
Dolgu malzemesi
Basit bir deyişle, dolgu, evrişimli işlem uygulanmadan önce görüntünün her sınırına bir grup piksel eklemek anlamına gelir. Dolgunun kullanılmasının iki nedeni şunlardır:
Adımlar
Bir adım, giriş görüntüsü üzerindeki piksel kayma sayısını temsil eder. Yukarıdaki örneklerde, tüm adımlar (1,1) 'dir. Tam evrişim süreci aşağıdaki gibi görünür ve gösterilen görüntüdeki sayılar işlemin sonucudur.
Buradaki ana fikir, adımların uzamsal özellikleri küçülteceği ve alıcı alanların çok fazla örtüşmesini önleyeceği.
Son olarak, öne çıkan görüntünün boyutunun nasıl hesaplandığı sorusuna geri dönersek, işte genel formül:
Sonuç bir tamsayı değilse, aşağı yuvarlanacaktır.
Havuzlama, tipik olarak tek tek evrişimli katmanlardan sonra CNN'ye eklenen işlemdir. Bir modele havuz katmanı eklendiğinde, önceki evrişimli katmandan gelen çıktıdaki piksel sayısını azaltarak görüntülerin boyutunu azaltır.
Örnek 3'teki kıvrımlı katmana bir havuzlama işlemi uygulamak için, 2 * 2 filtre ve 2 adımı düşünün. İlk olarak, 2 * 2 bölgesini kıvrımlı çıktının sol üstünden alıyoruz. Maksimum havuzlama uygulayarak, 2 * 2 bloğunun her bir değerinden maksimum değeri hesaplıyoruz. Bu değer saklanır ve maks. Havuzlama işleminden tam çıktıyı oluşturmak için kullanılır.
Bu 2 * 2 blok sayı havuzlarıdır ve her havuzdan maksimum değeri aldığımız için buna max-pooling işlemi denir.
4 * 4 boyutunda kıvrımlı bir görüntüyle, maksimum havuzlama gerçekleştirdikten sonra, görüntünün boyutu 2 kat azaltılır ve şimdi 2 * 2'dir.
Havuzlama, evrişimli katmandan gelen çıktının çözünürlüğünü azalttığı için yararlıdır. Havuzlama teknikleriyle ağ, hesaplama süresini patlatmadan daha büyük boyutlu bir görüntüyü tarayabilir. Benzer bir işlemi izleyen ancak kıvrımlı görüntü üzerinde maksimum değeri bulmak dışında farklı işlemler gerçekleştiren başka havuzlama türleri de vardır. Örneğin, ortalama havuzlama her 2 * 2 bloktan ortalama değeri alacaktır.
AlexNet'te kullanılan veri kümesi nedir?
"ImageNet, yaklaşık 22.000 kategoriye ait 15 milyondan fazla etiketli yüksek çözünürlüklü görüntüden oluşan bir veri kümesidir." ²
AlexNet'in katıldığı ImageNet Büyük Ölçekli Görsel Tanıma Mücadelesinde (ILSVRC), 1000 kategorinin her birinde yaklaşık 1000 görüntüden oluşan bir ImageNet alt kümesi kullanılmaktadır. Yaklaşık 1,2 milyon eğitim görüntüsü, 50.000 doğrulama görüntüsü ve 150.000 test görüntüsü vardır.
Veri kümesi nasıl ön işlenir?
ImageNet'in veri seti değişken çözünürlüklere sahipken, AlexNet "sabit giriş-dışı boyutluluk" gerektirir. Bu nedenle, görüntülerin boyutu 256 * 256 sabit çözünürlüğe indirilir. Ayrıca, AlexNet araştırmacıları, her pikselden ayarlanan eğitim görüntüleri üzerinden ortalama etkinliği çıkardı. Bu, pikseli normalleştirerek bu piksellerin aynı aralıkta olmasını sağlamak içindir.
AlexNet'te 5 evrişimli katman ve 3 tam bağlantılı katman vardır.
2. Yerel Yanıt Normalleştirme
AlexNet neden yerel yanıt normalizasyonuna ihtiyaç duyar?
ReLU'dan önce doğrusal olmama.
Yerel tepki normalleştirme performansı nasıl?
İlk 1 hata oranı:% 1,4 azaltın (ilk 1 hata oranı: sınıflandırıcının doğru sınıfa en yüksek puanı vermediği sürenin yüzdesi) .
İlk 5 hata oranı:% 1,2 azaltın ( ilk 5 hata oranı: sınıflandırıcının ilk 5 tahmini arasına doğru sınıfı dahil etmediği sürenin yüzdesi ).
3. Örtüşen Havuzlama Katmanları
Yukarıda tartışıldığı gibi, havuz katmanları görüntülerin boyutluluğunun azaltılmasına yardımcı olur. Üst üste binen havuzlama katmanları, üzerinde havuzlama işleminin gerçekleştirildiği bitişik filtre bloğunun birbiri üzerine binmesi dışında benzer şekilde işlev görür.
Örtüşen havuz katmanının performansı nasıl?
İlk 1 hata oranı:% 0,4 azaltın ³
İlk 5 hata oranı:% 0,3 azaltın ³
Bu demoda, Street View Ev Numarası (SVHN) veri kümesini kullanarak bir AlexNet modeli oluşturacağız . SVHN'nin, her görüntünün sınıflandırılacak belirli bir sayı içerdiği MNIST'e çok benzediğini, ancak bunların Google Sokak Görünümü'ndeki ev numaralarından elde edilen gerçek dünya görüntüleri olması açısından daha ilginç bir veri kümesi olduğunu unutmayın.
Basit olması için, tüm rakamların 32x32 piksellik sabit bir çözünürlüğe yeniden boyutlandırıldığı kırpılmış rakam formatını seçtik.
Hem eğitim seti hem de test seti için şekilleri yazdırarak, şeklin orijinal formda olduğunu fark ettik
(width, height, channels, size). Bununla birlikte, CNN / AlexNet yalnızca giriş biçimini alır
(size, width, height, channels), bu nedenle önce görüntü dizisini transpoze etmemiz gerekir. Bu, aşağıdakiler kullanılarak gerçekleştirilebilir:
X_train, y_train = X_train.transpose((3,0,1,2)), y_train[:,0] X_test, y_test = X_test.transpose((3,0,1,2)), y_test[:,0]
Son olarak, her pikseli 255'e bölerek hem X_train hem de X_test'i normalize ettik. Sonuç olarak, her piksel [0,1] aralığına düşecek ve böylece daha hızlı yakınsama sağlayacaktır.
Yukarıda tanıtılan AlexNet mimarisini kesinlikle takip ettik. Ancak, yerel yanıt normalleştirme katmanı yalnızca Tensorflow'da bulunur, ancak Keras'ta yoktur. Demomuz AlexNet'in gücünü ve kullanışlılığını göstermek için olduğundan, sıfırdan bir AlexNet oluşturmak için değil, bunun yerine toplu normalleştirme katmanını kullanıyoruz.
İşte model özeti:
Daha sonra, modeli varsayılan optimize edici
adam(bu bizim ilk denememiz ve oldukça iyi sonuç verdi!) Ve kayıp fonksiyonunu
sparse_categorical_crossentropy(tek sıcak kodlama kullanmadığımız için ) kullanarak derledik .
Daha sonra modeli
batch_size=6410 devir ile eğittik . 10 dönemin sonunda, modelimiz 0.9444 eğitim doğruluğuna ve 0.9115 doğrulama / test doğruluğuna ulaştı.
İşte çağlar boyunca kayıp ve doğruluk için arsa:
Son olarak, yanlış sınıflandırılan resimlere bir göz atalım:
Yukarıdaki sonuçlardan, modelin bir şekilde 5'i 6'dan 6'yı veya tam tersini ayırt etmekte zorlandığını söyleyebiliriz. Bununla birlikte, birçok görüntü doğası gereği net olmadığından ve bu yanlış sınıflandırmalar, o görüntünün bazı uç özelliklerini hala yakaladıkları için gerçekten kötü olmadığından (yani 5'i 6 olarak sınıflandırmanın 5'i 1 olarak sınıflandırmaktan daha tolere edilebilir olduğunu düşünüyoruz). Bu nedenle, AlexNet modelimizin genel olarak oldukça iyi performans gösterdiği sonucuna oldukça eminiz.
Kodun tamamını not defteri biçiminde ekledik:
[1] Andrew Ng: Derin Öğrenme Uzmanlığı https://www.coursera.org/learn/convolutional-neural-networks?specialization=deep-learning
[2] Derin Evrişimli Sinir Ağları ile ImageNet Sınıflandırması http://www.cs.toronto.edu/~hinton/absps/imagenet.pdf
Bir ürün yöneticisi olarak sürekli olarak ekibimi ve kendimi daha verimli ve etkili hale getirmenin yollarını arıyorum. Aşağıda, zamandan tasarruf etmek ve daha fazla etki yaratmak için ChatGPT'yi bir Proje Yöneticisinin iş akışına nasıl dahil edebileceğinize dair birkaç başlangıç fikri verilmiştir.
Bu makalede, Dolandırıcılık Tespitinde Makine Öğreniminin Önemi : Müşterileri Korumak İçin Bir Model Nasıl Oluşturulur konusunu ele alıyoruz. 1.
Torchvision kitaplığının sezgisel bir anlayışı - temel bilgilerden ileri düzeye (Bölüm 1/3) Torchvision nedir? Torchvision, PyTorch ile el ele giden bir Bilgisayar Görüşü kütüphanesidir. Verimli Görüntü ve Video dönüşümleri için yardımcı programlara, yaygın olarak kullanılan bazı önceden eğitilmiş modellere ve bazı veri setlerine sahiptir (torchvision PyTorch ile birlikte gelmez, ayrı olarak kurmanız gerekecektir.
Torchvision kitaplığının sezgisel bir şekilde anlaşılması - 14 görsel dönüşüm örneğiyle (Bölüm 2/3) Bölüm 1 için (torchvision'daki modüllere giriş), lütfen aşağıdaki bağlantıyı ziyaret edin. Bu makalede, veri kümesi (görüntüler) yüklendikten hemen sonra bir dizi halinde gerçekleştirilebilen basit görüntü dönüştürme işlevlerini deneyeceğiz.
Grafik Sinir Ağları (GNN'ler), grafik verilerinden öğrenmek için standart bir araç kutusu olarak ortaya çıktı. GNN'ler, içerik önerisi veya ilaç keşfi gibi farklı alanlarda yüksek etkili sorunlar için iyileştirmeler sağlayabilir.
Bir önceki yazımda, blob algılama ve bağlantılı bileşenlere dayalı olarak ilgilenilen nesneleri nasıl tanımlayacağımızı öğrendik. Bununla birlikte, belirli ilgi çekici nesneleri görüntülerimizden ayırmamız gereken zamanlar olacaktır.