23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요 skt fewllowhip 3기로 활동중인 떡잎마을방범대팀 입니다.
저희는 unlabeled data를 활용하여 현재 domain에 대한 좋은 representation을 학습하게 하기 위해 Self-supervised learning 기법을 적용한 실험을 진행했습니다. 저희가 생각한 concept를 증명하기 위해 public set에서의 실험을 먼저 진행하고, 저희의 task와 비슷한 domain에서 잘 작동하는지를 확인하기 위해 veri-wild set에 추가적인 실험을 진행했습니다
최종적으로는 skt 내부에서 사용하는 실험 데이터셋에 이 방법을 적용한 과정과 결과를 정리했습니다
5월에 처음 프로젝트를 시작하여 벌써 최종발표를 앞두고 있는 상황인데요, 앞서 저희는 이미 연구계획-1편(url), 연구과정-2편(url) 활동기록을 작성한 바 있습니다. 앞선 기록들을 먼저 보고 오셔도 좋지만 이 최종 편에서 한번에 정리할 예정이니 따로 찾아보지 않고 한번에 읽어보시면 될 것 같습니다. 저희 활동 기록 및 결과를 통해 self-supervision 모델들에 대해 어느 정도 리뷰를 했고 real-data에 self supervised learning을 적용하는데 어떤 모델을 사용할지 모르겠는 분들, unlabeled set을 활용하여 기존 baseline 성능을 높이고자 하는 분들께 많은 도움이 될 것 같습니다.
computer vision 관련된 task를 풀때, 일반적으로 많이 사용하지만 더 높은 성능을 달성하기 위해 들 수 있는 여러가지 물음들이 있을 수가 있습니다. 저희도 사내 이미지에 적용하기 위한 차종분류 task를 풀때 아래와 같은 비슷한 고민들을 해보았는데 이런 상황에서 답을 얻기 위해 저희 실험 결과를 참고하시면 될 것 같습니다.
최종적으로 분류하고자 하는 것은 사내에 있는 데이터셋 (low resolution, 다른 view로 찍힌 이미지들 등등)을 활용해서 차종분류를 진행하는 task입니다. 사실 눈으로 봐도 애매하게 찍힌 경우들이 많아 직접 label을 다는 것도 어렵고, 양질의 데이터를 구하는 것도 어려운 작업입니다. 또 일반적으로 사용하는 imagenet pretrained weight을 사용해서 baseline 모델을 구성했을때 실질적으로 서비스에 녹여내기엔 좋은 성능을 내기엔 어려워 specific한 domain을 잘 이해하고 있는 representation을 만들고 이 weight을 transfer 하여 높은 성능을 내고자 한다. 우리는 총 5가지 class, 즉 car, taxi, truck, bus, van를 분류하는 task를 진행했습니다.(사내 보안상의 이유로 이미지 공개는 어렵습니다)
앞서 말했듯이 일반적으로 사용하는 imgenet pretrained weight을 사용한 resnet50 모델로 baseline 실험을 했을때 좋은 성능을 내지 못해, (1) Fine grained 상황에서 우리 domain에 더 적합한 representation을 만들기 위해 (2) 이미 많이 가지고 있는 Unlabeled set을 추가 labeling 없이 활용하기 위해 self supervised learning 방법을 이용한 실험을 진행하게 되었습니다. 또 unlabeled set을 활용할 수 있는 방법인 pseudo labeling 방법도 추가적으로 실험해 self supervised learning과 비교용으로 사용하기도 했습니다.
먼저 public set 즉 STL-10, Veri-wild에 POC 수준에서 적용을 먼저 적용을 해보았습니다. 저희가 최종적으로 실험하고자 하는 데이터셋의 형태가 Veri-wild와 비슷하다고 하는 것을 멘토님들께 전달받고 해당 데이터셋을 선정하여 실험해보게 되었습니다. 실험 환경으로는 V100 2장을 사용했고, batch-size 64로 실험을 진행했습니다.
Veri-Wild 이미지 샘플
STL-10 이미지 샘플
실험 옵션으로는 다음과 같이 구성했습니다. task에 따라 또 데이터셋의 수에 따라 어떤 방법이 우리 데이터셋상에서 가장 좋은지 확실히 알 수 없었기에 여러가지 옵션을 주고 실험 진행했습니다.
upstream 모델로 사용한 self supervision 모델에 대한 자세한 리뷰가 필요하신 분들은 BYOL_리뷰, SimSiam_리뷰를 참고해주시면 되겠습니다.
BYOL은 Bootstrap Your Own Latent로, 말 그대로 latent space상에 directly predicted되는 것을 막기 위해 Target network의 representation을 Online network가 학습하게 하는 방법입니다. 여기서 Target network는 backpropagation이 이루어지지 않고 forward 만 이루어집니다, 즉 새로운 input이 들어온다고 해서 update되는 형태가 아니고 이 target 값은 online network의 parameter를 이용해서 update가 되도록 하되, slow EMA of onlinen network로 좀더 robust하게 update하는 형태입니다(논문에서는 이부분은 target network가 given representation이다라고 설명하고 있습니다)
SimSiam은 Simple Siamese Representation Learning로, 기존에 Siamese network로 통용되던 모델에 representation learning 기법을 적용한 방법입니다. 이 모델은 (1) same encoder, (2) prediction MLP, (3) stop-gradient 방법을 제안합니다. 다른 방법에서 자주 사용하는 negative pairs와 momentum encoder 방법을 사용하지 않고도 문제점을 해결하며 뛰어난 성능을 보여주는 방식이기도 합니다.
최종적으로 downstream에 적용한 결과는 다음과 같습니다. 먼저 Veri-wild에서는 imagenet pretrained를 사용한 supervised learning 결과가 근소한 차이로 가장 높게 나왔고 STL-10에서는 unlabeled 데이터만을 사용하여 학습한 upstream으로 unlabeled set만을 사용한 BYOL이 가장 좋게 나왔습니다. 적은 computing resource를 사용하여 높은 성능을 달성하고자 했던 SimSiam은 불안정하게 학습되었고 실제로도 좋은 성능이 나오지 않았기 때문에 최종적으로는 BYOL과 imgenet pretrained weight 두가지를 실험해보기로 했습니다.
앞에서 public set에서 선택된 옵션과 코드를 을 멘토님들께 전달드리고, 사내 데이터에 적용한 결과를 확인해봤습니다. 최종적으로는 upstream으로 BYOL을 적용하고, downstream에서 semi-supervised 방법으로 evaluation을 적용한 방법이 acc 기준 83.78로 가장 좋은 결과를 얻었습니다.
upstream에서 이미 representation을 잘 이해하고 있었기 때문에 비교적 적은 epoch 상에서 좋은 성능을 달성하는 것을 볼 수 있었고, 더 적은 데이터가 downstream 상에 존재했다면 더 유의미한 성능 차이가 났을 것이라 생각합니다.
기존에 baseline으로 사용되던 self-supervised 방법인 SimCLR 방법도 BYOL, SimSiam을 적용하기 이전에 실험해봤었는데 현재 우리가 사용하는 computing resource 상으로는 큰 배치를 주기 힘들어, 많은 negative sample을 만들 수가 없었고 좋은 성능을 내기 힘들었습니다.
또 현재 SOTA에 준하는 성능을 달성하고 있으면서도 positive sample만을 활용하는 BYOL을 사용하는 경우에는 batch-size가 16이상만 된다면 어느정도 좋은 성능을 냄을 확인했고 SimSiam 방법론보다 더 안정적으로 학습되는 것도 확인할 수 있었습니다.
따라서 정리해자면,
어떻게 좋은 representation vector를 만드느냐에 대한 고민에 있어, self-supervised learning 방법을 사용해 이미 우리 데이터의 representation을 이미 잘 알고 있는 weight을 만들 수도 있고 혹은 풀고자 하는 task에서 SOTA를 달성하고 있는 architecture을 사용할 수도 있지만 사실 비즈니스적인 목적에 맞게 데이터 스킴을 어떻게 구성하냐, class마다 어떤 discriminative한 characteristic한 것들을 공유할 수 있을지에 대한 고민들이 매우 중요하다고 생각합니다.
하지만 skt 펠로우로 활동하고 있어 회사 내부 데이터를 실물로 보기는 힘들어 해당 사항들에 대한 추가적인 것들을 고민할 수가 없어 아쉬웠던 것 같습니다.
오랜 멘토링 및 실험 기간을 거쳐 드디어 skt 펠로우십 3기를 마무리하게 되었는데요, 다양한 self-supervised learning 방법들을 실험해보고 우리 데이터에 맞게 튜닝하고 또 멘토님들과의 회의를 통해 Research Question을 세우는 과정을 통해 많이 배우고 성장했던 것 같습니다.
이상 skt fellowship 3기 떡잎마을 방범대팀 정현희, 김민지, 신재현 이었습니다! 감사합니다!!
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.