Ch.07
비전 모델의 진화: CNN은 지역, ViT는 전역을 본다
같은 사진을 두 방식으로 읽습니다. CNN은 작은 커널(국소 창)을 밀며 이웃 픽셀부터 특징을 쌓고, ViT는 패치 토큰에 전역 셀프 어텐션을 얹어 한 블록에서도 먼 맥락을 섞을 수 있습니다. 윈도 어텐션으로 그 비용을 나누는 절충도 함께 둡니다.
CNN
학습 흐름
돋보기를 밀며 동네를 읽는 CNN, 마을회관에서 한꺼번에 이야기하는 ViT.
ViT는 이미지를 작은 조각(패치)으로 자른 뒤, 그 조각들을 단어처럼 트랜스포머에 넣습니다. 첫 블록부터 모든 패치가 서로를 바라보며 “누가 누구와 말할지”를 정하는 전역 셀프 어텐션이 핵심이라, 화면 왼쪽 끝과 오른쪽 끝의 관계도 한 번에 잡아낼 수 있습니다.
반면 오랫동안 비전을 지배해 온 CNN(합성곱 신경망)은 작은 창(커널)을 이미지 위로 밀며 이웃 픽셀만 직접 보고 특징을 쌓습니다. 층을 깊게 쌓을수록 “보이는 범위(수용장)”는 넓어지지만, 한 층이 전 이미지를 한 번에 보는 구조는 아닙니다. 같은 필터를 위치마다 재사용(가중치 공유)하므로 파라미터는 적고, 국소성이라는 강한 가정 덕분에 적은 데이터에서도 안정적인 경우가 많습니다.
계층적 윈도 어텐션 계열은 이 둘 사이에서 윈도 안의 국소 어텐션 + 시프트 + 머징으로, 전역을 한 입에 삼키지 않으면서도 전역 문맥을 계층적으로 섞어 갑니다. 덕분에 토큰 수 이 커질 때 터지기 쉬운 부담을 현실적인 수준으로 줄일 수 있습니다.
이번 장에서는 CNN과 ViT를 나란히 두고, 어떤 데이터·태스크·GPU 메모리에서 어떤 가정이 유리한지 실무 관점에서 정리합니다. 한 줄 요약은 “CNN은 이웃부터 차근차근, ViT는 전체 회의 한 번(대신 비용·데이터)”입니다.
수식, 이렇게 읽으면 됩니다 (CNN vs ViT)
1) CNN 국소 연산: 출력 위치 에서 한 뉴런은 입력의 작은 이웃 패치와 커널 로
비슷한 꼴(경계·패딩 처리는 구현에 따름)로 쓰입니다. 같은 를 모든 위치에 쓰는 가중치 공유가 CNN의 핵심입니다.
2) ViT 한 블록의 ‘전역 한 번’: 패치 토큰 행렬 에 대해 를 만들고
여기서 는 토큰×토큰 크기를 갖기 쉬워, 이 크면 가 ‘천장’이 됩니다(셀프 어텐션의 일반적인 비용 그림).
3) 수용장이 ‘커지는’ 두 방식:
① CNN: 층을 깊게 쌓거나 풀링/스트라이드로 다운샘플하며, 출력 뉴런이 간접적으로 보는 입력 범위(수용장)가 넓어집니다.
② ViT(밀집): 한 어텐션 블록에서 모든 위치 쌍을 직접 비교해 ‘한 단계 전역’을 만들 수 있습니다(대신 비용이 큼).
4) 부담을 나누는 계층적 윈도 절충:
① 비용: 이 크면 ViT의 가 먼저 문제가 됩니다.
② 절충: 윈도 안에서는 , 전체로는 개의 윈도를 도니 류로 국소 어텐션을 반복하고, 시프트로 경계를 넘나 머징으로 토큰을 줄입니다.
③ 직관 한 줄: “전역을 한 방에”가 아니라 “작은 전역을 계층적으로 합성”합니다.
CNN과 ViT: 같은 이미지를 읽는 두 가지 문법
1. CNN: 돋보기를 밀며 ‘이웃만’ 꼼꼼히 보기 (국소성)
개념: CNN은 아주 작은 필터(예: 크기의 돋보기)를 이미지 위로 슬라이딩하며 훑습니다. 한 위치에서 당장 보는 것은 내 주변 뿐이고, 그 결과를 다음 층으로 넘기면 조금 더 넓은 문맥이 쌓입니다.
직관: 층이 깊어질수록 수용장(receptive field)이 서서히 넓어집니다. 얕은 층에서는 선·모서리 같은 단순 패턴을, 깊은 층에서는 눈·귀·코처럼 의미 있는 부위를 인식하게 됩니다. 같은 커널을 여러 위치에서 재사용(가중치 공유)하므로 파라미터 수는 작고, 고양이가 사진 왼쪽에 있든 오른쪽에 있든 비슷한 필터로 잡아내는 이동 등변성(translation equivariance)이 자연스럽게 따라옵니다.
수식으로 잡기: 출력 한 지점은 입력의 국소 패치와 커널의 교차상관(합성곱)으로 얻습니다. 깊이 가 쌓일수록 수용장은 층마다 커지며, 먼 거리의 픽셀도 간접적으로 섞입니다.
2. ViT: 패치를 단어처럼 모아 ‘전체가 한 번에 토론’ (전역성)
개념: 이미지를 크기의 패치들로 자른 뒤(예: ), 각 패치를 벡터(토큰)로 만듭니다. 밀집 셀프 어텐션 한 블록에서는 (기본형 기준) 모든 패치 쌍이 서로의 관련도를 계산합니다.
직관: CNN이 동네 돋보기라면, ViT는 한 번에 넓게 내려다보는 드론에 가깝습니다. 첫 블록에서도 화면 끝과 끝의 관계를 직접 맞출 수 있는 대신, 패치 개수 이 늘면 “누가 누구와 얼마나 말할지”를 적는 점수 행렬이 대략 규모로 커져 메모리와 연산이 빠르게 무거워집니다.
스케일만 기억: 어텐션 점수를 만드는 단계는 흔히 에 가깝게 느껴집니다(헤드 수·구현에 따라 상수는 달라짐).
3. ‘전역’을 한 입에 삼키지 않는 계층적 절충
연결: 윈도(작은 구역) 안에서만 먼저 어텐션하고, 시프트(창을 밀기)로 이웃 윈도와 정보를 섞으며, 머징으로 토큰 수를 줄입니다. 즉 “작은 전역”을 여러 번 겹쳐 큰 그림을 만드는 계층적 전략입니다.
한 줄 비유: CNN이 동네 방송, ViT가 전국 생방 토론, 윈도형 설계가 지역 방송국들이 연합해 전국 소식을 짜는 네트워크에 가깝습니다. 윈도·시프트·머징이 “CNN과 ViT 사이”에 서는 이유를, 이 장의 CNN·ViT 축과 맞춰 이해하면 됩니다.
4. 왜 ‘CNN vs ViT’를 같이 알아야 하나? (실무 설계)
모델 선택은 성능 표 한 줄이 아니라, 데이터에 대한 ‘가정 표’를 고르는 일에 가깝습니다.
* 데이터가 적거나 도메인이 까다로울 때: 이미지가 가까운 픽셀끼리 관련 있다는 가정이 강하게 먹히는 CNN·하이브리드가 수렴이 빠르고 안정적인 경우가 많습니다.
* 데이터가 매우 많고 강한 사전학습이 있을 때: 국소 가정에 덜 묶인 ViT 계열이 한계 성능(SOTA)에서 유리한 사례가 많습니다.
* 자율주행 객체 탐지·세그멘테이션처럼 픽셀 단위·여러 스케일이 중요하면: 계층 윈도형 백본, ConvNeXt, FPN 등 다운샘플 피라미드가 익숙한 CNN적 설계가 여전히 강합니다.
* 비용: ViT는 이 커질수록 OOM이 먼저 올 수 있으므로, 효율 어텐션과 윈도 기반 계층 설계는 같은 고민의 연장선입니다.
왜 중요한지
모델 선택은 ‘성능 표’가 아니라 ‘가정 표’를 고르는 일
CNN은 “이미지에서 가까운 픽셀끼리 관련이 깊을 것”이라는 강한 선행 편향(국소성·공유·계층)을 모델에 미리 심어 둡니다. ViT는 “그런 선입견 없이, 패치들의 관계를 데이터에서 충분히 배우겠다”에 가깝고, 대신 유연한 전역 혼합을 위해 데이터·연산·메모리를 더 요구할 수 있습니다.
이 차이를 모르면, 남들이 좋다는 최신 백본 코드를 그대로 가져왔다가 내 데이터셋에서는 왜 성능이 안 나오는지, 로그만 보며 원인을 설명하기 어렵습니다. “표에서 1등”이 아니라 내 문제에 맞는 가정을 고르는 연습이 필요합니다.
하이브리드와 백본 설계의 공통 언어
최근 트렌드는 CNN과 트랜스포머의 경계가 흐리는 것입니다. 예를 들어 패치 임베딩 + CNN stem으로 저주파를 먼저 잡거나, 윈도 어텐션 + 컨볼루션 다운샘플로 해상도를 줄이거나, ConvNeXt처럼 “CNN인데 블록 설계는 트랜스포머에 가깝게” 가는 경우가 흔합니다.
그래도 디버깅을 할 때는 이름보다 “한 레이어가 한 번에 얼마나 멀리, 얼마나 비싸게 보는가”가 공통 언어입니다. 수용장·토큰 수 ··윈도 크기만 정확히 짚으면, 팀 내 설명과 이슈 트리아지가 빨라집니다.
이 장에서 얻는 ‘실무 렌즈’
이 장은 CNN(국소·수용장·가중치 공유)과 ViT(패치·전역 셀프 어텐션·, )를 같은 축에 놓고 비교합니다. 여기까지 읽고 나면, “왜 ViT만 OOM인가?”처럼 토큰 수·패치·해상도부터 손댈지, “소규모 데이터엔 무엇부터?”처럼 선행편향 vs 데이터를 어디에 두는지 설명 가능한 언어로 말할 수 있습니다.
정리하면, 이 장의 목표는 유행하는 백본 이름이 아니라 내 태스크·GPU·라벨 규모에 맞춰 국소와 전역 중 무엇을 얼마나 살 것인지를 스스로 고르는 판단틀을 챙기는 것입니다.
어떻게 쓰이는지
1. CNN의 주 무대: 온디바이스(On-Device), 엣지(Edge), 실시간 서비스
가볍고 빠르다는 장점 때문에, 무거운 서버를 거치지 않고 기기 자체에서 즉시 작동해야 하는 서비스에 여전히 CNN이 압도적으로 많이 쓰입니다.
* 스마트폰 카메라 필터 & 얼굴 인식 (Face ID): 배터리를 적게 쓰면서 0.1초 만에 얼굴의 윤곽선(국소적 특징)을 찾아야 하므로 MobileNet 같은 가벼운 CNN 모델이 들어갑니다.
* 공장 컨베이어 벨트 불량품 탐지: 1초에 수십 개의 제품이 지나갈 때, 표면의 미세한 스크래치나 찍힘을 실시간으로(Real-time) 잡아내는 데에는 CNN(YOLO 시리즈 등)이 최적입니다.
* 블랙박스 및 자율주행 초기 반응: 눈앞에 갑자기 뛰어든 보행자를 0.01초 만에 인식하고 브레이크를 밟아야 할 때는 연산이 지연되는 트랜스포머보다 빠른 CNN이 생명줄입니다.
2. ViT의 주 무대: 초거대 AI, 생성형 모델, 멀티모달(Multimodal)
막대한 서버 자원을 동원해 인간의 능력을 뛰어넘는 깊은 이해가 필요한 곳에 쓰입니다. 텍스트를 다루는 LLM과 구조가 같아서 언어 모델과 결합하기가 환상적으로 좋습니다.
* 챗GPT의 사진 분석 (GPT-4V): 영수증 사진을 올리면 글자를 읽고 내용을 요약해 주죠? 트랜스포머 기반이라 언어(Text)와 시각(Vision)을 같은 공간에서 이해할 수 있기 때문입니다. 이때 이미지를 읽는 눈 역할로 ViT(또는 그 변형)가 쓰입니다.
* 미드저니, DALL-E (생성형 AI): 「우주복을 입고 말보로를 피우는 고양이」라고 텍스트를 치면 그림을 그려주는 모델의 내부(DiT; Diffusion with Transformer)에도 ViT의 뼈대가 들어가, 전체적인 그림의 맥락이 어색하지 않게(전역성) 잡아줍니다.
* 의료/위성 영상 정밀 분석: 암세포의 전이 패턴이나 넓은 위성사진의 지형 변화처럼, 픽셀 하나하나보다 '전체 사진의 거시적인 문맥'을 파악해야 할 때 강력합니다.
3. 실전 하이브리드 (CNN + ViT): 실무진의 황금 밸런스
실제 회사에서는 둘 중 하나만 고집하지 않고 짬짜면(하이브리드)을 가장 많이 씁니다.
* 방법: 고해상도 이미지가 들어오면, 네트워크의 앞부분(초기 층)은 CNN으로 설계하여 용량을 빠르게 줄이면서 기본적인 선/질감 특징을 뽑아냅니다. 그리고 뒷부분(깊은 층)에 트랜스포머(ViT)를 배치하여, 줄어든 데이터를 가지고 전체적인 문맥과 관계를 깊게 고민하게 만듭니다.
* 사례: 구글의 CoAtNet, 애플의 MobileViT 등이 모바일에서도 돌아가는 트랜스포머를 만들기 위해 이런 방식을 채택했습니다.
요약
CNN은 국소 커널과 가중치 공유로 이웃 픽셀부터 특징을 쌓고, 층이 깊어질수록 수용장만 넓혀 간접적으로 먼 문맥을 잡습니다. ViT는 패치 토큰에 밀집 셀프 어텐션을 걸어 한 블록에서 전역 혼합이 가능하지만, 토큰 수 이 커질수록 때문에 메모리·연산이 빠르게 무거워질 수 있습니다.
윈도·시프트·머징처럼 계층적 윈도로 부담을 나누는 설계가 흔한 절충입니다. 백본을 고를 때는 데이터·사전학습 규모, 입력 해상도·패치·, 탐지·분할 등 밀집 예측이 필요한지, 지연·GPU 메모리를 함께 보는 것이 중요합니다.
문제 풀이를 위한 설명
먼저 이렇게 읽고 시작하세요
- 이 문제가 묻는 축이 무엇인지 먼저 구분: CNN 국소·수용장 / ViT 패치·전역 어텐션 / 데이터·선행편향
- 계산 문제면 단위부터 고정: 패치 수 , 입력 , 패치 크기 → 격자는 대략
- ''가 나오면 밀집 셀프 어텐션의 토큰×토큰 점수표와 연결해 생각
예시 (개념형)
"CNN에서 같은 커널을 모든 공간 위치에 적용하는 대표적 성질은?"
① 전역 어텐션
② 가중치 공유
③ 패치 머징
④ CLS 토큰
정답 2
왜? 가중치 공유가 CNN의 기본이며, ViT의 패치 토큰과는 다른 축입니다.
예시 (O/X형)
"CNN 첫 합성곱 층은 일반적으로 이미지 전체를 한 번에 직접 본다"
정답 0 (틀림)
왜? 첫 층은 국소 패치를 보고, 넓은 시야는 깊어지며 생깁니다.
예시 (계산형)
"이면 는?" → 100
문제 유형별 예시 + 정답 근거
예시 (시나리오형)
"고해상도 ViT 학습에서 OOM이 났다. 가장 먼저?"
① 배치 증가
② 토큰 수(해상도/패치/배치) 조정
③ 전역 블록만 추가
정답 2
왜? 메모리를 직접 줄이는 선택이 우선입니다.
예시 (선다 계산형)
", 패치 일 때 패치 토큰 수(격자만)?"
① 14
② 196
③ 224
④ 3136
정답 2 (값 196)
왜? .
예시 (누적 개념형)
"소규모 라벨에서 빠른 베이스라인을 원한다면?"
① 거대 ViT 처음부터
② CNN·작은 모델+증강
③ 데이터 없이 학습
정답 2
왜? 국소 선행편향이 학습을 안정화하기 쉽습니다.
예시 (종합 추론형)
"동일 해상도·동일 증강인데 ViT만 OOM이다. 다음으로?"
① 옵티마이저
② 패치·시퀀스·체크포인팅
③ 로그 인코딩
정답 2