Detecting face mask with OpenCV and TensorFlow. Using simple CNN or model provided by TensorFlow as MobileNetV2, VGG16, Xception.
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.
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
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
python3 mask_detect_image.py -m results/MobileNetV2-size-64-bs-32-lr-0.0001.h5 -i demo_image/2.jpg
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
Using MobileNetV2 model