Görüntüleri sınıflandıran modelimi eğitmeye çalışıyorum. Benim sorunum farklı boyutlara sahip olmaları. resimlerimi / veya model mimarimi nasıl biçimlendirmeliyim?
Görüntüleri sınıflandıran modelimi eğitmeye çalışıyorum. Benim sorunum farklı boyutlara sahip olmaları. resimlerimi / veya model mimarimi nasıl biçimlendirmeliyim?
Yanıtlar:
Hangi mimariden bahsettiğini söylemedin. Resimleri sınıflandırmak istediğinizi söylediğiniz için, bunun AlexNet, GoogLeNet gibi kısmen evrişimli, kısmen tamamen bağlantılı bir ağ olduğunu varsayıyorum. Genel olarak, sorunuzun cevabı birlikte çalıştığınız ağ türüne bağlıdır.
Örneğin, ağınız yalnızca evrişimli birimler içeriyorsa - yani tamamen bağlı katmanlar içermiyorsa - giriş görüntüsünün boyutuyla değişmez olabilir . Böyle bir ağ olabilir girdi görüntüleri işlemek ve sırayla başka bir görüntü ( "konvolusyanla tüm yol") return; Elbette bir şekilde kaybı belirlemeniz gerektiğinden çıktının beklediğinizle eşleştiğinden emin olmanız gerekir.
Yine de tamamen bağlı üniteler kullanıyorsanız, sorun yaşarsınız: Burada, ağınızın üzerinde çalışması gereken sabit sayıda öğrenilmiş ağırlığa sahipsiniz, bu nedenle değişen girişler, değişen sayıda ağırlık gerektirecektir - ve bu mümkün değildir.
Eğer sorununuz buysa, yapabileceğiniz bazı şeyler şunlardır:
N
doğru boyutta farklı görüntülere .Dolgu seçeneği, ağın böyle bir dolgulu kenarlık içeren görüntülere eğilimli olabileceğinden (okuyun: büyük olasılıkla olacaktır) ağın tahminine ek bir hata kaynağı getirebilir. Bazı fikirlere ihtiyacınız varsa , TensorFlow belgelerinin Görseller bölümüne bir göz atın.resize_image_with_crop_or_pad
daha büyük işi ortadan .
Ezmeyi umursamamaya gelince, işte ünlü Inception ağının ön işleme hattından bir parça:
# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.
# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
distorted_image,
lambda x, method: tf.image.resize_images(x, [height, width], method=method),
num_cases=num_resize_cases)
Tamamen farkındalar ve yine de yapıyorlar.
Ne kadar ileri gitmek istediğinize veya gitmeniz gerektiğine bağlı olarak, aslında burada Görsel Tanıma için Derin Evrişim Ağlarında Uzamsal Piramit Havuzlaması adlı , rastgele boyutlardaki girdileri çok özel bir şekilde işleyerek işleyen bir kağıt var .
Uzamsal bir piramit havuz katmanı oluşturmayı deneyin. Sonra onu son evrişim katmanınızın arkasına koyun, böylece FC katmanları her zaman girdi olarak sabit boyutlu vektörler alır. Eğitim sırasında, bir dönem için belirli bir görüntü boyutunu kullanarak tüm veri kümesindeki görüntüleri eğitin. Ardından bir sonraki dönem için farklı bir görüntü boyutuna geçin ve eğitime devam edin.