Deep Learning : Object Detection Menggunakan Tensorflow API
Deteksi Plat Nomor Kendaraan Bermotor
Jasa Pembuatan Project Machine Learning untuk Skripsi, Tesis, dan Disertasi. www.academy-ai.com
You can check our service Here
Hallo teman teman pecinta Deep Learning !!! Kali ini kita akan belajar bagaimana cara melakukan pendeteksian object dengan data yang kita inginkan sendiri. Pada kesempatan kali ini kita akan belajar membuat sistem pendeteksian plat nomor kendaraan menggunakan Deep Learning dengan algoritma Convolutional Neural Network.
Outline :
1. Persiapan Dataset
2. Labelling Image
3. Convert XML ke CSV
4. Generate TF Record
5. Setting Label Map
6. Konfigurasi Pipeline
7. Training
8. Export Inference Graph
9. Testing Model
Sebelum memulai Object Detection ikuti persiapan dan langkah langkah instalasi yang dibutuhkan pada tulisan sebelumnya DISINI
Langkah awal yang kita siapkan adalah menyiapkan beberapa susunan folder pada direktori kerja kita seperti dibawah ini. Temen temen bisa download full source code dan susunan direktori yang akan kita gunakan DISINI
Dalam masing-masing folder diatas terdapat file yang mengikutinya, berikut struktur file yang ada didalamnya:
Annotations : didalamnya terdapat subfolder test dan train yang masing-masing subfolder terdapat file ber extention .xml . File ini didapat dari convert image yang telah di labeling
Data : didalamya terdapat file dengan label_map .pbtxt, .record dan .csv
images : didalamnya terdapat subfolder test dan train yang masing-masing didalamya terdapat file gambar
training : didalam folder training terdapat file pipeline config yang digunakan untuk proses training object detection
generate_tfrecord.py : merupakan script file .py yang digunakan untuk convert file .csv menjadi .tfrecord
xml_to_csv.py : merupakan script file .py yang digunakan untuk convert file .xml menjadi .csv
train.py : merupakan file untuk melakukan training data
eksport_inference_graph : untuk melakukan ekstraksi model menjadi file frozen_inference_grpah.pb
Persiapan Dataset
Dalam studi kasus ini, digunakan gambar plat nomor kendaraan dengan pembagian data training dan data testing masing-masing sebnayak 350 dan 50 image, sehingga total seluruh dataset image sebanyak 400 gambar.
Labelling Image
Pemberian label pada gambar dapat disebut dengan annotations. Annotations ini nantinya akan disimpan dalam file berformat .xml. Aplikasi yang digunakan dalam pelabelan adalah LabelImg.
Berikut langkah-langkah dalam pelabelan :
1. Buka aplikasi labelImg.
2. Klik tombol “OpenDir”
3. Pilih direktori dataset gambar
4. Klik tombol “Change Save Dir” untuk menyimpan hasil file pelabelan .xml ke dalam 1 direktori yang sama (Annotation)
5. Klik tombol “Create RectBox” untuk membuat kotak area objek yang akan dikenali (klik W)
6. Arahkan kursos dan tarik area kotak disekitar objek
7. Lalu akan muncul kotak dialog untuk memberikan nama label dari objek yang akan kita kenali (Nama objek setiap kategori harus sama).
8. Simpan hasil pelabelan dengan menekan tombol CTRL+S (klik Change Save Dir)
9. Simpan file hasil pelabelan *.xml kedalam folder Annotations
10. Lakukan langkah langkah diatas untuk semua gambar yang akan digunakan pada folder training dan testing
Convert file XML ke CSV
Dataset annotation yang telah kita buat sebelumnya menggunakan aplikasi labelImg perlu dikonversi ke dalam format .csv yang akan digunakan untuk generate TFRecord.
Di direktori yang telah dibuat sebelumnya terdapat file dengan nama “xml_to_csv” yang berisi kode dalam mengkonversi file xml ke csv.
Jalankan perintah berikut untuk melakukan konversi xml ke csv pada command promt:
Python xml_to_csv.py
Convert TFRecord
Pada saat melakukan proses training, tensorflow akan membaca data input dalam format TFRecord yang dinamakan feeding data. Oleh karena itu perlu dilakukan generate data yang tadi telah dikonversi ke file .csv.
Untuk kode TFRecord sendiri juga sudah ada dengan nama file “generate_tfrecord”. Hal yang perlu dilakukan adalah merubah kategori sesuai dengan kategori yang akan didefinisikan. Karena pada kasus memiliki 1 objek yang akan dideteksi maka kategori yang diubah seperti berikut:
Untuk labelnya sendiri harus disesuaikan dengan nama yang kita pakai pada saat membuat annotation di labelImg.
Kemudian jalankan perintah dibawah ini pada command promt, masing masing adalah untuk membentuk train.record dan test.record :
python generate_tfrecord.py — type=train — csv_input=Data/train_labels.csv — output_path=Data/train.recordpython generate_tfrecord.py — type=test — csv_input=Data/test_labels.csv — output_path=Data/test.record
Setting Label Map
Label map ini digunakan untuk memetakan label yang akan digunakan untuk memberikan penamaan pada objek yang akan dideteksi. Karena pada penelitian ini akan mendeteksi 1 objek maka item, id maupun name menyesuaikan. Berikut konfigurasi label map yang akan digunakan:
Setelah semua step diatas OKE, hasil output data data yang akan digunakan dapat dilihat dalam folder Data.
Konfigurasi Pipeline
Konfigurasi pipeline disini berhubungan untuk mengatur file config yang nantinya akan digunakan untuk melakukan konfigurasi dari model training karena tensorflow menggunakan protobuf maka konfigurasi ini sangat diperlukan. Model yang digunakan adalah Faster-RCNN-Inception-V2 dimana model ini sudah disediakan oleh tensorflow itu sendiri. Untuk mendapatkan model tersebut bisa melakukan download DISINI
Setelah selesai download, ekstrak model Faster-RCNN-Inception-V2_coco_2018 tersebut kedalam folder models/research/object_detetcion.
Untuk konfigurasi yang harus dilakukan terdapat pada file faster_rcnn_inception_v2_pets yang terdapat di folder training. Ada beberapa bagian yang perlu diubah yang akan disesuaikan dengan model yang akan dibuat sebagai berikut:
- Line 7: Disesuaikan dengan jumlah kelas yang digunakan yaitu 1
- Line 106 : Merubah letak fine_tune_checkpoint ke :
- Line 113 : Setting berapa jumlah step yang akan digunakan pada saat training
- Line 123 dan 125 : Arahkan Direktori ke letak file train.record dan label_map.pbtxt
- Line 130 : Ubah num_example dengan jumlah data pada folder test yaitu 50
- Line 135 dan 137 : Arahkan Direktori ke letak file test.record dan label_map.pbtxt
TRAINING
Semua data data yang dibutuhkan untuk training sudah siap. Maka untuk menjalankan training ketik perintah berikut pada command promt pada direkoti kerja utama kita:
python train.py — logtostderr — train_dir=training/ — pipeline_config_path=training/faster_rcnn_inception_v2_pets.config
Jika berhasil maka akan muncul proses training seperti dibawah ini :
Eksport Inference Graph
Setelah training selesai dengan jumlah step yang diinginkan, maka selanjutnya adalah melakukan ekstraksi model yang akan digunakan untuk prediksi. Model yang di dapatkan akan berbentuk file dengan nama frozen_inference_graph.pb
Untuk melakukan eksport inference graph dapat dilakukan dengan menulis perintah berikut pada command promt
python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/faster_rcnn_inception_v2_pets.config --trained_checkpoint_prefix training/model.ckpt-XXXX --output_directory inference_graph
model.ckpt-XXXX dapat diganti dengan nilai step yang akan di eksport. Nilai ini dapat dilihat pada folder training, misal : ketika kita setting jumlah step 1000 maka nilai XXX tersebut diganti dengan nilai 1000. Hasil eksport model dapat dilihat pada folder inference_graph dengan nama frozen_inference_graph.pb
Testing Image
Untuk melakukan testing image, dapat dilakukan dengan setting beberapa coding di file Object_detection_image.py
Setting yang dilakukan diantaranya, mengganti image yang akan di test pada line 39, dan mengganti jumlah NUM_CLASSES dengan jumlah kelas yang dimilik yaitu 1. Jika sudah maka untuk melakukan testing dapat dilakukan dengan menjalankan code Object_detection_image.py pada command promt.
Testing Realtime
Apabila teman teman ingin menambah hasil deteksi secara realtime melalui webcam, temen temen bisa coba jalankan perintah realtime.py. Tinggal edit dan arahkan letak model frozen_inference_graph.pb dan letak label_map pada line 16 dan 19. Dan terakhir edit jumlah kelas yaitu 1 pada line 22.
Okey teman teman sekian dulu untuk tutorial kali ini yaa.. Untuk tulisan saya yang lain tentang Deep Learning dengan berbagai Case, temen-temen bisa lihat di link link dibawah ini.
- Part1 : Object Detection Menggunakan Tensorflow-API
- Part 2 : Object Detection Menggunakan Tensorflow (Perbandingan Arsitektur SSD Mobilenet dan Faster R-CNN)
- Part3 : Setting dan Instalasi Object Detection Menggunakan Tensorflow
- Part 4 : Klasifikasi Gambar Menggunakan Web-Flask
- Part 5 : Face Recognition Menggunakan OpenCV
- Part 6 : Klasifikasi Gambar Dengan Convolutional Neural Network Menggunakan Keras-Python
- Part 7 : Klasifikasi Gambar Menggunakan Arsitektur VGGNet-Keras
- Part 8 : Tensorflow Object Detection API Menggunakan Google Colab (Kasus : Deteksi Covid-19 Dari Data Rontgent Dada
- Part 9 : Klasifikasi Gambar Menggunakan Convolutional Neural Network dengan Arsitektur LeNet
- Part 10 : Convolutional Neural Network Menggunakan Package Keras di R
- Part 11 : Vehicle Counter Menggunakan OpenCV Python
Source