피부기록 앱 스킨로그와 화장품 추천 앱 매니폴드를 서비스하는 아트랩의 기업 과제 수행
제공받은 피부 데이터를 바탕으로 피부 평가, 분석 및 XAI
사용자에게 피부에 대한 정보를 제공하고, 화장품 선택에 도움주는 것이 목적
Input : 피부 부위별 사진(측면, 중앙부, 이마)
Output : 유분, 민감도, 주름, 색소침착 네 가지 기준에 대한 0~4점의 라벨링
Macro-recall
ex) wrinkle에서 4점에 대한 label
위 경우 병의 진단과 같은 맥락으로 1~4점을 0점으로 예측하는 경우를 줄이는 것보다, 0점을 1~4점으로 예측하는 경우을 줄이는 것을 중요하게 생각해서 F1 score가 아닌 Macro Recall를 평가지표로 선정했습니다.
.
├── 📂 naverboostcamp_dataset/
│ ├── 📂 naverboostcamp_train/
│ │ ├── 📂 JPEGImages/
│ │ │ ├── 📝 00000NBC.jpg
│ │ │ ├── 📝 00000NBC.json
│ │ │ └── 📝 ⋮
│ │ └── 📝 annotations.json
│ └── 📂 naverboostcamp_val/
│ ├── 📂 JPEGImages
│ │ ├── 📝 00000NBC_val.jpg
│ │ ├── 📝 00000NBC_val.json
│ │ └── 📝 ⋮
│ └── 📝 annotations.json
├── 📂 MWML/
│ ├── 📂 configs/
│ ├── 📂 libs/
│ ├── 📂 main/
│ │ ├── 📝 train.py
│ │ └── 📝 valid.py
│ ├── 📂 outputs/
│ └── 📂 pretrained_models/
│ └── 📝 RegNetY-3.2GF_dds_8gpu.pyth
└── 📂 baseline/
├── 📂 customs/{feature name}/settings/
│ ├── 📝 arg.py
│ ├── 📝 dataloader.py
│ ├── 📝 loss.py
│ ├── 📝 model.py
│ ├── 📝 optimizer.py
│ ├── 📝 scheduler.py
│ └── 📝 transform.py
├── 📂 utils
│ └── 📝 set_seed.py
└── 📝 train.py
CLAHE
Loss Weight
Ordinal Classification
encoder | |
---|---|
0점 | [1, 0, 0, 0, 0] |
1점 | [1, 1, 0, 0, 0] |
2점 | [1, 1, 1, 0, 0] |
3점 | [1, 1, 1, 1, 0] |
4점 | [1, 1, 1, 1, 1] |
각각의 클래스를 원핫인코딩 하는 대신, 각 클래스를 ordinal하게 인코딩하여 클래스에 순서를 부여
macro recall | f1 | |
---|---|---|
pigmentation | 74.172 | 0.7258 |
oil | 61.3 | 0.5024 |
sensitive | 77.967 | 0.7158 |
wrinkle | 61.83 | 0.5149 |
pip install -r requirements.txt
# MWML
python main/train.py --cfg {config 경로}
# baseline
python train.py --dir {feature 이름} --arg_n {arg 이름}