시각지능 딥러닝 | Visual Intelligence Deep Learning
KT 에이블스쿨 6기 시각지능 딥러닝에 진행한 강의 내용 정리한 글입니다.
Computer Vision
- OCR (Optical Character Recognition): 문서의 텍스트를 인식하고 식별
- Vision Biometrics: 홍채 패턴 인식을 통해 사람들을 구분
- Object Recognition: 실시간의 이미지나 스캔 입력을 가지고 제품을 분류
- Special Effects: 모션 캡처 및 모양 캡처, 영화에서의 CGI
- 3-D Printing and Image Capture: 영화, 건축 구조 등에 사용
- Sports: 경기에서 필드에 추가 라인을 그리거나 이를 기반으로 영상 판독
- Social Media: 얼굴 모양에 맞추어 착용되는 이미지
- Smart Cars: 사물과 사람을 인지
- Medical Imaging: 3D 이미징 및 이미지 유도 수술
CNN
CNN(Convolutional Neural Network)은 이미지 처리와 패터 인식에 주로 사용되는 신경망 구조로 Convolutional layer, Pooling layer, Fully-connected layer 구성됩니다.
- Convolutional layer
- 이미지 특징을 추출하는 역할
- 필터 또는 커널이라고 불리는 작은 크기의 행렬을 사용해 이미지에 대해 합성곱 연산을 수행
- 이 과정을 통해 이미지를 각 위치의 특징 맵(Feature Map)으로 변환하여 학습에 중요한 정보를 추출
- 패딩(Padding): 합성곱 연산 후 출력 이미지의 크기를 원본 이미지 크기로 유지하거나 출력 크기를 조정하는 방법
- 스트라이드(Stride): 필터를 적용할 때의 이동 간격을 뜻하며 스트라이드가 클수록 출력 크기가 작아지고 연산 속도가 빨라집니다.
- Pooling layer
- 이미지의 크기를 줄여 계산량을 감소시키고 과적합 방지 역할
- 최대 풀링(Max Pooling): 일정 구역 내에서 최대값을 추출하여 중요한 특징을 유지하며 차원을 축소
- 평균 풀링(Average Pooling): 구역 내에서 평균값을 추출하여 특징을 보존하면서 차원을 축소
- 이미지의 크기를 줄여 계산량을 감소시키고 과적합 방지 역할
- Fully-connected layer
- 합성곱 레이어와 풀링 레이어를 거쳐 얻어진 다차원 특징 맵은 일렬로 나열되어 1차원 형태의 벡터로 변환되는데 이를 Flattening이라고 합니다.
- 최종 분류 작업을 수행하며 이전 레이어에서 추출한 특징들을 종합하여 예측
LeNet-5
LeNet-5는 손글씨 숫자 인식(MNIST 데이터셋)과 같은 간단한 이미지 분류 작업에 주로 사용됩니다.
- Convolutional layer(C) 3개와 Sub-Sampling Layer(S) 2개, Fully-Connected layer(F) 2개로 구성
- C1 → S2 → C3 → S4 → C5 → F6 → F7(output) 구조
- C1: 6개의 5x5 필터를 사용하여 28x28 크기의 특징 맵 생성
- S2: 평균 풀링(Average Pooling)을 사용하여 14x14 크기로 차원 축소
- C3: 16개의 5x5 필터를 사용하여 10x10 크기의 특징 맵 생성
- S4: 다시 평균 풀링을 적용하여 5x5 크기로 차원 축소
- C5: 120개의 5x5 필터를 사용하여 1x1 크기의 특징 맵 생성
- F6: 84개의 노드로 구성, 이전 레이어의 출력이 이 레이어에 연결
- F7: 10개의 노드로 구성되어 0부터 9까지의 숫자에 대한 확률을 출력
AlexNet
- Convolutional layer(C) 5개와 Sub-Sampling Layer(S) 3개, Fully-Connected layer(F) 3개로 구성
- C1 → S2 → C3 → S4 → C5 → C6 → C7 → S8 → F9 → F10(output) 구조
- C1: 96개의 11x11 필터를 사용하여 55x55 크기의 특징 맵을 생성
- S2: 최대 풀링(Max Pooling)을 적용하여 27x27 크기로 차원 축소
- C3: 256개의 5x5 필터를 사용하여 27x27 크기의 특징 맵을 생성
- S4: 다시 최대 풀링을 적용하여 13x13 크기로 차원 축소
- C5: 384개의 3x3 필터를 사용하여 13x13 크기의 특징 맵을 생성
- C6: 384개의 3x3 필터를 사용하여 13x13 크기의 특징 맵을 생성
- C7: 256개의 3x3 필터를 사용하여 13x13 크기의 특징 맵을 생성
- S8: 최대 풀링을 적용하여 6x6 크기로 차원 축소
- F9: 4096개의 노드로 구성, 이전 레이어의 출력을 종합하여 처리
- F10: 4096개의 노드로 구성, Dropout 기법을 사용하여 과적합 방지
- 최종 출력층은 F10과 연결되며 1000개의 노드로 구성
- 각 노드는 1000개의 클래스에 대한 확률을 출력
Feature map
\(n_{out} = \left\lfloor \frac{n_{in} + 2p - k}{s} \right\rfloor + 1\)
- $n_{in}$: input feature map의 가로세로 사이즈
- $n_{out}$: output feature map의 가로세로 사이즈
- $k$: Convolution filter의 가로세로 사이즈
- $s$: Convolution filter의 이동포복
- $p$: Convolution filter map에 덧붙일 pad의 수
Data Augmentation
모델의 일반화 능력을 향상시키고, 과적합을 방지하기 위해 훈련 데이터의 양을 인위적으로 늘리는 기법
- 데이터를 추가로 수집하기에 어려운 경우 현재 가지고 있는 데이터에 Augmentation을 진행하여 데이터를 증식
- 크기, 반전, 이동, 회전, 자르기 등의 방법이 존재
Transfer Learning
사전 훈련된 모델의 가중치를 새로운 작업에 적용하는 방법
- 데이터셋이 작거나 모델 훈련에 필요한 시간이 긴 경우에 유용하게 사용
- 새로운 작업에 특화된 레이어를 추가하거나 기존 레이어를 미세 조정하여 전이 학습을 수행
Object Detection
객체 탐지는 이미지나 비디오에서 특정 객체를 인식하고 해당 객체의 위치를 나타내는 방법
- Localization: 이미지에서 단일 객체의 위치를 찾는 과정
- Object Detection: 이미지 내에서 여러 개의 객체를 동시에 인식하고 그 위치를 찾는 과정
Bounding Box
이미지 내에서 객체의 위치를 네 개의 좌표를 이용해서 사각형으로 감싸는 방법
- 이미지 내 객체의 좌표를 표시하고 크기와 위치 정보를 제공
Class Classification
객체가 어떤 종류에 속하는지 클래스를 예측하는 작업
- 객체 검출 모델은 이미지 안의 여러 객체를 탐지하고 각 객체의 클래스를 분류
Confidence Score
해당 클래스에 속한다고 확신하는 정도를 수치로 표현
- 0 ~ 1 사이의 값을 가지며 1에 가까울수록 예측이 정확하다고 확신하는 수준이 높다는 뜻
- 특정 클래스와 Bounding Box의 위치 정확도에 신뢰도
- 단순히 Object가 있을 확률
- 객체가 해당 위치에 존재할 가능성만 평가
- Object가 있을 확률 X IoU
- 객체가 존재할 가능성에 IoU를 곱하는 방식
- IoU는 예측한 Bounding Box와 실제 Bounding Box가 겹치는 정도를 측정하는 지표로 값이 1에 가까울수록 정확하게 예측된 위치를 의미
- Object가 특정 클래스일 확률 X IoU
- 객체가 특정 클래스에 속할 확률과 IoU를 곱하는 방식
- 단순히 Object가 있을 확률
IoU
\(\text{IoU} = \frac{\text{Area of Overlap}}{\text{Area of Union}}\)
- Area of Overlap: Ground-truth Bounding Box와 Prediction Bounding Box가 겹치는 영역의 면적
- Area of Union: 두 박스의 합집합 영역의 면적
- IoU 계산 과정
- 겹치는 영역을 먼저 구해 겹치는 부분의 면적(Overlap)을 계산
- 두 박스의 합집합 영역을 구함
- 합집합 영역은 Ground-truth Bounding Box의 면적 + Prediction Bounding Box의 면적 - Overlap 영역으로 계산
- Overlap 영역을 Union 영역으로 나눠 IoU 값을 구함
- 0 ~ 1 사이의 값을 가지며 값이 1에 가까울수록 모델의 예측이 정확
NMS
객체 감지에서 중복된 바운딩 박스를 제거하여 최종적으로 가장 신뢰도 높은 바운딩 박스를 선택하는 기법
- Confidence Score 임계값 적용
- 모델이 예측한 바운딩 박스 중 신뢰도가 낮은 것(Confidence Score가 임계값보다 낮은 것)은 제거
- Confidence Score 내림차순 정렬
- 남은 바운딩 박스를 Confidence Score 순서대로 내림차순 정렬
- Confidence Score가 높은 박스를 우선으로 선택할 수 있게 준비하는 과정
- 박스 제거 조건 설정
- Confidence Score가 가장 높은 바운딩 박스를 기준으로, 이 박스와 겹치는 다른 박스들과의 IoU 값을 계산
- IoU 임계값을 기준으로, IoU가 높아 중복된 영역을 가지는 다른 박스들은 제거
- 과정 반복
- 1 ~ 3번 단계를 반복하여 남은 박스 중 Confidence Score가 높은 것부터 확인하며 IoU 임계값 이상인 박스를 제거
- 이 과정을 통해 결국 Confidence Score가 높은 단일 박스만 남음
- 최종 결과
- 한 객체에 대해 하나의 바운딩 박스만 남게 되므로 객체가 한 번만 검출되는 결과
임계값
NMS에서 불필요한 바운딩 박스를 필터링하기 위해 설정하는 기준값을 의미
- Confidence Score 임계값
- 모델이 예측한 바운딩 박스의 신뢰도를 평가하는 기준
- Confidence Score가 임계값보다 높은 박스만을 유지하고, 낮은 박스는 제거하여 노이즈와 불필요한 박스를 필터링
- IoU 임계값
- 중복되는 바운딩 박스들 중에서 겹침 정도를 기준으로 불필요한 박스를 제거하는 기준
- Confidence Score가 높은 상위 박스와 다른 박스들 간의 IoU를 계산하여 IoU가 임계값보다 높은 박스는 동일 객체로 간주하고 제거
Confusion Matrix
- Confusion Matrix with O.D
- TP: 실제 Object를 모델이 Object라 예측
- 모델이 올바르게 탐지
- FP: Object 아닌데 모델이 Object라 예측
- 모델의 잘못된 탐지
- FN: 실제 Object를 모델이 아니라고 예측
- 모델의 잘못된 탐지
- TN: Object 아닌데 모델도 아니라고 예측
- 모델이 탐지하지 않음
- Precision: 모델이 Object라 예측한 것 중에 실제 Object의 비율
- $ \text{Precision} = \frac{TP}{TP + FP} $
- Recall: 실제 Object 중 모델이 예측하여 맞춘 Object의 비율
- $\text{Recall} = \frac{TP}{TP + FN} $
- Precision과 Recall의 조화 평균
- TP: 실제 Object를 모델이 Object라 예측
Precision-Recall Curve
Precision-Recall Curve는 Precision과 Recall을 모두 감안한 지표로 모델의 성능을 평가할 때 두 지표간의 관계를 시각적으로 표현
- AP
- Average Precision는 Precision-Recall Curve 아래의 면적을 표현
- 면적은 모델의 Precision과 Recall간의 trade-off를 반영
- mAP
- mean Average Precision은 여러 클래스에 대한 Average Precision의 평균을 의미
- 다중 클래스 문제에서 전체 모델 성능을 종합적으로 평가하는데 사용
YOLO
이미지에서 객체를 실시간으로 탐지하는 능력
이미지 전체를 한 번에 처리하여 객체의 클래스와 위치를 동시에 예측
- 버전
- Yolov3: 3종류의 탐지 커널 사용하여 기존에 비해 Object의 크기 영향을 덜 받음
- Yolov4: One-stage Detector에 대한 검증
- Yolov5: PyTorch 기반으로 구현되어 경량화 및 사용자 친화성을 강조