Augmentasi Data Pada Computer Vision
Halo ini adalah tulisan pertama saya di medium, pada tulisan ini saya akan membahas sedikit mengenai augmentasi data pada computer vision. Tentunya augmentasi data ini dilakukan pada suatu citra. Sebelum melangkah lebih jauh, saya sudah mengilustrasikan sebuah gambar kucing diatas. Dari gambar diatas, kita sebagai manusia pasti akan dengan sangat mudah menebak bahwa gambar tersebut adalah gambar seekor kucing karena otak kita bisa dengan mudah belajar dan melakukan pengenalan terhadap suatu objek dengan sangat akurat. Namun, bagaimana dengan mesin atau komputer? Mesin/komputer belajar dan melakukan pengenalan terhadap objek dengan cara mengamati sebuah pola. Hal ini menimbulkan suatu masalah apabila mesin belajar dari data citra dengan posisi kucing duduk seperti dibawah ini. Kemudian ada citra lain dengan posisi kucing sedang tidur, maka mesin akan kesulitan untuk mengenalinya karena pola dari objek pada citra tersebut sudah berbeda posisinya. Untuk mengatasi masalah tersebut, pada computer vision ada sebuah teknik yang dinamakan augmentasi data.
Augmentasi data merupakan proses memodifikasi atau memanipulasi suatu citra, sehingga citra asli dalam bentuk standar akan diubah bentuk dan posisinya. Contoh penggunaan augmentasi data dapat dilihat pada gambar dibawah ini. Augmentasi data bertujuan agar mesin dapat belajar dan mengenali dari berbagai citra yang berbeda-beda sekaligus bisa dimanfaatkan untuk memperbanyak data. Pada kebanyakan kasus, penggunaan augmentasi data berhasil meningkatkan performa dari model. Peningkatan tersebut terjadi karena mesin berhasil mengenali lebih banyak objek dari bentuk dan pola yang beragam jenisnya. Dapat dilihat juga pada gambar dibawah ini, satu citra saja bisa menghasilkan banyak citra baru dengan posisi yang beragam.
Augmentasi data ini penting untuk dilakukan dengan mempertimbangkan banyak keuntungan yang bisa didapatkan seperti yang sudah dijelaskan sebelumnya. Lebih lanjut pada deep learning, augmentasi data juga akan sangat membantu mengatasi masalah umum pada deep learning yaitu data hungry (membutuhkan banyak data) karena setiap data akan mendapatkan data baru dari augmentasi yang dilakukan. Data baru tersebut bisa didapatkan lebih banyak lagi apabila kita mengkombinasikan beberapa jenis augmentasi data. Sehingga, satu citra bisa terdapat banyak sekali jenis augmentasinya. Ada beberapa jenis augmentasi data yang cukup populer dan sering kali digunakan yang akan dibahas di bawah ini. Augmentasi data yang saya lakukan menggunakan salah satu framework deep learning yaitu Pytorch.
Flip
Flip merupakan salah satu jenis augmentasi data yang berfungsi untuk membalik posisi suatu citra secara vertical ataupun horizontal. Namun perlu diketahui juga, tidak semua citra “boleh” dilakukan flip. Flip yang tidak sesuai akan membuat suatu citra menjadi tidak masuk akal. Contohnya citra gedung, suatu gedung akan menjadi tidak masuk akal jika dilakukan vertical flip karena posisinya akan berubah menjadi diatas. Hal tersebut yang perlu dicegah karena akan membuat model kebingungan menemukan pola nya. Untuk contoh kasus citra gedung tersebut bisa dilakukan flip secara horizontal saja. Namun, ada beberapa citra lain yang “bisa” dilakukan flip vertical seperti bunga. Dibawah ini juga saya cantumkan kode yang digunakan untuk melakukan vertical dan horizontal flip menggunakan PyTorch
Random Crop
Augmentasi data jenis ini pada prosesnya akan melakukan crop (pemotongan) terhadap citra. Crop dilakukan secara random, namun kita diberikan parameter size yang harus kita tentukan untuk melakukan crop. Sebagai contoh pada kasus dibawah ini saya menggunakan crop size 256 agar tidak terlalu zoom in cropnya. Penggunaan nilai parameter size yang terlalu kecil akan membuat citra terlalu zoom in dan menjadi tidak valid. Sangat disarankan untuk tidak menggunakan nilai crop size yang terlalu kecil dan disesuaikan lagi dengan citra yang digunakan.
Berikut juga ada contoh penggunaan nilai size yang terlalu kecil. Jika terlalu kecil maka akan membuat gambar menjadi tidak valid.
Random Rotation
Random rotation, seperti namanya akan melakukan rotasi sebuah citra. Rotasi yang dilakukan beragam, namun kita diberikan nilai derajat (degrees) yang bisa kita tentukan. Sebagai contoh pada gambar dibawah saya memberikan nilai 20 derajat. Agar rotasi rotasi maksimal yang dilakukan hanyalah sebesar 20 derajat.
Random Resize Crop
Jika pada jenis augmentasi sebelumnya hanya dilakukan crop, pada random resize crop akan dilakukan perubahan ukuran (resize) terlebih dahulu sebelum citra tersebut di potong (crop). Parameter yang digunakan pun sama dengan crop yaitu nilai size yang bisa kita tentukan sendiri. Namun, kita tetap harus memperhatikan agar tidak memberikan nilai yang terlalu besar atau terlalu kecil.
Center Crop
Center crop akan menghasilkan sebuah citra yang terpotong persis di bagian tengah. Terhadap parameter size yang kita juga diberikan kebebasan dalam menentukan nilainya. Nilai yang terlalu kecil akan membuat citra memotong tepat ke tengah dan apabila terlalu besar akan membuat citra tidak terpotong tepat di tengah dan malah akan menjadi kecil. Bisa dicoba langsung saja ya untuk melihat perbedaannya :)
Random Affine
Random affine disini akan membuat sebuah citra sedikit bergeser posisinya. Pada random affine terdapat beberapa parameter yang disediakan. Degrees digunakan untuk membuat posisi citra berotasi. Parameter ini mirip dengan random rotation. Kemudian ada juga parameter translate dan shear yang akan dijelaskan di bawah ini.
Translate
Parameter translate akan membuat citra bergeser posisinya seperti gambar dibawah. Nilai parameter translate ini ada dua, yaitu nilai minimal dan maksimal yang bisa diisikan di antara rentang 0 sampai 1. Sebagai contoh disini saya menggunakan nilai rentang minimal yaitu 0.3 dan maksimal 0.3. Artinya saya ingin agar pergeseran hanya sebesar 0.3 saja. Sebaiknya menggunakan parameter nilai maksimal yang tidak sampai satu karena hal tersebut akan membuat citra menjadi bergeser terlalu jauh seperti gambar kedua dibawah ini.
Shear
Shear akan memiringkan posisi citra seperti dibawah ini. Nilai yang digunakan sebaiknya tidak terlalu besar juga karena akan membuat citra menjadi gepeng (mungkin bisa dicoba sendiri ya apabila nilainya terlalu besar). Sebenarnya kedua parameter pada random affine ini bisa digunakan secara bersamaan yaitu shear dan translate, namun saya memberikan contoh terpisah disini agar bisa terlihat jelas perbedaannya.
Color Jitter
Sesuai dengan namanya, color jitter akan memanipulasi warna pada citra. Ada dua parameter yang bisa digunakan disini, yaitu brightness untuk merubah kecerahan citra dan contrast untuk merubah kontras pada citra tersebut. Kedua parameter ini juga bisa digunakan secara bersamaan dan dipisah.
Brightness
Contrast
Kesimpulan
Augmentasi data adalah salah satu teknik yang penting untuk dilakukan pada computer vision. Manfaat yang didapatkan juga sangat terasa, karena akan membuat mesin mampu mengenali dari berbagai citra yang berbeda sekaligus juga bisa menambah data secara tidak langsung. Tentunya masih banyak jenis augmentasi data selain yang disebutkan pada tulisan ini. Untuk lebih jelasnya bisa langsung mencoba untuk eksplorasi lebih lanjut. Semoga bermanfaat.