일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 가능도
- 부스트캠프 AI테크
- VSCode
- 정규분포 MLE
- Numpy
- dtype
- namedtuple
- pivot table
- 딥러닝
- boolean & fancy index
- 표집분포
- python 문법
- type hints
- groupby
- linalg
- ndarray
- Python 특징
- 카테고리분포 MLE
- subplot
- unstack
- Comparisons
- Operation function
- seaborn
- Numpy data I/O
- 최대가능도 추정법
- Python 유래
- BOXPLOT
- Python
- scatter
- Array operations
- Today
- Total
또르르's 개발 Story
[Stage 1 - 08] No Augmentation 본문
1️⃣ Goal
[BaseLine 작성] (추가 : 3/29, 기간 : 3/29 ~ 3/29)- [Data Processing]
-Face Recognition (추가 : 3/29, 기간 : 3/30 ~ 3/31)
- Cross-validation 사용 (추가 : 3/29)
-데이터 불균형 해소 /imbalanced Sampler,Focal Loss, OverSampling, Weighted loss (추가 : 3/30, 기간 : 4/1 ~ )
-Data Augumentation (Affine, Gaussian 등) (추가 : 3/30, 추가 : 4/5 ~ 4/8)
-Generator의 초당 Batch 처리량 측정 및 향상 (추가 : 3/30, 기간 : 3/31 ~ 3/31)- Cutmix 시도 (추가 : 4/1)
- Repeated Agumentation (추가 : 4/1)
-validation data 사용 (추가 : 4/1, 기간 : 4/1 ~ 4/1) - [Model]
- ResNet 152층 시도 (추가 : 3/29)
-Efficient Net 시도 (추가 : 3/29, 기간 : 4/1 ~ 4/2)
- YOLO 시도 (추가 : 3/31)
-Pre-trained 모델에 Fine-tuning 하기 (추가 : 3/29, 기간 : 4/1 ~ 4/1)
- Model의 초당 Batch 처리량 측정 및 향상 (추가 : 3/30)
-dm_nfnet 시도 (추가 : 4/1, 기간 : 4/7 ~ 4/7 ) - [Training]
- 앙상블 시도 (추가 : 3/29, 기간 : 4/7 ~ )
- Hyperparameter 변경 (추가 : 3/29, 기간 : 3/29 ~)
-Learning Schedular 사용 (추가 : 3/29, 기간 : 4/1 ~ 4/7 )
- Model의 초당 Batch 처리량 측정 (추가 : 3/30)- 좋은 위치에서 Checkpoint 만들기 (Adam으로 모든 minimum 찾고, SGD로 극소점 찾기) (추가 : 4/1, 새로운 baseline code)
-Sex 분류 (1번 모델) -> Age 분류 (2번 모델) -> Mask 분류 (3번 모델) // 모델 나누기 (추가 : 4/1, 기간 : 4/5 ~ 4/8 )
-Crop image (mask 분류)와 일반 image(age, sex 등 분류) 둘 다 사용 (추가 : 4/1, 기간 : 4/5 ~4/5 )
- batch size 작게 쓰면서, SGD 사용 (추가 : 4/2, 기간 : 4/8 ~ )
-NNI (Auto ML) 사용 (추가 : 4/2, 기간 : 4/2 ~ 4/4) - [Deploy]
-Python 모듈화 (추가 : 3/30, 새로운 baseline code)
2️⃣ Learning
없음.
3️⃣ Main Task
1) No Augmentation
Stage 1을 하면서 Augmentation을 사용하면 오히려 성능이 하락한다는 말이 많아서..
Data Processing 단계의 Center Crop, MTCNN Crop 모두 사용하지 않고 온전한 image를 input으로 넣었습니다.
1-1) 첫 번째 시도
- batch_size:8
- model:"ecaresnet50t"
- criterion:"cross_entropy"
- classification:"multi"
- epoch : 14

효과가 있었고, test Accuracy 4% 정도, F1-score 0.05% 정도의 성능 향상이 있었습니다.
처음에는 image 뒤의 noise 때문에 걱정했지만, background의 noise들이 Robust 한 모델을 만들어주는 역할을 하는 것 같습니다.
1-2) 두 번째 시도
- batch_size: 16
- model:"Efficientnet_b4"
- criterion:"cross_entropy"
- classification:"multi"
- epoch : 12
더 많은 epoch을 돌렸어야 하는데 제출 시간문제로 epoch을 12까지밖에 돌리지 못했습니다.
그래도 기존 test Accuracy 1% 정도, F1-score 0.01% 정도의 성능 향상이 있었습니다.
2) Soft voting Ensemble
위 ecaresnet50t 모델과 Efficientnet_b4 모델의 soft label들을 모두 csv로 저장했습니다.
아래 사진은 ecaresnet50t의 inference soft label입니다.

아래 사진은 Efficient-net b4의 inference soft label입니다.

이 두 개의 csv를 soft voting 방식으로 앙상블 해서 사용합니다.
MULTI_LABEL_CLASSES = 18
_multi_list = [ # 앙상블하고 싶은 파일 path
'/content/submission12_0.8927_0.2882_soft.csv',
'/content/submission14_0.9006_0.2756_soft.csv'
]
multi = []
for idx, path in enumerate(_multi_list):
multi.append(pd.read_csv(path))
label_names = {}
for idx in range(MULTI_LABEL_CLASSES):
label_names[str(idx)] = 0
for idx in range(len(_multi_list)): # index들의 값들을 label별로 더함
for label_idx in range(len(label_names)):
label_names[str(label_idx)] += multi[idx][str(label_idx)]
label_names = {key : value/len(_multi_list) for key, value in label_names.items()} # list의 개수로 나눠줌 (평균을 구하는 과정)
ensemble_multi = pd.DataFrame.from_dict(label_names) # dict을 dataframe으로 변경
ensemble_multi['ans'] = ensemble_multi[[str(idx) for idx in range(MULTI_LABEL_CLASSES)]].idxmax(axis=1) # idxmax (argmax 함수)를 통해 가장 max값의 indx를 구함
ensemble_multi.insert(0, 'ImageID', multi[0]['ImageID']) # ImageID를 dataframe 맨 앞에 추가
출력해보면 다음과 같이 출력됩니다.
>>> ensemble_multi

Soft voting을 사용하니 (첫 번째 시도 기준) test Accuracy 0.5% 정도, F1-score 0.01% 정도의 성능이 올랐습니다.
4️⃣ Sub Task
1) Dictionary to dataframe
Dictionary를 pandas dataframe으로 변경하는 방법은 아주 간단합니다.
label_names는 Key : label 번호, Values : Series 형태의 값들로 구성되어있습니다.
ensemble_multi = pd.DataFrame.from_dict(label_names) # dict을 dataframe으로 변경
5️⃣ Evaluation
날짜 | Data processing | Model | Training | Time | Accuracy | F1 |
3/29 | - ResNet-50 - |
- Hyperparmeter 설정 - |
7h 32m | 61.87% | 0.52% | |
3/31 | - Face Recognition - |
36m | 65.05% | 0.56% | ||
4/1 | - (pre-trained) Efficient-Net-b6 - |
- epoch : 20, batch size : 128 - |
1h 35m | 73.67% | 0.66% | |
4/1 | - (pre-trained) Efficient-Net-b7 - |
- epoch : 20, batch size : 100 - |
1h 31m | 73.25% | 0.66% | |
4/1 | - learning scheduler : CosineAnnealingLR - epoch : 21 - |
1h 41m | 68.49% | 0.60% | ||
4/2 | - imbalanced-dataset-sampler - |
- learning scheduler X - epoch : 26 - |
1h 39m | 72.38% | 0.64% | |
4/2 | - loss : Focal loss (γ = 2) - epoch : 16 - |
1h 29m | 74.43% | 0.68% | ||
4/8 | - (pre-trained) Efficient-net b6 Efficient-net b4 ecaresnet50t seresnet152d - |
- Ensemble (Soft voting) - |
17h 24m | 74.46% | 0.68% | |
4/8 | - No Augmentation - |
- (pre-trained) ecaresnet50t - |
- batch size : 8 epoch : 15 - |
1h 47m | 78.9841% | 0.7389% |
4/8 | - (pre-trained) Efficient-net b4 - |
- batch size : 16 epoch : 12 - |
1h 36m | 75.6190% | 0.6919% | |
4/8 | - (pre-trained) ecaresnet50t Efficient-net b4 - |
- Ensemble (Soft voting) - |
79.4921% | 0.7404% |
* F1 Score

1) NoAugmentation
- 이미지 MTCNN을 사용해서 face만 crop 해서 사용한 경우, 성능에 한계가 있었습니다. ( Test accuracy가 74%를 넘지 못합니다.)
- 따라서 CenterCrop이나 MTCNN crop을 사용하지 않은 원본 사진을 그대로 사용했습니다.
- 다른 캠퍼님들의 토론 게시판을 보니 다른 agumentation들은 성능 향상이 거의 없었다고 해서 Augmentation을 사용하지 않은 이유도 있습니다.
- 결론적으론 성능 향상으로 이어졌습니다.
2) Ensemble
- 이번 앙상블은 18개의 label을 뽑아내는 Multi Label 2개를 섞어서 사용했습니다.
- model : ecaresnet50t / batch size : 8 / loss : cross_entropy / lr : 0.01 (10 epoch 당 1/10)
- model : Efficientnet_b4 / batch size : 16 / loss : cross_entropy / lr : 0.01 (10 epoch 당 1/10)
'[P Stage 1] Image Classification > 프로젝트' 카테고리의 다른 글
[Stage 1 - 07] Ensemble 하기 (0) | 2021.04.08 |
---|---|
[Stage 1 - 06] 최적의 Hyperparameter 찾기 (0) | 2021.04.05 |
[Stage 1 - 05] Remote Server에서 NNI (Auto ML) 사용하기 (0) | 2021.04.04 |
[Stage 1 - 04] Focal Loss (0) | 2021.04.02 |
[Stage 1 - 03] Model & Optimizer (0) | 2021.04.01 |