You Only Look Once (YOLO) Algoritma Deep Learning Object Detection Terbaik

Original article can be found here (source): Deep Learning on Medium

You Only Look Once (YOLO) Algoritma Deep Learning Object Detection Terbaik

Ada banyak sekali algoritma Machine Learning dan Deep Learning sekarang ini. Sebut saja di Machine Learning ada beberapa jenis algoritma seperti KNN, Decision Tree, Logistic Regression, KMeans dan DBSCAN. Begitupula dengan algoritma deep learning seperti CNN & RNN (Supervised) dan RBM & Autoencoder (Unsupervised). Semua algoritma diatas mempunyai kegunaan di bidang masing-masing, tergantung kita ingin menggunakan itu semua untuk kasus apa. Salah satu kasus paling sering digunakan untuk deep learning adalah pendeteksian dan pengklasifikasian objek (Object Detection). Algoritma Convolutional Neural Network (CNN) merupakan algoritma yang paling banyak dipakai untuk kasus object detection, salah satu alasannya karena didukung oleh framework Tensorflow buatan Google, tetapi ternyata ada satu algoritma object detection yang mempunyai tingkat akurasi dan kecepatan proses yang lebih tinggi, yaitu You Only Look Once (YOLO) yang dapat dijalankan di 2 framework (Darknet & Darkflow) dan didukung oleh GPU.

YOLO (You Only Look Once) pertama kali diciptakan oleh Joseph Redmon pada tahun 2015 [1] adalah system deteksi objek secara real time berdasarkan CNN (Convolutional Neural Network). Pada konferensi CVPR (Conference on Computer Vision and Pattern Recognition) pada 2017, Joseph Redmon dan Ali Farhadi merilis YOLO v2 telah meningkatkan akurasi dan kecepatan algoritma [2]. Pada April 2018, Joseph Redmon dan Ali Farhadi merilis YOLO v3 terbaru dimana memiliki performance / kinerja yang semakin meningkat pada deteksi objek [3].

YOLO v1

  1. Ide Dasar

YOLO membagi gambar atau video yang diinput menjadi S X S grid. Jika titik tengah koordinat pada GT (Ground Truth) suatu objek jatuh ke dalam grid, maka grid tersebut bertanggung jawab untuk mendeteksi suatu objek. Inovasi dari YOLO adalah mereformasi framework dari Region Proposal detection: seri R-CNN perlu menghasilkan region proposal dimana untuk melengkapi proses klasifikasi dan regresi. Tetapi ada overlap (tumpang tindih) dimana region proposal akan membawa banyak proses yang berulang. Namun, YOLO memprediksi bounding box dari objek yang berada di semua grid, kemungkinan lokasi dan probabilitas dari semua class pada satu waktu, dengan demikian YOLO menyelesaikan semua masalah dalam satu kali proses saja.

2. Struktur Jaringan

Jaringan YOLO mirip seperti Google Net sementara perbedaannya adalah bahwa YOLO mengunakan 1 x 1 convolutional layer (untuk integrasi antar channel) + 3 x 3 convolutional layer sebagai pengganti permulaan modul. Struktur jaringan pada YOLO v1 mengandung 24 convolutional layers dan 2 full connection layers.

YOLO v1 Network Architecture

YOLO v2

  1. Pengenalan YOLO v2

Tujuan umum dari object detection yaitu harus cepat, akurat dan mampu mengenali berbagai objek. Sejak pengenalan tentang neural network (jaringan syarat tiruan), banyak framework deteksi objek menjadi semakin cepat dan akurat. Namun kebanyakan metode deteksi tersebut masih terbatas pada objek-objek tertentu. Dataset deteksi objek saat ini sangat terbatas dan membutuhkan waktu yang sangat lama untuk melatih suatu objek untuk klasifikasi dengan ribuan gambar.

Joseph Redmon dan Ali Farmadi kemudian memutuskan untuk membuat metode baru untuk memanfaatkan jumlah besar data yang sudah disediakan untuk digunakan dan memperluas ruang lingkup system deteksi saaat ini. Mereka juga mengusulkan algoritma untuk melatih data-data berbeda yang diinginkan sesuai dengan keinginan untuk proses deteksi dan klasifikasi objek. Metode dan algoritma tersebut adalah YOLOv2, dimana disediakan 9000 objek berbeda dan menghasilkan proses deteksi dan klasifikasi yang lebih akurat dibandingkan YOLOv1.

2. Performa Lebih Baik

YOLO v2 berfokus pada meningkatkan lokalisasi pada objek dan meningkatkan akurasi dari proses klasifikasi. Joseph Redmond dan Ali Farmadi pada YOLO v2 ini ingin lebih akurat dimana proses pendeteksian menjadi lebih cepat. Alih-alih meningkatkan struktur jaringan, mereka menyederhanakan jaringan dan membuat representasi proses menjadi lebih mudah dipelajari.

Batch Normalization. Batch normalization mengarah ke peningkatan yang signifikan dalam konvergensi ketika menghilangkan kebutuhan bentuk regulasi yang lain [4]. Dengan menambahkan batch normalization pada semua convolutional layers di YOLO kita mendapatkan peningkatan lebih dari 2% di maP. Batch normalization juga membantu meregulasi / mengatur model. Menggunakan batch normalization kita dapat menghilangkan dropout dari model tanpa overfitting.

High Resolution Classifier. Pada YOLO v1 melatih jaringan classifier pada 224 x 224 dan pada YOLO v2 ditingkatkan resolusinya menjadi 448 x 448 untuk proses deteksi. Pertama-tama dalam proses klasifikasi menggunakan resolusi 448 x 448 untuk 10 epoch. Ini memberikan waktu proses filters lebih lama dengan resolusi yang lebih tinggi untuk input. Hasil yang didapatkan dengan menggunakan resolusi ini adalah mendapatkan peningkatan hampir 4% tingkat akurasi maP.

Convolutional With Anchor Boxes. Pada YOLOv1, fully connected layer digunakan untuk memprediksi koordinat bounding box secara langsung setelah convolutional layer. YOLOv2 menghapus fully connected layer dengan menggunakan ide faster R-CNN, dan menambahkan Anchor Boxes, yang secara efektif meningkatkan tingkat recall. Pertama YOLO menghilangkan satu pooling layer untuk membuat output dari convolutional layer menjadi lebih tinggi resolusinya.YOLO juga memperkecil jaringan dari 448 x 448 menjadi 416 x 416. YOLO melakukan ini karena ingin jumlah ganjil pada lokasi pada feature map sehingga ada sel pusat tunggal. Convolutional layers pada YOLO menurunkan sampel (downsample) atau reduction factor gambar dengan factor 32 sehingga dengan menggunakan input gambar 416 kita mendapatkan output feature map sebesar 13 x 13. Menggunakan anchor boxes juga meningkatkan akurasi. YOLO hanya dapat memprediksi 98 bounding boxes per image tetapi dengan anchor boxes model dapat memprediksi lebih dari 1000.

Multi-Scale Training. Original YOLO menggunakan input dengan resolusi 448 x 448. Dengan menambahkan anchor boxes YOLO mengubah resolusi menjadi 416 x 416. Namun, sejak YOLO model hanya menggunkan convolutional dan pooling layers itu bisa mengubah ukurannya secara cepat. Kita ingin YOLOv2 kuat untuk dijalankan pada gambar dengan ukuran-ukuran yang berbeda sehingga YOLO melatih ini kedalam model. Alih-alih memperbaiki ukuran image pada input, kita mengubah jaringan setiap beberapa iterasi. Setiap 10 batch pada jaringan secara acak memilih ukuran dimensi gambar baru. Sejak model downsample menggunakan factor 32, kita tarik hasil dari kelipatan 32 yaitu 32: {320, 352, … 608}. Jadi pilihan terkecil adalah 320 x 320 dan terbesarnya 608 x 608. Ini artinya dengan jaringan yang sama YOLO dapat memprediksi deteksi dengan resolusi yang berbeda sehingga YOLO v2 menawarkan tradeoff yang mudah antara kecepatan dan akurasi pada ukuran yang lebih kecil.

YOLO merupakan salah satu algoritma object detection terbaik saat ini, ditambah semua prosesnya dilakukan dengan GPU, Algoritma YOLO dapat memprediksi suatu objek dengan lebih cepat dan tingkat keakuratan yang tinggi. Sebagai gambaran berikut ini grafik perbandingan kualitas YOLO dengan metode deteksi objek lainnya.

Grafik Perbandingan YOLO dengan Algoritma Lain

Berikut ini merupakan flowchart dari proses object detection and classification menggunakan YOLO algorithm. YOLO algorithm merupakan salah satu algorithm untuk pendeteksian objek yang cara kerjanya sangat unik, yaitu hanya melihat dan memproses sebuah image hanya sekali proses. Sesuai dengan namanya You Only Look Once. YOLO merupakan algoritma yang berdasarkan pada regression (regresi) dimana dalam sekali proses running tersebut akan menghasilkan output prediksi kelas dan bounding box untuk setiap objek.

Flowchart Algoritma YOLO

Proses pertama dalam YOLO algorithm adalah menginput sebuah image atau video. Kemudian image tersebut di resize atau diubah ukurannya menjadi 416×416 pixels. Kemudian ada 2 proses paling utama dalam YOLO algorithm, yaitu Convolution dan MaxPooling. Konvolusi adalah sebuah proses dimana citra dimanipulasi dengan menggunakan eksternal mask/subwindows untuk menghasilkan citra yang baru. Proses konvolusi ini menggunakan kernel 3×3. MaxPooling adalah proses mereduksi input secara spasial (mengurangi jumlah parameter) dengan operasi down-sampling dengan mengambil nilai terbesar dari bagian tersebut. MaxPooling dalam YOLO menggunakan kernel 2×2 filters dan stride 2, artinya setiap matriks akan selalu terbagi menjadi setengahnya (416×416 menjadi 208×208 dst).

Proses Algoritma YOLO

Kedua proses ini akan terus terulang sampai menghasilkan output grid cell 13x13x125. Proses dari YOLO architecture ini akan berakhir dengan 125 channels. Angka 125 ini berisi data untuk bounding boxes dan prediksi kelas. Alasan 125 channels adalah karena setiap sel grid memprediksi 5 kotak pembatas dan sebuah kotak pembatas dideskripsikan oleh 25 elemen data.

· x, y, width(lebar), height(tinggi) untuk ukuran bounding box.

· Skor prediksi

· Distribusi probabilitas dalam 20 kelas.

YOLO membagi gambar menjadi grid 13×13 sel. Untuk setiap bounding box, sel juga memprediksi kelas. Ini berfungsi sebagai klasifikasi: YOLO memberikan probabilitas pada semua kelas yang mungkin.

Grid Sel Image YOLO

Skor kepercayaan untuk bounding box dan prediksi kelas digabungkan menjadi satu hasil akhir yang memberi tahu kemungkinan bahwa bounding box ini berisi jenis objek tertentu. Seperti contoh, bounding box berwarna kuning tebal disebelah kiri adalah 85% berisi objek “anjing”.

Prediksi Bounding Box

Karena ada 13×13 = 169 sel kotak dan masing-masing sel memprediksi 5 bounding box, jadi total ada 845 bounding box. Itu artinya ada sebagian kotak yang mempunyai skor kepercayaan rendah, jadi YOLO hanya menyimpan dan menampilkan kotak yang mempunyai skor prediksi diatas 30% (User bisa mengatur threshold tergantung seberapa akurat detector yang ingin user inginkan), maka prediksi terakhir adalah

Hasil Prediksi Bounding Box

Dari total 845 bounding box, YOLO hanya menyimpan 3 karena ketiganya memberikan hasil terbaik. Proses menghilangkan bounding box yang mempunyai skor kepercayaan yang rendah itu disebut non-max Suppression. Jadi meskipun ada 845 prediksi yang terpisah, semuanya dibuat pada waktu yang sama, neural network hanya berjalan dalam sekali proses. Itulah mengapa YOLO algorithm begitu kuat dan cepat.

Menambahkan File Yolov2

Dalam menggunakan algoritma YOLO, maka diperlukan 2 file penting untuk dapat melakukan proses object detection, yaitu file dengan ekstensi .cfg dan ekstensi .weights. Kedua file ini dapat diunduh di website resmi dari YOLO. User dapat memilih model YOLOv2 608×608 dengan men-download file cfg dan weights.

YOLO COCO Dataset Model

Selanjutnya letakkan file yolov2.cfg pada folder cfg. User juga dapat memasukkan semua file .cfg dari semua model yang disediakan oleh YOLO.

Penempatan file yolov2.cfg

Selanjutnya letakkan juga file yolov2.weights pada folder weights. Sama halnya seperti folder cfg, user juga bisa memasukkan semua file weights dengan model yang berbeda.

Penempatan file yolov2.weights

Kemudian ada satu file yang penting juga yaitu coco.data. File ini berisi jumlah class dan detail class apa saja yang tersimpan didalam file tersebut. Terdapat 80 classes yang sudah dilatih oleh COCO sehingga memudahkan user untuk mendeteksi sesuatu. Letakkan file coco.data tersebut di folder cfg.

Penempatan file coco.data

Mengatur file Yolov2.cfg

Configuration file pada YOLO merupakan kumpulan operasi dari arsitektur YOLO untuk proses object detection dan classification. Pada file ini terdapat code yaitu

[net]
# Testing
batch=1
subdivisions=1
# Training
# batch=64
# subdivisions=8
width=416
height=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

Dalam menggunakan Yolov2, batch bernilai 1, batch adalah teknik untuk meningkatkan kinerja dan stabilitas dari neural networks. Subdivison adalah proses dimana batch dibagi menjadi banyak nilai subdivision, sebuah block pada image dijalankan secara parallel pada GPU. Kemudian ukuran width, height dan channel pada saat pertama kali image diinput adalah 416x416x3. Decay berfungsi untuk mengurangi bobot untuk menghindari skor kepercayaan yang besar untuk alasan stabilitas.

[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2

Syntax selanjutnya adalah menjalankan 2 proses penting dari algoritma YOLO, yaitu convolutional dan maxpool. Syntax ini akan terus berulang dengan selalu menambah jumlah filters pada proses convolutional dengan rumus 2n+1 dimana nilai input image adalah 416x416x3 sampai menghasilkan output berupa grid 13x13x125.

[region]anchors = 0.57273, 0.677385, 1.87446, 2.06253, 3.33843, 5.47434, 7.88282, 3.52778, 9.77052, 9.16828
bias_match=1
classes=80
coords=4
num=5
softmax=1
jitter=.3
rescore=1
object_scale=5
noobject_scale=1
class_scale=1
coord_scale=1
absolute=1
thresh = .6
random=1

Pada syntax dibagian akhir, terdapat pengaturan region. Yolov2 dengan memanggil coco.data dan coco.names memiliki 80 classes, maka dari itu dalam file configuration ini harus memberikan nilai pada classes yaitu 80. Kemudian pada proses activaton functions, Yolov2 menggunakan jenis Softmax dan untuk threshold secara default bernilai 0.6. User bisa mengganti dan memodifikasi semua angka dalam yolov2.cfg ini sesuai dengan keinginan.