Show
98 Tutorial ini di berisi mengenai tensorflow object detection dengan neural network dengan object yang sesuai dengan yang Anda inginkan menggunakan Tensorflow Framework API. Pada akhir tutorial ini kita akan dapat mengenali object dengan tanda segi empat pada gambar, video ataupun webcam. Tensorflow Object Detection - CudaPendahuluanTutorial ini memaparkan bagaimana cara menggunakan API Tensorflow Object Detection untuk training klasifikasi object detection dari beberapa object tertentu pada windows 10. Namun, tutorial ini dapat digunakan pada OS yang lain seperti Mac ataupun Linux, hanya saja akan ada sedikit perbedaan prosedurnya pada command terminal OS yang bersangkutan. Pada tutorial ini, versi yang digunakan adalah Tensorflow-GPU v1.13.1 dan Python 3.5. Tensorflow-GPU memiliki kemampuan lebih dalam hal kecepatan processing karena oleh VGA grafik card. Berdasarkan pengalaman, Tensorflow biasa (CPU) memiliki kecepatan 8x lebih lambat (misal jika kita menggunakan GPU membutuhkan waktu 1 jam untuk training model, pada Tensorflow CPU membutuhkan waktu 8 jam). Tensorflow CPU pada tutorial ini pun dapat digunakan, namun akan lebih lambat dalam hal processing. Jika anda ingin menggunakan Tensorflow CPU, maka, tidak perlu install CUDA dan CuDNN. Install software yang dibutuhkanInstall anaconda, CUDA, dan cuDNNDownload Anaconda, lalu install pada computer anda. Perlu diperhatikan bahwa, installer Anaconda terbaru sudah menggunakan Python versi 3.7, sedangkan pada tutorial ini kita menggunakan Python 3.5. Namun, kita tidak perlu khawatir, karena kita akan menggunakan virtual environment. Tahap selanjutnya adalah menginstall CUDA dari situs resmi NVIDA. Perlu diperhatikan bahwa, versi CUDA dan cuDNN harus sesuai dengan versi Tensorflow yang kita gunakan. Karena kita menggunakan Tensorflow 1.13.1, sehingga versi yang dibutuhkan adalah: Tensorflow Object Detection - Versi GPUUntuk download cuDNN, kita harus membuat account NVIDIA. Setelah download cuDNN selesai sesuai dengan versinya, lalu kita ikuti cara installasi cuDNN. Setup Folder Tensorflow dan Anaconda virtual environmentTensorflow Object Detection API membutuhkan struktur folder yang spesifik sesuai dengan Github Repository nya. Selain itu, kita membutuhkan beberapa Python package tambahan dan juga variable PATH dan PYTHONPATH. Download TensorFlow Object Detection API repo dari GitHub
Download/clone Tensorflow object detection repo pada link GitHub ini untuk versi 1.13. Versi terbaru adalah 2.0, namun jika kita menggukan versi 2.0, maka, akan ada banyak perubahan pada library dan tentunya mempersulit hidup kita hingga versi yang telah stabil di rilis oleh Google. Setelah proses cloning selesai, struktur folder akan seperti: C:\tensorflow1\models: Tensorflow Object Detection - Struktur fileDownload Tensorflow model Zoo
Kita dapat memilih model sesuai dengan keperluan masing-masing, jika kita ingin menggunakan smartphone atau Raspberry Pi, maka pilih lah SSD-Mobile net. Namun, jika kita memiliki komputer yang cepat, maka model RCNN dapat digunakan. Pada tutorial ini saya menggunakan laptop ASUS ROG GL502VT yang memiliki VGA NVIDIA GTX 970M 16GB. Oleh karena itu, kita akan menggunakan model Faster-RCNN-Inception-V2 model. Setelah proses download Zoo model yang akan kita pakai selesai, selanjutnya adalah mengekstrak file tersebut, lalu letakkan di dalam folder C:\tensorflow1\models\research\object_detection. Selanjutnya adalah download/clone full repository dari GitHub Edje Electronics, ekstrak zip file, lalu tempatkan di dalam folder C:\tensorflow1\models\research\object_detection. Tensorflow Object Detection - Ekstrak Zip fileKarena kita akan mengunakan object detector berdasarkan yang kita inginkan, maka kita dapat menghapus file di bawah ini (folder harus tetap ada)
Setup Anaconda virtual environment
(tensorflow1) C:> conda install -c anaconda protobuf (tensorflow1) C:> pip install pillow (tensorflow1) C:> pip install lxml (tensorflow1) C:> pip install Cython (tensorflow1) C:> pip install contextlib2 (tensorflow1) C:> pip install jupyter (tensorflow1) C:> pip install matplotlib (tensorflow1) C:> pip install pandas (tensorflow1) C:> pip install opencv-python Mengkonfigurasikan variable environment pada PYTHONPATH
(tensorflow1) C:> set PYTHONPATH=C:\tensorflow1\models;C:\tensorflow1\models\research;C:\tensorflow1\models\research\slim Catatan: Kita harus selalu setup ulang PYTHONPATH setiap kali keluar dari virtual environment “tensorflow1”. Untuk memastikan bahwa path telah sesuai, kita dapat memeriksanya dengan perintah “echo %PYTHONPATH%” Compile Protobufs dan eksekusi setup.pySelanjutnya adalah mengkompilasikan file protobuf yang diperlukan untuk parameter model dan konfigurasi training pada tensorflow. Pada Anaconda Command prompt, arahkan directory ke \models\research: (tensorflow1) C:\> cd C:\tensorflow1\models\research Lalu, copy dan paste perintah ini: protoc --python_out=. .\object_detection\protos\anchor_generator.proto .\object_detection\protos\argmax_matcher.proto .\object_detection\protos\bipartite_matcher.proto .\object_detection\protos\box_coder.proto .\object_detection\protos\box_predictor.proto .\object_detection\protos\eval.proto .\object_detection\protos\faster_rcnn.proto .\object_detection\protos\faster_rcnn_box_coder.proto .\object_detection\protos\grid_anchor_generator.proto .\object_detection\protos\hyperparams.proto .\object_detection\protos\image_resizer.proto .\object_detection\protos\input_reader.proto .\object_detection\protos\losses.proto .\object_detection\protos\matcher.proto .\object_detection\protos\mean_stddev_box_coder.proto .\object_detection\protos\model.proto .\object_detection\protos\optimizer.proto .\object_detection\protos\pipeline.proto .\object_detection\protos\post_processing.proto .\object_detection\protos\preprocessor.proto .\object_detection\protos\region_similarity_calculator.proto .\object_detection\protos\square_box_coder.proto .\object_detection\protos\ssd.proto .\object_detection\protos\ssd_anchor_generator.proto .\object_detection\protos\string_int_label_map.proto .\object_detection\protos\train.proto .\object_detection\protos\keypoint_box_coder.proto .\object_detection\protos\multiscale_anchor_generator.proto .\object_detection\protos\graph_rewriter.proto .\object_detection\protos\calibration.proto .\object_detection\protos\flexible_grid_anchor_generator.proto Perintah diatas akan menghasilkan python file xxx_pb2.py dari setiap xxx.proto di dalam folder \object_detection\protos Setelah itu, eksekusi perintah dari direktori C:\tensorflow1\models\research: (tensorflow1) C:\tensorflow1\models\research> python setup.py build (tensorflow1) C:\tensorflow1\models\research> python setup.py install Mengumpulkan dan melabeli gambar
Mengumpulkan gambar
Objek yang akan kita kenali ada enam macam jenis spesimen, yaitu: botol plastic (Aqua, Prima dan Le Minerale) serta kemasan minuman kaleng (Sprite, Coca-cola dan Pocari Sweat). Pastikan ukuran gambar tidak terlalu besar, oleh karena itu saya buatkan Python script untuk membuat gambar lebih kecil dan memiliki ukuran yang sama from PIL import Image import os, sys path = r"C:\xxx\xxx\xxxxxx\\" dirs = os.listdir( path ) def resize(): i = 1 for item in dirs: if os.path.isfile(path+item): im = Image.open(path+item) f, e = os.path.splitext(path+item) imResize = im.resize((720,540), Image.ANTIALIAS) imResize.save('Image_'+str(i)+'.jpg', 'JPEG', quality=90) i=i+1 print("done image " + str(i)) resize() Setelah kita memiliki gambar yang diinginkan, pisahkan menjadi dua bagian. 20% masuk ke dalam folder \object_detection\images\test sisanya (80%) pindahkan ke dalam \object_detection\images\train. Labelling gambar
Total semua gambar yang saya beri label adalah 225 gambar. Label gambar tersebut di simpan dalam bentuk .xml file. File xml ini akan digunakan untuk membuat TFRecords yang merupakan salah satu input TensorFlow trainer. Setelah kita memberikan label pada setiap gambar, maka, masing-masing gambar akan memiliki satu .xml file di dalam folder \test dan \train. Membuat Data TrainingSetelah selesai melabeli gambar, sekarang saat nya untuk membuat training tensorflow TFRecords dengan menggunakan script xml_to_csv.py dan generate_tfrecord.py dari link github ini. Pertama-tama, file .xml akan digunakan untuk membuat file .csv yang meliputi semua informasi gambar pada folder train dan test. Eksekusi perintah dari folder \object_detection: (tensorflow1) C:\tensorflow1\models\research\object_detection> python xml_to_csv.py Perintah tersebut akan menghasilkan train_labels.csv dan test_labels.csv yang berada di dalam folder
\object_detection\images. def class_text_to_int(row_label): if row_label == 'botol plastik-Aqua': return 1 elif row_label == 'botol plastik-Prima': return 2 elif row_label == 'botol plastik-Le Minerale': return 3 elif row_label == 'kaleng-CocaCola': return 4 elif row_label == 'kaleng-Sprite': return 5 elif row_label == 'kaleng-Pocari Sweat': return 6 else: None Selanjutnya adalah membuat TFRecord dengan mengesekusi dua perintah di bawah ini dari dalam folder \object_detection: python generate_tfrecord.py --csv_input=images\train_labels.csv --image_dir=images\train --output_path=train.record python generate_tfrecord.py --csv_input=images\test_labels.csv --image_dir=images\test --output_path=test.record Membuat label map dan konfigurasi trainingHal terakhir yang dilakukan sebelum melakukan training tensorflow adalah membuat label map yang menyesuaikannya dengan konfigurasi training. Label map
Konfigurasi Training
Masuk ke dalam folder: C:\tensorflow1\models\research\object_detection\samples\configs, lalu copy file faster_rcnn_inception_v2_pets.config ke dalam folder
Menjalankan TrainingSekarang saatnya kita menjalankan training untuk objek yang dikehendaki. Pada Anaconda Prompt navigasikan ke folder \object_detection, lalu training di mulai dengan mengeksekusi perintah: python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config Jika training ter-setup dengan benar, Tensorflow akan memulai inisiasi training tensorflow. Pada inisialisasi ini dibutuhkan waktu sekitar 30 detik sebelum training dijalankan. Proses training akan terlihat seperti pada gambar di bawah ini: Tensorflow Object Detection - Progress trainingSetiap step training tensorflow akan terlihat loss yang dihasilkan. Dimulai dari angka tinggi dan terus mengecil. Direkomendasikan untuk terus melakukan training hingga loss di bawah 0.05 dengan steady. Jumlah loss akan berbeda dari setiap model yang akan di pakai untuk training. Sebagai contoh jika menggunakan MobileNet-SSD, loss akan di mulai dari angka 20 dan terus dilakukan training hingga di bawah angka 2. Progress dari training tensorflow dapat di lihat melalui TensorBoard. Untuk membukanya, kita harus menjalankan Anaconda Prompt pada window lain, aktivasi environment tensorflow1, lalu setup kembali PYTHONPATH seperti yang telah dijelaskan pada bagian sebelumnya. Perintah untuk mengeksekusi training adalah: (tensorflow1) C:\tensorflow1\models\research\object_detection>tensorboard --logdir=training Perintah di atas akan membuka webpage pada local machine pada alamat (yang akan terlihat setelah eksekusi tensorboard) sesuai dengan nama komputer anda: [training tensorflow] Address TensorboardAlamat web ini dapat di buka dengan menggunakan web browser apa saja. Tensorboard memberikan informasi dalam bentuk grafik yang menunjukkan progress training tensorflow. Grafik yang perlu diperhatikan adalah Loss, grafik ini menunjukkan loss secara keseluruhan dari klassifier seiring berjalannya waktu. Tensorflow Object Detection - Tampilan tensorboardTraining tensorflowtersebut secara berkala akan menyimpan data checkpoint setiap sepuluh menit. Untuk mengentikan training, kita dapat melakukannya dengan menekan CTRL+C pada Anaconda Prompt. Hal yang menarik adalah kita dapat menghentikan nya, lalu menjalankan kembali proses training tanpa harus di mulai dari awal. Export Inference GraphSetelah training selesai, langkah terakhir adalah membuat frozen inference graph (file .pb). Pada Anaconda Prompt, navigasikan ke folder \object_detection, lalu eksekusi dengan perintah: 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 XXXX adalah angka paling besar pada file “model.ckpt-XXXX” (yang paling up to date). Perintah diatas akan menghasilkan file frozen_inference_graph.pb di dalam folder \object_detection\inference_graph. File .pb adalah hasil training klasifikasi object detection. Menggunakan Pengklasifikasian Object Detection yang telah di trainingObject detection telah siap untuk digunakan!!! Edje Electronic telah membuat script untuk mendeteksi obyek berupa gambar, video dan live camera. Sebelum menjalankan Python script tersebut, kita harus memodifikasi variable NUM_CLASSES sesuai dengan jumlah klasifikasi yang telah kita tentukan. Untuk menjalankan Python Script, kita dapat mengeksekusi perintah “idle” di dalam Anaconda Prompt dengan menggunakan “tensorflow1” environment. Setelah Python idle window terbuka, lalu kita dapat membuka file untuk mendeteksi obyek, lalu di klik run. Pada contoh ini, kita akan menggunakan webcam untuk mendeteksi objek. Sekian tutorial yang cukup panjang ini. Bila anda tertarik untuk menggunakan raspberry pi untuk mendeteksi object. Anda dapat melihatnya pada link ini. Voila!! Selamat mencoba Referensi:https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10 https://www.tensorflow.org/install/source#tested_build_configurations https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html https://github.com/tensorflow/models/tree/r1.13.0 https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md https://github.com/tzutalin/labelImg https://github.com/datitran/raccoon_dataset Muhammad Zacky Asy'ariSaya seorang Engineer dan Tech Entrepreneur. Memiliki ketertarikan dalam bidang Internet of Things, data acquisition, data analytics dan visualization, machine learning, software testing, serta web design dan development. |