Jadi saya baru-baru ini dapat ajakan untuk membuat sebuah aplikasi yang menggunakan metode object detection untuk mengetahui objek apa saja yang ada pada citra dan posisinya di mana melalui tangkapan kamera Handphone. Show Membuat model object detection bukanlah suatu yang mudah, dan menjadikannya bisa dijalankan di Handphone adalah masalah yang lain lagi. Pada artikel ini saya akan coba jelaskan bagaimana membuat sebuah model object detection menggunakan custom dataset buatan sendiri yang nantinya dapat diaplikasikan ke mobile (Android/IOS). Artikel ini fokus ke tahap pertama, yakni penyiapan data. Tensorflow Object Detection APIKami menggunakan framework Tensorflow untuk menyelesaikan permasalahan ini. Ada beberapa pertimbangan kenapa framework ini cukup cocok untuk melakukan object detection melalui handphone:
Pada artikel ini Kami akan menggunakan Tensorflow versi 2. Tensorflow dan Tensorflow object detection diinstall secara terpisah. Detailnya bisa dilihat sesuai dokumentasi resminya (bisa update setiap waktu) atau di artikel selanjutnya. Dataset untuk Object DetectionFormat dataset untuk Object Detection berbeda dengan dataset yang digunakan pada klasifikasi citra biasa. Data yang digunakan untuk kasus deteksi objek biasa memiliki label berupa file terpisah yang mencatat nama objek dan lokasi objek tersebut pada suatu citra. File label ini seringnya disebut file anotasi. Terdapat dua style penulisan file anotasi yang cukup populer, yakni style COCO dataset dan PASCAL-VOC. Pada tutorial ini Kami menggunakan format PASCAL-VOC XML dengan contoh tampilan seperti berikut: <annotation> <folder>My Drive</folder> <filename>Image1.jpg</filename> <path>C:\My Drive\Image1.jpg</path> <source> <database>Unknown</database> </source> <size> <width>1280</width> <height>720</height> <depth>3</depth> </size> <segmented>0</segmented> <object> <name>Object 1</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>925</xmin> <ymin>343</ymin> <xmax>1097</xmax> <ymax>464</ymax> </bndbox> </object> </annotation> Jadi pada contoh di atas saya punya file citra “Image1.jpg” dan file XML “Image1.xml”. Isi dari file XML nya adalah data di atas. Berisikan koordinat objek yang ingin dideteksi. Pembuatan file XML ini tidak perlu dibuat manual (diketik satu persatu), kita bisa menggunakan software anotasi. Anotasi citra diatas dibuat menggunakan software labelimg. Penyiapan DatasetDataset dengan format di atas belum bisa langsung diproses oleh Tensorflow. Ada beberapa penyesuaian data yang perlu dilakukan sebelum masuk ke proses model training, kira-kira alur pemrosesan datanya akan seperti ini:
Perlu diperhatikan, untuk memudahkan semisal perlu ada pembagian data train, data validation, dan data test, proses pemisahan ini dilakukan sebelum konvert ke CSV ya, jadi ilustrasi di atas hanya untuk salah satu set, data train misalnya. 1. Struktur Folder PenyimpananSebelum mulai, kita samakan dulu struktur folder penyimpanannya. Berikut struktur folder yang biasa saya gunakan:
Jadi kita punya folder “DATASET” lalu di dalamnya ada 3 buah subfolder, train, test, dan validation. Masing-masing folder tersebut berisikan image dan file xml nya. Di sini file image bisa jadi terdiri dari beberapa kelas (seperti contoh gambar di atas artikel ini). Image dengan nama yang berbeda harus merujuk ke citra yang memang berbeda. Source CodePada artikel ini saya menggunakan script-script yang saya modifikasi dari internet. Script-script tersebut dapat diakses di https://github.com/rianrajagede/object-detection. Ada 2 cara penggunaan script tersebut:
2. Membuat file CSVSetelah folder telah siap, proses selanjutnya adalah membuat sebuah file csv untuk setiap subfolder. Sebenarnya proses ini tidak wajib, tapi mengulik data dalam format xml yang terpisah-pisah menurut saya jauh lebih sulit. Silakan gunakan script yang telah saya sedikit modifikasi dari internet, python xml_to_csv.py --type train python xml_to_csv.py --type test python xml_to_csv.py --type validation Setelah program tersebut dijalankan nanti akan didapat 3 buah file: python xml_to_csv.py --type train python xml_to_csv.py --type test python xml_to_csv.py --type validation0. Masing-masing file menyimpan “ringkasan” data untuk masing-masing subfolder. 2.5 Membuat file Label MapSebelum membuat file TFrecord kita perlu membuat dulu file labelmap. File labelmap berisi daftar keseluruhan label yang ada pada dataset. Untuk data dengan jumlah label yang sedikit, membuat labelmap tidak lah sulit secara manual, formatnya kira-kira seperti ini: item{ id: 1 name: 'KUDA' } item{ id: 2 name: 'MOBIL' } ... Tapi karena di beberapa proyek, label objek pada dataset cukup banyak, maka saya sudah buatkan script yang meng-generate secara otomatis, python xml_to_csv.py --type train python xml_to_csv.py --type test python xml_to_csv.py --type validation1. Copy script tersebut ke dalam folder DATASET, lalu jalankan python xml_to_csv.py --type train python xml_to_csv.py --type test python xml_to_csv.py --type validation1 dengan perintah di bawah. Perlu diperhatikan, ketika perintah ini dijalankan pastikan sudah tersedia train_labels.csv dan pastikan juga semua label ada di data train.python generate_labelmap.py Setelah dijalankan maka akan diperoleh python xml_to_csv.py --type train python xml_to_csv.py --type test python xml_to_csv.py --type validation4 yang berisikan daftar semua label yang ada di data train. Membuat file tfrecordLangkah terakhir yang perlu dilakukan adalah membuat file tfrecord. File ini adalah objek penyimpanan data yang didesain oleh tensorflow untuk kemudahan pengaksesan data di tensorflow. Jalankan file python xml_to_csv.py --type train python xml_to_csv.py --type test python xml_to_csv.py --type validation5 dengan perintah di bawah (maksud dari python xml_to_csv.py --type train python xml_to_csv.py --type test python xml_to_csv.py --type validation6 adalah script ini untuk tensorflow versi 2): python generate_tfrecord_v2.py --csv_input train_labels.csv --image_dir train --labelmap_dir label_map.pbtxt --output_path train.record Perintah di atas akan mengkombinasikan python xml_to_csv.py --type train python xml_to_csv.py --type test python xml_to_csv.py --type validation4 dan image pada folder train menjadi sebuah file python xml_to_csv.py --type train python xml_to_csv.py --type test python xml_to_csv.py --type validation9 yang sudah dapat digunakan untuk proses pelaithan dengan tensorflow. Untuk data yang besar, proses ini bisa memakan waktu paling lama komputasinya. Lakukan langkah-langkah di atas ke data test dan validation dengan mengubah beberapa parameter pentingnya (nama file, path, dsb). Setelah mendapatkan ketiga file .record maka langkah selanjutnya adalah proses pelatihan model! InsyaAllah akan kami bahas di artikel selanjutnya. Semoga bermanfaat! |