• Hakkımızda
  • Bize Katıl
  • Sizden Gelenler
  • İletişim
Yazılım Karavanı | Bilişim - Teknoloji - Blog
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar
No Result
View All Result
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar
No Result
View All Result
Yazılım Karavanı | Bilişim - Teknoloji - Blog
No Result
View All Result
Home Yapay Zeka

Makine Öğrenimi İçin Veri Artırımı (Data Augmentation)

Emre İnaç by Emre İnaç
Temmuz 23, 2021
in Yapay Zeka
12 min read
0
Makine Öğrenimi İçin Veri Artırımı (Data Augmentation)
WhatsApp'ta PaylaşTwitter'da PaylaşLinkedIn'de PaylaşTelegram'da Paylaş

Görüntü verisi büyütme, veri kümesinde görüntülerin değiştirilmiş versiyonlarını oluşturarak eğitim veri kümesinin boyutunu yapay olarak genişletmek için kullanılan bir tekniktir.

Derin öğrenme sinir ağı modellerini daha fazla veri üzerinde eğitmek, daha yetenekli modellerle sonuçlanabilir ve büyütme teknikleri, uygun modellerin öğrendiklerini yeni görüntülere genelleştirme yeteneğini geliştirebilen görüntülerin varyasyonlarını oluşturabilir.

Keras derin öğrenme sinir ağı kitaplığı, “ImageDataGenerator” sınıfı aracılığıyla görüntü verisi büyütmeyi kullanarak modelleri uydurma yeteneği sağlar.

Bu yazımda, sizlerle derin öğrenme sinir ağlarını eğitirken görüntü verisi büyütme tekniklerinin nasıl kullanılacağını keşfedeceğiz. Günün sonunda ise şunları bileceksiniz.

  • Modelin performansını ve genelleştirme yeteneğini geliştirmek ve eğitim veri setini büyütmek  için görüntü verisi büyütme kullanılır.
  • Görüntü verisi büyütme, ImageDataGenerator sınıfı aracılığı ile Keras derin öğrenme kitaplığında desteklenir.
  • Kaydırma, çevirme, parlaklık ayarları ve yakınlaştırma gibi teknikler nasıl kullanılır.

Derin öğrenme sinir ağlarının performansı, genellikle mevcut veri miktarı arttıkça daha fazla iyileşir.

Veri büyütme, mevcut eğitim verilerinden yapay olarak yeni eğitim verileri oluşturmaya yönelik bir tekniktir. Bu, yeni ve farklı eğitim örnekleri oluşturan eğitim verilerinden örneklere alana özgü teknikler uygulanarak yapılır.

Görüntü verisi büyütme belki de en iyi bilinen veri büyütme türüdür ve eğitim veri setinde orijinal görüntü ile aynı sınıfa ait görüntülerin dönüştürülmüş versiyonlarının oluşturulmasını içerir.

Dönüşümler, kaydırmalar, çevirmeler, yakınlaştırmalar ve çok daha fazlası gibi görüntü işleme alanından bir dizi işlemi içerir.

Amaç, eğitim veri setini yeni, makul örneklerle genişletmektir. Bu, model tarafından görülmesi muhtemel eğitim seti görüntülerinin varyasyonları anlamına gelir. Örneğin, bir kedi resminin yatay olarak çevrilmesi anlamlı olabilir, çünkü fotoğraf soldan veya sağdan çekilmiş olabilir. Bir kedinin fotoğrafının dikey olarak çevrilmesi mantıklı değildir ve modelin baş aşağı bir kedinin fotoğrafını görme olasılığının çok düşük olması nedeniyle muhtemelen uygun olmayacaktır. Bu nedenle, bir eğitim veri seti için kullanılan spesifik veri büyütme tekniklerinin seçiminin dikkatli bir şekilde, eğitim veri seti ve problem alanı bilgisi bağlamında seçilmesi gerektiği açıktır. Buna ek olarak, belki de küçük bir prototip veri kümesi, model ve eğitim çalıştırması ile model performansında ölçülebilir bir iyileştirmeyle sonuçlanıp sonuçlanmadıklarını görmek için veri artırma yöntemlerini ayrı ayrı ve uyum içinde denemek yararlı olabilir.

Evrişimli sinir ağı (CNN – Convolutional Neural Network) gibi modern derin öğrenme algoritmaları, görüntüdeki konumlarına göre değişmeyen özellikleri öğrenebilir. Bununla birlikte, büyütme, öğrenmeye bu dönüşüm değişmez yaklaşımına daha fazla yardımcı olabilir ve modele, soldan sağa, yukarıdan aşağıya sıralama, fotoğraflardaki ışık seviyeleri ve daha fazlası gibi dönüşümlerde de değişmez olan öğrenme özelliklerinde yardımcı olabilir.

Görüntü verisi büyütme tipik olarak yalnızca eğitim veri kümesine uygulanır, doğrulama veya test veri kümesine uygulanmaz. Bu, görüntü yeniden boyutlandırma ve piksel ölçekleme gibi veri hazırlamadan farklıdır; modelle etkileşime giren tüm veri kümelerinde tutarlı bir şekilde gerçekleştirilmelidirler.

ImageDataGenerator ile Veri Büyütme

Keras derin öğrenme kitaplığı, bir modeli eğitirken veri büyütmeyi otomatik olarak kullanma yeteneği sağlar.Bu, ImageDataGenerator sınıfı kullanılarak elde edilir.

İlk olarak, sınıf somutlaştırılabilir ve veri büyütme türlerinin konfigürasyonu, sınıf kurucusunun argümanları ile belirtilir.

Piksel ölçekleme yöntemlerinin yanı sıra bir dizi teknik desteklenir. Görüntü verileri için beş ana tip veri büyütme tekniğine odaklanacağız; özellikle:

  • width_shift_range ve height_shift_range argümanları ile görüntü kaydırma,
  • horizontal_flip ve vertical_flip argümanları ile görüntü çevirme,
  • rotation_range argümanı ile görüntü döndürme,
  • brightness_range argümanı ile parlaklık ayarı,
  • zoom_range argümanı ile görüntü yakınlaştırma

tekniklerini kullanacağız.

Şimdi hep birlikte yukarıda saydığımız teknikleri örnek bir görüntü verisi üzerinde deneyelim. Ben kodumu yazmak için Pycharm Professional IDE’sini kullanacağım, siz ne şekilde rahat kod yazabiliyorsanız o şekilde devam edebilirsiniz veya benim gibi Pycharm da kullanabilirsiniz.

İlk olarak sıfırdan bir DataAugmentationTutorial adında Python uygulaması oluşturalım ve IDE’nin gerekli ortamı hazırlaması için bekliyelim. IDE gerekli oluşturma işlemlerini bitirdikten sonra terminali açıp “pip install tensorflow-gpu” komutu ile ImageDataGenerator için gerekli olan Keras kitaplığını da barındıran Tensorflow kitaplığının kurulumunu yapalım.

Evet şimdi daha önceden uygulama kök dizininde oluşturduğum “images” dizinine attığım “dog.jpeg” görüntü verisini yükleyelim ve veri büyütme tekniklerini uygulamaya başlayalım.

from keras.preprocessing.image import load_img, ImageDataGenerator

img = load_img("./images/dog.jpeg")

print(type(img))
print(img.format)
print(img.mode)
print(img.size)

Yukarıdaki kod bloğundaki gibi verimizi yükleyip, verimizin özelliklerini öğrenebiliriz. Bu kod bloğunun çıktısı şu şekilde olacaktır.

<class ‘PIL.JpegImagePlugin.JpegImageFile’>

JPEG

RGB

(1819, 1300)

Çıktıdan da görüldüğü üzere JPEG formatında RGB modunda ve 1819×1300 boyutlarında bir görüntü verimiz mevcut. Görüntü verileri bilindiği üzere piksellerden oluşur bu sebeple verimizi piksel dizisine çevirip, boyutunu veri büyütücünün istediği formata dönüştürmemiz ve  o şekilde kullanmamız gerekiyor. Bu işlem için de şu metodu kullanıyoruz.

data = img_to_array(img)
samples = np.expand_dims(data, 0)

Artık ImageDataGenerator sınıfından bir nesne oluşturup veri büyütme tekniklerini uygulayabiliriz.

ImageDataGenerator sınıfından oluşturacağımız datagen nesnemizi kullanarak görüntü verimiz üzerinde daha önce bahsettiğimiz 5 farklı tekniğe ait argümanlar ile bu teknikleri gerçekleyelim.

1- Görüntü Kaydırma Tekniği

Bir görüntüyü kaydırma, görüntü boyutlarını aynı tutarken görüntünün tüm piksellerini yatay veya dikey gibi tek bir yönde hareket ettirmek anlamına gelir.

Bu, bazı piksellerin görüntüden kırpılacağı ve görüntüde yeni piksel değerlerinin belirtilmesi gereken bir bölge olacağı anlamına gelir.

ImageDataGenerator yapıcısının width_shift_range ve height_shift_range argümanları, sırasıyla yatay ve dikey kaydırma miktarını kontrol eder.

Bu bağımsız değişkenler, kaydırılacak görüntünün genişliğinin veya yüksekliğinin yüzdesini (0 ile 1 arasında) gösteren bir kayan nokta değeri belirtebilir. Alternatif olarak, görüntüyü kaydırmak için bir dizi piksel belirtilebilir.

datagen = ImageDataGenerator(width_shift_range=[-200, 200], height_shift_range=[-200, 200])
it = datagen.flow(samples, batch_size=1)

for i in range(9):
    plt.subplot(330 + 1 + i)
    batch = it.next()
    image = batch[0].astype('uint8')
    plt.imshow(image)
plt.show()

Bu kod bloğunu çalıştırdığımızda bize genişlik ve yükseklik kaydırma tekniklerinin uygulandığı 9 farklı veri üretecektir. Çıktı şu şekilde olacaktır:

data augmentation 1

2 – Görüntü Çevirme Tekniği

Bir görüntü çevirme, sırasıyla dikey veya yatay çevirme durumunda piksel satırlarını veya sütunlarını tersine çevirmek anlamına gelir.

Çevirme büyütmesi, ImageDataGenerator sınıf oluşturucusuna yönelik bir boolean horizontal_flip veya vertical_flip argümanları tarafından belirtilir. Bu eğitimde kullanılan köpek fotoğrafı gibi fotoğraflar için yatay çevirmeler mantıklı olabilir, ancak dikey çevirmeler mantıklı olmaz.

Hava fotoğrafları, kozmoloji fotoğrafları ve mikroskobik fotoğraflar gibi diğer görüntü türleri için, belki dikey çevirmeler anlamlıdır.

datagen = ImageDataGenerator(horizontal_flip=True)
it = datagen.flow(samples, batch_size=1)

for i in range(9):
    plt.subplot(330 + 1 + i)
    batch = it.next()
    image = batch[0].astype('uint8')
    plt.imshow(image)
plt.show()

Yatay çevirme tekniğinin uygulandığı kod bloğunun çıktısı şu şekilde olacaktır.

data augmentation 2

3- Rastgele Çevirme Tekniği

Döndürme büyütmesi, görüntüyü 0’dan 360’a kadar belirli bir derece sayısı kadar saat yönünde rasgele döndürür.

Döndürme muhtemelen pikselleri görüntü çerçevesinin dışına döndürecek ve çerçevenin alanlarını doldurulması gereken piksel verisi olmadan bırakacaktır.

Aşağıdaki örnek, 0 ile 90 derece arasında görüntüye yapılan döndürmelerle, rotation_range bağımsız değişkeni aracılığıyla rastgele döndürmeleri gösterir.

datagen = ImageDataGenerator(rotation_range=90)
it = datagen.flow(samples, batch_size=1)

for i in range(9):
    plt.subplot(330 + 1 + i)
    batch = it.next()
    image = batch[0].astype('uint8')
    plt.imshow(image)
plt.show()
data augmentation 3

4- Rastgele Parlaklık Tekniği

Görüntünün parlaklığı, görüntülerin rasgele karartılması, görüntülerin aydınlatılması veya her ikisi ile artırılabilir.

Amaç, bir modelin farklı aydınlatma seviyelerinde eğitilmiş görüntüler arasında genelleme yapmasına izin vermektir.

Bu, bir parlaklık miktarı seçmek için bir yüzdeyi temsil eden bir kayan nokta olarak minimum ve maksimum aralığı belirten ImageDataGenerator() yapıcısına brightnes_range argümanı belirtilerek başarılabilir.

1.0’dan küçük değerler görüntüyü koyulaştırır, örn. [0.5, 1.0], 1.0’dan büyük değerler ise görüntüyü aydınlatır, örn. [1.0, 1.5], burada 1.0’ın parlaklık üzerinde hiçbir etkisi yoktur.

Aşağıdaki örnek, üreticinin görüntüyü 1,0 (değişiklik yok) ile 0,2 veya %20 arasında rastgele karartmasına olanak tanıyan bir parlaklık görüntü büyütmesini göstermektedir.

datagen = ImageDataGenerator(brightness_range=[0.2, 1.0])
it = datagen.flow(samples, batch_size=1)

for i in range(9):
    plt.subplot(330 + 1 + i)
    batch = it.next()
    image = batch[0].astype('uint8')
    plt.imshow(image)
plt.show()

Tekniğimizin çıktısı da şu şekilde olacaktır:

data augmentation 4

5- Rastgele Yakınlaştırma Tekniği

Yakınlaştırma büyütme, görüntüyü rastgele yakınlaştırır veya görüntünün etrafına yeni piksel değerleri ekler yada sırasıyla piksel değerlerini enterpolasyon yapar.

Görüntü yakınlaştırma, ImageDataGenerator yapıcısının zoom_range argümanı ile yapılandırılabilir. Yakınlaştırmanın yüzdesini tek bir kayan nokta veya bir dizi veya demet olarak bir aralık olarak belirtebilirsiniz.

Bir kayan nokta belirtilirse, yakınlaştırma aralığı [1-değer, 1+değer] olacaktır. Örneğin, 0,3 belirtirseniz, aralık [0,7, 1,3] veya %70 (yakınlaştırma) ile %130 (uzaklaştırma) arasında olacaktır.

Yakınlaştırma miktarı, her bir boyut (genişlik, yükseklik) için ayrı ayrı yakınlaştırma bölgesinden rastgele rastgele örneklenir.

Yakınlaştırma sezgisel gelmeyebilir. 1.0’dan küçük yakınlaştırma değerlerinin görüntüyü yakınlaştıracağını unutmayın, ör. [0.5,0.5] görüntüdeki nesneyi %50 daha büyük veya daha yakın yapar ve 1.0’dan büyük değerler görüntüyü uzaklaştırır, ör. [1.5, 1.5] görüntüdeki nesneyi %50 küçültür ve uzaklaştırır. [1.0,1.0] yakınlaştırmanın bir etkisi yoktur.

datagen = ImageDataGenerator(zoom_range=[0.5, 1.0])
it = datagen.flow(samples, batch_size=1)

for i in range(9):
    plt.subplot(330 + 1 + i)
    batch = it.next()
    image = batch[0].astype('uint8')
    plt.imshow(image)
plt.show()

Yukarıdaki kod bloğunda uygulanan yakınlaştırma tekniğinin çıktısı şu şekilde olacaktır:

data augmentation 5

Özetlersek, bu yazımızda, derin öğrenme sinir ağlarını eğitirken görüntü verisi büyütmenin nasıl kullanılacağını keşfettiniz.

Özellikle şunları öğrendiniz:

  • Modelin performansını ve genelleştirme yeteneğini geliştirmek için eğitim veri setini genişletmek için görüntü verisi büyütme kullanılır.
  • Görüntü verisi büyütme, ImageDataGenerator sınıfı aracılığıyla Keras derin öğrenme kitaplığında desteklenir.
  • Kaydırma, çevirme, parlaklık ve yakınlaştırma görüntü verisi büyütme nasıl kullanılır.
einac
Tags: DataDerin ÖğrenmeMakine ÖğrenimiVeri BilimiYapay Zeka
SendTweet8Share2Share
Önceki Gönderi

Güvenli Mobil Uygulama Geliştirme İpuçları #Flutter

Sonraki Gönderi

Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

İlgili Yazılar

VGG-19 Transfer Learning ile Görüntü Sınıflandırma

VGG-19 Transfer Learning ile Görüntü Sınıflandırma

by Ali Murat Çevik
Eylül 12, 2022
0

VGG19 Nedir? VGG19, adını Oxford Üniversitesi’nde bulunan “Visual Geometry Group” isimli gruptan almaktadır. Sonda bulunan 19 ise katman sayısını belirtmektedir....

Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı

Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı

by Emre İnaç
Ağustos 23, 2022
0

CHATBOT NEDİR ? Chatbot, bir cihazda, (Siri, Alexa, Google Asistan vb.), uygulamada, web sitesinde veya diğer ağlarda bulunan yapay zeka...

Makine Öğrenimi Nedir?

Makine Öğrenimi Nedir?

by Emre İnaç
Ağustos 4, 2022
0

Makine Öğrenimi (ML), Yapay Zeka(AI)’ nın bir alt sınıfıdır. Makine öğrenimi; insana ait akıllı karar verme ve tahmin davranışlarını taklit...

Makine Öğreniminde Aşırı Öğrenme (Overfitting) Durumu

Makine Öğreniminde Aşırı Öğrenme (Overfitting) Durumu

by Ali Murat Çevik
Eylül 10, 2021
0

Merhabalar, bu yazıda makine öğrenimi alanında sıkça karşılaşılan aşırı öğrenme (overfitting) - ezber problemine değineceğim. “Aşırı öğrenme (overfitting) nedir?”, “Nasıl...

Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

by Emre İnaç
Temmuz 26, 2021
2

Bu makale, YOLO v4 teknolojisini kullanarak özelleşmiş nesne algılama ve nesne sınıflandırma için izlenmesi gereken işlemleri adım adım anlatan bir...

Next Post
Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Google Cloud Teknolojileri

Google Cloud Teknolojileri

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

  • Popüler
  • Yorumlar
  • En Yeniler
Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Temmuz 26, 2021
B Ağaçları (B Trees)

B Ağaçları (B Trees)

Ağustos 24, 2020
Splash Screen Yapımı #Flutter

Splash Screen Yapımı #Flutter

Mayıs 25, 2020
Gini Index Kullanılarak Karar Ağacının (Decision Tree)  Oluşturulması

Gini Index Kullanılarak Karar Ağacının (Decision Tree) Oluşturulması

Ağustos 20, 2020
2020 ‘nin En Güncel ve Tehlikeli Zararlı Yazılımları

2020 ‘nin En Güncel ve Tehlikeli Zararlı Yazılımları

6
Magento 2 Detaylı Kurulum & Hatalar

Magento 2 Detaylı Kurulum & Hatalar

5
Flutter’da TFLite Kullanımı

Flutter’da TFLite Kullanımı

4
Bubble Sort (Kabarcık Sıralama) Algoritması

Bubble Sort (Kabarcık Sıralama) Algoritması

2
VGG-19 Transfer Learning ile Görüntü Sınıflandırma

VGG-19 Transfer Learning ile Görüntü Sınıflandırma

Eylül 12, 2022
SOC Sistemler Üzerine Faydalı Notlar

SOC Sistemler Üzerine Faydalı Notlar

Eylül 2, 2022
Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı

Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı

Ağustos 23, 2022
Makine Öğrenimi Nedir?

Makine Öğrenimi Nedir?

Ağustos 4, 2022

Reklam

Yazılım Karavanı | Bilişim – Teknoloji – Blog

Bilgi Teknolojileri alanına meraklı herkesin buluşma noktası!

No Result
View All Result
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar

© 2020 Yazılım Karavanı Kaynak gösterilmesini rica ederiz.