Tensorflow 2.0 Görüntü Sınıflandırması: Kurulum, Veri Yükleme, Model Oluşturma ve Eğitim
Yayınlanan: 2020-04-21Görüntü sınıflandırma, bir örüntü tanıma kategorisidir. Görüntüleri komşu pikseller arasındaki ilişkiye göre sınıflandırır. Başka bir deyişle, görüntüleri düzenlemek için bağlamsal bilgileri kullanır ve farklı teknolojiler arasında oldukça popülerdir. Bu, Derin Öğrenmede öne çıkan bir konudur ve bunu öğreniyorsanız, bu makaleden kesinlikle keyif alacaksınız.
Burada TensorFlow görüntü sınıflandırmasını gerçekleştireceğiz. Bir model oluşturacağız, onu eğiteceğiz ve ardından kaktüs görüntülerini sınıflandırmak için doğruluğunu artıracağız. TensorFlow, açık kaynaklı bir makine öğrenimi platformu ve Google'ın bir ürünüdür.
Başlayalım.
İçindekiler
TensorFlow 2.0'ı yükleyin
İlk olarak, Google Colab'a TensorFlow'u yüklemeniz gerekecek. pip ile kurabilirsiniz:
!pip kurulumu tensorflow-gpu==2.0.0-alpha0
Ardından kurulumu doğrulayacağız:

tensorflow'u tf olarak içe aktar
yazdır(tf.__versiyon)
# Çıktı: 2.0.0-alpha0
Kaynak
Öğrenin: Yeni Başlayanlar İçin En Popüler 5 TensorFlow Projesi
Veri yükle
Doğrulamadan sonra tf.data.dataset kullanarak verileri yükleyebiliriz. Bir görüntünün kaktüs içerip içermediğini belirleyen bir sınıflandırıcı oluşturacağız. Kaktüs sütunlu olmalıdır. Bu amaçla Cactus Aerial Photos veri setini kullanabiliriz. Şimdi, dosya yollarını etiketleriyle birlikte yükleyeceğiz:
train_csv = pd.read_csv('data/train.csv')
# Trende/ göreli yolla görüntü dosya adlarını başına ekle
filenames = ['train/' + train_csv['id'].tolist()] içindeki fname için fname
etiketler = train_csv['has_cactus'].tolist()
train_filenames, val_filenames, train_labels, val_labels =
train_test_split(dosya adları,
etiketler,
tren_boyutu=0.9,
rastgele_durum=42)
Etiketlere ve dosya adlarına sahip olduğumuzda, tf.data.Dataset nesnelerini oluşturmaya hazırız:
train_data = tf.data.Dataset.from_tensor_slices(
(tf.constant(tren_dosya adları), tf.constant(tren_etiketleri))
)
val_data = tf.data.Dataset.from_tensor_slices(
(tf.constant(val_filenames), tf.constant(val_labels))
)
Kaynak
Şu anda veri setimiz gerçek görüntülere sahip değil. Yalnızca dosya adlarına sahiptir. Gerekli görüntüleri yüklemek ve bunları işlemek için bir işleve ihtiyacımız olacak, böylece üzerlerinde TensorFlow görüntü tanıma gerçekleştirebiliriz.
IMAGE_SIZE = 96 # MobileNetV2 ile kullanım için minimum görüntü boyutu
BATCH_SIZE = 32
# Her görüntüyü yükleme ve ön işleme işlevi
def _parse_fn(dosya adı, etiket):
img = tf.io.read_file(img)
img = tf.image.decode_jpeg(img)
img = (tf.cast(img, tf.float32)/127.5) – 1
img = tf.image.resize(img, (IMAGE_SIZE, IMAGE_SIZE))
dönüş img, etiket
# Train ve val veri kümelerinde her örnek üzerinde _parse_fn çalıştırın
# Ayrıca karıştırın ve gruplar oluşturun
train_data = (train_data.map(_parse_fn)
.shuffle(buffer_size=10000)
.batch(BATCH_SIZE)
)
val_data = (val_data.map(_parse_fn)
.shuffle(buffer_size=10000)
.batch(BATCH_SIZE)
)
Kaynak
Model Oluşturma
Bu TensorFlow görüntü sınıflandırma örneğinde, bir transfer öğrenme modeli oluşturacağız. Bu modeller, daha önce eğitim almış mevcut görüntü sınıflandırma modellerini kullanabildikleri için hızlıdır. Yalnızca ağlarının üst katmanını yeniden eğitmeleri gerekir, çünkü bu katman gerekli görüntünün sınıfını belirtir.
Görüntü sınıflandırma modelimizi oluşturmak için TensorFlow 2.0'ın Keras API'sini kullanacağız. Ve transfer öğrenme amaçları için, öznitelik algılayıcı olarak MobileNetV2'yi kullanacağız. MobileNet'in ikinci versiyonudur ve bir Google ürünüdür. Inception ve ResNet gibi diğer modellerden daha hafiftir ve mobil cihazlarda çalışabilir. Bu modeli ImageNet'e yükleyeceğiz, ağırlıkları donduracağız, bir sınıflandırma başlığı ekleyeceğiz ve üst katmanı olmadan çalıştıracağız.
IMG_SHAPE = (IMAGE_SIZE, IMAGE_SIZE, 3)
# MobileNetV2 ile önceden eğitilmiş model
base_model = tf.keras.applications.MobileNetV2(

input_shape=IMG_SHAPE,
include_top=Yanlış,
ağırlıklar='imagenet'
)
# Önceden eğitilmiş model ağırlıklarını dondurun
base_model.trainable = Yanlış
# Eğitilebilir sınıflandırma kafası
maxpool_layer = tf.keras.layers.GlobalMaxPooling2D()
tahmin_katmanı = tf.keras.layers.Dense(1, aktivasyon='sigmoid')
# Özellik dedektörlü katman sınıflandırma kafası
model = tf.keras.Sequential([
temel_model,
maxpool_layer,
tahmin_katmanı
])
öğrenme oranı = 0.0001
# Modeli derleyin
model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate),
kayıp='binary_crossentropy',
metrikler=['doğruluk']
)
Kaynak
tf.keras modellerini eğitecekseniz TensorFlow optimize edicilerini kullanmalısınız. tf.keras.optimizers ve tf.train API'lerindeki optimize ediciler, TensorFlow 2.0'ın tf.keras.optimizer'larında bir arada. TensorFlow 2.0'da, tf.keras'ın orijinal optimize edicilerinin çoğu, daha iyi performans için yükseltmeler ve değiştirmeler aldı. Performanstan ödün vermeden optimize edicileri uygulamamıza ve zamandan tasarruf etmemize olanak tanırlar.
Okuyun: Yeni Başlayanlar İçin TensorFlow Nesne Algılama Eğitimi
Dünyanın en iyi Üniversitelerinden veri bilimi derslerini öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.
Modelin Eğitimi
Modeli oluşturduktan sonra ona öğretebiliriz. TensorFlow 2.0'ın tf.keras API'si tf.data API'sini destekler, dolayısıyla bu amaç için tf.data.Dataset nesnelerini kullanmanız gerekir. Antrenmanı verimli bir şekilde gerçekleştirebilir ve performanstan herhangi bir taviz vermek zorunda kalmayacağız.
sayı_dönem = 30
step_per_epoch = round(num_train)//BATCH_SIZE
val_steps = 20
model.fit(train_data.repeat(),
çağ sayısı=sayı_dönem,
step_per_epoch =step_per_epoch,
validation_data=val_data.repeat(),
validation_steps=val_steps)
Kaynak
30 çağdan sonra modelin doğruluğu önemli ölçüde artar, ancak onu daha da geliştirebiliriz. Transfer öğrenimi sırasında ağırlıkların dondurulmasından bahsettiğimizi hatırlıyor musunuz? Şimdi, sınıflandırma başkanını eğittiğimize göre, bu katmanları çözebilir ve veri kümemizde daha fazla ince ayar yapabiliriz:
# MobileNetV2'nin tüm katmanlarını çöz
base_model.trainable = Doğru
# İnce ayar yapmak istediğimiz katmanlara kadar katmanları yeniden dondur
base_model.layers[:100] içindeki katman için:
katman.eğitilebilir = Yanlış
# Daha düşük bir öğrenme oranı kullanın
lr_finetune = öğrenme hızı / 10
# Modeli yeniden derleyin
model.compile(loss='binary_crossentropy',
optimizer = tf.keras.optimizers.Adam(lr=lr_finetune),
metrikler=['doğruluk'])
# İnce ayar için eğitim dönemlerini artırın
fine_tune_epochs = 30
total_epochs = num_epochs + fine_tune_epochs
# İnce ayar modeli
# Not: İlk_epoch'u eğitime 30. çağdan sonra başlayacak şekilde ayarlayın.
# daha önce 30 dönem boyunca eğitildi.
model.fit(train_data.repeat(),
step_per_epoch =step_per_epoch,
çağ=toplam_dönem,
initial_epoch = num_epochs,
validation_data=val_data.repeat(),
validation_steps=val_steps)

Kaynak
30 dönem sonra, modelin doğruluğu daha da artar. Daha fazla dönemle, modelin doğruluğunda daha fazla gelişme gördük. Artık, görüntülerdeki sütunlu kaktüsleri yüksek doğrulukla tanıyabilen uygun bir TensorFlow görüntü tanıma modelimiz var.
Ayrıca Okuyun: Yeni Başlayanlar için Tensorflow Proje Fikirleri
TensorFlow Görüntü Sınıflandırması Hakkında Daha Fazla Bilgi Edinin
TensorFlow'un son derece işlevsel API'leri ve yetenekleri, onu herhangi bir programcının kullanabileceği güçlü bir teknoloji haline getirir. Üst düzey API'leri de genel karmaşıklığını ortadan kaldırarak kullanımı kolaylaştırır.
TensorFlow, görüntü sınıflandırması ve ilgili konular hakkında daha fazla bilgi edinmek ister misiniz? O zaman IIIT-B & upGrad'ın çalışan profesyoneller için tasarlanmış ve 450+ saat zorlu eğitim, 30+ vaka çalışması ve ödev, IIIT-B Mezun statüsü, 5+ pratik sunan Makine Öğrenimi ve Yapay Zeka alanında PG Diplomasına göz atmanızı öneririz. En iyi firmalarla uygulamalı bitirme projeleri ve iş yardımı.