AIComputer VisionDeep Learning

시각 인공지능 입문2

·11 min read

어제 CNN 이야기하면서 계층 구성까지 이야기하고 마무리 했었다.

(필터 -> 요약) 애네 반복 하고 분류(판단) 하는 과정으로 구성되었는데

이미지라는 복잡한 데이터를 어떻게 효율적으로 연산하는가 에 대한 이야기였다.

좀 더 효율적으로: 사전 학습 모델과 전이 학습

아무튼 이미지를 학습시킨다는 것은 매우 복잡하고 컴퓨팅 파워가 들어간다.

그렇기 때문에 **필터(Convolution Layer)**나 **요약(Pooling Layer)**가 들어가게 되는데

아무리 효율화 해도 매번 데이터 업데이트 할 때마다 학습시키고 연산하기에는 부담이다.

사전 학습 모델(Pretrained Model)

아마 모델 이것저것 당겨 쓰다보면 이름에 종종 붙어있을 텐데

대규모 데이터셋으로 미리 학습이 완료된 모델이다.

예를들어 ImageNet이라는 몇천장 이상의 이미지를 1000개 이상의 클래스로 분류한 데이터셋이 있다.

해당 데이터셋으로 세상의 보편적인 시각적 특징들을 이미 학습한 모델을 만들어내는 것이다.

해당 모델들은 초기 계층에서 선, 경계, 색상, 질갑 등의 범용적인 특징을 추출하는 능력을 갖추고,

후반 계층은 이를 조합해 눈, 코, 바퀴, 잎사귀 등 더 복잡한 형태를 인식하는 능력을 갖추게 된다.

전이 학습

아까 이미 학습된 사전 학습 모델의 '지식'을 가져다가 우리의 문제에 맞게 재사용하고 조정하는 기술이다.

예를들어 기존 모델은 병아리가 뭔지 안다.

"노란털, 곡선, 부리 기타 등등" 특징 추출 능력이 있다.

근데 우리는 병아리 암수 감별이 필요하다. 그럼 특징 추출 능력에 별도 **분류기(Classifier)**를 새로 학습시키는 것이다.

만능 사진 인식 전문가를 데려오고 옆에 신입사원 붙여주는거라고 보면 된다.

전문가의 시각 능력은 수정 못하게 **고정(Freeze)**하고 특징만 추출한다.

추출된 특징을 받아다가 암/수 분류할 신입 사원한테 넘겨준다.

신입 사원은 다 필요없고 병아리 암/수 구분만 훈련만 집중적으로 받았다.

기존 모델 두고 신입사원만 가르친다고 생각하면 된다. 집중 훈련 비용만 간단히 든다.

새로 만들면? 분유 까고 기저기 채우고 시작해야한다.

당연히 비용이 적게 든다.

다른 장점도 있는데 성능이 높다는 것이다.

우리가 암만 특수 목적으로 모델을 훈련시켜봐야 대기업에 대규모 데이터로 학습 시킨 범용 모델보다 못하다.

미세 조정(Fine-tuning)

아까 말한 전이 학습을 한 단계 더 발전시킨 기법이다.

**사전 학습 모델(전문가)**의 특징 추출기 부분을 완전히 고정(Freeze) 시키는 대신

일부 층을 **해동(Unfreeze)**하여 우리의 데이터에 맞게 아주 조금 더 학습 시키는 방식이다.

초기 층에 **기초적인 부분(선, 색상, 질감)**은 그대로 둔다.

하지만 조금 더 **고차원적인 부분(형태, 패턴 조합 등)**은 살짝 녹여준다.

즉 새로운 지식을 배울 준비가 된다는 것이다.

전문가에게 병아리 사진 보여주고 낮은 학습률로 추가 훈련을 시킨다.

전이 학습은 전문가의 '눈'만 빌린다면, 미세 조정은 전문가를 '재교육' 시키는 것이다.

새로운 패러다임 ViT(Vision Transformer)

CNN 효율적인 이야기 이쯤 끝내고 CNN 한계를 이야기하고자 한다.

어제 "지역적 정보 활용(Local Receptive Fields): 이미지 전체 대신 '필터'라는 작은 돋보기로 일부분만 보기" 라는 이야기를 했다.

즉 자기 기준으로 주변 픽셀간의 합성곱을 통해서 판단을 한다.

즉 국소적인 판단 구조라 전역적 관계를 보기가 어렵다.

텍스트 처리에서 RNN이 순차처리 한계로 전체 문맥을 파악하고자 Attention이 도입 됬었고

"순차적 처리 없이 Attention 만으로도 좋은데?"하고 Transformer가 등장했다.

Self Attention 달고 처음부터 모든 것을 봅니다!하고 등장하더니 AI 패러다임을 뒤바꿔 버렸다.

처음부터 다 본다 개념에서 적합한것이 있는데 바로 이미지 처리다.

얼굴 그리는데 코 달면 아래에 입이 있어야하고 위에 눈이 있어야하지 않겠는가

아무튼 이미지의 전체적인 구조와 특징과의 상관관계 계산하는데 적합했다고 한다.

LLM 문장 처리를 빗대어서 설명하자면 ViT는 이미지를 '문장'처럼, 이미지의 각 부분을 '단어'처럼 취급한다.

이미지를 단어처럼 자르기(패치화)

이미지를 바둑판처럼 여러 개의 작은 **패치(Patch)**로 자른다.

그리고 이 패치 하나하나를 문장의 단어처럼 취급한다.

단어들이 관계 파악하기(셀프 어텐션)

모든 패치(단어)들이 서로에게 "이 이미지 기준 너랑 나랑 얼마나 관련이 깊음?"라고 동시에 묻고 답하며 관계의 중요도를 계산한다.

CNN이 주변 픽셀을 볼때 ViT는 오른쪽 아래 꼬리랑 왼쪽 위 머리랑 관련성 계산하면서 전체적인 맥락과 구조를 한 번에 파악하는 것이다.

"와! Self Attention 아시는구나!" 하면 자연스럽게 따라오는 놈이 하나 있는데 포지셔널 인코딩이다.

패치 짤라놨는데 애가 어느 위치에 있던놈인지 구분은 해야하지 않겠는가

Transformer 가져다 쓴 기술답게 포지셔널 인코딩 구조도 가져다 쓴다.

ViT가 CNN 대체함?

텍스트 분야에서도 Transfomer 두고 RNN 종종 쓰듯이 ViT도 대체보다는 '이미지를 토큰화해서 Transformer로 해석한다는' 관점의 전환 개념이다.

다만 실무적인 패러다임에서는 제법 가성비가 좋다고 하는데

백본(Encoder)통합 => 운영비 절감

"모든 일을 한 번에 보는 공용 두뇌(백본)를 두고, 뒤에 '업무별 손(헤드)만 갈아 끼우기"

헤드를 태스크 단위로 잘라서 관리 => DevOps 친화적

"문제 터지면 그 업무 헤드만 갈아끼우면 됨"

전이학습(Pretrain -> Fine-tune) 기반 => 학습·배포 비용 절감

"거대 데이터로 미리 ‘뼈대(백본)’를 훈련해 둔 걸 가져와, 우리 데이터로 ‘마무리 손질(파인튜닝)’만 한다"

ViT 기본 학습 철학 자체가 사전학습 모델 -> 파인 튜닝에 최적화 되어있다고 한다.

멀티모달 확장성 => 설계적 장점

"Transformer는 ‘시퀀스’를 잘 다루는 범용 구조라, 이미지 말고도 텍스트·센서 시계열 등과 결합하기 쉽다."

아무튼 여기까지 시각 인공지능 관련해서 CNN 모델과 한계로 인한 ViT의 등장까지 이야기를 했는데...

아직 다루지 못한 내용이 많다.

이미지 분류 → 객체 검출 → 세그멘테이션 → 포즈 추정 → 이미지 생성으로 이어지는 비전 업무의 구조 이해

AlexNet → VGG → ResNet(Residual) → DenseNet(Concatenate) → NASNet → EfficientNet로 이어지는 CNN 발전사

학습·전이 레시피를 기반으로 한 최소 ViT 모델 예제

늘 글을 쓰면서 느끼지만, 배우는 것과 글로 써내려내는 것에 대한 간극이 제법 크게 느껴진다.

아무튼 다음 기회가 있다면 다음번에는 실제 Python 구현 코드로 다뤄보고자 한다.

(내일은 다시 AI랑 계란지단으로 반찬투정 해야해서 바쁨)

← Previous
SQLAlchemy
Next →
실시간 통신 구현 방법