boostcampaitech6 / level1-imageclassification-cv-10

level1-imageclassification-cv-10 created by GitHub Classroom
1 stars 2 forks source link

โญ CV 10ํŒ€ ์†Œ๊ฐœ

์˜-์ฐจ ์˜-์ฐจ (1)

๐Ÿƒ ๋ฉค๋ฒ„


๋ฐ•์ฐฌ์ข…

์–‘์šฐํฌ

์œ ํ•œ์ค€

์ด์˜์ง„

์ •์†Œ์œค

์ตœ์‹œํ˜„




๐Ÿ˜ท ๋งˆ์Šคํฌ ์ฐฉ์šฉ ์ƒํƒœ ๋ถ„๋ฅ˜ ๋Œ€ํšŒ

๐Ÿ† ๋Œ€ํšŒ๊ฐœ์š”

  • Multi Label Image Classification
  • ๋งˆ์Šคํฌ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์“ฐ์ง€ ์•Š์€ ์•„์‹œ์•„์ธ๋“ค์˜ ์–ผ๊ตด ์‚ฌ์ง„์„ ๋ณด๊ณ  ๋งˆ์Šคํฌ ์ฐฉ์šฉ ์ƒํƒœ์™€ ์„ฑ๋ณ„, ์—ฐ๋ น๋Œ€๋ฅผ ์ถ”๋ก ํ•˜๋Š” ๋ฌธ์ œ



๐Ÿ‘ฉโ€๐Ÿ’ป ํŒ€ ์—ญํ• 

์ด๋ฆ„ ์—ญํ• 
๋ฐ•์ฐฌ์ข… ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ ์‹คํ—˜, ๋ฐ์ดํ„ฐ ์ฆ๊ฐ• ์‹คํ—˜, ์‹ฑ๊ธ€ ๋ฐ ๋ฉ€ํ‹ฐ ํ—ค๋“œ ์‹คํ—˜, ์ฝ”๋“œ ๋ฌธ์„œํ™”
์–‘์šฐํฌ ์‹ฑ๊ธ€ ๋ฐ ๋ฉ€ํ‹ฐํ—ค๋“œ, ์•™์ƒ๋ธ” ๋ชจ๋ธ ์‹คํ—˜, github ๊ด€๋ฆฌ, ์ฝ”๋“œ ๋ฌธ์„œํ™”
์œ ํ•œ์ค€ ๋ฐ์ดํ„ฐ ์ฆ๊ฐ• ์‹คํ—˜, ์‹ฑ๊ธ€ ๋ชจ๋ธ ์‹คํ—˜
์ด์˜์ง„ ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•, ํด๋ž˜์Šค ๋ณ„ ๋ชจ๋ธ ํ•™์Šต, ์†์‹คํ•จ์ˆ˜ ์‹คํ—˜, ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
์ •์†Œ์œค ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ, ์‹ฑ๊ธ€ ๋ฐ ๋ฉ€ํ‹ฐ ํ—ค๋“œ ๋ชจ๋ธ ์‹คํ—˜
์ตœ์‹œํ˜„ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ(๋ฐฐ๊ฒฝ ์ œ๊ฑฐ, ์–ผ๊ตด ํƒ์ง€) ์‹คํ—˜



โฐ WBS

๐Ÿ“ 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