신경망의 깊이를 증가시키면서도 성능 저하를 방지하기 위해
Residual(잔차) 개념을 도입한 것
신경망의 깊이가 너무 깊은 모델은 오히려 성능이 나빠지는 현상이 발생할 수 있음
깊이 56층인 모델이 오히려 20층보다 성능이 더 나쁨
여러 계층(layer)을 묶어 놓은 하나의 단위(unit)
ResNet : 블록들을 여러 개 반복해서 쌓은 것
계층이 늘어날수록 각 합성곱 층(conv layer)의 필터 수(filter channels)도 늘어나고, 그 결과 파라미터 수가 기하급수적으로 증가
기본 블록 (ResNet-34)
3×3 합성곱 두 겹으로 이루어져 있고, 채널 수가 그대로 유지됨.
블록 하나당 파라미터가 많음 → 깊어질수록 부담이 커짐.
병목 블록 (ResNet-50)
1×1 합성곱으로 먼저 채널 수를 줄여(down-projection)
핵심인 3×3 합성곱을 가볍게 실행한 뒤
다시 1×1 합성곱으로 원래 채널 수를 복원(up-projection)
→ 블록당 파라미터가 크게 줄어들음
입력 x가 어떤 함수를 통과하더라도 다시 x라는 형태로 출력되도록 함 (⊕)
블록 내부 합성곱을 통과한 F(x)와 x를 합산하여 를 만듦
feature map 크기를 줄이기 위한 것 (≈풀링)
블록 중간에 채널 수나 공간 해상도(shape)가 바뀌면 (ex. 64채널 → 128채널)
입력의 형태와 블록 출력의 형태이 달라져
아이덴티티 매핑(identity mapping) : x + F(x)를 할 수 없음
→ 다운샘플이 필요
입력 텐서 x가 들어오면
메인 경로(Main path) 와
숏컷 경로(Shortcut path) 로 동시에 분기됨
객체 인식 = 여러 객체에 대한 분류 + 각 객체 위치 검출
분류(Classification): 이미지 내에 어떤 객체들이 있는지 판별
위치 검출(Localization): 해당 객체들이 이미지에서 어디에 있는지
바운딩 박스(bounding box) 형태로 표시
과거엔 슬라이딩 윈도우가 널리 쓰였으나, 계산 비용 때문에
선택적 탐색을 통한 region proposal이 표준이 됨
R-CNN : CNN + 후보 영역 알고리즘
이미지 입력
전체 이미지를 네트워크에 넣는 대신,
후보 영역(region proposals) 생성
선택적 탐색 알고리즘으로 약 2,000개 영역을 뽑아냄
크롭 & 워핑(cropping & warping)
각 후보 영역을 잘라내어 (227×227) 크기로 리사이즈
CNN 특성(feature) 추출
각 워핑된 패치에 CNN(ex. AlexNet) 을 적용하여 고차원 특성 벡터 추출
영역별 분류(region classification)
추출된 특성 벡터에 SVM 등 전통적 분류기를 적용해 “고양이? 사람? 자동차?” 등 레이블 예측
결과 통합
각 영역마다 확신도가 높은 결과를 모아 최종 바운딩 박스와 클래스 결정
각각의 객체가 영역 한개에 할당될 수 있도록 많은 초기 영역을 생성.
입력된 이미지를 영역 여러개로 분할
1단계에서 나눈 영역들을 비슷한 영역으로 통합
2단계에서 통합된 이미지들을 기반으로 후보 영역(바운딩 박스)를 추출
RoI(Region of Interest) 풀링을 도입해,
이전의 SPP 기반 방식보다 효율적으로 동작
계산 효율성: R-CNN처럼 후보마다 전체 CNN을 다시 돌리지 않고,
한 번의 conv(feature map) 후에 RoI 풀링만 수행
모델 단순화: SPP의 복잡한 concat 과정을 없애고,
하나의 RoI 풀링 레이어로 대체
실용성: 여전히 고정 크기의 특징을 유지하면서,
다양한 크기·비율의 후보 박스를 처리 가능
크기가 다른 특성 맵의 영역마다 스트라이드를 다르게
최대 풀링을 적용하여 결괏값 크기를 동일하게 맞추는 방법
Region Proposal Network(RPN)을 CNN 합성곱층 바로 뒤에 붙여,
후보 영역 생성(region proposal)을 외부 CPU가 아닌
네트워크 내부(GPU)에서 동시에 처리하도록 만든 방법
특징 맵을 입력받아, sliding-window 방식으로 작은 윈도우를 훑으며
각 위치마다 여러 개(anchor) 크기·비율의 후보 박스에 대한
객체/배경 분류용 스코어(objectness score)와
바운딩 박스 회귀용 오프셋 (regression offsets)을 동시에 예측
이 위치에서 이 크기·비율의 박스를 제안하라는 참고(reference) 박스
슬라이딩 윈도우 하나에 대해 k개의 앵커를 설정
이미지 분할 : 신경망을 훈련시켜 이미지를 픽셀 단위로 분할하는 것
→ 이미지에 포함된 객체 추출
완전연결층의 한계 : 이미지 크기에 제약이 있고, 공간적 위치 정보가 사라짐
→ 완전연결층을 1×1 합성곱 레이어로 대체
: 공간 정보 보존 + 입력 크기 자유
CNN은 여러 단계의 합성곱 + 풀링을 거치며
해상도(H×W)가 점점 낮아짐
이후 업샘플링(Upsampling)으로 원래 크기를 복원하더라도
세부 정보가 사라져 버림
일반 CNN(합성곱 네트워크)
: 입력→256×256→128×128→64×64→… 해상도가 반절로 떨어짐
오른쪽: 역합성곱 네트워크
: 합성곱 결과를 역방향(upsampling)으로 되돌리며
Unpooling 또는 Deconv 층을 거쳐 원본 해상도로 복원
제로 패딩(Zero–padding)
입력(feature map) 각 픽셀 주위에 0을 끼워 넣어
해상도를 한 단계 키울 grid를 만듦
합성곱 연산 수행
grid 위에 필터(커널)를 적용하여,
패딩된 영역까지 포함한 출력을 계산
→ 원본보다 해상도가 더 커진 출력(feature map) 생성
sliding window 기반 패치 처리의 비효율과
“컨텍스트(큰 영역 이해)” vs “로컬라이제이션(정확한 위치 파악)”의 tradeoff를 극복
기존 슬라이딩 윈도우
: 앞에서 처리한 영역을 뒤 패치에서도 다시 반복 검증 → 속도 저하
U-Net
: 이미 처리된 위치는 건너뛰고(skip) 다음 필요한 패치만 인식
→ 슬라이딩 윈도우보다 훨씬 속도가 빠름
컨텍스트(넓은 시야)는 커야 이미지 전체 맥락을 이해하지만
너무 큰 범위는 세부 위치를 놓치고,
너무 작은 패치는 맥락이 부족하며 반복 연산이 많아 느림
이미지 안에 객체 위치 정보를 출력해 주는 것
크기 256×256×1(흑백 또는 단일 채널) 영상
컨텍스트(넓은 시야) 학습
다음을 반복 :
로컬라이제이션(정밀한 경계) 복원
바닥 단계(16×16, 1024 채널)에서 시작해,
완전연결층의 한계를 극복하기 위해 피라미드 풀링 모듈을 추가
훈련 과정
보간(interpolation) : 디지털 영상의 빈 픽셀(표본화되지 않은 위치)에
값을 채워 넣어, 부드러운 영상을 만드는 기법
선형 보간(linear interpolation): 1차원 축(한 방향)에 대해서만
두 점 사이를 직선으로 보간
양선형 보간(bilinear interpolation): 2차원 영역(사각형) 내에서,
X축 방향 보간 → 그 결과에 대해 Y축 방향 보간을 연속 수행
완전연결층의 단점을 보완하기 위해 Atrous 합성곱을 사용하는 네트워크
인코더(Encoder)
디코더(Decoder)
필터 커널 사이에 구멍을 띄워 놓고 연산하는 방식
dilation rate r 값에 따라 구멍의 크기가 바뀜:
Pool/Conv의 스트라이드를 줄여 다운샘플링 억제
→ 해상도를 유지하면서도 수용 영역은 일반 CNN보다 4× 더 넓게 확보
영상에서 특정 위치에 있는 픽셀들은
그 주변에 있는 일부 픽셀과 연관성은 높지만,
거리가 멀어질수록 그 영향은 감소
→ 수용영역 : 영상 전체 영역에 대해 서로 동일한 중요도를 부여하여
처리하는 대신, 특정 범위를 한정해서 처리하여 효과적으로 훈련을 수행하는 것