[6-7주차] 대회후기

Soonyoung Hwang·2022년 11월 10일
0

네이버 부스트캠프

목록 보기
5/14

주제

마스크 쓴 이미지를 토대로 성별/나이대/마스크착용여부 검출

학습 목표

프로젝트 모델의 성능향상

진행 내용

  1. Baseline Code 분석 및 개선

    Data Split
    Train/validation 데이터를 나눌 때, 인물+클래스 별로 일정 비율로 나누도록 수정
    Data Transform
    기존 코드 – train/val 데이터셋에 transform 동일하게 적용
    수정 코드 – train/val 데이터셋에 각각 다른 transform 적용
    코드 버그 수정

    Inference 한 데이터 시각화 추가
    학습된 모델을 통해 inference한 결과물을 시각화하는 코드를 추가함
    Eval 데이터 라벨 결과 확인 및 분석
    Ratio로 CenterCrop 하는 코드 추가 (MyCenterCrop)
    기존 PyTorch의 CenterCrop은 (height, width)로 crop함 -> 이미지별로 다른 사이즈를 고려할 수 없음
    추가한 코드는 이미지의 사이즈의 (height ratio, width ratio)를 인자로 받아서 해당 이미지의 특정 비율로 CenterCrop 함

  2. 이론을 실무에 적용

    적합한 Data Split을 통해 균등한 데이터 분포 고려
    CrossEntropy Loss/Focal Loss/Smooting Label loss 적용
    Focal Loss를 통해 imbalanced한 데이터 문제 해결
    다양한 Data Augmentation 적용
    해당 학습에 좋은 영향을 미칠만한 Augmentation 적용
    MyCenterCrop, Randomly ColorJitter, RandomHorizontalFlip, RandomPerspective, Normalize, RandomGrayscale
    Oversampling기법
    Minor 이미지에 대하여 기존 이미지에 각종 transform을 적용하고 새롭게 데이터셋에 추가함으로써, Minor data generation 함
    Transfer Learning 적용
    ResNet을 baseline으로, 다양한 SOTA 모델 쓰고 비교 (MetaFormer, Rexnet, EfficientNet, Convnext_nano_ols)
    Pretrained/ Not pretrained / Patially Pretrained 모델 비교
    weight freezing을 통한 학습양 조절

깨달은 점

  1. 개인의 프로젝트 템플릿이 필요하다
    Baseline 코드를 토대로 나만의 baseline템플릿을 만들고 어떤 문제가 나오던 적용하고 대처할 수 있는 능력 필요
  2. 코드리뷰 역량이 필요하다.
    어떤 코드던지 내가 작성한 코드가 아니면 분석할 줄 알아야 하며, 동작 방법을 의심하고 테스트해 볼 줄 알아야 한다.
  3. 모델의 중요성 < 데이터의 중요성
    모델의 중요성이 낮은 것이 결코 아니다. 하지만 모델은 epoch를 돌려보며 score값을 비교하면 서로 다른 모델간 비교가 상대적으로 쉽다. 따라서 baseline 모델을 설정하고 데이터전처리를 먼저 고민한 뒤 나중에 최적의 모델을 선택하면 될 것으로 보인다. (데이터처리의 과정의 조합이나 경우의 수가 더 많다고 느꼈다.)
  4. Transfer Learning의 pretrained parameter의 성능은 매우 좋다.
    Pretrained 된 모델들은 기본적으로 엄청난 양의 데이터를 갖고 학습해서 조금만 학습해도 task를 해결 잘 한다. 반대로 최신 모델을 가져오고 pretrained 되어 있지 않다면 일정 이상의 성능을 내도록 학습하는데 너무 많은 에너지가 소모되었다. 가장 큰 이유는 나의 데이터 양이 SOTA 모델이 학습한 데이터양과 비교가 안되게 적다는 것 이다.
  5. 기록의 중요성
    여러 모델 및 augmentation을 테스트하면서 어떤 일을 하고 있는지 항상 기록해야 한다.
  6. Tool의 중요성 - Tensorboard
    텐서보드를 사용하면서 여러 모델을 비교하기 너무 수월했고, 학습이 어떤 방식으로 진행되고 있는지 확인할 수 있었다.

한계 / 아쉬운 점

  1. 이미지 데이터의 경우 oversampling 기법이 무엇이 있는지 몰라서 transform 변환을 통한 자체 오버샘플링을 해서 성능을 조금 향상시키긴 했지만 올바르지 않을 수 있는 접근이라고 생각한다.
  2. Config 파일에 더 많은 실험 정보를 추가했으면 더 적은 에너지로 실험을 진행할 수 있었을 것 이다. (기록하는데 에너지를 많이 쏟음)
  3. 요령이 없어서 너무 헤맸다. 확실한 순서를 정하고 계획을 짜서 실행했어야 하는데 순서를 너무 왔다갔다 하면서 고쳤다.
  4. Argument parser로 입력받는 것이 사용자 입장에서는 좋을 수 있지만, 내가 수행하는 정도 레벨의 수 많은 테스트를 하기에는 적합하지 않았다. 오히려 실행 config 파일을 저장해서 불러와서 실행했으면 더 빠르게 테스트들이 가능했을 것 같다.
  5. 역량이 부족해서 GAN을 이용한 data augmentation이나, bounding box를 이용한 crop 등 좀 더 다양하고 획기적인 방법들을 적용해보지 못 해서 아쉽다.
  6. 다양한 loss function이나 optimizer를 사용하지 못 한 점이 아쉽다.

한 줄 요약

역량이 부족하고 체계적으로 진행하지 못 해서 여러가지 시도 해보고 싶은 것들을 해보지 못해 아쉬웠지만 다양한 문제해결을 통해 많은 것을 깨달았고 다음에 더 발전된 모습으로 프로젝트에 임할 수 있을 것 같다.

profile
https://github.com/soonyoung-hwang

0개의 댓글