[CV 문서 분류 대회] 셋째 날 정리: 임밸런스 데이터 맞춰주기
대회 셋째 날은 10월의 마지막 주 금요일이였고, 다른 일정이 많은 바쁜 날이였다.
이날 했던 건, 임밸런스한 이미지 데이터의 밸런스를 맞춰주는 것. 그리고 그걸로 다시 어그멘테이션을 해서 학습 데이터셋을 만들어 모델을 한번 더 돌려보는 것이였다.
대회에서 주어진 이미지 데이터셋은 총 1570장. 테스트 데이터셋은 3140장. 이미지는 총 17개의 클래스로 분류되는데, 트레인 데이터셋을 클래스별로 분류해보면, 1번, 13번, 14번 클래스의 이미지 데이터셋이 부족한 것을 볼 수 있다. 나머지는 모두 100개씩 있지만, 1번은 46개, 13번은 74개, 15번은 50개의 이미지만 있다. 아래 그림은 같은 팀원인 J님이 만드신 그림!
사실 이전까지는 데이터 임밸런스 감수하고, 그냥 각 이미지 * 10배로 데이터 어그멘테이션을 적용하고 그걸로 모델을 돌렸다.
이 임밸런스를 줄여주면 성능이 좋아질거라는 가설을 세우고 코드를 수정하기 시작했다.
구조는 다음과 같다.
1) 이미지 개수가 부족한 클래스는, 그 안에 있는 이미지를 활용해서 회전, 블러, 뒤집기 효과를 적용해서 100개 만들고 저장 -> balanced image data만 모여있는 폴더에 넣고 라벨 넣은 csv파일 만들기(이곳에는 모든 클래스마다 약 100개씩 이미지가 존재) => 1786개 이미지 완성. 원래는 1700개의 데이터가 만들어져야 하는데 1786개인건, 1번 14번 클래스가 더 많이 만들어졌다;
2) 1786개의 밸런스 나름(?) 맞춘 이미지에 대해서 10배수만큼 다시 어그멘테이션. 첫 번째에 했던 어그멘테이션이랑 다르게 적용시키고 랜덤하게 효과를 준다. csv파일도 만들고, 최종적으로 트레인셋으로 쓸 폴더에 이미지를 저장했다.
여기까지 한 뒤에
데이터 로드하고 모델 로드하고 폴드 5개로 나눠서 모델을 돌렸다. 폴드 나눌 때에는 StratifiedKFold를 사용해서 5개 폴드를 만들고 한 폴드를 돌아가면서 validation set으로 만드는 방식.
트레인셋 폴더 안에 원래 1570장에다가 임의로 부족한 클래스에 대해 증강한 이미지, 그리고 각 이미지별로 10배씩 어그멘테이션까지 다 한 총 17860장의 이미지가 있다. 여기서 train 데이터를 가지고와서 폴드를 나눴으니, validation data set 안에도 어그멘테이션된 데이터가 들어간 셈이다. 그리고 이전 방식과 동일한 모델과 파라미터 똑같이 써서 올렸는데, 나아지긴 한 것 같다.
리더보드에 올렸을 때에도 조금 올라갔다. ㅎ
아 그리고 온라인 어그멘테이션을 에폭마다 다르게 적용시키는 것도 했다. 어그멘테이션 코드만 미친듯이 길어짐..
컷아웃, 컷믹스,믹스업 등을 적용했음.