4th course: Special applications: Face recognition & Neural style transfer (C4W4L01 ~ C4W4L11)
C4W4L01 What is face recognition
이 강의은 얼굴 인식에 대한 소개입니다. 얼굴 인식은 컴퓨터 비전의 한 분야로, 이미지나 비디오에서 사람의 얼굴을 식별하는 기술입니다. 얼굴 인식은 다양한 분야에서 활용되고 있으며, 대표적인 예로는 보안 시스템, 출입 통제, 금융 서비스 등이 있습니다.
얼굴 인식 시스템은 크게 두 가지 단계로 구성된다. 첫 번째 단계는 얼굴 검출이다. 얼굴 검출은 이미지나 비디오에서 얼굴이 있는지 여부를 판단하고, 얼굴의 위치를 찾는 과정이다. 두 번째 단계는 얼굴 인식이다. 얼굴 인식은 검출된 얼굴의 특징을 분석하여 개인을 식별하는 과정이다.
얼굴 인식 시스템의 성능은 다양한 요인에 의해 결정된다. 대표적인 요인으로는 조명, 표정, 각도, 피부색 등이 있다. 이러한 요인들에 의해 얼굴 인식 시스템의 정확도가 떨어질 수 있다.
C4W4L02 One Shot Learning
얼굴 인식 시스템은 다양한 분야에서 활용되지만, 원샷 학습 (One-Shot Learning) 문제라는 난관에 직면해 있습니다. 원샷 학습이란 단 하나의 예시만으로 새로운 사람을 인식해야 하는 문제입니다.
원샷 학습의 어려움
대부분의 딥러닝 알고리즘은 충분한 훈련 데이터가 있을 때 잘 작동하다. 하지만 얼굴 인식의 경우, 각 사람에 대한 사진이 단 한 장밖에 없는 경우가 많다. 이는 딥러닝 모델을 훈련하기에 충분하지 않은 데이터이다.
기존 접근 방식의 한계
소프트맥스 (Softmax) 유닛을 사용하여 사람 수를 분류하는 방법은 다음과 같은 문제점이 있다.
- 작은 훈련 세트: 훈련 데이터가 부족하여 강력한 신경망을 훈련하기 어렵다.
- 새로운 사람 추가: 새로운 사람이 추가될 때마다 신경망을 다시 훈련해야 한다.
새로운 접근 방식: 유사도 함수 학습
원샷 학습 문제를 해결하기 위해 유사도 함수 (Similarity Function)를 학습하는 방법을 사용한다. 유사도 함수는 두 이미지를 입력받아 차이 정도를 반환한다.
- 같은 사람: 작은 숫자 반환
- 다른 사람: 큰 숫자 반환
유사도 함수를 이용한 얼굴 검증
- 임계값 설정: 차이 정도가 특정 임계값 τ보다 작으면 같은 사람, 크면 다른 사람으로 판단한다.
- 새로운 사진 입력: 새로운 사진이 주어지면 데이터베이스의 모든 사진과 비교하여 가장 유사한 사람을 찾는다.
유사도 함수 학습의 장점
- 원샷 학습 문제 해결: 단 하나의 예시만으로 새로운 사람을 인식할 수 있다.
- 새로운 사람 추가 용이: 새로운 사람이 추가되어도 데이터베이스만 업데이트하면 된다.
C4W4L03 Siamese Network
지난 영상에서 두 이미지를 입력받아 유사도를 측정하는 함수 d를 배우셨습니다. 이번 영상에서는 샴 네트워크 (Siamese Network)를 사용하여 함수 d를 효과적으로 구현하는 방법을 소개합니다.
샴 네트워크 구조
샴 네트워크는 두 개의 동일한 합성곱 신경망으로 구성된다. 각 신경망은 입력 이미지를 처리하여 특징 벡터를 추출한다.
- 입력 이미지: 두 개의 이미지 \( x^{(1)} \) 과 \( x^{(2)} \) 를 각각 신경망에 입력한다.
- 합성곱 신경망: 각 신경망은 합성곱, 풀링, 완전 연결 계층을 거쳐 특징 벡터를 생성한다.
- 특징 벡터: 각 신경망은 128차원의 특징 벡터 \( f(x^{(1)}) \) 과 \( f(x^{(2)}) \) 를 출력한다.
- 유사도 계산: 두 특징 벡터의 차이 \( ||f(x^{(1)}) - f(x^{(2)})|| \)를 계산하여 두 이미지의 유사도를 측정한다.
샴 네트워크 훈련
샴 네트워크의 목표는 동일인 이미지 쌍의 특징 벡터 거리는 가깝게, 다른 사람 이미지 쌍의 특징 벡터 거리는 멀게 만드는 것입니다. 이를 위해 다음과 같은 단계를 거친다.
- 변수 정의: 신경망의 각 계층에 대한 변수들은 인코딩 \( f(x^{(i)}) \) 를 정의한다.
- 목적 함수
- 동일인 이미지 쌍 \( (x^{(i)}, x^{(j)}): ||f(x^{(i)}) - f(x^{(j)})|| \) 값을 최소화한다.
- 다른 사람 이미지 쌍 \( (x^{(i)}, x^{(j)}): ||f(x^{(i)}) - f(x^{(j)})|| \) 값을 최대화한다.
- 역전파: 위 조건을 만족하도록 역전파를 사용하여 변수들을 조정한다.
샴 네트워크의 장점
- 효과적인 특징 추출: 두 개의 동일한 신경망을 사용하여 이미지의 특징을 효과적으로 추출한다.
- 유사도 측정: 추출된 특징 벡터를 사용하여 두 이미지의 유사도를 간편하게 측정할 수 있다.
- 원샷 학습: 유사도 함수를 통해 원샷 학습 문제를 효과적으로 해결할 수 있다.
DeepFace
DeepFace는 샴 네트워크를 기반으로 개발된 얼굴 인식 시스템이다.
C4W4L04 Triplet loss
지난 영상에서 샴 네트워크를 사용하여 두 얼굴 이미지의 유사도를 측정하는 방법을 배웠습니다. 이번 영상에서는 삼중항 손실 함수 (Triplet Loss Function)를 사용하여 샴 네트워크를 효과적으로 훈련시키는 방법을 소개합니다.
삼중항 손실 함수란?
삼중항 손실 함수는 세 개의 이미지 (Anchor, Positive, Negative)를 동시에 고려하여 정의된다.
- Anchor (A): 기준 이미지
- Positive (P): Anchor와 같은 사람의 이미지
- Negative (N): Anchor와 다른 사람의 이미지
목표
삼중항 손실 함수의 목표는 다음과 같다.
- d(A, P) (Anchor와 Positive 이미지 사이의 거리)는 작게 만든다.
- d(A, N) (Anchor와 Negative 이미지 사이의 거리)는 크게 만든다.
손실 함수 공식
$$ L(A, P, N) = max(||f(A) - f(P)||^2 - ||f(A) - f(N)||^2 + \alpha, 0) $$
- \( f(x) \) : 이미지 x의 인코딩 벡터
- \( \alpha \) : 마진 (margin) 하이퍼파라미터
마진 (Margin) 이란?
마진 \( \alpha \) 는 d(A, P)와 d(A, N) 사이의 최소 간격을 설정하는 역할을 한다. 마진을 도입함으로써 모델이 d(A, P)를 너무 작게 만들거나 d(A, N)을 너무 크게 만드는 것을 방지하고, 두 거리 사이의 충분한 차이를 확보하도록 유도한다.
훈련 과정
- 삼중항 데이터셋 구성: 훈련 데이터셋에서 Anchor, Positive, Negative 이미지를 조합하여 삼중항 데이터셋을 구성한다.
- 손실 함수 계산: 각 삼중항에 대해 삼중항 손실 함수 값을 계산한다.
- 경사 하강법: 계산된 손실 함수 값을 이용하여 경사 하강법을 통해 샴 네트워크의 파라미터를 업데이트한다.
어려운 삼중항 (Hard Triplets) 이란?
훈련 과정에서 학습하기 어려운 삼중항 (Hard Triplets)을 선택하는 것이 중요하다. 어려운 삼중항은 d(A, P)와 d(A, N) 값이 비슷한 경우를 의미한다. 이러한 삼중항을 통해 모델은 더욱 세밀하게 특징을 학습하고, 성능을 향상시킬 수 있다.
훈련 데이터셋
일반적으로 대규모 얼굴 인식 시스템은 백만 장 이상의 이미지 데이터셋으로 훈련된다. 하지만 다행히도 많은 기업들이 사전 훈련된 모델을 공개하고 있으므로, 필요에 따라 이러한 모델을 활용할 수 있다.
C4W4L05 Face Verification
이전 영상에서 삼중항 손실 함수를 사용하여 얼굴 인식 신경망을 훈련하는 방법을 배웠습니다. 이번 영상에서는 얼굴 인식을 이진 분류 문제로 접근하여 신경망을 훈련하는 또 다른 방법을 소개합니다.
이진 분류 기반 얼굴 인식
- 샴 신경망: 두 개의 동일한 샴 신경망 쌍을 사용하여 두 이미지의 임베딩 (특징 벡터)을 계산한다.
- 로지스틱 회귀: 계산된 임베딩을 로지스틱 회귀 유닛에 입력하여 두 이미지가 같은 사람인지 (1) 또는 다른 사람인지 (0)를 예측한다.
로지스틱 회귀 유닛 활용
최종 로지스틱 회귀 유닛은 다음과 같은 방식으로 작동한다.
- 예측값 (y) = 시그모이드 함수 (특성)
- 특성 = 인코딩 차이 (\( ||f(x^{(i)}) - f(x^{(j)})|| \)) 또는 다양한 변형 (카이제곱 식 등)
카이제곱 식
카이제곱 식은 두 인코딩의 차이를 계산하는 또 다른 방법이다.
$$ \sum_{k=1}^{128} \frac{(f(x^{(i)})_k - f(x^{(j)})_k)^2}{f(x^{(i)})_k + f(x^{(j)})_k} $$
훈련 과정
- 입력: 두 이미지 쌍 (\( x^{(i)}, x^{(j)} \) )
- 출력: 유사도에 따른 레이블 (0 또는 1)
- 샴 신경망 훈련: 역전파를 사용하여 샴 신경망을 훈련한다 (두 신경망은 동일하거나 거의 같은 변수를 공유).
효율성 향상 기법
- 미리 계산된 임베딩 활용: 새로운 이미지가 입력되면 해당 이미지의 임베딩만 계산하고, 데이터베이스 이미지의 임베딩은 미리 계산하여 저장해 둔다. 이를 통해 계산량을 크게 줄일 수 있다.
C4W4L06 What is neural style transfer?
최근 인공지능 분야에서 가장 흥미로운 발전 중 하나는 신경망 스타일 변환 (Neural Network Style Transfer)입니다. 이 기술을 통해 우리는 평범한 사진을 유명 화가의 작품처럼 바꾸거나, 상상 속의 풍경을 현실처럼 만들어낼 수 있습니다.
신경망 스타일 변환이란?
신경망 스타일 변환은 내용 이미지 (Content Image)와 스타일 이미지 (Style Image) 두 장의 이미지를 입력받아, 내용 이미지의 내용과 스타일 이미지의 스타일을 결합한 새로운 이미지 생성 이미지 (Generated Image)를 만들어내는 기술이다.
다양한 예시
- 스탠포드 대학교 사진 + 반 고흐의 "별이 빛나는 밤에" 스타일 = 스탠포드 대학교가 "별이 빛나는 밤에" 스타일로 그려진 이미지
- 금문교 사진 + 파블로 피카소 스타일 = 금문교가 피카소 스타일로 그려진 이미지
구현 방법
신경망 스타일 변환은 신경망의 얕은 층 (Shallow Layers)과 깊은 층 (Deep Layers)에서 추출된 특징들을 활용하여 구현된다.
C4W4L07 What are deep CNs learning?
심층 신경망은 복잡한 작업을 수행하지만, 그 내부 작동 방식은 여전히 블랙박스로 여겨집니다. 이번 영상에서는 신경망 각 층이 어떤 특징을 학습하는지 시각화하여 더 나은 이해를 돕고자 합니다.
시각화 방법
- 활성화 최대화 이미지: 특정 은닉 유닛의 활성화 값을 최대화하는 입력 이미지 또는 이미지 조각을 찾는다.
- 훈련 데이터 활용: 훈련 데이터셋을 신경망에 통과시켜 각 유닛의 활성화 값을 기록하고, 가장 높은 활성화 값을 갖는 이미지를 선택한다.
- 시각화: 선택된 이미지를 통해 해당 유닛이 어떤 특징에 반응하는지 파악한다.
1층: 단순한 특징 감지
1층의 은닉 유닛들은 주로 모서리나 색깔과 같은 단순한 특징에 반응한다.
- 다양한 방향의 모서리 감지
- 특정 색깔 (빨간색, 초록색 등) 감지
2층: 복잡한 텍스처 감지
2층에서는 텍스처와 같은 좀 더 복잡한 특징을 감지하기 시작한다.
- 세로 줄무늬 텍스처 감지
- 원형 패턴 감지
3층: 물체 일부 감지
3층에서는 물체의 일부분을 감지하는 유닛들이 나타난다.
- 자동차의 둥근 부분 감지
- 사람의 형태 감지
4층: 특정 물체 감지
4층은 특정 물체를 감지하는 데 특화된 유닛들을 보여준다.
- 특정 종류의 개 감지
- 물체 (통, 꽃 등) 감지
5층: 더욱 정교한 특징 감지
5층은 더욱 다양하고 복잡한 특징들을 감지한다.
- 다양한 종류의 개 감지
- 키보드, 키보드 패턴 감지
C4W4L08 Cost Function
이번 영상에서는 신경망 스타일 변환 (Neural Network Style Transfer) 알고리즘의 핵심인 비용 함수 (Cost Function)와 최적화 과정에 대해 자세히 알아보겠습니다.
문제 정의
- 입력: 내용 이미지 C, 스타일 이미지 S
- 출력: 두 이미지를 융합한 새로운 이미지 G
비용 함수 (Cost Function)
신경망 스타일 변환의 목표는 내용 이미지의 내용과 스타일 이미지의 스타일을 모두 담고 있는 생성 이미지 G를 만드는 것이다. 이를 위해 다음과 같은 비용 함수를 정의한다.
$$ J(G) = \alpha J_{content}(C, G) + \beta J_{style}(S, G) $$
- \( J_{content}(C, G) \) : 생성 이미지 G가 내용 이미지 C와 얼마나 비슷한 내용을 담고 있는지 측정하는 내용 비용 함수
- \( J_{style}(S, G) \) : 생성 이미지 G가 스타일 이미지 S와 얼마나 비슷한 스타일을 가지고 있는지 측정하는 스타일 비용 함수
- \( \alpha, \beta \) : 내용 비용과 스타일 비용의 가중치를 조절하는 하이퍼파라미터
최적화 과정 (Gradient Descent)
- 생성 이미지 초기화: 생성 이미지 G를 무작위로 초기화한다 (흰색 노이즈 이미지).
- 비용 함수 계산: 정의된 비용 함수 J(G)를 계산한다.
- 경사 하강법: 경사 하강법을 사용하여 비용 함수 J(G)를 최소화하는 방향으로 생성 이미지 G의 픽셀 값을 업데이트한다.
- 반복: 2-3 과정을 반복하여 생성 이미지 G를 점차 내용 이미지와 비슷하면서 스타일 이미지의 스타일을 가진 이미지로 만들어간다.
C4W4L09 Content Cost Function
신경망 스타일 변환 알고리즘은 내용 비용 (Content Cost)과 스타일 비용 (Style Cost) 두 가지 요소를 결합한 비용 함수를 사용하여 작동합니다. 이번 영상에서는 내용 비용 함수를 자세히 살펴보겠습니다.
내용 비용 함수란?
내용 비용 함수는 생성 이미지 (G)가 내용 이미지 (C)와 얼마나 비슷한 내용을 담고 있는지 측정하는 함수이다.
내용 비용 계산 방법
- 은닉층 선택: 내용 비용 계산을 위해 특정 은닉층 l을 선택한다.
- l 값이 너무 작으면: 생성 이미지가 내용 이미지의 픽셀 값과 너무 유사해진다.
- l 값이 너무 크면: 이미지 속 특정 물체 (예: 개)가 생성 이미지 어딘가에 나타나도록 한다.
- 일반적으로 l은 신경망의 중간층에서 선택된다.
- 특징 벡터 추출: 미리 훈련된 합성곱 신경망 (예: VGG 네트워크)을 사용하여 내용 이미지 C와 생성 이미지 G의 l층 활성화 값 al와 al를 추출한다.
- 활성화 값 비교: 두 활성화 값이 유사할수록 두 이미지는 비슷한 내용을 담고 있다고 판단한다.
- 내용 비용 함수 정의: 다음과 같이 내용 비용 함수를 정의한다.
$$ J_{content}(C, G) = \frac{1}{2} ||a^{[l]}(C) - a^{[l]}(G)||^2 $$
- \( ||a^{[l]} - a^{[l]}||^2 \) : 두 활성화 값의 차이에 대한 L2 노름의 제곱 (각 성분 차이 제곱의 합)
내용 비용 함수의 역할
경사 하강법을 통해 전체 비용 함수 J(G)를 최소화하는 과정에서 내용 비용 함수는 알고리즘이 은닉층 활성화 값을 내용 이미지와 유사하게 만드는 이미지 G를 찾도록 유도한다.
C4W4L10 Style Cost Function
지난 영상에서는 신경망 스타일 변환의 핵심 구성 요소 중 하나인 내용 비용 함수에 대해 알아보았습니다. 이번 영상에서는 또 다른 핵심 요소인 스타일 비용 함수에 대해 자세히 살펴보겠습니다.
스타일이란 무엇일까요?
이미지의 스타일은 단순히 색감이나 질감을 넘어, 특징들의 상관 관계를 의미한다.
스타일 측정 방법
- 특징 맵 분석: 특정 은닉층 l의 특징 맵을 분석하여 다양한 채널 간의 활성화 값 사이의 상관 관계를 파악한다.
- 채널별 상관 관계: 각 채널이 이미지의 어떤 특징에 반응하는지 파악하고, 이러한 특징들이 이미지 내에서 어떻게 함께 나타나는지 (또는 나타나지 않는지) 상관 관계를 통해 분석한다.
- 스타일 행렬: 각 채널 간의 상관 관계를 수치화하여 스타일 행렬을 구성한다.
스타일 행렬의 의미
스타일 행렬은 이미지의 텍스처 요소들이 서로 다른 이미지 부분에서 얼마나 자주 함께 발생하거나 발생하지 않는지 측정한다.
스타일 비용 함수
스타일 비용 함수는 생성 이미지의 스타일이 입력 스타일 이미지의 스타일과 얼마나 비슷한지 측정하는 함수이다.
- 스타일 행렬 계산: 스타일 이미지 S와 생성 이미지 G에 대해 각각 스타일 행렬 \( G^l \) 와 \( G^l \) 를 계산한다.
- 스타일 비용 함수 정의: 다음과 같이 스타일 비용 함수를 정의한다.
$$ J_{style}(S, G) = \frac{1}{2(n_H^{[l]} n_W^{[l]} n_C^{[l]})^2} \sum_{k} \sum_{k'} (G^{[l](S)}_{kk'} - G^{[l](G)}_{kk'})^2 $$- \( n_H^{[l]} n_W^{[l]} n_C^{[l]} \) : l층의 특징 맵의 높이, 너비, 채널 수
- \( G^{[l](S)}_{kk'}, G^{[l](S)}_{kk'} \) : 스타일 이미지 S와 생성 이미지 G의 l층 kk' 요소
스타일 비용 함수의 역할
스타일 비용 함수는 생성 이미지의 스타일 행렬이 입력 스타일 이미지의 스타일 행렬과 유사하도록 유도한다.
다양한 층 활용
여러 개의 층에서 스타일 비용 함수를 계산하고 가중치를 부여하여 결합하면 더욱 시각적으로 만족스러운 결과를 얻을 수 있다.
C4W4L11 1D and 3D Generalizations
지금까지 2D 이미지에 특화된 합성곱 신경망(CNN)에 대해 많은 것을 배우셨습니다. 하지만 CNN의 강력한 능력은 2차원 데이터를 넘어 1차원, 3차원 데이터에서도 빛을 발합니다. 이번 영상에서는 1D, 3D CNN의 개념과 활용 분야를 살펴보겠습니다.
1D 합성곱 신경망
1D CNN은 1차원 데이터를 다루는 데 특화된 신경망입니다. 1D 데이터의 대표적인 예시는 심전도(EKG) 신호이다.
- 심전도 신호는 시간에 따른 전압 변화를 나타내며, 각 봉우리는 심장 박동을 의미한다.
- 1D CNN은 심전도 신호를 분석하여 부정맥과 같은 이상 증상을 감지하는 데 활용될 수 있다.
1D CNN의 작동 방식은 2D CNN과 유사하다.
- 1D 필터: 1차원 필터를 사용하여 입력 신호의 여러 위치에서 특징을 추출한다.
- 합성곱 연산: 1D 필터를 입력 신호에 슬라이딩 방식으로 적용하며 합성곱 연산을 수행한다.
- 특징 맵 생성: 합성곱 연산 결과로 특징 맵이 생성되며, 이는 입력 신호의 특징을 나타낸다.
- 다층 구조: 여러 개의 1D 합성곱 층을 쌓아 복잡한 특징을 학습한다.
3D 합성곱 신경망
3D CNN은 3차원 데이터를 다루는 데 특화된 신경망입니다. 3D 데이터의 대표적인 예시는 CT 스캔이다.
- CT 스캔은 인체의 단면 이미지를 연속적으로 촬영하여 3차원 입체 영상을 구성한다.
- 3D CNN은 CT 스캔 영상을 분석하여 암과 같은 질병을 진단하는 데 활용될 수 있다.
3D CNN의 작동 방식은 2D CNN과 유사하다.
- 3D 필터: 3차원 필터를 사용하여 입력 영상의 여러 위치에서 특징을 추출한다.
- 합성곱 연산: 3D 필터를 입력 영상에 슬라이딩 방식으로 적용하며 합성곱 연산을 수행한다.
- 특징 맵 생성: 합성곱 연산 결과로 3차원 특징 맵이 생성되며, 이는 입력 영상의 특징을 나타낸다.
- 다층 구조: 여러 개의 3D 합성곱 층을 쌓아 복잡한 특징을 학습한다.
활용 분야
1D, 3D CNN은 다음과 같은 다양한 분야에서 활용된다.
1D CNN
- 음성 인식
- 자연어 처리
- 시계열 데이터 분석
3D CNN
- 의료 영상 분석
- 동영상 분석
- 3D 모델 분석
References
https://www.youtube.com/playlist?list=PLkDaE6sCZn6Gl29AoE31iwdVwSG-KnDzF
Convolutional Neural Networks (Course 4 of the Deep Learning Specialization)
www.youtube.com