Anlamsal segmentasyon için kayıp fonksiyonu


10

Teknik terimlerin yanlış kullanımı için özür diler. Evrişimli sinir ağları (CNN'ler) aracılığıyla anlamsal bölümleme projesi üzerinde çalışıyorum; Encoder-Decoder türünde bir mimari uygulamaya çalıştığından, çıktı girdiyle aynı boyuttadır.

Etiketleri nasıl tasarlıyorsunuz? Hangi kayıp fonksiyonu uygulanmalıdır? Özellikle ağır sınıf dengesizliği durumunda (ancak sınıflar arasındaki oran görüntüden görüntüye değişir).

Sorun iki sınıfla ilgilidir (ilgilenilen nesneler ve arka plan). Keras'ı tensorflow arka ucuyla kullanıyorum.

Şimdiye kadar, piksel çıktısı etiketleme uygulayarak, beklenen çıktıların girdi resimleriyle aynı boyutlarda olmasını tasarlıyorum. Modelin son katmanı ya softmax aktivasyonuna (2 sınıf için) ya da sigmoid aktivasyonuna (piksellerin nesne sınıfına ait olma olasılığını ifade etmek için) sahiptir. Bu tür bir görev için uygun bir objektif fonksiyon tasarlama konusunda sorun yaşıyorum:

function(y_pred,y_true),

Keras ile anlaştı .

Lütfen, ilgili tensörlerin boyutlarına (modelin girdi / çıktı) özel olmaya çalışın. Herhangi bir düşünce ve öneriniz çok takdir edilmektedir. Teşekkür ederim !


Bu arxiv.org/pdf/1511.00561.pdf " Ağın eğitilmesi için çapraz entropi kaybını nesnel işlev olarak kullanıyoruz."
Miss Palmer

Yanıtlar:


6

Çapraz entropi kesinlikle gitmek için bir yoldur. Keras'ı bilmiyorum ama TF'de şunlar var: https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits

İşte bunu doğrudan uygulayan bir makale: Semantik Segmentasyon için Tamamen Konvolüsyon Ağları Shelhamer ve ark.

U-Net kağıt uzamsal çözünürlük önlemek kaybına atlama bağlantılarını kullanarak, aynı zamanda fikrinin çok başarılı bir uygulamasıdır. Bunun birçok uygulamasını internette bulabilirsiniz.

Kişisel deneyimlerime göre, önce basit bir kodlayıcı-kod çözücü ağ ile başlamak isteyebilirsiniz, ancak adım (veya adım = 1) kullanmayın, aksi takdirde yukarı örnekleme mükemmel olmadığı için çok fazla çözünürlük kaybedersiniz. Küçük çekirdek boyutlarıyla gidin. Özel uygulamanızı bilmiyorum ama 2-3 gizli katman ağı bile çok iyi sonuçlar verecektir. Her katmanda 32-64 kanal kullanın. Basit, 2 gizli katman, her biri 32 kanal, 3x3 çekirdek, adım = 1 başlayın ve etkilerini görmek için parametreleri izole bir şekilde deneyin. Çözünürlük kaybından kaçınmak için başlangıçların boyutları her zaman giriş boyutuna eşit tutun. Daha sonra adımları ve örneklemeyi açabilir ve U-Net gibi fikirleri uygulayabilirsiniz. U-Net, tıbbi görüntü segmentasyonu için son derece iyi çalışır.

Sınıf dengesizliği için bkz. Https://swarbrickjones.wordpress.com/2017/03/28/cross-entropy-and-training-test-class-imbalance/ Burada fikir, farklı sınıflarıα ve β parametreleri.


Bu alanda uzman değilim, ancak sınıflar bu ortamda özel olmamalı mı? Eğer evetse softmax kaybı daha iyi bir seçenek olmaz mı? tensorflow.org/api_docs/python/tf/nn/…
Harald Thomson

1
@HaraldThomson, Segmentasyon ikili bir sorundur. Birçok insan ikili problemler için softmax kullanır, ancak bu tamamen gereksiz ve aşırıdır. İki çıkış düğümüne sahip olmak yerine, P'yi (y = 1) temsil eden bir çıkış düğümüne sahip olun, sonra çapraz entropi kullanın.
Ricardo Cruz

2

Ağırlıklı Zar kaybı ve ağırlıklı çapraz entropi kaybı kullanın. Zar kaybı segmentasyon için çok iyidir. Başlayabileceğiniz ağırlıklar, tersine çevrilmiş sınıf frekansları olmalıdır, örneğin 50-100 arasında bir örnek alın, her sınıfa ait ortalama piksel sayısını bulun ve bu sınıfları 1 / ortalama yapın. Zarları kendiniz uygulamak zorunda kalabilirsiniz ama bu basit. Ayrıca ters zar kaybına ve odak kaybına bakabilirsiniz


-1

Önce daha spesifik ve sonra daha genel olalım. Seni yanlış anlarsam özür dilerim.

Sanırım kodlama ve kod çözme işlemlerinden bahsettiğinizden ve çıkış boyutuyla aynı girdi boyutundan bahsettiğinizden, otomatik kodlayıcı sinir ağına ihtiyacınız olduğunu söylüyorsunuz. Eğer öyleyse, kayıp fonksiyonunuz giriş vektörünün yeniden üretilmesine dayanır, aynı zamanda verileri orta gizli katmandaki daha kısa bir vektöre sıkıştırır. Seçenekler minimal ortalama kare hatasını (regresyon için) veya mantık veya yanlış sınıflandırma oranını (sınıflandırma için) elde etmek olacaktır. Bununla birlikte, CNN'ler bir otomatik kodlayıcıda kullanıldığını gördüğüm bir şey değildir, ancak görüntülerdeki kenar ve nesne algılama gibi çeviri değişmezliğinin önemli olduğu durumlarda bunu yapmak hem mümkün hem de yararlı olacaktır.

Daha genel olarak, CNN'lerden bahsettiğinizden beri çok karmaşık bir makine öğrenimi modeli oluşturuyorsunuz. CNN'ler ve diğer derin öğrenme modelleri, mevcut en karmaşık makine öğrenme modellerinden bazılarıdır.

Bununla birlikte, boyutları, etiketleri ve kayıp işlevlerini seçmek daha çok temel makine öğrenimi gibidir. Bence derin öğrenme ile başının üstünde olabilirsiniz. Önce düz eski makine öğrenimi dersi aldınız mı?


Bu bile gerekli mi? Örneğin, bkz. Pixon yöntemi .
Carl

geçerli bir yaklaşım: arxiv.org/pdf/1511.00561.pdf
Miss Palmer

"CNN'ler ve diğer derin öğrenme modelleri, mevcut en karmaşık makine öğrenme modellerinden bazılarıdır." Katılıyorum. Modelin kendisi karmaşık olabilir, ancak aslında çok az teorik anlayışla kullanımı inanılmaz derecede basittir. DL, küçük teori, yazması kolay modeller ve çok yüksek doğruluk hakkında tüm hype nedeni ...
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.