Pengantar Augmentasi Data untuk Gambar, Menggunakan ImageDataGenerator Tensorflow – Menuju AI – Teknologi, Sains, dan Teknik Terbaik

Penulis: Ankur Manikandan

Visi Komputer, Pembelajaran Mesin

Foto oleh Kyle Glenn di Unsplash

Model yang terlalu pas ke data pelatihan adalah masalah yang biasa dihadapi ilmuwan data dan peneliti pembelajaran mesin secara teratur. Berbagai teknik tersedia untuk mengurangi pemasangan yang berlebihan; dalam artikel ini, kami akan fokus pada Augmentasi Data.

Kerusakan:
1. Apa itu augmentasi data?
2. Kapan melakukan augmentasi data?
3. Augmentasi data menggunakan ImageDataGenerator

Apa itu augmentasi data?

Augmentasi data adalah teknik yang memanfaatkan transformasi atau pengambilan sampel berlebihan untuk mengembangkan kumpulan data asli secara artifisial. [1] Contoh transformasi gambar adalah rotasi gambar, mengubah kecerahan gambar, membalik gambar secara horizontal atau vertikal, dll.

Kapan melakukan augmentasi data?

Deep Learning telah membantu kami mencapai performa canggih pada tugas-tugas computer vision. Meski demikian, mereka rentan terhadap overfitting. Mari kita lihat contoh sederhana –

Katakanlah Anda ingin membangun jaringan saraf untuk mengidentifikasi Toyota Corolla. Anda telah mengumpulkan data pelatihan, dan gambar Anda sangat mirip dengan yang ditunjukkan di bawah ini.

Gambar dua Toyota Corolla yang dikendarai di jalan.Toyota Corolla. Sumber (kiri): Motortrend, Sumber (kanan): Car And Driver

Anda ingin menguji model Anda di alam liar. Katakanlah Anda menemukan gambar berikut.

Gambar Toyota Corolla sedang dikendarai di jalan.Toyota Corolla. Sumber: edmunds

Perhatikan mobil menghadap ke arah yang berlawanan dibandingkan dengan gambar latihan Anda. Mengingat gambar seperti itu, model Anda mungkin gagal mengidentifikasi mobil tersebut adalah Toyota Corolla. Jika Anda memiliki set data pelatihan dengan gambar yang terlihat sangat mirip satu sama lain, model Anda akan gagal mempelajari fitur yang relevan dan tidak akan dapat menggeneralisasi gambar yang dilihatnya di dunia nyata. Untuk menghindari masalah ini, kita dapat menerapkan teknik augmentasi data untuk mengurangi penyesuaian berlebih dan meningkatkan kemampuan generalisasi model.

Sangat penting untuk tidak terbawa oleh augmentasi data dan menerapkan transformasi yang berada di luar konteks dunia nyata.

Gambar terbalik dari Toyota Corolla yang dikendarai di jalan raya.Toyota Corolla (dibalik secara vertikal). Sumber: edmunds

Terapkan transformasi yang berada dalam konteks masalah yang Anda coba selesaikan.

Augmentasi data menggunakan ImageDataGenerator

Kami akan menggunakan Set Data Mobil Stanford untuk tutorial ini. Anda dapat mengikuti kodenya melalui Google Colab.

Datasetnya besar. Untuk tutorial ini, kami akan memberikan contoh beberapa gambar untuk memahami augmentasi data.

Plot 10 gambar mobil.  Setiap mobil memiliki merek dan model yang berbeda.Gambar sampel. Sumber: Gambar oleh penulis

Selanjutnya, kami akan menentukan parameter generator gambar.

DATA_AUG_BATCH_SIZE = 2 # ukuran tumpukan untuk augmentasi data
img_size = (224, 224) # memasukkan ukuran gambar ke model # Jumlah langkah untuk melakukan augmentasi data
n_steps_data_aug = np.ceil (df_sample.shape[0]/DATA_AUG_BATCH_SIZE).astype(int) Kami mendefinisikan ukuran batch untuk generator gambar. Ini serupa dengan kumpulan dalam pelatihan model. img_size adalah ukuran gambar yang dibutuhkan oleh model. Jika Anda menggunakan model pembelajaran transfer tertentu memiliki spesifikasi sendiri untuk ukuran input gambar ke model. n_steps_data_aug dapat dianalogikan dengan masa dalam pelatihan model. Dalam tutorial ini, kami menghasilkan gambar baru yang sesuai dengan setiap gambar sampel. Iterasi generator kali n_steps_data_aug menghasilkan jumlah gambar yang diperlukan. # Generator data gambar. Transformasi untuk diterapkan
datagen = ImageDataGenerator (skala ulang = 1. / 255,
rotasi_range = 40,
width_shift_range = 0,2,
height_shift_range = 0,2,
zoom_range = 0,2,
horizontal_flip = Benar,
brightness_range =[0.4, 1.0],
fill_mode = ‘terdekat’) skala ulang mengalikan setiap nilai piksel dengan faktor skala ulang. Ini membantu dengan konvergensi yang lebih cepat. rotation_range memutar gambar secara acak dengan sudut rotasi maksimum, 40. width_shift menggeser gambar dengan bagian dari total lebar gambar, jika float disediakan. height_shift menggeser gambar dengan bagian dari total tinggi gambar, jika float disediakan. zoom_range memperbesar gambar. Nomor acak dipilih dalam rentang tersebut, [1-zoom_range, 1+zoom_range]. horizontal_flip membalik gambar secara acak, secara horizontal. brightness_range mengubah kecerahan gambar. Nomor acak dipilih dalam kisaran yang disediakan. fill_mode mengisi ruang kosong pada gambar menggunakan berbagai teknik yang dipilih oleh pengguna. Ruang kosong terjadi saat gambar digeser sepanjang lebar atau tingginya.

Jika Anda ingin mempelajari lebih lanjut tentang transformasi dan opsi lainnya, kunjungi TensorFlow Core v2.4.1 – ImageDataGenerator.

Ada beberapa cara untuk meneruskan gambar ke pembuat data.

flow: Anda melewatkan data gambar dan melabeli data sebagai array. flow_from_dataframe: Anda meneruskan dataframe dan jalur ke direktori yang berisi gambar. Dataframe memiliki dua kolom, satu kolom berisi jalur file relatif terhadap jalur direktori, dan kolom kedua berisi label. flow_from_directory: Anda melewati jalur direktori yang berisi gambar yang dikategorikan berdasarkan subdirektori. Setiap subdirektori terkait dengan label – contoh struktur jalur file, imgs / dogs / img01.png, imgs / cats / img01.png. Ada dua kelas, anjing dan kucing.

Kami akan menggunakan flow_from_dataframe untuk memberi makan gambar ke generator data. Di bawah ini Anda dapat melihat bagaimana dataframe disusun. Di notebook Google Colab, Anda dapat melihat kode untuk melihat bagaimana saya membuat dataframe ini.

Gambar berisi beberapa data yang direpresentasikan dalam format tabel.Dataframe dengan nama file gambar dan label yang sesuai. Sumber: Gambar oleh penulis # Mengumpankan gambar ke generator data
aug_gen = datagen.flow_from_dataframe (dataframe = df_sample, directory = img_path, save_to_dir = aug_img_path, save_prefix = ‘aug’, save_format = ‘jpeg’, x_col = “fname”, y_col = “class”, batch_size = DATA_AUG_BATCH_ED shuffle = False, class_mode = “kategorikal”, target_size = img_size) Keluaran:
Ditemukan 10 nama file gambar yang divalidasi milik 10 kelas.

Kode di atas memasukkan gambar ke generator data. df_sample adalah dataframe yang saya tunjukkan di atas. Jika Anda ingin menyimpan gambar ke direktori, berikan jalur ke save_to_dir. ImageDataGenerator menyimpan gambar yang dihasilkan dengan nama file yang ditentukan oleh pola: prefix_idx_randn

prefix: prefix disediakan oleh user idx: indeks titik data di dataframe diumpankan ke generator randn: nomor acak # Nama file yang dihasilkan
[‘aug_1_5664789.jpeg’, ‘aug_7_631054.jpeg’, ‘aug_5_6028627.jpeg’, ‘aug_4_8351445.jpeg’, ‘aug_0_9784633.jpeg’, ‘aug_6_5123896.jpeg’, ‘aug_2_3921660.jpeg’, ‘aug_3_7757856.jpeg’, ‘aug_8_8252162.jpeg’, ‘aug_9_5698539.jpeg’]

Hasilkan gambar baru.

# Jalankan generator data
untuk saya dalam jangkauan (n_steps_data_aug):
next (aug_gen) # Jumlah gambar yang diperbesar yang dibuat
aug_file_nm = os.listdir (aug_img_path)
number_files = len (aug_file_nm)
print (“Jumlah gambar baru yang dihasilkan: {}”. format (number_files)) Output:
Jumlah gambar baru yang dihasilkan: 10

Kami menggunakan n_steps_data_aug untuk mengontrol berapa kali menjalankan generator data. Sebelumnya di artikel, saya menyebutkan bahwa kami ingin menghasilkan satu gambar baru untuk setiap gambar sampel.

Plot 10 gambar mobil.  Setiap mobil memiliki merek dan model yang berbeda.Gambar asli. Sumber: Gambar oleh penulisPlot 10 gambar mobil.  Setiap gambar mobil telah diubah, seperti, dibalik dan diputar.Gambar yang diubah. Sumber: Gambar oleh penulis

Beberapa gambar mungkin tidak menyerupai data dunia nyata, jadi berhati-hatilah saat menerapkan transformasi ke gambar.

Terakhir, jika Anda ingin mengaitkan kelas yang sesuai dengan gambar yang dihasilkan, Anda dapat membagi nama file yang dihasilkan, mengekstrak indeks dan menentukan labelnya. Kode untuk menentukan label yang sesuai tersedia di notebook Google Colab.

Dua gambar mobil yang sama.  Gambar di sebelah kiri adalah asli dan gambar di sebelah kanan telah diubah.  Gambar telah dibalik secara horizontal, diputar dan diperbesar.Menggunakan indeks Anda dapat menentukan label yang terkait dengan gambar yang dihasilkan. Sumber: Gambar oleh penulis

Saya harap artikel ini bermanfaat dan memberi Anda pemahaman tingkat tinggi tentang ImageDataGenerator Tensorflow. Jika Anda ingin mendalami augmentasi data lebih dalam, berikut adalah beberapa sumber:

Referensi

[1] Shorten, C., Khoshgoftaar, TM Sebuah survei tentang Augmentasi Data Gambar untuk Pembelajaran Mendalam. J Big Data 6, 60 (2019). https://doi.org/10.1186/s40537-019-0197-0

[2] TensorFlow Core v2.4.1 – ImageDataGenerator

Pengantar Augmentasi Data untuk Gambar, Menggunakan ImageDataGenerator Tensorflow awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyorot dan menanggapi cerita ini.

Diterbitkan melalui Towards AI