torch==1.7.1
torchvision==0.8.2
tensorboard==2.6.0
pandas==1.1.5
opencv-python==4.5.1.48
scikit-learn==0.24.2
matplotlib==3.3.4
timm==0.4.12
tqdm==4.51.0
numpy==1.19.2
python-dotenv==0.19.0
Pillow==8.1.0
h5py==3.1.0
glob2==0.7
pip install -r requirements.txt
dataset.py
face_image.py
: FaceNet ์ ์ฉloss.py
model.py
optimizer.py
train.py
inference.py
evaluation.py
perfect_train.csv
: dataset
SM_CHANNEL_TRAIN=[train image dir] SM_MODEL_DIR=[model saving dir] python train.py
SM_CHANNEL_EVAL=[eval image dir] SM_CHANNEL_MODEL=[model saved dir] SM_OUTPUT_DATA_DIR=[inference output dir] python inference.py
SM_GROUND_TRUTH_DIR=[GT dir] SM_OUTPUT_DATA_DIR=[inference output dir] python evaluation.py
COVID-19์ ํ์ฐ์ผ๋ก ์ฐ๋ฆฌ๋๋ผ๋ ๋ฌผ๋ก ์ ์ธ๊ณ ์ฌ๋๋ค์ ๊ฒฝ์ ์ , ์์ฐ์ ์ธ ํ๋์ ๋ง์ ์ ์ฝ์ ๋ฐ๊ณ ์์ต๋๋ค.
ํ์ฐ์ ๋ง๊ธฐ์ํด ๋ง์ ๋ ธ๋ ฅ๋ค์ ํ๊ณ ์์ง๋ง COVID-19์ ๊ฐํ ์ ์ผ๋ ฅ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ฅผ ์ค๋ซ๋์ ๊ดด๋กญํ๊ณ ์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ฌ๋์ด ๋ง์คํฌ๋ก ์ฝ์ ์ ์ ๊ฐ๋ ค์ ํน์ ๋ชจ๋ฅผ ๊ฐ์ผ์๋ก๋ถํฐ์ ์ ํ ๊ฒฝ๋ก๋ฅผ ์์ฒ ์ฐจ๋จํ๋ ๊ฒ์ ๋๋ค.
์ด๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ๊ณต๊ณต์ฅ์์์ ๋ชจ๋ ์ฌ๋๋ค์ ์ฌ๋ฐ๋ฅธ ๋ง์คํฌ ์ฐฉ์ฉ ์ํ๋ฅผ ๊ฒ์ฌํ๋ ์์คํ ์ด ํ์ํฉ๋๋ค.
์ฆ, ์นด๋ฉ๋ผ๋ก ๋น์ถฐ์ง ์ฌ๋ ์ผ๊ตด ์ด๋ฏธ์ง๋ง์ผ๋ก ์ด ์ฌ๋์ด ๋ง์คํฌ๋ฅผ ์ฐ๊ณ ์๋์ง, ์ฐ์ง ์์๋์ง,
์ ํํ ์ด ๊ฒ์ด ๋ง๋์ง ์๋์ผ๋ก ๊ฐ๋ ค๋ผ ์ ์๋ ์์คํ ์ด ํ์ํฉ๋๋ค.
์นด๋ฉ๋ผ๋ก ๋น์ถฐ์ง ์ฌ๋ ์ผ๊ตด ์ด๋ฏธ์ง๋ง์ผ๋ก ์ด ์ฌ๋์ด ๋ง์คํฌ๋ฅผ ์ฐ๊ณ ์๋์ง,
์ฐ์ง ์์๋์ง, ์ ํํ ์ด ๊ฒ์ด ๋ง๋์ง ์๋์ผ๋ก ๊ฐ๋ ค๋ผ ์ ์๋ ์์คํ or ๋ชจ๋ธ
- GPU V100 ์๊ฒฉ ์๋ฒ
- PyCharm ๋๋ Visual Studio Code | Python 3.7(or over)
- ์ ์ฒด ์ฌ๋ ์ : 4500๋ช (train : 2700 | eval : 1800)
- age : 20๋ - 70๋
- gender : ๋จ,์ฌ
- mask : ๊ฐ์ธ๋ณ ์ ์ ์ฐฉ์ฉ 5์ฅ, ๋น์ ์์ ์ฐฉ์ฉ 1์ฅ(์ฝ์คํฌ,ํฑ์คํฌ...), ๋ฏธ์ฐฉ์ฉ 1์ฅ
- ์ ์ฒด 31,500 Images (train : 18,900 | eval : 12,600)
- ์ด๋ฏธ์ง ํฌ๊ธฐ : (384,512)
- mask, gender, age ๊ธฐ์ค 18๊ฐ์ ํด๋์ค๋ก ๋ถ๋ฅ
$ python face_image.py
- face_image.py
- FaceNet ์ด์ฉ ์ผ๊ตด ์ธ์ ํ FaceCrop
- FaceCrop ํ Resize๋ฅผ ๊ฑฐ์น ์ด๋ฏธ์ง ํฌ๊ธฐ : (280, 210)
perfect_train.csv
- EfficientNet
- EfficientNet_b2_pruned
- EfficientNet_b4
- SEResNet(SE block + ResNet)
- SEResNet26d_32x4d
- NFNet
- NFNet_l0
# ๋จ์ผ ๋ชจ๋ธ train ์
$ python train.py
from sklearn.model_selection import StratifiedKFold
# cross_validation ์ฌ์ฉํด train ์
$ python train.py --cv True
train.py
cross_validation ํจ์
# gender, age, mask ๊ฐ๊ฐ ํ์ต
$ python train.py --multi=True
# ๋จ์ผ model์ ํตํด inference ์
$ python inference.py \
--model_name={kinds of models} \
--model_dir={model_filepath} \
--pth_name={model parameter name} \
--output_name={output_filename} \
# cross_validation ์ ์ฌ์ฉํด ๋์จ model 5๊ฐ๋ฅผ ํตํด inference ์
$ python inference.py \
--model_name={kinds of models} \
--model_dir={model_filepath} \
--pth_name=best \
--output_name={output_filename} \
--cv=True
# ensemble ์ ์ฌ์ฉํด inference ์
$ python inference.py \
--ensemble_model_name={kinds of models : ๋์ด์ฐ๊ธฐ๋ก ๊ตฌ๋ถํ ์ฌ๋ฌ๊ฐ์ model_name} \
--ensemble_model_dir={model_filepath : ๋์ด์ฐ๊ธฐ๋ก ๊ตฌ๋ถํ ์ฌ๋ฌ๊ฐ์ model_file_path} \
--pth_name=best \
--output_name={output_filename} \
--ensemble=True
# multilabel inference ์
$ python inference.py \
--model_name={kinds of models} \
--model_dir={model_filepath} \
--pth_name=best \
--output_name={output_filename} \
-- multi True