-
[CS231n] 11강 Detection and SegmentationStudy/CS231n 2020. 12. 19. 19:22
여태까지 이미지와 관련되어 소개했던 방법은 이미지분류(image cclassification)이었다.
Computer Vision 분야에서는 여러 Task들이 있는데
이번 강의에서는 추가적으로 localization, segmentation, object detection 등을 배운다.
각 개념들을 이해하기 쉽게 정리해놓은 그림이다.
Segmantic Segmentation
Semantic Segmentation은 이미지의 픽셀들이 어떤 클래스에 속해있는지 예측하는 과정이다.
Classification과 마찬가지로 미리 클래스의 수와 종류를 정해 놓아야 한다. 위에서는 Sky,Cat,Trees,Grass를 정했다.
일종의 Classification 분류 문제인데, 다른 점은 이미지 전체에 카테고리 하나가 아니라 모든 픽셀에 카테고리가 매겨지는 것이다.
하지만 Segmantic Segmentation은 개별 객체가 구분되지 않는 단점이 있다.
위의 그림에 소를 보면 알 수 있다. 2마리 소를 표시하는 것이 아니라 그냥 소라는 labeled된 pixel을 얻는 것이다.
Sliding Window 방법이다. 입력 이미지를 작은 단위로 나눈다. 이 단위 부분이 어떤 분류에 속한는지 classification을 하는 것이다. 일종의 patch를 만들고 전체 영역을 돌면서 한 픽셀이 어느 카테고리에 들어가는지 찾아내는 방법이다. 계산량이 너무 많다는 단점이 있다.
Fully Convolutional 방법이다. 여기서는 FC layer가 없고 Convolution layer만 구성되어 있다. 입력의 Spatial Size(공간 정보)를 유지해야 한다는 특징이 있다. 이것 또한 모든 픽셀에 대해 카테고리 Score를 계산해야 하기 때문에 계산량이 어마어마하다. 여기서도 문제가 나온다. original image의 sapatial size를 계속 유지시켜주는데 여기서 계산량이 너무 커진다.
Downsampling과 upsampling이라는 개념이 나온다.
Downsampling은 Upsampling의 역개념이므로 Upsampling을 자세히 설명하겠다.
Upsampling
이미지의 사이즈를 늘리게 되면 빈 공간이 생겨나는데, 이런 공간을 어떻게 채우는지에 대해 설명한다.
1. Unpooling
2. Max Unpooling
3. Transpose Convolution
NearestNeighbor 처럼 인접한 값을 복사하여 채우거나 Bed of Nails 처럼 단순히 0으로 채우는 방법이 있다.
Max unpolling이란 방법이다. Max pooling 할때 max pooling한 위치를 기억해두고 그 선택된 자리에 값을 넣고 나머지는 0으로 채운다.
이렇게 하는 이유는 Max Pooling을 하면 feature map의 공간 정보를 잃게 된다. 이유는 max 한 값을 가져오기 때문이다. 근데 이 Unpooling 방법을 사용하면 공간정보를 균형 있게 유지할 수 있기 때문에 괜찮은 방법이라고 한다.
Transpose Convolution이라고 불리우는 방법이다. 여기서는 학습을 한다. 연산을 행렬로 생각하고 내적의 과정으로 이해해보자.
일반적인 3*3 Convolution와 stride1, padding 1인 filter 가 동작하는 방법은 위와 같다. input 은 4*4 output은 4*4이다.
위와 같은 방법으로 conv 를 했다. stride를 2로 하면 output은 2*2가 될 것이다.
Transpose convolution은 반대의 경우다. 입력이 2*2이고 출력이 4*4이다. 필터와 입력의 내적을 계산하는 것이 아니라 입력을 가중치라고 생각하고 필터의 값을 곱해서 output에 채워넣는다.
stride가 2이기 때문에 두 칸씩 움직이고 겹치는 부분은 더해준다.
행렬곱 연산을 1차원 예제로 살펴보자. 위의 마지막 x는 z이다.
왼쪽은 stride 1 convolution 이고 오른쪽은 stride 1 transpose conv 이다. 크게 차이가 없어보이는데 stride 값이 커지면 달라진다.
결과의 값이 입력의 값보다 크게 확장되었다.
일반적인 Semantic Segmentation 구조이다. 마지막에 모든 픽셀에 cross-entorpy를 계산하면 네트워크 전체를 end to end로 학습시킬 수 있다고 한다.
Classification + Localization
이미지가 어떤 카테고리에 속하는지 뿐만 아니라 실제 객체가 어디에 위치하는지 Box를 치는 것이다. Object Detection과 다른 점은 localization에서는 객체가 오직 하나 뿐이라고 가정하는 점이다.
보통 image classification을 위한 네트워크는 최종적으로 하나의 FC layer가 존재하지만 이 Task는 2개의 FC layer를
이용하여 Bounding Box와 Classification을 찾는다. 하나는 score를 반환하고 하나는 bounding box의 좌표를 반환하다. 2개의 Loss가 존재하는데 하나는 softmax Loss이다. correct box의 오차를 구하는 Loss는 L2를 사용한다.
이러한 두가지 Loss를 합친 것을 Multitask Loss라고 부른다.
Human Pose Estimation에 적용이 가능하다. 사람의 팔 다리가 어디에 위치하고 있는지 예측한다.
14개의 관절 위치 좌표 값이 나온다. 14개의 점에 대한 regression loss 를 계산하는데 이는 매우 중요하다. cross entropy나 softmax가 아닌 loss를 말한다. regression은 continous하다. 연속적이다. 고정된 개수의 카테고리가 있고 이것을 이용하여 class score를 예측하면 cross entropy나 softmax, svm loss를 사용할 수 있다. output이 연속적인 값이면 regression loss를 사용한다.
Object Detection
Object Detection은 한 장의 이미지에서 다수의 물체를 찾고, 그 물체가 어디 있는지 알아내는 Task 이다.
앞의 classification + localization과 다른 점은 이미지 마다 객체의 수가 달라져서 이를 미리 예측하는 것이 불가능하다는 것이다. 더 어려운 Task이다.
Object Detection은 크게 2-stage, 1-stage Detector로 나눠질 수 있다고 한다.
Classification과 Localization을 단계별로 하거나 한번에 진행하는 차이라고 한다.
R-CNN
Fast R-CNN
Faster R-CNN
크게 3가지 알고리즘에 대해 배운다.
이미지가 주어지면 region proposal을 얻기 위해 region proposal network(RPN)을 수행한다. 여기서 ROI라는 개념이 나온다. region proposal of interest 이다. 관심영역이다. selective search를 통해 2K개의 ROI를 얻는다.
여기서 Selective Search Algorithm을 설명하면 딥러닝을 사용하지 않고 물체가 있는 영역을 찾는데 효과적인 알고리즘이다.
1000개의 region proposal, 즉 객체가 있을법한 후보를 찾아내는 것이다. 있을법한 region proposal을 얻어야 하는데 이걸 CNN의 입력으로 추출하는 것이다.
여기서 나온 ROI 사이즈는 다양하다. 추출된 ROI로 CNN Classification을 수행하려면 FC layer를 통해 동일한 사이즈로 맞춰준다. 이걸 warped image region이라고 한다. input size를 맞춰준다.
CNN에 통과시키고 최종 분류에 SVM을 사용하여 classification 한다.
여기서 Bbox reg가 있다. 일종의 region proposal을 보정하기 위한 regression 과정이다. Selective search의 region proposal이 정확하지 못한 경우를 위해 보정 해준다. BBox 카테고리 예측뿐만 아니라 BBox를 보정해주는 offset 값 4개도 에측한다. 이를 위에서 설명한 Multi-task loss로 두고 한번에 학습한다.
supervise 학습이다. Linear Regression을 통해 두개의 Loss가 최소가 되는 방향으로 training 시킨다.
R-CNN 의 Problem 이다.
1. 계산 비용이 많이 든다.
2. 용량(Memory)가 많이 든다.
3. 학습 과정이 느리다. (84h)
4. Test Time이 느리다.
5. 학습이 되지 않는 Region Proposal이 존재한다.
이러한 문제를 해결하기 위해 Fast R-CNN이 나온다.
'Study > CS231n' 카테고리의 다른 글
[CS231n] 10강 Recurrent Neural Networks (0) 2020.12.12 [CS231n] 9강 CNN Architectures (0) 2020.12.05 [CS231n] 8강 Deep Learning Software (0) 2020.11.27 [CS231n] 7강 Training Neural Networks II (0) 2020.11.21 [CS231n] 6강 Training Neural Networks I (0) 2020.11.14