Derin öğrenmede mevcut görüntü yerine veri kümesinin görüntü ortalamasını çıkartarak görüntüleri neden normalleştirelim?


88

Görüntülerin nasıl normalleştirileceğine dair bazı farklılıklar var ancak çoğu bu iki yöntemi kullanıyor gibi görünüyor:

  1. Tüm görüntüler üzerinde hesaplanan kanal başına ortalamayı çıkarın (örn. VGG_ILSVRC_16_layers )
  2. Tüm resimler üzerinde hesaplanan piksel / kanala göre çıkarma (örneğin, CNN_S , ayrıca Caffe'nin referans ağına bakınız )

Doğal yaklaşım aklımda her görüntüyü normalleştirmek için olurdu. Güpegündüz çekilen bir görüntü, gece görüntüsünden daha fazla nöronun ateşlenmesine neden olur ve bize zaman zaman bilgi verirken, genellikle kenarlarda mevcut olan daha ilginç özellikleri önemsiyoruz.

Pierre Sermanet 3.3.3'te görüntünün temelinde olacak olan yerel kontrast normalleşmesinin , ancak gördüğüm örnek / öğreticilerin hiçbirinde buna rastlamadığımdan bahsetmektedir. Ayrıca ilginç bir Quora sorusu ve Xiu-Shen Wei'nin görevini de gördüm, ancak yukarıdaki iki yaklaşımı desteklemiyor gibi görünüyorlar.

Tam olarak neyi özlüyorum? Bu bir renk normalleştirme sorunu mu yoksa neden bu kadar çok kişinin bu yaklaşımı kullandığını açıklayan bir makale var mı?


Cevabı bilmiyorum, ama her bir yöntemi denedin mi? Performanslarında herhangi bir fark var mı?
user112758

@ user112758 - bunları uygulamak biraz acı verici (özellikle de piksel için) ve deneyimlerim, görüntü başına normalleştirmenin iyi sonuç verdiğini, ancak verilerimin bu temsilci olmadığını gösteriyor. Normalleştirme ile denemeye çalışacağım ama bunların arkasındaki motivasyonu duymak merak ediyorum (aklımda) garip normalizasyon prosedürleri.
Max Gordon

Tamam, belki bunu Google grubundaki Caffe GitHub ile ilgili sorularınızda sorabilirsiniz. Bu konuda daha fazla uzman olacağını düşünüyorum.
user112758

Yanıtlar:


58

Veri kümesi ortalamasını çıkarmak, verileri "merkezlemeye" yarar. Ek olarak, her bir özellik değerini bir z-skoruna göre normalleştirmek istiyorsanız, ideal olarak bu özelliğin veya pikselin sttdevine bölmek istersiniz.

Her ikisini de yapmamızın sebebi, ağımızı eğitme sürecinde, daha sonra gradyanlarla geri adım attığımız aktivasyonlara neden olmak için bu ilk girişleri çoğaltacağımız (ağırlıklar) ve (önyargılar) ekleyeceğiz. modeli eğitin.

Bu süreçte, her özelliğin degradelerimizin kontrolden çıkmaması için benzer bir aralığa sahip olmasını istiyoruz (ve yalnızca bir küresel öğrenme oranı çarpanına ihtiyacımız var).

Bunu düşünmenin bir başka yolu da derin öğrenme ağlarının geleneksel olarak birçok parametreyi paylaşmasıdır - girdilerinizi benzer aralıkta özellik değerlerine (yani, ortalama veriyi çıkararak tüm veri kümesi üzerinden) sonuçlandıracak şekilde ölçeklendirmediyseniz çok kolay bir şekilde oluyor çünkü görüntü ağırlığının bir kısmı wçok fazla, diğeri ise çok küçük.

Bazı CNN modellerinde görüntü başına beyazlatmanın kullanıldığını göreceksiniz, bu da sizin düşünceleriniz boyunca daha fazla.


4
Cevap için teşekkür ederim. Verileri merkeze alma ve istikrarlı gradyanlar elde etmek için bu aralığın benzer olduğundan emin olma kavramına aşinayım. Asıl soru, bunu neden tüm veri kümesinde yapmamız gerektiğine ve bunun görüntü başına beyazlaşmanın aksine neden yardımcı olacağı? Cevabı kabul etmeden önce bunun bir şekilde öğrenmeyi geliştirdiğini gösteren basit bir referans istiyorum. Toplu normalleştirmenin inanılmaz derecede güçlü bir teknik olduğunu biliyorum, ancak tüm veri kümesi normalleşmesinin bağlantısını göremiyorum.
Max Gordon

Toplu normalleştirme kabul edilirse, o zaman zaten orada. Toplu normalleştirmenin tek nedeni, tüm veri setini belleğe sığamayacağınız veya eğitimi dağıttığınız zamandır (genellikle aynı sayı). Bu yüzden partimiz var.
lollercoaster

Partilerin de stokastik gradyan inişinin temeli olduğunu düşündüm. Her şeyi belleğe sığdırabilsem bile, her çağdan sonra parametreleri daha sık güncellemek istiyorum.
Max Gordon

3
Onlar. İstediğiniz sıklıkta güncelleme yapabilirsiniz - analitik uygulamalar aynıdır ve bu da gradyan inişiyle ilgili bu kadar güzel ve ölçeklenebilir olan şeydir. Stokastik gradyan inişini kullanmamızın nedeni (karıştırma giriş sırası + harmanlama), tepe tırmanma hareketini degrade uzayda düzeltmektir. Tek bir nokta göz önüne alındığında, güncellememizin bizi yerel maksima yönünde ilerleteceğinden emin olamayız, ancak yeterli puan seçerseniz, bu ihtimal daha yüksek olur (beklentiyle).
lollercoaster

2
Bu özelliklerin benzer bir aralığa girmesine nasıl yardımcı olur? İki resmim varsa, biri 0 - 255 arasında, biri 0 - 50 arasında piksel değerleriyle değişiyorsa, ortalama 50 ve 15'in stdev'i ile söyleyin. Normalizing bana -3,3 - 13,6 arasında değişen resim 1'i ve 2 arasında değişen resim 2'yi verir. -3.3 - 0 arası. Hala aynı ölçekte değiller.
Daniel

9

Toplu normalizasyondan önce, verileri her bir kanal için (R, G, B) sıfır ortalamanın etrafında ortalamak için kanal başına ortalama çıkarma kullanılmıştır. Bu genellikle ağın daha hızlı öğrenmesine yardımcı olur çünkü gradyanlar her kanal için aynı şekilde çalışır. Toplu normalleştirme kullanıyorsanız, her parti için normalleştirme yaptığınız için kanal başına ortalama çıkarma ön işleme adımının gerçekten gerekli olmadığından şüpheleniyorum.


1
"Toplu normalleştirme kullanıyorsanız, kanal başına ortalama çıkarma öncesi işleme adımının gerçekten gerekli olmadığından şüphelenmiyorsunuz." Ancak toplu iş normu, asıl giriş görüntülerini değil, ağınızın katmanlarındaki ağırlıkları normalleştirmeyi ifade eder. Bunlar 2 farklı şey.
Monica Heddneck

4

Görüntü başına normalleştirme yaygındır ve şu anda Tensorflow'ta yerleşik olan tek yerleşik işlevdir (özellikle uygulaması çok kolaydır). Bahsettiğiniz kesin nedenle kullanılır (aynı görüntü için VS VS gecesi). Ancak, aydınlatmanın kontrol edildiği daha ideal bir senaryo hayal ederseniz, her bir resim arasındaki göreceli farklılıklar algoritmada büyük değer taşır ve bunu görüntü başına normalleştirme ile silmek istemezdik (ve Tüm eğitim verisi bağlamında normalizasyon yapınız).


4

Buna, verileri kullanmadan önce ön işleme adı verilir. Pek çok yolla işlem yapabilirsiniz, ancak her bir veriyi aynı işlevle X_preproc = f (X) olarak işlemeniz ve bu f (.) Verinin kendisine bağlı olmaması gerektiği bir koşul vardır; o andaki görüntü f (X) 'in gerçekten f (X, görüntü) olacağı ve bunu istemiyorsunuz.

Bahsettiğiniz görüntü kontrast normalleşmesi farklı bir amaç içindir. Görüntü kontrast normalizasyonu özelliği yardımcı olacaktır.

Ancak yukarıdaki f (.), Tüm özellikleri birbirine sayısal olarak eşit tutarak (tabii ki yaklaşık olarak) optimizasyona yardımcı olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.