Coursera의 Deep Learning Specialization - Week 4의 강의를 수강하면서 필기한 내용을 바탕으로 정리한 글입니다.
지난 주차에는 여러 CNN 모델 연구를 살펴 보았습니다.
이번 주차에는 Detection Algorithm을 살펴 보겠습니다.
Landmark Detection
하나의 이미지를 분류(Classification)하는 모델과 그 좌표를 찾는(Localization) 모델은 하나의 물체에 대해서만 수행됩니다. 하지만 실제 사진 속에는 고양이, 차, 신호등, 횡단보도 등이 한 번에 들어있는 경우가 훨씬 많습니다. 입력 영상 속에 물체가 있는지, 있다면 어떤 물체들이 어디에 있는지를 수행하는 것을 탐지(Detection)라고 합니다.
탐지 모델의 Label y를 살펴보면, 물체가 존재하는지를 의미하는 Pc와 Pc=1일 때 물체의 x,y좌표 위치를 의미하는 bx와 by, 물체의 Bounding Box 높이와 너비를 의미하는 bh와 bw, 그리고 물체의 클래스를 분류하는 C1, C2, ..., Cn이 있습니다. Pc=1이라면, C1, C2, ... Cn 중 하나만이 1이고 나머지는 0을 가질 것입니다.
Pc=0이라면, 물체의 위치 정보와 클래스 정보는 의미를 가지지 않습니다. ( 강의에서는 don't care = ? 라고 표기합니다 )
Landmark라는 용어가 함께 등장합니다. 사진의 Pc = 1일 때, 해당 물체가 고유하게 가지고 있는 특징점을 말합니다.
얼굴의 경우 얼굴의 윤곽 위 몇몇 점들이 될 수도 있고, 입술 위 몇몇 점들 혹은 눈 위 점들이 될 수도 있습니다.
Landmark의 'L'을 따서 lx, ly 좌표라고 정의합니다.
랜드마크를 이용할 때에는 데이터셋의 라벨링이 반드시 일관성 있게 되어야 합니다.
Sliding Window Detection
Detection을 진행하는 방법 중 윈도우를 슬라이딩하여 탐지를 진행하는 방법이 있습니다.
미리 Size와 Strides가 정의된 Window를 왼쪽 상단부터 오른쪽으로 슬라이드하면서 탐지를 수행합니다.
하지만 완전 탐색을 하기 때문에 cost가 높습니다..
이러한 단점을 Convolution으로 해결합니다.
400개의 Unit이 FC로 들어가는 것을, 대신 400개의 필터를 거쳐 1 x 1 x 400의 데이터로 만듭니다.
각 Window마다 이 과정을 거치면, 기존의 FC 레이어를 이용하는 네트워크보다 연산 비용이 감소합니다.
이 합성곱의 의의는, 각 Window별 독립적인 전파로 보지 않고 하나의 계산으로 취급하는 데 있습니다. Window의 공통 영역에 대한 계산 결과 또한 공유하게 되어, 효율적인 연산이 가능해집니다.
YOLO - You Look Only Once
Sliding Window 기법을 이용했을 때, Window가 물체의 경계를 정확히 감싸지 못해 탐지를 못하는 케이스가 존재합니다.
이에, YOLO 라는 것이 고안되었습니다.
각 물체마다 중간점을 생성하고, 이미지를 일정한 간격의 grid로 나눕니다. 그리고 각 grid cell마다 물체 탐지를 실시하는데, Label y의 Pc의 정의는 " 물체가 있는가? " 에서, " 물체의 중간점이 grid cell 내부에 있는가? " 가 됩니다.
그리고 단 한 번의 CONV와 MAXPOOL 레이어를 거쳐, 3 x 3 x 8 Output을 생성합니다. 여기서 3 x 3은 grid, 8은 라벨 y의 원소 개수를 의미합니다. grid를 더 촘촘하게 나눌수록, 하나의 grid cell에 여러 object 중간점이 탐지될 확률이 낮아집니다.
IOU (Intersection Over Union)
물체를 탐지함에 있어 그 정확도를 판별하는 작업은 매우 중요합니다. 다른 물체를 잘못 인식했는데, 단지 Bounding box가 있다는 것만으로 " 물체가 있다 " 라고 정의하는 것은 모델 학습에 좋지 않습니다. 따라서 라벨(Ground-truth) Bounding box와 예측된 Bounding box가 얼마나 일치하는 지를 계산하여 올바르게 예측했는지를 결정할 수 있습니다.
그 중 가장 많이 쓰이는 방식이 IOU입니다. 두 Box의 교집합 크기를 합집합 크기로 나눈 것입니다.
이 IOU가 어떤 값 이상이면 "Correct"이라고 판단하게끔 정의합니다.
만일 하나의 물체에 여러 바운딩 박스가 예측되었다면,
Non-max Suppression을 이용합니다.
non-max Suppression은 여러 bounding box 중 가장 정확한 bounding box를 선택하도록 하는 기법입니다.
이 수행은 하나의 물체, 하나의 클래스에 대해서 독립적으로 여러 번 수행하게 됩니다.
- 1. 하나의 셀을 선택합니다.
- 2. 일정 확률을 만족하지 못하는 Bounding Box는 목록에서 뺍니다.
- 3-1. Pc가 가장 높은 box를 선택합니다.
- 3-2. 3-1에서 선택한 box와 나머지 목록 내 box들과 IOU를 계산하여, 일정 수준보다 높으면 그 box를 제거합니다. box가 남지 않을 때까지 3-1, 3-2를 반복합니다.
Anchor box
앵커 박스는 하나의 grid cell에 여러 물체들이 탐지되었을 때를 대비해 도입되었습니다.
2개의 물체가 탐지되었다고 가정합시다. 그렇다면 box1과 box2는 위치도 다르고, 크기도 다를 것이며 해당 물체의 클래스 또한 다를 수 있습니다. 따라서 Pc, bx, by, ... , C3까지의 라벨링을 탐지된 물체 수만큼 반복하여, 첫 번째의 8개 원소는 첫 번째 앵커 박스를, 두 번째의 8개 원소는 두 번째 앵커 박스를 의미하도록 합니다.
대신 차원이 2배가 될 뿐더러, box의 수와 물체의 수가 맞지 않거나 두 앵커 박스가 똑같은 등의 문제점에 취약하다는 단점이 있습니다.
Training of YOLO
YOLO 모델의 학습은 Anchor Box, non-max suppression, Convolution Network 등을 모두 조합하여 진행하게 됩니다..
Semantic Segmentation
이미지를 물체에 따라 분할하는 방법 중에서 이미지의 Pixel 별로 물체 Class를 라벨링하는 방법입니다.
사진 속 차, 건물, 도로를 탐지 가능한 모델을 사용중이라고 가정합시다. 그렇다면 이미지의 pixel이 차를 의미하면 car - 1로 라벨링하고, 건물이면 2, 도로면 3, 그 외의 경우 0으로 라벨링하는 식입니다.
Input과 Output은 같은 크기를 가집니다. 하지만 일반적인 Convolution은 feature map이 작아집니다. Output size를 크게 하고 싶다면 Transpose Convolution을 이용합니다.
Transpose Convolution
Convolution의 역순이라고 생각하면 편합니다. Input이 아닌 Output에 Padding, Strides를 적용하여 Filter의 모든 원소에 Input 원소를 곱하여 퍼뜨린다고 생각하면 되겠습니다.
U-Net
이 모델은 Semantic Segmentation Task를 수행하는 대표적인 모델입니다. U자 구조를 가지고 있어서 U-Net이라 불립니다. 그리고 Skip Connection을 적용하여, 낮은 차원의 원본 정보와 높은 차원의 문맥 정보를 동시에 가지게 합니다.
- 내려가는 과정을 Contracting Path, 올라오는 과정을 Expanding Path라고 합니다.
- Contracting Path는 전형적인 CNN과 비슷합니다.
- 반면 Expanding Path는 CNN과 Up-sampling이 합쳐진 모습입니다. Contracting Path를 통해 감소한 차원을 다시 올리면서, 매 단계마다 대응되는 Contracting Path의 특징맵과 결합되어 더욱 정확한 Localization이 수행됩니다.
'Deep Learning Specialization' 카테고리의 다른 글
RNN [Deep Learning Specialization #12] (0) | 2022.08.01 |
---|---|
Face Recognition [Deep Learning Specialization #11] (0) | 2022.07.28 |
CNN Case Studies [Deep Learning Specialization #10] (0) | 2022.07.26 |
CNN [Deep Learning Specialization #9] (0) | 2022.07.23 |
Error Analysis [Deep Learning Specialization #8] (0) | 2022.07.20 |
댓글