๐ ๋ฉค๋ฒ
๋ฐ์ฐฌ์ข
์์ฐํฌ
์ ํ์ค
์ด์์ง
์ ์์ค
์ต์ํ
๐ ๋ํ๊ฐ์
Multi Label Image Classification
๋ง์คํฌ๋ฅผ ์ฐ๊ฑฐ๋ ์ฐ์ง ์์ ์์์์ธ๋ค์ ์ผ๊ตด ์ฌ์ง์ ๋ณด๊ณ ๋ง์คํฌ ์ฐฉ์ฉ ์ํ์ ์ฑ๋ณ, ์ฐ๋ น๋๋ฅผ ์ถ๋ก ํ๋ ๋ฌธ์
๐ฉโ๐ป ํ ์ญํ
์ด๋ฆ ์ญํ ๋ฐ์ฐฌ์ข ํ์ดํผ ํ๋ผ๋ฏธํฐ ์คํ, ๋ฐ์ดํฐ ์ฆ๊ฐ ์คํ, ์ฑ๊ธ ๋ฐ ๋ฉํฐ ํค๋ ์คํ, ์ฝ๋ ๋ฌธ์ํ ์์ฐํฌ ์ฑ๊ธ ๋ฐ ๋ฉํฐํค๋, ์์๋ธ ๋ชจ๋ธ ์คํ, github ๊ด๋ฆฌ, ์ฝ๋ ๋ฌธ์ํ ์ ํ์ค ๋ฐ์ดํฐ ์ฆ๊ฐ ์คํ, ์ฑ๊ธ ๋ชจ๋ธ ์คํ ์ด์์ง ๋ฐ์ดํฐ ์ฆ๊ฐ, ํด๋์ค ๋ณ ๋ชจ๋ธ ํ์ต, ์์คํจ์ ์คํ, ์ฝ๋ ๋ฆฌํฉํ ๋ง ์ ์์ค ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ, ์ฑ๊ธ ๋ฐ ๋ฉํฐ ํค๋ ๋ชจ๋ธ ์คํ ์ต์ํ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ(๋ฐฐ๊ฒฝ ์ ๊ฑฐ, ์ผ๊ตด ํ์ง) ์คํ
โฐ WBS
๐ป ๊ฐ๋ฐ ํ๊ฒฝ
- Language : Python - Environment - CPU : Intel(R) Xeon(R) Gold 5120 - GPU : Tesla V100-SXM2 32GB ร 1 - Framework : PyTorch - Collaborative Tool : Git, Wandb, Notion
๐ฅ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
pip install -r requirements.txt
๐ฝ Dataset
- ์ด ์ฌ์ง ๊ฐ์ : 31500์ฅ
- ์๋ณธ ์ด๋ฏธ์ง ํฌ๊ธฐ : (512, 384)
- Label : ๋ง์คํฌ ์ฐฉ์ฉ ์ํ, ์ฑ๋ณ, ์ฐ๋ น๋
- ๋ง์คํฌ ์ฐฉ์ฉ ์ํ (3 classes): ์ ์ ์ฐฉ์ฉ, ๋น์ ์ ์ฐฉ์ฉ, ๋ฏธ์ฐฉ์ฉ
- ์ฑ๋ณ (2 classes): ๋จ์ฑ, ์ฌ์ฑ
- ์ฐ๋ น๋ (3 classes): 30๋ ์ดํ, 30๋ ์ด์ 60๋ ๋ฏธ๋ง, 60๋ ์ด์
๐ EDA
๐ Model
์ต์ข ๋ชจ๋ธ : Multi Task Model + Hard voting ensemble
1)
Mask Model
: Autoaugmentation + EfficientnetV2m + CrossEntropy
- ๋ค์ํ Augmentation ๊ธฐ๋ฒ์ ์คํํ์ง๋ง, ์์๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ถํ ๋ ๋ฐ์ดํฐ์ ์์ ์ฑ๋ฅ์ ์ฐจ์ด๊ฐ ํฌ๊ฒ ๋ํ๋ฌ์. ๊ทธ์ ๋ฐ๋ผ ์๋์ ์ผ๋ก ๊ฐ์ฅ ๊ฐ์ธํ ํจ๊ณผ๋ฅผ ๋ณด์ธ Autoaugmentation์ ์ฑํํ๊ฒ ๋์์
- ์์ค ํจ์๋ ์๊ธฐ ์ด์ ๋ก Cross Entropy๋ฅผ ์ฑํํ์ฌ ํ์ตํ์์. 2)
Gender Model
: Autoaugmentation + EfficientnetV2m + ์ ๋ ฅ ์ฌ์ด์ฆ [384, 288] + Focal loss + AdamW + Cosine Scheduler- ์ฑ๋ณ ๋ถ๋ฅ ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ข์๋ EfficientNetV2m Backbone์ AutoAugmentation์ ์ ์ฉํ ๋ชจ๋ธ์ ์ต์ข ์ ํํจ
- ๋ค์ํ ์ ๋ ฅ ์ฌ์ด์ฆ๋ก ์คํํ ๊ฒฐ๊ณผ ยฝ์๋ณธ ํฌ๊ธฐ์์ ๊ฐ์ฅ ๋์ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ์ด ์ฑํํจ
- ์ด์ธ์ augmentation ๊ธฐ๋ฒ๋ค ์ค Autoaugmentation ์ธ์๋ ์คํ๋ ค ๋ฎ์ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ์์ 3)
Age Model
: Custom data augmentation + Custom Mixup to 30s male, 60s + EfficientnetV2m + Hard-voting ensemble- ๋ค๋ฅธ ๋ถ๋ฅ ๋ฌธ์ ๋ณด๋ค ํด๋์ค ๋ถ๊ท ํ์ด ์ฌํ์ฌ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ์ํด ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฒ์ ์ฌ์ฉํจ.
- Augmentation ๋ฐ Loss๋ e)์ ์คํ์์ ๊ฐ์ฅ ์ข์ ํจ๊ณผ๊ฐ ๋์จ AutoAugmentation, FocalWithSmooting๋ฑ์ ์ฌ์ฉํ์์. ๊ทธ ์ธ ๊ธฐ๋ฒ์ผ๋ก 30~59 / 60~ ๋ ํด๋์ค์ ๊ตฌ๋ถ์ ๋๋ ทํ๊ฒ ํ๊ธฐ์ํด drop age์ ์ ์ฉํจ.
- ๋ํ ๋ฐ์ดํฐ๊ฐ ์ ์ 30๋์ ๋จ์ ๋ฐ 60๋ ์ด์์ ๋ํด์ mixup์ ์ฌ์ฉํ์ฌ offline augmentation์ ์งํํจ.
- ๋ง์ง๋ง์ผ๋ก ๋ฐ์ดํฐ ๋ณ ์ฑ๋ฅ ํธ์ฐจ๊ฐ ์์ผ๋ฏ๋ก 8:2๋ก ๋๋ ๋ฐ์ดํฐ ์ ๋ค์ ๋ํด ๊ฐ๊ฐ์ ๋ชจ๋ธ์ ํ์ต์ํค๊ณ ์ต์ข ์ผ๋ก ๋์จ ๋ชจ๋ธ๋ค์ ๋ํด์ Hard-Voting์ ์งํํจ.
๐ Training
config ํด๋ ์ yaml ํ์ผ์์ training ํ๊ฒฝ ์กฐ์ ๊ฐ๋ฅํฉ๋๋ค.
- Mask Model
python single_train.py --exp-name <์ด๋ฆ> --dataset OnlyMaskDataset --model EfficientNetV2m --criterion cross_entropy --augmentation AutoAugmentation
- Gender Model
python single_train.py --exp-name <์ด๋ฆ> --dataset OnlyGenderDataset --model EfficientNetV2m --criterion focal --augmentation AutoAugmentation --optimizer AdamW --schedular cosine
- Age Model train ํ๊ธฐ ์ด์ ์ ๋ฐ์ดํฐ๊ฐ ์ ์ 30๋ ๋จ์ ๋ฐ 60๋ ์ด์์ ๋ํด์ offline mixup augmentation์ ์งํ
python single_train.py --exp-name <์ด๋ฆ> --dataset OnlyMaskDataset --model EfficientNetV2m --criterion focal --age-drop True
๐ Inference
๊ฐ label์ ๋ํ Model์ Hard Voting ensemble ์งํ inference_3m ํ์ผ์ mask_model, gender_model, age_model ๋ณ์๋ฅผ ์์ ํ
python single_inference.py
๐ File Tree
๐ฆlevel1-imageclassification-cv-10 โฃ ๐EDA โ โ ๐eda.ipynb โฃ ๐config โ โ ๐base.yml โฃ ๐data โ โฃ ๐augmentation.py โ โฃ ๐dataloader.py โ โฃ ๐datasets.py โฃ ๐model โ โ ๐model.py โฃ ๐utils โ โฃ ๐argparsers.py โ โฃ ๐combine_image_folder.py โ โฃ ๐evaluation.py โ โฃ ๐hpo.py โ โฃ ๐img_preprocess.py โ โฃ ๐logger.py โ โฃ ๐loss.py โ โฃ ๐lr_scheduler.py โ โฃ ๐metric.py โ โฃ ๐plot.py โ โฃ ๐train_val_split.py โ โฃ ๐data_split.py โ โฃ ๐util.py โ โ ๐yolov8n-face.pt โฃ ๐single_inference.py โฃ ๐multi_inference.py โฃ ๐single_train.py โฃ ๐multi_train.py โฃ ๐voting.py โฃ ๐requirements.txt โ ๐README.md