Keras/TensorFlow PlatoBlockchain Veri Zekası ile Görüntü Sınıflandırması için RandAugment. Dikey Arama. Ai.

Keras/TensorFlow ile Görüntü Sınıflandırma için RandAugment

Veri artırma, uzun bir süredir, "statik" bir veri kümesini dönüştürülmüş varyantlarla değiştirmenin bir yolu olarak hizmet ediyor ve değişmezliğini destekliyor. Evrişimli Sinir Ağları (CNN'ler)ve genellikle girdi sağlamlığına yol açar.

Not: Değişmezlik, karar verirken modelleri belirli pertübasyonlara karşı kör kılmaktır. Bir kedi görüntüsü, onu aynalarsanız veya döndürürseniz yine de bir kedi görüntüsüdür.

Kullanmakta olduğumuz biçimdeki veri artırma, bir eksiklik nesne algılama, anlamsal ve örnek bölümleme vb. için önemli olan öteleme varyansı hakkındaki bilginin değişmezliği sınıflandırma modelleri için çoğu zaman elverişlidir ve bu nedenle, artırma, sınıflandırma modellerine daha yaygın ve daha agresif bir şekilde uygulanır.

Büyütme Türleri

Büyütme çok basit olmaya başladı - küçük döndürmeler, yatay ve dikey çevirmeler, kontrast veya parlaklık dalgalanmaları, vb. Son yıllarda, daha ayrıntılı yöntemler geliştirildi: Kesmek (giriş görüntülerinde rastgele siyah kareler sunan uzamsal bırakma) ve Karıştır (görüntü parçalarının karıştırılması ve etiket oranlarının güncellenmesi) ve bunların kombinasyonu – KesKarıştır. Daha yeni büyütme yöntemleri aslında etiketleri hesaba katar ve CutMix gibi yöntemler, etiket oranlarını, karıştırılan her sınıfın parçaları tarafından alınan görüntünün oranlarına eşit olacak şekilde değiştirir.

Büyüyen bir olası büyütme listesiyle, bazıları, rastgele bir güçlendirme setinin modellerin sağlamlığını destekleyeceği ve orijinal seti çok daha geniş bir giriş görüntüsü alanıyla değiştireceği fikriyle, bunları rastgele (veya en azından bazı alt kümelerini) uygulamaya başladı. burası RandAugment devreye giriyor!

KerasCV ve RandAugment

KerasCV ayrı bir pakettir, ancak yine de Keras ekibi tarafından geliştirilen Keras'a resmi bir eklentidir. Bu, ana paketle aynı miktarda cila ve sezgisellik aldığı anlamına gelir, ancak aynı zamanda normal Keras modelleri ve katmanları ile sorunsuz bir şekilde bütünleşir. Fark edeceğiniz tek fark, aramaktır. keras_cv.layers... yerine keras.layers....

KerasCV, yazım tarihi itibarıyla hala geliştirilme aşamasındadır ve halihazırda 27 yeni ön işleme katmanı içermektedir. RandAugment, CutMix, ve MixUp bazıları olmak. Uygulamanın nasıl göründüğüne bir göz atalım RandAugment görüntülere ve rasgele büyütme ile ve olmadan bir sınıflandırıcıyı nasıl eğitebileceğimiz.

İlk olarak, yükleyin keras_cv:

$ pip install keras_cv

Not: KerasCV'nin çalışması için TensorFlow 2.9 gerekir. Zaten sahip değilseniz, çalıştırın $ pip install -U tensorflow İlk.

Şimdi, Imagenette'e kolay erişim için TensorFlow veri setleriyle birlikte TensorFlow, Keras ve KerasCV'yi içe aktaralım:

import tensorflow as tf
from tensorflow import keras
import keras_cv
import tensorflow_datasets as tfds

Bir görüntü yükleyelim ve orijinal biçiminde gösterelim:

import matplotlib.pyplot as plt
import cv2

cat_img = cv2.cvtColor(cv2.imread('cat.jpg'), cv2.COLOR_BGR2RGB)
cat_img = cv2.resize(cat_img, (224, 224))
plt.imshow(cat_img)

Şimdi başvuru yapalım RandAugment ona, birkaç kez ve sonuçlara bir göz atın:

fig = plt.figure(figsize=(10,10))
for i in range(16):
    ax = fig.add_subplot(4,4,i+1)
    aug_img = keras_cv.layers.RandAugment(value_range=(0, 255))(cat_img)
    
    ax.imshow(aug_img.numpy().astype('int'))

Keras/TensorFlow PlatoBlockchain Veri Zekası ile Görüntü Sınıflandırması için RandAugment. Dikey Arama. Ai.

Katmanın bir magnitude varsayılan olan argüman 0.5 ve artırmanın etkisini artırmak veya azaltmak için değiştirilebilir:

fig = plt.figure(figsize=(10,10))
for i in range(16):
    ax = fig.add_subplot(4,4,i+1)
    aug_img = keras_cv.layers.RandAugment(value_range=(0, 255), magnitude=0.1)(cat_img)
    ax.imshow(aug_img.numpy().astype('int'))

gibi düşük bir değere ayarlandığında 0.1 – çok daha az agresif büyütme göreceksiniz:

Keras/TensorFlow PlatoBlockchain Veri Zekası ile Görüntü Sınıflandırması için RandAugment. Dikey Arama. Ai.

Katman olmak – modellerde veya tf.data veri kümeleri oluştururken işlem hatları. Bu yapar RandAugment oldukça esnek! Ek argümanlar augmentations_per_image ve rate birlikte çalışan argümanlar.

İçin 0...augmentations_per_imagekatman, bir görüntüye uygulanacak boru hattına rastgele bir ön işleme katmanı ekler. Varsayılan durumda 3 – ardışık düzene üç farklı işlem eklenir. Ardından, ardışık düzendeki her artırma için rastgele bir sayı örneklenir - ve eğer daha düşükse rate (varsayılan olarak yaklaşık 0.9) – büyütme uygulanır.

Temelde, ardışık düzendeki her (rastgele) büyütmenin görüntüye uygulanma olasılığı %90'dır.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Bu, doğal olarak, özellikle değeri düşürürseniz, tüm artırmaların uygulanması gerekmediği anlamına gelir. rate. Ayrıca hangi işlemlere izin verileceğini de özelleştirebilirsiniz. RandomAugmentationPipeline hangi katman RandAugment 'nin özel durumudur. hakkında ayrı bir rehber RandomAugmentationPipeline yakında yayınlanacak.

RandAugment ile ve RandAugment olmadan bir Sınıflandırıcı Eğitimi

Veri hazırlama/yükleme yönünü basitleştirmek ve RandAugment, kullanalım tfds Imagenette'in bir kısmına yüklemek için:

(train, valid_set, test_set), info = tfds.load("imagenette", 
                                           split=["train[:70%]", "validation", "train[70%:]"],
                                           as_supervised=True, with_info=True)

class_names = info.features["label"].names
n_classes = info.features["label"].num_classes
print(f'Class names: {class_names}') 
print('Num of classes:', n_classes) 

print("Train set size:", len(train)) 
print("Test set size:", len(test_set)) 
print("Valid set size:", len(valid_set)) 

Veri kümesini daha az çağda aşmayı kolaylaştırmak için eğitim verilerinin yalnızca bir kısmını yükledik (deneyimizin daha hızlı çalışmasını sağladık). Imagenette'deki görseller farklı boyutlarda olduğu için bir tane oluşturalım. preprocess() veri kümesini eşlemek için yeniden boyutlandıran işlev ve ayrıca augment() görüntüleri artıran bir işlev tf.data.Dataset:

def preprocess(images, labels):
  return tf.image.resize(images, (224, 224)), tf.one_hot(labels, 10)
  
def augment(images, labels):
  inputs = {"images": images, "labels": labels}
  outputs = keras_cv.layers.RandAugment(value_range=(0, 255))(inputs)
  return outputs['images'], outputs['labels']

Şimdi - etiketleri tek seferde kodladık. Mutlaka yapmak zorunda değildik, ancak aşağıdaki gibi büyütmeler için CutMix Etiketleri ve oranlarını kurcalayan, yapmanız gerekecek. Bunları da uygulamak isteyebileceğiniz için RandAugment sağlam sınıflandırıcılar oluşturmak için onlarla gerçekten iyi çalışıyor - sıcak kodlamayı burada bırakalım. Ek olarak, RandAugment tam da bu nedenle resimler ve etiketler içeren bir sözlüğe giriyor - ekleyebileceğiniz bazı geliştirmeler aslında etiketleri değiştirecek, yani bunlar zorunlu. Artırılmış görüntüleri ve etiketleri ayıklayabilirsiniz. outputs Bu, büyütme sırasında atılması gereken fazladan ama basit bir adımdır.

Döndürülen mevcut veri kümelerini eşleyelim tfds ile preprocess() işlev, bunları toplu hale getirin ve yalnızca eğitim setini artırın:

valid_set = valid_set.map(preprocess).batch(32).prefetch(tf.data.AUTOTUNE)
train_set = train.map(preprocess).batch(32).prefetch(tf.data.AUTOTUNE)
train_set_aug = train.map(preprocess).map(augment_data, 
                                          num_parallel_calls=tf.data.AUTOTUNE).batch(32).prefetch(tf.data.AUTOTUNE)

Bir ağı eğitelim! keras_cv.models benzer bazı yerleşik ağlara sahiptir keras.applications. Liste henüz kısa olsa da zamanla genişleyecek ve yerini alacak keras.applications. API çok benzerdir, bu nedenle taşıma kodu çoğu uygulayıcı için oldukça kolay olacaktır:


effnet = keras_cv.models.EfficientNetV2B0(include_rescaling=True, include_top=True, classes=10)
          
effnet.compile(
    loss='categorical_crossentropy',
    optimizer='adam',
    metrics=['accuracy']
)

history = effnet.fit(train_set, epochs=25, validation_data = valid_set)

Alternatif olarak, mevcut keras.applications:

effnet = keras.applications.EfficientNetV2B0(weights=None, classes=10)

effnet.compile(
  loss='categorical_crossentropy',
  optimizer='adam',
  metrics=['accuracy']
)

history1 = effnet.fit(train_set, epochs=50, validation_data=valid_set)

Bu, gerçekten çok iyi sonuç vermeyen bir modelle sonuçlanır:

Epoch 1/50
208/208 [==============================] - 60s 238ms/step - loss: 2.7742 - accuracy: 0.2313 - val_loss: 3.2200 - val_accuracy: 0.3085
...
Epoch 50/50
208/208 [==============================] - 48s 229ms/step - loss: 0.0272 - accuracy: 0.9925 - val_loss: 2.0638 - val_accuracy: 0.6887

Şimdi aynı ağ kurulumunu artırılmış veri kümesi üzerinde eğitelim. Her grup ayrı ayrı artırılır, bu nedenle (bir sonraki çağda) aynı görüntü grubu ortaya çıktığında, farklı artırmalara sahip olurlar:

effnet = keras.applications.EfficientNetV2B0(weights=None, classes=10)
effnet.compile(
  loss='categorical_crossentropy',
  optimizer='adam',
  metrics=['accuracy']
)

history2 = effnet.fit(train_set_aug, epochs=50, validation_data = valid_set)
Epoch 1/50
208/208 [==============================] - 141s 630ms/step - loss: 2.9966 - accuracy: 0.1314 - val_loss: 2.7398 - val_accuracy: 0.2395
...
Epoch 50/50
208/208 [==============================] - 125s 603ms/step - loss: 0.7313 - accuracy: 0.7583 - val_loss: 0.6101 - val_accuracy: 0.8143

Çok daha iyi! Yine de diğer geliştirmeleri uygulamak isteyebilirsiniz, örneğin CutMix ve MixUpağın doğruluğunu en üst düzeye çıkarmak için diğer eğitim tekniklerinin yanı sıra - sadece RandAugment önemli ölçüde yardımcı oldu ve daha uzun bir artırma boru hattıyla karşılaştırılabilir.

Antrenman dahil antrenman eğrilerini karşılaştırırsanız ve doğrulama eğrileri - yalnızca ne kadar olduğu netleşir RandAugment yardımcı olur:

Keras/TensorFlow PlatoBlockchain Veri Zekası ile Görüntü Sınıflandırması için RandAugment. Dikey Arama. Ai.

Artırılmamış ardışık düzende, ağ gereğinden fazla uyar (eğitim doğruluğu tavana ulaşır) ve doğrulama doğruluğu düşük kalır. Genişletilmiş boru hattında, eğitim doğruluğu baştan sona doğrulama doğruluğundan daha düşük kalır.

Daha yüksek bir eğitim kaybıyla, ağ hala yaptığı hataların çok daha fazla farkındadır ve dönüşümlere karşı değişmez olması için daha fazla güncelleme yapılabilir. İlki güncellemeye gerek görmezken, ikincisi güncelleme yapar ve potansiyel tavanını yükseltir.

Sonuç

KerasCV ayrı bir pakettir, ancak yine de Keras ekibi tarafından geliştirilen ve Keras projelerinize sektör gücündeki CV'yi getirmeyi amaçlayan Keras'a resmi bir eklentidir. KerasCV, yazım tarihi itibarıyla hala geliştirilme aşamasındadır ve halihazırda 27 yeni ön işleme katmanı içermektedir. RandAugment, CutMix, ve MixUp bazıları olmak.

Bu kısa kılavuzda, nasıl kullanabileceğinize bir göz attık. RandAugment belirli bir uygulamalı dönüşümler listesinden bir dizi rasgele dönüşüm uygulamak ve herhangi bir Keras eğitim ardışık düzenine dahil etmenin ne kadar kolay olduğu.

Daha İleri Gitmek – Bilgisayarla Görme için Pratik Derin Öğrenme

Meraklı doğanız daha ileri gitmek istemenizi sağlıyor mu? bizim kontrol etmenizi öneririz Kurs: “Python ile Bilgisayarla Görme için Pratik Derin Öğrenme”.

Keras/TensorFlow PlatoBlockchain Veri Zekası ile Görüntü Sınıflandırması için RandAugment. Dikey Arama. Ai.

Başka Bir Bilgisayarla Görme Kursu mu?

MNIST rakamları veya MNIST modası sınıflandırması yapmayacağız. Uzun zaman önce rollerine hizmet ettiler. Çok fazla öğrenme kaynağı, gelişmiş kara kutu mimarilerinin performans yükünü omuzlamasına izin vermeden önce temel veri kümelerine ve temel mimarilere odaklanıyor.

odaklanmak istiyoruz gizemden arındırma, pratiklik, anlayış, sezgi ve gerçek projeler. Öğrenmek istemek Nasıl bir fark yaratabilirsin? Beynimizin görüntüleri işleme biçiminden meme kanseri için araştırma düzeyinde bir derin öğrenme sınıflandırıcısı yazmaya, “halüsinasyon” gören derin öğrenme ağlarına, size ilkeleri ve teoriyi pratik çalışmalarla öğreterek, sizi aşağıdaki bilgilerle donatmaya kadar bir yolculuğa çıkaracağız. bilgisayar vizyonunu çözmek için derin öğrenmeyi uygulamada uzman olmak için teknik bilgi ve araçlar.

İçinde ne var?

  • Görmenin ilk ilkeleri ve bilgisayarlara “görmeyi” nasıl öğretebiliriz?
  • Bilgisayarla görmenin farklı görevleri ve uygulamaları
  • İşinizi kolaylaştıracak ticaret araçları
  • Bilgisayarla görü için veri kümelerini bulma, oluşturma ve kullanma
  • Evrişimli Sinir Ağlarının teorisi ve uygulaması
  • Veri kümelerinde etki alanı kayması, birlikte oluşma ve diğer önyargıları işleme
  • Öğrenimi aktarın ve başkalarının eğitim süresini ve hesaplama kaynaklarını kendi yararınıza kullanın
  • Son teknoloji bir meme kanseri sınıflandırıcısı oluşturmak ve eğitmek
  • Ana akım fikirlere sağlıklı bir şüphecilik dozu nasıl uygulanır ve yaygın olarak benimsenen tekniklerin sonuçları nasıl anlaşılır?
  • t-SNE ve PCA kullanarak ConvNet'in “kavram uzayını” görselleştirme
  • Şirketlerin daha iyi sonuçlar elde etmek için bilgisayarlı görme tekniklerini nasıl kullandıklarına dair vaka çalışmaları
  • Uygun model değerlendirmesi, gizli uzay görselleştirmesi ve modelin dikkatinin belirlenmesi
  • Alan araştırması yapmak, kendi veri kümelerinizi işlemek ve model testleri oluşturmak
  • Son teknoloji mimariler, fikirlerin ilerlemesi, onları benzersiz kılan nedir ve nasıl uygulanacağı
  • KerasCV – son teknoloji işlem hatları ve modeller oluşturmak için bir WIP kitaplığı
  • Makaleleri nasıl ayrıştırıp okuyabilir ve bunları kendiniz uygulayabilirsiniz
  • Uygulamanıza bağlı olarak model seçimi
  • Uçtan uca bir makine öğrenimi ardışık düzeni oluşturma
  • Daha Hızlı R-CNN'ler, RetinaNet'ler, SSD'ler ve YOLO ile nesne algılamada manzara ve sezgi
  • Örnek ve anlamsal segmentasyon
  • YOLOv5 ile Gerçek Zamanlı Nesne Tanıma
  • YOLOv5 Nesne Dedektörlerinin Eğitimi
  • KerasNLP (endüstri gücünde WIP kitaplığı) kullanarak Transformers ile çalışma
  • Görüntülerin altyazılarını oluşturmak için Transformers'ı ConvNets ile entegre etme
  • DeepDream
  • Bilgisayarla görme için Derin Öğrenme modeli optimizasyonu

Zaman Damgası:

Den fazla Yığın kötüye kullanımı