Boostcamp AI Tech

[실험 일지 작성_화] Image Classification

ju_young 2021. 9. 1. 00:47
728x90

Augmentation(CutMix)

1. resnet50 - train set의 중년층 cutmix 30% 적용 - requires_grad=True -> score가 점점 떨어지면 학습이 종료됨

2. cutmix를 적용할 때 왼쪽 반 오른쪽 반을 섞는 방식으로 변경

3. 현재 마스크 쓴 것 : 잘못 쓴 것 : 안 쓴 것의 비율이 5 : 1 : 1인데 중년층의 모든 이미지에 cutmix를 적용시킨 것은 데이터 수가 부족한 "잘못 쓴 것, 안 쓴 것"에도 적용한다는 것이기 때문에 학습이 안되는(?)것이라고 생각 -> 중년층에서도 마스크를 쓴 이미지에만 cutmix를 적용 -> 기본 모델보다 f1 score가 약 0.1 상승 -> 일반화가 잘 수행되었다고 판단

Preprocessing

1. MTCNN과 cv2를 사용하여 face detection을 수행 -> 인식을 하지 못하는 이미지는 직접 crop -> augmentation에서 resize 224를 적용 -> 이미지에 cv2.cvtColor(img, cv2.COLOR_BGR2RGB)를 적용하고 plt.imsave()로 저장했을 때 RGBA(4 채널)로 저장되는 문제가 발생 -> cv2.cvtColor(img, cv2.COLOR_BGR2RGB)를 빼고 plt.imsave()에서 format='jpg'로 지정하는 것으로 해결

2. centercrop을 했을시 불필요한 정보가 생기는 문제때문에 facenet를 사용하여 face를 detect한 이미지를 가지고(인식하지 못했을시 직접 값을 지정하여 crop) resnet50 - train set의 중년층 cutmix 30% 적용 -> batch size를 64로 주어서 그런지 그래프 wave 폭이 상당히 커짐 -> test set - batch size 16, valid set - batch size 8로 지정하고 dataset은 facenet과 retinaface를 사용하여 좀 더 정확한 face detection 이미지를 사용함 -> 그래프상 wave의 폭이 크게 나옴 -> batch size와 lr을 조정 -> 결과가 좋지 않아 방법을 다시 생각

Discussion

1. 서비스 차원에서는 incorrect와 not wear를 구분해주지 않아도 된다고 생각 -> incorrect와 not wear를 확률적으로 비슷하게 만들 수 있는 방법을 모색 -> incorrect일 때도 "마스크를 똑바로 써주세요"라고 말할 수 있게 서비스를 하게 된다면 필요하기때문에 중단

 

 

Classification Test

 

1. "마스크를 쓴 것, 잘 못 쓴 것, 안 쓴 것" 이 세가지 class가 잘 classification이 이루어지는지 renet50을 사용하여 실험해봄 -> prediction과 label, image를 보았을 때 거의 classification이 잘 이루어진 것을 확인

 

Dataset

1. pandas_streaming의 train_test_apart_stratify을 사용하여 train set과 valid set을 split을 하였는데 이 함수를 사용함으로서 train에 separate되는 data가 valid에는 들어가지 않게끔 해준다. -> training을 하게된 data를 validation을 하게된다면 당연히 좋은 점수가 나올 것이기 때문

[참고 링크] http://www.xavierdupre.fr/app/pandas_streaming/helpsphinx/api/rdf.html#complex-splits

728x90