Tensorflow 2.0 Görüntü Sınıflandırması: Kurulum, Veri Yükleme, Model Oluşturma ve Eğitim

Yayınlanan: 2020-04-21

Gö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ı.

Makine öğrenimi kursu | Çevrimiçi Öğrenin, IIIT Bangalore‎

YÜKSELTME VE IIIT BANGALORE İLE MAKİNE ÖĞRENİMİNDE VE AI'DA PG DİPLOMASI.
Şimdi Uygula