# 모델 최적화 (Model Optimization) ## 1. 프로젝트 개요 ### I. 프로젝트 주제 및 개요 본 프로젝트는 경량화된 이미지 분류 모델을 만드는 것을 목적으로 한다. 구체적으로는 대회 목표 성능(**f1 score 0.7 이상, mean time 60 이하**) 이상의 결과를 내는 것을 목적으로 한다. ### II. 기대효과 인공지능 모델의 성능은 Hyperparameter 설정에 큰 영향을 받는다. 그러나 사람이 일일이 설정을 바꿔가며 실험을 하는 것은 물리적인 한계가 있기 때문에, 이를 자동화할 수 있는 `optuna`의 사용법을 익히는 방법을 기대할 수 있다. ## 2. 프로젝트 팀 구성 및 역할 (가나다순) - 고지호(T2007): Optuna를 이용한 augmentation 실험, model 구축, optimizer/scheduler/criterion 실험 - 김민성(T2024): EfficientNetv2의 MBConv, Generator 구현 - 김범찬(T2031): Optuna 사용 파일 refactoring, Optuna 실험 결과 Visualization - 김정현(T2051): data augmentation, KD(FAIL) - 심현덕(T2125): Data augmentation 실험 - 최수홍(T2228): Data preprocessing, Data augmentations ## 3. 프로젝트 수행 절차 및 방법 본 프로젝트는 크게 데이터 팀과 모델 팀, 두 팀으로 나누어 진행되었다. 데이터 팀은 `torchvision.transform` 내의 함수로 만들 수 있는 다양한 데이터 증강 방법론의 조합들을 실험하여, 특정한 모델이 주어졌을 때 최적의 결과를 내는 데이터 증강 방법을 찾고자 하였다. 모델 팀은 모델의 성능에 영향을 끼치는 Hyperparameter, 즉, 입출력 크기, 모듈의 개수, 학습률, Optimizer 등을 다르게 하여 프로젝트 목표에 가장 적절한 모델을 찾고자 하였다. ### I. 탐색적분석 및 전처리 #### i. 데이터 소개 학습 데이터는 재활용 쓰레기 데이터 셋인 "TACO" 데이터 셋을 이미지 분류에 맞도록 Bounding Box를 Crop하여 사용하였다. 학습 데이터로는 총 20,851 장의 이미지가 사용되었으며, 이미지는 `Plastic`, `Plasticbag`, `Paper`, `Metal`, `PaperPack`, `Styrofoam` 여섯 개의 Class 중 하나를 가진다. 평가 데이터로는 2,611 장의 `public` 데이터와 2,606 장의 `private` 데이터가 제공되었으며 그 형식은 학습 데이터와 동일하다. #### ii. 전처리 전처리 방법은 이미지를 회전하는 `RandomAffine`, 이미지를 다각도에서 보듯이 바꿔주는 `RandomPerspective`, 이미지를 좌우/상하반전 시켜주는 `RandomHorizontalFlip`과 `RandomVerticalFlip`, 이미지를 정규화 해주는 `Normalize`를 사용하였다. 또한, 임의로 선정한 한 장의 사진을 다른 사진의 일부로 이식하는 `Cutmix`와 사진을 합쳐주는`Mixup` 역시 적용하였다. ### II. 모델 개요 모델의 구조는 다음과 같다. idx|n|params|module|arguments|in|out |---|---|---|---|---|:---:|:---:| 0|1|928|Conv|[32,3,1,None,1,None]|3|32 1|1|320|DWConv|[16,3,2,None,'Swish']|32|16 2|1|89,352|MBConvv2|[32,128,2,1]|16|128 3|1|177,216|InvertedResidualv2|[32,8,1]|128|32 4|1|2,592|DWConv|[96,5,2,None,'HardSigmoid']|32|96 5|1|96,032|InvertedResidualv2|[16,8,2]|96|16 6|1|2,304|Conv|[128,1,1]|16|128 7|1|0|GlobalAvgPool|[]|128|128 8|1|0|Flatten|[]|128|128 9|1|774|Linear|[6]|128|6 총 Layer는 66층, Parameter는 369,518개이다. ### III. 모델 검증 #### IV. 검증 우선 학습 데이터셋을 80% : 20% 로 분류하였다. 그 중 80%만 온전히 학습에 사용하고 매 5 에폭마다 나머지 20%로 검증을 진행하여, 가장 f1 score가 높은 weight를 최종 모델로 선정하였다. ## 4. 프로젝트 수행 결과 **Score** : 1.1397 (Public) -> 1.1655 (Private) **F1 score** : 0.7013 (Public) -> 0.6962 (Private) **mean time** : 55.7934 (Public) -> 55.7934 (Private) ## 5. 차후 모델 개선 방안 `Optuna`를 통해 적절한 Hyperparameter를 찾는 것을 통해 이미 목적을 달성했기 때문에 추가적인 성능 향상을 위한 노력을 꾀하지 못하였다. 비슷한 구조를 가진 모델을 통해 Knowledge Distillation을 하거나, 최종적으로 완성된 모델에 Pruning을 하여 실행 시간을 더 줄이는 방향으로 개선할 수 있을 것 같다. ## 6. 프로젝트 후기 - 고지호(T2007): Optuna의 search space를 조정하는 것이 매우 중요함을 알았고, 또 tuning이 모델의 성능을 올려주는데에 매우 큰 역할을 함을 체감했다. - 김민성(T2024): AutoML을 경험해볼 수 있었고 모델을 구성하는 새로운 방법을 배울 수 있었습니다. - 김범찬(T2031): 모델을 만들 때 Hyper Parameter를 몇으로 설정할지는 항상 해왔던 고민이었다. 이번 프로젝트를 통해 Optuna를 사용하여 이를 조정하는 방법을 배웠기에 좋은 경험이었다. - 김정현(T2051): Optuna를 이용해 AutoML을 실습해보면서 모델을 경량화하는 방법에 대해 알 수 있는 좋은 경험이였습니다. - 심현덕(T2125): argumentatio을 사용하면서 데이터를 개선하려고 했지만 성능이 쉽게 나아지지않아서 고민했었고, 최종결과에 팀원이 구현한 argurmentation으로 성능이 크게향상되는 것을 보고 중요성을 더욱 느꼈다. - 최수홍(T2228): Optuna를 이용하여 성능은 유지하되 가벼운 모델을 만들 수 있는 좋은 경험을 하였고, cv에 사용되는 criterion, augmentations에 다양한 방법들을 배울 수 있었습니다.