Face Mask Detection
Detecting face mask with OpenCV and TensorFlow. Using simple CNN or model provided by TensorFlow as MobileNetV2, VGG16, Xception.
Data
Raw data collected from kaggle and script crawl_image.py
, split to 'Mask' and 'Non Mask' class.
Using build_data.py
to extract faces from raw dataset and resize to 64x64.
Installation
Clone the repo
git clone [email protected]:ksvbka/face-mask-detector.git
cd to project folder and create virtual env
virtualenv .env
source .env/bin/activate
pip install -r requirements.txt
Download raw dataset and execute script build_dataset.py to preprare dataset for training
cd data
bash download_data.sh
cd -
python3 build_dataset.py --data-dir data/dataset_raw/ --output-dir data/64x64_dataset
Training
Execute train.py
script and pass network architecture type dataset dir and epochs to it.
Default network type is MobileNetV2.
python3 train.py --net-type MobileNetV2 --data-dir data/64x64_dataset --epochs 20
View tensorboard
tensorboard --logdir logs --bind_all
Testing
python3 mask_detect_image.py -m results/MobileNetV2-size-64-bs-32-lr-0.0001.h5 -i demo_image/2.jpg
Result
Hyperparameter: - batch size: 32 - Learing rate: 0.0001 - Input size: 64x64x3
Model result
Model | Test Accuracy | Size | Params | Memory consumption |
---|---|---|---|---|
CNN | 87.67% | 27.1MB | 2,203,557 | 72.58 MB |
VGG16 | 93.08% | 62.4MB | 288,357 | 18.06 MB |
MobileNetV2 (fine tune) | 97.33% | 20.8MB | 1,094,373 | 226.67 MB |
Xception | 98.33% | 96.6MB | 1,074,789 | 368.18 MB |
Download pre-trained model: link
Demo
Using MobileNetV2 model