Day - 15
피어세션
- pytorch 프로젝트 구조 템플릿 리뷰
- 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
피어세션
- 각자 진행 상황을 공유(어떤 부분에 초점을 맞추었나, Pipeline의 어느 단계에 있는가, 어려운 점은 무엇인가)
- 대회 팀은 목요일 자정 전까지 결성하는 것으로 계획
- 논문 발표에 대한 논의 필요
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
피어세션
- 각자 진행 상황을 공유(어떤 부분에 초점을 맞추었나, Pipeline의 어느 단계에 있는가, 어려운 점은 무엇인가)
- 대회 팀은 목요일 자정 전까지 결성하는 것으로 계획
- 논문 발표에 대한 논의 필요
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
피어세션
- 각자 진행 상황을 공유
- 당일 팀을 짜야하기 때문에 최대한 모델을 돌려보고 제출해보자
- CV팀(augmentation)과 NLP팀(hyparameter tuning)으로 나누어서 각자 맡은바 임무에 충실히 수행
- 멘토님이 깃헙을 사용한 협업에 대한 설명
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
피어세션
- 각자 진행상황 공유
- 팀 회고 제출
- 각 팀별 미팅 따로 진행
- 기준을 정하고 성능 차이를 확인
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 등...)
시간이 많이 부족하다... 서둘러야한다는 마음이 앞서는 것 같다.... 좀 더 여유를 가지고 돌아보기도 해야하지만 쉽지가 않다.... 너무 한 곳에만 집중하기보다 잠시 다른 곳에도 눈을 돌릴 수 있게 변해야겠다...
'Boostcamp AI Tech' 카테고리의 다른 글
[Boostcamp Day-17] Image Classification - Model (0) | 2021.08.25 |
---|---|
[Boostcamp Day-16] Image Classification - Dataset (0) | 2021.08.25 |
[Boostcamp Day-15] Image Classification - Problem Definition (0) | 2021.08.24 |
[Boostcamp Day-15] Image Classification - EDA (0) | 2021.08.24 |
[Boostcamp Day-15] Image Classification - Overview (0) | 2021.08.24 |