BoostCamp의 기간은 총 3단계로 나눌 수 있다.
첫번째로 기초적인 지식을 배양하는 단계
두번째로 실제 Task를 풀어보는 단계
세번째로 문제정의부터 해결까지 전체 싸이클을 경험해 보는 단계이다.
중점적인 경험은 두번째와 세번째 단계로 볼수 있는데, 두번째 실제 Task를 풀어보는 단계에서 Computer Vision 부문의 교육생들을 Classification, Object Detection, OCR, Segmentation 총 네개의 과제를 팀프로젝트 형식으로 진행하게 된다.
Classification의 경우 총 3개의 type, 각각 3,3,2개의 class로 이뤄져 총 18개의 클래스를 분류하는 문제였는데, 이때는 보통 특별히 다른 기술이 들어가는 것이 아닌, EfficientNet계열의 모델(SOTA)를 가지고 각 팀마다의 성능 높히기 노하우를 첨가한다. 데이터EDA를 통한 imbalnce문제 해결이 대표적인 예시인데, 특정 type이나 class의 데이터의 수가 다른 분류들과 현저하게 차이날때 두가지 방법을 생각 할 수 있다. 모두 가장 적은 class의 데이터수로 맞춰서 sampling을 하거나 데이터 수가 적은 분류에 데이터를 추가하는 것이다. 두가지 방법 중 적은수로 sampling하는것은 학습데이터 수에 목을 메는 딥러닝 관점에선 일반화성능을 저해하기때문에 꺼리고 있다. 그렇다면 augmentation을 통해 적은 class의 데이터수를 늘려주는 방법을 고려해 보아야 하는데, 다양한 image processing 기법을 활용하기도 하고, 생성 모델을 통한 유사 이미지 생성을 하기도 한다. 각각 장단점이 있기에 여러 시도를 해보는것이 중요했다.
Object Detection의 경우 이미지 내의 쓰레기의 위치와 종류를 판별하는 문제였는데, 이 문제는 package를 사용하는 훈련을 할 수 있다는 점에서 매우 유익했다. MMdetection이나 Detectron2, Yolo등을 주로 사용했는데 특히 Detectron2의 경우 config file을 세세하게 다뤄서 코드를 돌아가게 하는일 자체가 처음에 낯설고 어렵게만 느껴졌다. 때에 따라 적절하게 모델 layer를 수정하고 해당하는 변수설정과 parameter등을 맞춰서 실행하다 보니 퍼즐을 맞추는것같은 재미를 느끼면서 global하게 문제를 해결하려고만 하는것은 한계가 있는 일이라고 알게 되었다. 특히 Object Detection은 One-stage(Yolo나 SSD)와 Two-stage(RCNN)로 나뉘게 되는데 One-stage Object Detection은 빠른 속도로 객체 검출, 위치 및 클래스 예측을 동시에 처리하기 때문에 속도 측면에서 장점이 있지만 작은객체나 밀집한 객체들 사이의 간격이 좁은 경우 정확도가 떨어질수 있다는 단점이 있고, Two-stage의 경우 후보 영역을 먼저 추출하는 ROI pooling이나 ROI align레이어를 거친 뒤 객체의 위치와 클래스를 예측하는 방식이기에 보다 정확하고 세밀한 객체검출을 할수 있다는 장점이 있으나 정 반대로 속도 측면에서 조금 느리다는 단점이 있다. 허나 이는 trade-off일 뿐 월등히 더 나은 것이 있다고 보기 어려우며 구조적 단순함이나 조금이라도 빠르다는 측면에서 computing cost를 줄이는 One-stage object detection이 범용적으로 사용되는 경향이 있다는 것을 알게 됐다.
OCR task는 특이하게 data-centric이라는 주제로 진행하였는데, VGGNet을 backbone으로 사용하는 EAST(Efficient and Accurate Scene Text Detection)모델을 고정한뒤 각각의 팀이 data을 자율적으로 추가, 변경하여 성능을 올리는 경쟁방식이었다. 항상 data가 중요하다는 생각은 해왔지만, 모델을 고정한채로 데이터만 변경해서 성능을 검증해볼생각은 한번도 해본적이 없었기 때문에 정말 신선한 경험이었다. 근데 이때 창의적인 접근을 하지 못한게 지금 아쉬움으로 남는다. 보통의 augmentation들과 이미지를 crop해서 pixel별로 옮긴 데이터를 추가하는 정도에 그쳤는데, 다른 팀의 경우 Super Resolution을 적용한다던지 기술적인 시도들을 다양하게 한것 같아서 신기하다고 멋지다고 생각했다.
Segmentation은 사람 손뼈를 구분하는 task였고, SAM을 이용하여 수월하게 끝냈었다. 별로 기억에 남는게 없슴!
마지막으로 가장 중요한 문제정의부터 해결까지 하는 최종 프로젝트는 기업연계 프로젝트로 진행하게 되는 행운을 얻었다. 근데 한편으론 좀 아쉬웠던게 문제 정의를 해보는 경험을 못한것이다. 역시 task중에 하나를 풀어보는 식으로 그쳤던것 같고 우리팀의 경우 Document Understanding 분야 중 하나인 InfographicsVQA를 하게 됐다. Document의 종류가 여럿 있을거 같은데 특히 그중 Infographics data를 많이 포함한 문서의 내용에 관한 질의 응답을 할 수 있도록 하는 task였는데, 이미 알려진 competition으로 leaderboard도 제공되는 상황이었다. 우리의 경우 OCR-dependent 모델과 OCR-free 모델 사이에서 처음에 고민을 했는데 OCR-dependent 모델로 선택하여 진행하던중 OCR-free model로 pivot하게 되었다. 여기서 아쉬운점은 팀원이 총 5이었는데 2-track으로 진행하지 않았던 것 이다. 시장조사를 철저히 했다고 하더라도 중간에 어떤 문제가 발생할지 모르는데 우리의 결정을 맹신하고 처음부터 싹을 잘랐던게 시간지체로 이어졌다. OCR-dependent모델의 경우 이미지를 보고 글씨를 본다는 의미에서 사람이 이해하기 쉽도록 하는 inductive bias가 있는데, OCR의 자체적인 성능에 대해 특히 특수문자 처리에서의 애로사항이 지속적으로 발생하여 OCR-free 모델로 전환하게 되었다. 이때 pix2struct모델을 활용하여 학습을 진행하였는데, HTML 구문과 이미지를 사전학습한다는 점이 매력적이었다. HTML구문과 이미지는 infographic데이터가 많은 이미지중 가장 Layout의 규칙을 간단 명료하게 표현하고 있고 문자, 그림까지 1:1 matching이 되는 좋은 데이터의 예시라고 생각했기 때문이다. 특히 attention machanism을 활용한 variant한 이미지 input받기 등이 task를 풀기에 적합했고 결론적으로 Hugging face를 이용하여 모델 불러오기 및 학습이 매우 편안했다.
이후에 우리만의 방식으로 성능을 향상시키기 위해 다양한 시도를 해봤는데, 일단 Image normalization의 수치를 우리 데이터에 맞게하는것이 첫번째 시작이었다. 기존의 주로 쓰이는 이미지와 다르게 전반적으로 흰색이미지가 많았기 때문에 ImageNet21k에 맞춰진 mean, std를 사용하지 않고 우리데이터의 값을 계산하여 normalize하였고, 추가 데이터를 넣기도 하고, encoding 부분의 layer를 freeze하는 단을 다양하게 수정하는등 정확도를 높히기 위해 총력을 다해 결국 20%상승을 이뤄냈다!
'Have Done > BoostCamp' 카테고리의 다른 글
포트폴리오 습작1 (0) | 2024.04.12 |
---|---|
Details of Detection (0) | 2024.01.03 |
Object Detection! (1) | 2024.01.03 |
streamlit (0) | 2023.12.29 |
Week5 (0) | 2023.12.04 |
댓글