Skip to content

suhyun6363/level1-imageclassification-cv-21

 
 

Repository files navigation

1. Introduction


Banner


🎨 AI Palette

”심장을 바쳐라”

🔅 Members

김보현 김성주 김한얼 윤남규 정수현 허민석
Github Github Github Github Github Github

🔅 Contribution

  • 김보현   Model search, Dataset curation, Hyperparameter tuning, Induce efficient augmentation
  • 김성주   Data feature analysis, Enhanced evaluation accuracy, Data augmentation, Hyperparameter tuning
  • 김한얼   Pipeline construction, Code refactorization, Team schedule management, Team workload management, model search
  • 윤남규   Data preprocessing management, Model search, Data augmentation
  • 정수현   EDA, data generate, model search, feature engineering
  • 허민석   Data curation, Dataset generation, Model search, Code refactoriation

2. Project Outline

Competition Info

  • Task : Image Classification
  • Date : 2024.09.10 - 2024.09.26
  • Description : Sketch Image를 입력 받아서, 어떤 대상을 묘사하는지 추측해 500개의 class로 분류했습니다.
  • Image Resolution : Auto-augmetation, Label smoothing
  • Train : Kaggle ImageNet-Sketch(ImageNet-Sketch) + Upstage dataset
  • Test : Kaggle ImaeNet-Sketch + Upstage dataset ( size : 15,000)

🏆 Final Score

final_score

3. Solution

process

KEY POINT

  • Open source library인 timm의 모델들을 위주로 학습을 진행했습니다. About timm
  • Image 내부에 object의 갯수가 복수인 경우, 유사한 class가 있는 경우가 많아 이를 해결하는 것이 가장 중요했습니다.
  • Firsthand pre-processing을 시도한 train dataset으로 학습을 진행한 경우, 약 7%의 성능 저하가 있었습니다. 이를 통해서 pure dataset은 generalization에 어렵다는 점을 배웠습니다.
  • Mixup, cutmix 등의 적절한 augmentation 기법을 수행한 경우, 약 1.5%의 유의미한 성능을 관찰할 수 있었습니다.
  • WanDB, Tmux을 활용하여 작업 시 효율성과 편의성을 높였습니다.

    → 주요 논점을 해결하는 방법론을 제시하고 실험결과를 공유하며 토론을 반복했습니다


Checklist

  1. Data Preprocessing
  • Augmentation : Auto, Trival, Mixup, Cutmix
  • Label smoothing
  • Firsthand data preprocessing (Data preprossing branch에서 관련 내용을 확인할 수 있습니다.)
  1. Used models
  • CNN based models : ResNet-18, EfficentNet, ConvNeXt
  • Transformer based models : DeiT, EVA-CLIP, SwinV2
  1. Ensemble method
  • Median : 성능이 준수한 모델들의 prediction value들의 평균값을 구해서, 이를 새로운 prediction value로 이용
  • Voting : 성능이 준수한 모델들의 값이 일치한 경우를 prediction value로 이용
  • Uniform soup (not applied) : 단일 모델에 대한 앙상블 기법입니다. 본 프로젝트에서는 다양한 모델들의 앙상블 기법만 시도되었습니다.

Evaluation

Method Accuracy
rViT + pre-trained 88.9
SwinV2 87.4
CoatNet + pre-tratined 88.7
DeiT + Voting ensemble 90.0
DeiT Large + TTA Ensemble 90.3

1. config : 모델 학습에 필요한 설정 파일들을 관리합니다. 다양한 모델의 정보를 포함하고 있으며, 변경이 가능합니다. 2. dataset : Data loading 및 Data pre-processing 과정을 처리합니다. 3. engine : Training process 관련 코드를 포함하고 있으며, training 및 tuning을 수행합니다. 4. utils : 프로젝트 내에서 이용되는 utility function들을 포함합니다. 5. **train.py** : Model training을 수행하는 main script file 이며, 전체 pipeline을 담당합니다.

4. Descriptons about main branch

  • train.py : main 실행 script file 입니다. Model 선택(checkpoint), tuning, ensemble, smoke-test 등을 선택해 훈련을 할 수 있습니다.

config

  • Pipeline 설정 값들의 저장소 입니다. 폴더 내부에는 model에 따라서 다양한 'config.py' script file이 있습니다.
  • 'modelconfig.py' : model의 base parameter(ex. lr, batch size) 값들의 모음.
  • model 별로 입력 인자가 다른 경우가 많아서, config.py를 구분해 생성했습니다.

**dataset** 1. dataset.py : dataset을 불러오고, 이를 훈련에 적합하도록 다양한 작업을 수행합니다. (ex. resize. rotation) 2. dataloader.py : train, test dataset을 불러오고, **train_test_split**을 통해서 train을 훈련+검증 dataset으로 분리합니다. 3. transforms.py - TransformerSelector : torchvision, albumentations, auto-augment, trivial 중에서 원하는 방법을 입력 인자로 받고 수행함 - 각 방법들은 flip, rotation, resizing 등의 작업을 수행 -> **일반적인 상황에서 모델이 잘 작동하도록** 돕는다.
**engine** 1. callbacks.py - cf) Python에서 callback : **함수를 호출하고, 이를 출력함** - 여기서는 checkpoint path, model's name 등을 호출받고, 이를 출력합니다. 2. test_runner.py : config, checkpoint_path(model)을 입력 받습니다. 입력받은 model을 **Lightning**을 이용하여 모델이 잘 작동하는지 확인합니다. 3. tuner.py : ....
**model** - 다양한 model들이 구현된 코드의 집합체입니다. - model_factory.py - importlib : model name을 입력받으면, 그 model의 file을 불러옵니다. 이는 model loading이 편하게 돕습니다.
**utils** : Wandb login을 수행하고, 필요하다면 ensemble을 수행합니다.

5. How to use

  • 본 대회의 dataset은 외부로 유출이 금지되어 있기 때문에, External data을 이용해야 합니다.
  • External dataset은 'ImageNet-Sketch'를 권장합니다
  • 사용자는 전체 코드를 내려받은 후, 옵션을 지정하여 개별 라이브러리의 모델을 활용할 수 있습니다 git clone https://github.com/Namgyu-Youn/Booscamp_AI_tech7_level1.git

About

level1-imageclassification-cv-21 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%