Hello Computer Vision

비전공자의 Self-Supervised Learning에 대해 이해해보기 본문

Self,Semi-supervised learning

비전공자의 Self-Supervised Learning에 대해 이해해보기

지웅쓰 2023. 3. 14. 16:59

이번에 컴퓨터비전의 여러가지 분야들을 하나씩 찍먹해보면서 공부하는 도중에

Self-supervised Learning(이하 SSL)에 대해 흥미가 생겨 공부를 조금 해보았다.

지도학습과 비지도학습 같은 경우 한번에 이해가 되는 반면에 SSL같은 경우 개념은 이해가 됐지만

구체적인 훈련방법이나 예시들이 잘 나와있지 않아 피상적으로 이해되고 정확히 알 수 없었다.

그래서 여러 글을 찾아보면서 추천해주는  논문을 읽었는데 해당 논문은

https://arxiv.org/pdf/1902.06162.pdf 이다. 그리고 이 글도 참조한 여러 글과 이 논문을 바탕으로 기록해보려고 한다.

 

논문에서는 정적인 이미지 뿐만 아니라 영상 데이터도 다루었으나 글에 쓰여진 내용은 영상관련은 포함하지 않았습니다. (여러 글들을 보고 제 개인적인 이해를 적었으니 틀린 점 있다면 지적해주시면 감사하겠습니다)

 

 

SSL 이란?

우리말로 해석하면 자기지도학습이라고 할 수 있다. 그렇다면 우리가 기존에 알고 있는 지도학습과 비지도학습과 함께 가볍게 비교해보자.

 

지도학습: 데이터 하나하나에 라벨링이 되어 있는 데이터들을 대상으로 학습을 진행하는 것이다.

대표적으로는 분류, 객체탐지 등이 있다.

 

비지도학습: 라벨링이 되어있지 않는 데이터들을 대상으로 학습을 진행하는 것이다. 

대표적으로는 Clustering이 있다. 예를 들어 데이터 1000개에서 각각 강아지, 고양이 500개의 이미지가 있다면

각 군집의 특징들을 찾아내 최대한 분류해보는 것이다. 그러나 어떤 군집이 고양이이고, 강아지인지는 분류하지 못한다. 왜냐하면 라벨이 없기 때문이다.

 

자기지도학습: 기본적으로 비지도학습의 부분집합이다. 그렇기 때문에 데이터에 라벨링이 되어있지 않다.

그러나 기존 특징들을 이용하여 pseudo label(가짜 라벨)을 붙여 훈련하는 것이 가장 큰 특징이라고 할 수 있다.

이해하기 가장 쉬운 예시로는 GAN이 있다.(뒷편에 설명있습니다)

 

 

SSL 을 왜 사용할까?

기본적으로 많은 데이터들 훈련한다면 성능이 높아질 가능성이 많다. 가장 우선시 되는 문제는 그렇지만 데이터들에 대해서 일일이 라벨링을 하는 것은 시간과 돈이 굉장히 많이 사용된다. 만약 라벨링 되지 않은 데이터들을 사용하여 훈련을 하였는데 성능이 비슷하다면 이게 가장 좋은 방법일 것이다.

 

그리고 ConvNet 의 역할에 대하여 다시 한번 생각해보자.

우리가 이러한 강아지 이미지들을 볼 때 이것들을 강아지라고 분류하는 이유는 무엇일까?

 

지금까지 봐왔던 강아지들의 형태, 크기, 특징들을 종합하여 강아지라는 판단이 순간적으로 드는 것이다. 그렇다면 컴퓨터들은 이러한  이미지들을 사진으로 보는 것이 아닌 수의 배열로 보는데 어떻게 분류할까? 우리가 이미지들의 특징들을 종합한 것처럼 컴퓨터는 강아지 이미지 안에 있는 수 배열들의 특징을 발견하는 것이다. 그것을 유용하게 도와주는 것이 ConvNet이라고 할 수 있다. 다시 한번 요약한다면 ConvNet에서의 지도학습에서는 해당 이미지들과 라벨을 같이 훈련시킨다면 해당 라벨이 어떤 특징을 가지는 것을 잘 발견한다는 것이다.

 

그렇지만 다시 한번 생각해보면 우리가 저 이미지를 강아지들이라고 생각하는 것과 컴퓨터가 인식하는 것은 조금 다른 방식임을 확인할 수 있다. 우리는 약간의 강아지 사진을 보고 특징들을 학습한 후 강아지라고 인식했다면 지도학습에서의 컴퓨터는 강아지로 라벨링 된 데이터들 보고 어떤 특징을 가지는지 배운 후 강아지라고 판단하는 것이다. 컴퓨터의 이러한 방식은 굉장히 많은 라벨링된 데이터가 필요로 함을 알 수 있다. 이러한 컴퓨터의 과정을 우리 인간이 인식하는 과정처럼 라벨링을 하지 않고 특징만 학습해서 어떤 라벨이 붙는지 학습시킬 수는 없을까? 따라서 이러한 궁금증으로부터 SSL을 사용하는 것이다.

 

이미지들이 무엇인지 학습하는 것보다는 해당 이미지들이 무엇과 유사한지, 어떤 특징을 가지고 있는지 훈련하는 것

 

이 조금 더 인간의 관점에서 맞다고 할 수 있다.

그리고 이것은 자기지도학습으로 잘 구현할 수 있다는 것이다.

 

용어 설명

논문에서 자주 나오는 용어들을 한번 정의해보자면

Pretext Task: 특정한 목적에 맞게 어떤 특징을 가지고 있는지 훈련하는 task이다. 이를 잘 나타내주는 이미지는 다음과 같다.

여기서 P는 pseudo label이다. 논문에서 계속 강조되는 것은  "사람들은 pseudo labeling을  하기 위해 노력하지 않는다."이다. 이 부분이 나는 사실 계속 헷갈렸는데 뒷부분에 설명해보려고 한다.

Downstream Task: 모델의 성능을 평가하기 위한 Task이다. Pretext task에서 이미지를 분류하기 위한

모델을 만들었다면 Downstream task에서는 이미지 분류를 잘 하는지 알아보면 된다. 

이러한 과정을 잘 설명해주는 이미지는 다음과 같다.

Pseudo label: 이미지 안에 있는 기존의 특징들을 활용해 자동적으로 붙은 라벨들이다.

반댓말로는 Human annotated label이 있다.

 

Pseudo label이란?

데이터 라벨링에 많은 비용이 드는 것은 알고 있지만 이 pseudo labeling에 과정에 대해서 이해하기 힘들었다.

그렇지만 내가 기존에 공부했던 GAN을 예시로 든다면 아주 쉽게 이해해볼 수 있다.

GAN은 다음과 같은 구조를 띄고 있다.

생성자는 latent vector를 받는다면 이를 이미지로 변환하도록 노력하고 구분자는 이를 가짜라고 판별하려고 노력한다.

이러한 경쟁의 결과로 모델은 더욱 더 그럴듯한 이미지의 특징을 발견하여 구분자가 실제 이미지와 비교했을 때 어떤 이미지가  가짜인지 판별하지 못할 정도로 이미지를 생성하는 것이다. 

이러한 과정에서 우리는 이미지 하나하나 라벨링하는 무언가의 작업이 필요한가? 아니다.

그리고 실제 이미지들의 특징들을 학습하여 실제같은 이미지를 만들 수 있다.

(물론 훈련과정에서 0,1로 이미지를 구분하는 과정이 있긴하지만 별도의 큰 노력이 필요없고 코드 한줄이면 된다. 아마 여기서는 이러한 라벨이 pseudo label일 것이다.) 

(2023.04.06수정)

조금 더 공부해본 결과 GAN에서 0,1을 부여하는 것과 pseudo labeling이랑은 차이가 있다고 합니다..  pseudo labeling은 라벨링이 없는 데이터에 대하여 모델이 직접 하는 것이고 새로운 라벨링을 하고 이러한 라벨링이 틀릴 경우 또한 방법을 새로이 고안해야하는데 학습을 위해 GAN 모델에 0,1을 부여하는건 조금 다른 접근이라고 합니다.  

 

SSL훈련방법

논문에 나온 주제 위주로 한번 소개해보려고 한다.

Image inpainting

이미지를 crop하고 기존 이를 예측해보는 훈련을 한다면 각 이미지들의 특징들을 학습할 수 있을 것이다.

 

Image colorization

 

기존 이미지를 grayscale로 변환하고 이를 채색하는 훈련 하도록 하는 방법이 있다.

 

 


이 외에도 여러가지 방법들이 있고 직관적으로 이해하기는 힘들었지만 재미있는 분야인 것은 확실한 거 같습니다.

또한 앞으로도 계속 더 많은 데이터가 사용될 것이기 때문에 전망 또한 아주 좋은 거 같습니다.

다른 분들의 설명에 비해 전문성이나 정확성이 조금 떨어질 수 있지만 현재 제 개인의 이해를 위해서 작성하였고

앞으로 계속 공부해 나가면서 틀린 내용이 있을시 수정해보겠습니다. 

 

참조

https://arxiv.org/pdf/1902.06162.pdf

https://89douner.tistory.com/332

https://towardsdatascience.com/self-supervised-pre-training-self-training-which-one-to-use-8c796be3779e