페이지

2022년 1월 31일 월요일

라벨 데이터가 적은 경우에도 딥러닝을 통한 영상 분류 성능을 보장할 수 있을까? – 1편

 자기 지도 학습(Self-supervised learning)

딥러닝을 통한 이미지 분류 작업을 생각할 때, 라벨이 부여된 수만장의 이미지를 보유하고 있는 경우는 드물다. 이를 극복하기 위하여, 이전 뉴스레터14호에서 ImageNet 과 같은 거대 말뭉치(corpus)로 지도 학습된 사전학습 모델의 가중치(weight)를 가져와서 학습하는 전이학습(transfer learning)을 살펴보았다. 문제는 이러한 전이학습을 활용하여 사용자가 보유한 소규모 데이터로 파인 튜닝을 할 경우에도, 사용자는 적어도 수천장의 라벨이 있는 이미지 샘플을 보유해야 하며 또한, 사전 학습된 ImageNet1000class 와 유사하지 않은 사용자의 데이터 예를 들어, 촬영된 암세포 같은 이미지는 예측되는 정확성을 달성하기에 불확실한 부분이 남아있다는 점이다.

비지도(unsupervised)학습이라는 것은 라벨이 없는 데이터 들로부터 어떻게 하면 좋은 데이터묘사(representation)를 학습할 수 있을 까라는 질문에서 시작되어 발전되어 왔다. 자기 지도(self-supervised)학습은, 비지도학습의 대표적 예 인 고수준의 군집도 패턴을 찾는 것과는 다르게, 라벨이 있는 이미지가 없는 상태에서 전통적으로 지도학습이 시도해온 이미지 분류와 같은 작업을 해결하려고 발전되어왔다.  

최근 메타(구 페이스북)AI120일에 세계 최초로 음성, 이미지, 텍스트를 동시에 인식하는 고성능 인공지능 자기 지도(self-supervised) 알고리즘인 data2vec을 개발했다고 발표했다. 이는 입력데이터의 자체 표현을 예측하도록 모델을 훈련함으로써 음성, 이미지, 텍스트의 각분야에서만 성능을 낼 수밖에 없던 기존 모델 방식의 패러다임을 바꾼 것으로 주변 세계를 관찰하면서 사람처럼 학습하는 인공지능 시대의 서막을 시사하는 것이다. 이는 레이블 데이터를 거의 필요로 하지 않는 보다 일반적인 인공지능(Artificial General Intelligence)을 향한 중요한 진전일지 주목할 필요가 있다.

 

대조 학습(Contrastive Learning)

대조 학습이란 라벨이 없는 이미지 두개의 쌍을 비교하여 유사한 것은 가까이 모이도록 하고 다른 것은 멀리 밀어내도록 하는 방식으로 학습하는 것을 일컫는다.


<그림1. 같은 동물 맞추기>

위의 그림1과 같이 우리가 어렸을 때 했듯이, 왼쪽의 고양이 사진과 같은 오른쪽의 동물 사진을 왼쪽 직방형 점선 속에 갖다 놓는다고 생각해보자. 아마도 어린아이는 왼쪽 사진과 오른쪽 사진을 하나에 한 번씩 대조하며 판단했을 것이다.

2020ICML 컨퍼런스에서 구글 리서치팀이 발표한 SimCLR 논문 에서 대조 학습을 사용하여 아래 그림 2의 굵은 글씨체의 SimCLR과 같이 자기 지도 학습을 통해 지도 학습(Supervised)에 근접하는 정확도를 나타내며 그 당시 최신 성능(State-Of-The-Art)을 달성했다. 따라서 여기서 사용한 대조 학습이 당연히 이러한 자기 지도 학습에서 관심을 받기 시작했다. 무엇보다도 단순하면서도 효과적인 모델로 인지되었고 코드는 여기.


<그림 2. SimCLR 자가 지도학습의 ImageNet Top-1 정확도>

 

 반 지도 학습(Semi-supervised learning)

202010월 구글 리서치에서 SimCLR 에 이어서 SimCLRv2를 발표한다. 버전2 에서는 아래 그림 3과 같이 ResNet 50 혹은 101과 같은 범용의 대형 컨볼루션(CNN)망에 라벨이 없는 데이터로 자기 지도방식으로 학습한 후, 이러한 학습 모델에 사용된 데이터의 1%~10% 정도를 라벨이 있는 데이터로 전이 학습 및 지도 학습의 파인 튜닝을 하면 성능이 SimCLR 이전 버전보다 분류 성능이 높을 뿐 아니라 지도 학습 성능까지도 능가한다고 발표한다. 전이 학습 및 파인 튜닝에 대해서는 뉴스레터 15 참고. 아울러 이 파인튜닝된 모델을 보다 적은 모델로 지식 증류(knowledge distillation) 하였다. , 자가 훈련(self training) 혹은 작업 예측의 증류로 특정 작업에 특화된 저 사양의 CNN 모델에서 원본의 대형 모델 성능을 재현하는 방법을 제안했다, 지식 증류는 Teacher-Student 학습에서 student 네트워크가 teacher 네트워크의 전체 출력 분포를 흉내 내도록 훈련시킴으로써 작은 모델이 큰 모델의 행위를 재현하도록 하는 기술이다. SimCLRv2 코드는 여기.

 


<그림 3. 라벨 없는 데이터를 사용하는 반 지도학습의 접근법>

 

대조 학습을 통한 자기 지도 학습 처리 절차

 본 프로젝트의 목적은 라벨 없는 영상데이터들로 이미지 분류가 가능한지와 어느 정도의 성능을 보여주는지를 살펴보는 것이다. 앞에서 살펴본 SimCLR을 사용하려고 한다.  그런데 구글 리서치팀이 공개한 SimCLRv2 사전 학습모델을 보면 ResNet-50 모델에서 batch size 4096으로 100 epochImageNet 훈련에 32 TPU6시간이 소요된다고 나와있다. GPU 환경에서는 multi-GPU를 지원하지 않는다고 한다. 본 프로젝트에서는 주요한 개념을 살펴보기에 적합한 ResNet-18 기반의 보다 단순하고 가벼운 Pytorch 기반의 모델로 진행하려고 한다. 코드는 여기를 참조.

이 경우, 입력 데이터세트의 이미지크기는 96 X 96 이며, batch size 256, 데이터세트는 STL10 을 사용한다.  STL10CIFAR-10을 일부 수정한 데이터세트로 10만개의 라벨 없는 데이터와 5000(10 클래스)의 라벨 있는 훈련데이터 그리고 8000개의 테스트 데이터세트를 함께 제공하고 있다. 본 프로젝트에서는 10만개 라벨 없는 데이터와 5000개 라벨 있는 데이터를 함께 Nvidia RTX-2080Ti GPU 4대를 통해 훈련을 시행하였고 30GB 저장장치를 사용했다. 본 프로젝트의 작업 처리절차는 아래 그림 4와 같다.

1)    데이터세트를 로드하고 기본 encoder ResNet,옵티마이저, 스케쥴러 등을 로드

2)    훈련데이터를 로드 하여 feature를 생성하고 손실을 최소화하는 훈련 실행

3)    Mask Label 행렬을 정의하고 유사도 행렬을 통해 유사데이터와 그 외 데이터가 분할된 행렬 취득

4)    사전 학습모델의 완전연결층을 제외한 모은 층을 훈련에서 동결하고 STL10train test 데이터를 로드 하여 완전연결층을 훈련하고 정확도 평가

 


<그림 4. 작업 처리절차>

 

SimCLR 프레임워크

SimCLR의 프레임워크는 아래 그림 5와 같다. 우선 입력된 원본 이미지가 증식(augmentation)되어 ①과 같이 xi xj 2개의 이미지로 출발한다. 이때 임의 자르기와 임의 색상 변경과 같은 변형의 조합이 성능에 중요하며 증식과정에서 임의의 값이 적용되므로 증식된 2개의 이미지는 다르게 변형된다. 그 다음에 ②는 인코더로 ResNet-18 표준 모델을 사용. ③ 출력은 512 차원의 벡터 h. 이 묘사들은 이후 파인 튜닝을 통해 이미지 분류와 같은 downstream 작업에 활용될 수 있다. ④ 그 다음에 Dense-Relu-Dense 층을 거쳐 비선형 변환을 적용하고 ⑤ 최종적으로 embedding vector zi, Zj 가 얻어진다.

 


<그림 5. SimCLR 프레임워크>

 

SimCLR 의 평가는 위 그림 4의 마지막 절차와 같이, SimCLR 인코더에 선형분류기를 추가하여 처음 입력될 때 포함되었던 라벨을 가진 5000건의 train, 8000건의 test 데이터를 가지고 파인튜닝을 걸쳐 정확도를 산출한다. 결과는 동일 STL10 데이터세트에 대하여 ResNet-18 ResNet-50 각각의 성능이 SimCLR github 에 아래 6 과 같이 표시 되어있다. SimCLR은 훈련 시간이 길수록 성능이 향상됨을 알 수 있다. 전통적인 지도학습인 ImageNet에서는 ResNet 구조의 경우 300 epoch 에서 최고 성능을 보인 반면, SimCLR의 경우에는 800 epoch 이후에서도 성능이 계속 증가했다고 한다. SimCLR 에서 batch의 크기를 늘릴수록, 심층망의 깊이와 넓이를 늘릴수록, 보다 길게 훈련시간을 늘릴수록 성능 향상이 목격되었다고 한다.

 

<그림 6. Feature evaluation 을 통한 성능 비교>

 

 이미지 증식(Image Augmentation)

아래 그림 7은 SimCLR TorchVision.transformers 함수를 사용하여 데이터를 증식하는 코드이다. ①의 ColorJitter 함수는 이미지의 밝기, 대비, 채도, 색조 등을 임의로 80% 확률 등으로 바꾸는 기능, ② 임의로 크기 조정 후 잘라 내기 ③ ColorJitter 함수 실행 자체를 80% 확률로 임의로 실행, 20%만 그레이스케일로 변환. 이와 같이 임의실행으로 결과적으로 순서대로해도 2 쌍의 결과는 달라진다. ⑤는 TorchVision 내부 사용의 tensor 로 변환한다.

 


<그림 7. SimCLR 의 데이터 증식과 변형 부분>

 

구글의 관련 블로그에서 이러한 이미지 증식 방법들 중에서 무엇보다도 임의의 자르기에 이어서 임의의 색상 변조의 순서로 이어지는 조합이 성능향상에 공헌했음을 설명한다. 동일 이미지에서 절단된 2개의 이미지는 통상 색 공간에서 매우 유사하게 보이기 때문에 각각의 절단에서 색상을 다르게 해줌으로써 보다 일반화된 묘사를 학습하게 된다고 한다.

 

 지금까지 자기 지도 학습, SimCLR 프레임워크, 이미지 증식 등을 살펴보았다. 다음 2편에서는 훈련, 대조 학습의 손실, 선형분류기 추가를 통한 성능 평가등의 내용을 살펴보겠다.