Boostcamp AI Tech

[Boostcamp 4주차] 피어세션과 학습 회고

ju_young 2021. 8. 24. 13:13
728x90

Day - 15

피어세션

  1. pytorch 프로젝트 구조 템플릿 리뷰
  2. dive into deep learning을 없애고 알고리즘 스터디를 진행

Image Classification Pstages 회고

1. EDA를 수행하면서 시각화에 대한 구현 능력이 떨어진다는 것을 느꼈다. 좀 더 시각화에 대한 숙지가 필요하다.

2. 이미지 데이터의 문제로 다음과 같은 것들이 나왔다.

  •  속이 보이는 마스크(투명한 마스크)일 경우와 사람이 얼굴이 프린트된 마스크일 경우와 같은 이미지일 경우 제대로 인식하는가
  • 파일 포맷이 png, jpeg, jpg로 다르게 분포
  • 이미지에 대한 라벨링이 제대로 되어있지 않는 경우가 확인
  • 10대와 60대 데이터가 상대적으로 많이 부족, 50대가 상당히 많음
  • male보다 female 데이터에 편향
  • label에 대한 분포를 확인했을 때 0, 1, 3, 4에 집중적으로 분포함을 확인

3. 데이터 전처리는 다음과 같이 진행하였다.

  • 마스크 별로 색깔이 다르므로 channel=1을 주어 통일
  • 필요없는 부분은 없애고 찾고자하는 객체를 찾기위해 resize(400,400)를 사용하여 이미지를 확대
  • 객체가 중앙에 있다고 가정하고 centercrop(224, 224)
  • tensor로 변환
  • nomalize(0.5, 0.5)

4. train에서 hyperparameter는 다음과 같이 지정해주었다.

  • epoch = 15
  • optimizer = Adam
  • learning_rate = 1e-3
  • loss = CrossEntropyLoss()
  • batch_size = 64

우선 데이터의 불균형 문제와 라벨링이 잘못된 문제에 대한 해결이 첫 번째이고 그 다음 이미지 전처리에 대한 고민이 필요하다. 데이터의 불균형은 가중치를 더 적게주거나 더 많이 주는 것으로 시도를 해봐야겠다. 그리고 부족한 EDA도 좀 더 수행해봐야겠다.

 

Day - 16

피어세션

  1. 각자 진행 상황을 공유(어떤 부분에 초점을 맞추었나, Pipeline의 어느 단계에 있는가, 어려운 점은 무엇인가)
  2. 대회 팀은 목요일 자정 전까지 결성하는 것으로 계획
  3. 논문 발표에 대한 논의 필요

Image Classification Pstages 회고

1. 이미지에 대한 라벨링 노이즈가 있음을 확인 -> 모든 이미지를 확인하기 힘듦 -> 깊은 딥러닝 모델을 사용하면 어느 정도의 라벨링 노이즈가 문제되지 않음

 

2. 몇 개의 이미지를 육안으로 확인 -> 밝기, 인물의 위치, 원근감이 제각각 / 머리카락의 유무와 묶은 머리, 푼 머리 등 다양 / 동일인물이 안경을 벗은 이미지와 쓴 이미지가 확인됨 -> 성별, 연령대 등이 제대로 분류가 되는지 의문

 

3. OpenCV를 사용하여 얼굴을 인식한 후 bounding box를 그려보고 Crop을 수행 -> 몇몇 이미지는 제대로 인식하여 Crop이 잘 되었지만 아예 인식을 못하는 경우나 잘못 인식하는 경우가 발생 -> 적용할 수 없다고 판단

 

4. torch.transforms 대신 Albumentations 사용을 시도 -> torch보다 다양한 augmentation이 있지만 에러가 더 자주 발생 -> 더 편한 torch.transforms으로 다시 사용

 

5. Cross-validation을 적용하여 테스트 중.... -> sklearn.KFold를 사용하였고 K=10을 주었을 때 overfitting이 일어나는 것을 확인 -> K=5로 조정하고 실행시 약 73%의 accuracy가 나오는 것을 확인

 

6. 데이터 불균형을 맞추기 위해 CutMix와 같은 기법을 사용해야겠다. -> 일단 모델을 돌려보면서 접근 방법을 생각하기로 함.

 

Day - 17

피어세션

  1. 각자 진행 상황을 공유(어떤 부분에 초점을 맞추었나, Pipeline의 어느 단계에 있는가, 어려운 점은 무엇인가)
  2. 대회 팀은 목요일 자정 전까지 결성하는 것으로 계획
  3. 논문 발표에 대한 논의 필요

Image Classification Pstages 회고

1. 이미지에 대한 라벨링 노이즈가 있음을 확인 -> 모든 이미지를 확인하기 힘듦 -> 깊은 딥러닝 모델을 사용하면 어느 정도의 라벨링 노이즈가 문제되지 않음

 

2. 몇 개의 이미지를 육안으로 확인 -> 밝기, 인물의 위치, 원근감이 제각각 / 머리카락의 유무와 묶은 머리, 푼 머리 등 다양 / 동일인물이 안경을 벗은 이미지와 쓴 이미지가 확인됨 -> 성별, 연령대 등이 제대로 분류가 되는지 의문

 

3. OpenCV를 사용하여 얼굴을 인식한 후 bounding box를 그려보고 Crop을 수행 -> 몇몇 이미지는 제대로 인식하여 Crop이 잘 되었지만 아예 인식을 못하는 경우나 잘못 인식하는 경우가 발생 -> 적용할 수 없다고 판단

 

4. torch.transforms 대신 Albumentations 사용을 시도 -> torch보다 다양한 augmentation이 있지만 에러가 더 자주 발생 -> 더 편한 torch.transforms으로 다시 사용

 

5. Cross-validation을 적용하여 테스트 중.... -> sklearn.KFold를 사용하였고 K=10을 주었을 때 overfitting이 일어나는 것을 확인 -> K=5로 조정하고 실행시 약 73%의 accuracy가 나오는 것을 확인

 

6. 데이터 불균형을 맞추기 위해 CutMix와 같은 기법을 사용해야겠다.

 

Day - 18

피어세션

  1. 각자 진행 상황을 공유
  2. 당일 팀을 짜야하기 때문에 최대한 모델을 돌려보고 제출해보자
  3. CV팀(augmentation)과 NLP팀(hyparameter tuning)으로 나누어서 각자 맡은바 임무에 충실히 수행
  4. 멘토님이 깃헙을 사용한 협업에 대한 설명

Image Classification Pstages 회고

1. Inception_v3 (optim=AdamW(0.001, 0.01), loss=CossEntropy(), lr_scheduler=CosineAnnealingLR(Tmax=10), epoch=10, batch_size=32) -> 65%정도의 결과가 나온 것을 확인 -> overffiting이 발생하는 것이 확인됨

 

2. resnet18 cross-validation(K=5)를 시도해봄 (optim=AdamW(0.001, 0.01), oss=CossEntropy(), lr_scheduler=LambdaLR(0.95 ** epoch), epoch=10, batch_size=64)) -> 교차검증을 해도 성능 향상을 느끼지 못하였고 overfitting에 대한 문제점을 다시 생각하게됨

 

3. 제출시 순위를 f1-score로 평가하기 때문에 train시 계산하는 코드를 추가

 

4. 연령, 성별, 마스크 착용 유무의 모델을 각각 나누어서 weight를 합치는 방식의 모델을 만들어 보는 것을 시도 ->  제대로 만든 것인지 모르겠지만 성능향상에 도움이 되지 않았음

 

5. dataframe에 이미지 객체를 넣어서 모델을 돌렸을떄 "OSError : Image truncated error"가 뜨는 것이 확인됨 -> error가 뜨는 이유를 찾는 것에 시간을 많이 소비함

 

6. efficientnet_b3 (optim=AdamW(0.001, 0.01), loss=CossEntropy(), lr_scheduler=CosineAnnealingLR(Tmax=10), epoch=10, batch_size=16) -> 이 모델 또한 overffiting이 발생하여 전체적으로 일반화가 필요하다는 사실을 직시

 

7. optim = Adam, AdamW / lr_scheduler = LambdaLR, CosineAnnealingLR 을 각각 조합하여 실행하였을 때 overffiting이 해결되지 않아서 그런건지는 모르겠지만 성능 차이가 많이 없었음

 

Day - 19

피어세션

  1. 각자 진행상황 공유
  2. 팀 회고 제출
  3. 각 팀별 미팅 따로 진행
  4. 기준을 정하고 성능 차이를 확인

Image Classification Pstages 회고

1. loss, acc, f1 score가 너무 크게 나오는 것에 대해 고민 -> 이전에 계산하는 방식이 달라서 출력 값이 달랐던 거였음 -> 정상적으로 학습되는 것이라는 것을 뒤늦게 알아챔

 

2. cv팀에게 공유할 baseline.ipynb 파일을 정리 -> loss function을 f1_loss로 적용, tensorboard가 안되는 문제로 인해 wandb를 적용

 

3. 성능 비교를 위해 고정할 hyperparameter를 정하고 코드를 정리하며 통일시킴

 

4. torchvision.transforms 대신 albumentations를 적용

 

5. earlystopping 기법을 적용 -> paience와 코드 수정을 잘못하여 시간을 상당히 버리게됨....

 

6. 생각나는 augmentation을 적용시키며 wanb를 통해 비교 -> 모델이 학습되는 동안 다른 일 진행(강의, 학습정리, search 등...)

 

시간이 많이 부족하다... 서둘러야한다는 마음이 앞서는 것 같다.... 좀 더 여유를 가지고 돌아보기도 해야하지만 쉽지가 않다.... 너무 한 곳에만 집중하기보다 잠시 다른 곳에도 눈을 돌릴 수 있게 변해야겠다...

728x90