Deteksi Masker (Face Mask Detection) dengan YOLOv4 dan Darknet

Haiqal Muhamad Alfarisi
5 min readDec 30, 2020

--

Halo teman-teman semua, sudah masuk di hari terakhir 2020 dan kita masih berada di situasi pandemi Covid-19. Berbicara tentang virus, semua negara memberlakukan protokol kesehatan yaitu salah-satunya adalah pemakaian masker. Kali ini kita akan coba mengimplementasikan penggunaan algoritma deep learning YOLO untuk mendeteksi apakah seseorang memakai masker atau tidak.

Pada artikel kali ini, aku coba kumpulkan jadi satu semua file-file yang dibutuhkan untuk proses deteksi ini, terutama file weights dari hasil training pendeteksian masker. Output dari project ini adalah kita dapat mendeteksi apakah seseorang memakai masker atau tidak ditandai dengan bounding box.

Pertama kalian clone project di github disini dan buka file ipynb untuk menjalankan project ini Google Colab. Langkah pertama kalian harus aktifkan penggunaan GPU di Virtual Machine kalian, Aktifkan GPU, CUDA, CuDNN, OpenCV dan build framework Darknet untuk menjalankan proses deteksi.

# Clone Repository dari Darknet
!git clone https://github.com/AlexeyAB/darknet
# Ubah makefile untuk mengaktifkan OpenCV, GPU dan CuDNN
%cd darknet
!sed -i 's/OPENCV=0/OPENCV=1/' Makefile
!sed -i 's/GPU=0/GPU=1/' Makefile
!sed -i 's/CUDNN=0/CUDNN=1/' Makefile
!sed -i 's/CUDNN_HALF=0/CUDNN_HALF=1/' Makefile
# Cek Versi dari CUDA
!/usr/local/cuda/bin/nvcc --version
# Build Darknet dengan perintah make (Abaikan pesan Warning)
!make

Selanjutnya kita akan buat satu fungsi dengan OpenCV untuk menampilkan gambar. Function yang kita beri nama ‘tampil’ ini nantinya akan dipanggil saat menjalankan proses Face Mask Detection.

def tampil(path):
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
image = cv2.imread(path)
height, width = image.shape[:2]
resized_image = cv2.resize(image,(3*width, 3*height), interpolation = cv2.INTER_CUBIC)
fig = plt.gcf()
fig.set_size_inches(18, 10)
plt.axis("off")
plt.imshow(cv2.cvtColor(resized_image, cv2.COLOR_BGR2RGB))
plt.show()

Selanjutnya kita akan menggunakan library dari google drive yang mana semua file-file training, testing, configuration dan weights akan disimpan di google drive. Jadi kita tinggal tentukan pathnya saja.

%cd ..
from google.colab import drive
drive.mount('/content/gdrive')
#Membuat shortcut path dari My Drive dengan nama /mydrive
!ln -s /content/gdrive/My\ Drive/ /mydrive
!ls /mydrive
# Pindah kembali ke folder darknet
%cd darknet
!ls /mydrive/yolov4

Bagaimana dengan dataset ? YOLO sebenarnya mempunyai 80 classes yang bisa dideteksi karena sudah disediakan oleh COCO Dataset, tetapi dari 80 objek tersebut tidak ada objek Masker didalamnya. Maka dari itu kita harus mengumpulkan dataset masker kemudian kita akan melatihnya sendiri. Kita bisa mengambil dataset masker yang sudah disediakan disini.

MaskDetection ©AlexandraLorenzo

Setelah kalian unzip dataset tersebut, terdapat 2 folder yaitu Images dan Label. Baik kedua folder tersebut, didalamnya terdapat 3 folder lainnya yang akan kita gunakan yaitu train dan valid. Pindahkan semua isi di folder Label ke dalam folder images dengan masing-masing jenis data tersebut (train/test/valid). Kemudian buat rar file tersebut dengan obj.zip untuk folder train dan test.zip untuk folder valid. MUDAHNYA kalian bisa download file tersebut disini

Buat folder baru di google drive kalian dengan nama yolov4 kemudian upload semua file-file yang kalian download dari github. Jangan lupa untuk membuat folder baru di folder yolov4 dengan nama backup, disana nantinya akan menyimpan weights baru hasil training yang bisa kita gunakan untuk proses deteksi.

Sekarang kita akan copy semua file yang ada di google drive ke virtual machine google colab kita. Proses generate_train dan generate_test berfungsi untuk membentuk file txt.

# Copy 2 file obj.zip (untuk training) dan test.zip(untuk testing) ke Virtual Machine Colab
!cp /mydrive/yolov4/obj.zip ../
!cp /mydrive/yolov4/test.zip ../
# unzip dataset dan disimpan di darknet/data
!unzip ../obj.zip -d data/
!unzip ../test.zip -d data/
# download file cfg dan disimpan ke VM
!cp /mydrive/yolov4/yolov4-hql.cfg ./cfg
# Copy obj.names dan obj.data ke darknet/data
!cp /mydrive/yolov4/obj.names ./data
!cp /mydrive/yolov4/obj.data ./data
# Copy juga file untuk generate data train dan test
!cp /mydrive/yolov4/generate_train.py ./
!cp /mydrive/yolov4/generate_test.py ./
# Proses Generate
!python generate_train.py
!python generate_test.py
# Cek apakah sudah muncul file train.txt dan test.txt hasil dari generate
!ls data/

Ada 3 file yang harus kalian ketahui dalam pendeteksian masker ini, pertama adalah obj.data. Didalam file tersebut kita deklarasikan 2 classes, yaitu pemakai masker dan tidak pemakai masker.

classes = 2
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = /mydrive/yolov4/backup

Kedua obj.names yang berupa label apa saja yang akan kita tampilkan.

mask
unmasked

Ketiga adalah file configuration, ada beberapa hal yang perlu kalian ketahui adalah jumlah filters yang harus dideklarasikan harus berdasarkan rumus =
(jumlah class + 5) * 3. Karena kita memiliki 2 class, maka jumlah filternya adalah (2+5)*3 = 21. Ubah semua nilai filters dibagian [convolutional] sebelum bagian [yolo].

[convolutional]
size=1
stride=1
pad=1
filters=21
activation=linear

Kemudian kita akan download pre-trained weights dari yolov4 yang akan kita gunakan pertama kali untuk proses training. Jadi dalam project ini kita akan melakukan 2x proses training, yang pertama dengan pre-trained weights yang sudah disediakan dimana nantinya akan menghasilkan file weight baru yang akan kita guanakan untuk proses deteksi akhir.

!wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137# TRAIN DATASET
!./darknet detector train data/obj.data cfg/yolov4-hql.cfg yolov4.conv.137 -dont_show -map

Setelah proses training pertama selesai, cek di folder backup terdapat file weight baru dan jalankan training lagi. Saat itu aku membutuhkan waktu sekitar 7 jam dalam proses training. UNTUK MEMPERSINGKAT WAKTU silahkan kalian langsung pakai saja file yolov4-hql_last.weights yaa disini😎

# Training dengan file weights terbaru
!./darknet detector train data/obj.data cfg/yolov4-hql.cfg /mydrive/yolov4/backup/yolov4-hql_last.weights -dont_show

Waktunya untuk mencobaaaaa, pertama kita set file configurationnya kemudian jalankan perintah dibawah.

# Pertama set file configuration
%cd cfg
!sed -i 's/batch=64/batch=1/' yolov4-hql.cfg
!sed -i 's/subdivisions=16/subdivisions=1/' yolov4-hql.cfg
%cd ..
!./darknet detector test data/obj.data cfg/yolov4-hql.cfg /mydrive/yolov4/backup/yolov4-hql_last.weights /mydrive/yolov4/test2.jpg -thresh 0.8
tampil('predictions.jpg')

Hasilnya bisa kita lihat seperti ini…

Masked
Unmasked

Sumber :

  1. https://github.com/HaiqalLM10/FaceMaskYOLOv4
  2. https://pastebin.com/xL89En7W

Full Stories :

  1. Mengenal Perbedaan Artificial Intelligence, Machine Learning, Neural Network & Deep Learning
  2. Mengenal Perbedaan Artificial Intelligence, Machine Learning, Neural Network & Deep Learning (Part 2)
  3. Mengenal Perbedaan Artificial Intelligence, Machine Learning, Neural Network & Deep Learning (Part 3)
  4. Darknet atau Darkflow, Dua Framework Algoritma Deep Learning YOLO
  5. You Only Look Once (YOLO) Algoritma Deep Learning Object Detection Terbaik.
  6. Pengaruh CPU dan GPU dalam Implementasi Algoritma Deep Learning (YOLO).
  7. Implementasi Deep Learning YOLO dalam Mendeteksi Objek Gambar, Webcam dan Video.
  8. YOLOv4 : Teknologi Terbaru dalam Perkembangan Algoritma Object Detection
  9. Mengenal MSCOCO Dataset dalam Penerapan di Algoritma Object Detection YOLO
  10. Mempersiapkan dan Melatih Dataset untuk Mendeteksi Custom Object dengan YOLOv4 (Part 1)
  11. Mempersiapkan dan Melatih Dataset untuk Mendeteksi Custom Object dengan YOLOv4 (Part 2)
  12. Perhitungan Deteksi Object pada Gambar dan Video dengan YOLOv4 (Counting Objects)
  13. Deteksi Masker (Face Mask Detection) dengan YOLOv4 dan Darknet
  14. Klasifikasi dan Perhitungan Kendaraan dengan Algoritma Deep Learning YOLOv4 dan Darknet.

--

--

Haiqal Muhamad Alfarisi
Haiqal Muhamad Alfarisi

Written by Haiqal Muhamad Alfarisi

System Analyst at FIFGROUP. I am a graduate of Gunadarma University who is interested in machine learning and deep learning.

Responses (1)