이번 강의에서는 Classification이 아닌 Computer Vision task에 대해서 배웁니다.
Semantic Segmentation에 대해서 알아봅니다. Image에 대한 객체를 분류하는 것이 아닌 Pixel을 분류하는 task입니다. Image내의 모든 Pixel을 카테고리별로 분류를 수행합니다. Semantic Segmentation의 특징은 instance를 구별하지 않는다는 것입니다. 위 슬라이드를 예제로 볼 때, 2마리의 Cow를 따로따로 보지 않고, Image 전체 Pixel에 대해 Cow로 Label된 Pixel들을 하나의 객체로 덩어리 지어 분류합니다.
Sliding Window는 Semantic Segmentation을 위해 Image를 보는 접근 방법을 말합니다. Input Image에 대해 Image 전체를 한번에 보는 것이 아닌 Image를 작게 나누어 이미지의 일부분만 보면서 분류 작업을 수행합니다. 이렇게 부분적인 Image에 대해 분류 작업을 수행하고, 이를 전체 Image에 대해 적용합니다. 하지만 이러한 방식은 높은 계산 Cost가 들어 좋지 않은 방법이라고 합니다.
다음으로 소개할 접근 방법은 Fully Convolutional Network입니다. 이는 Sliding window방식과는 다르게 Input Image 전체를 보고 pixel를 분류하는데, classification score를 계산하기 위해 사용되는 FC Layer를 제거한 Network를 사용합니다. 3x3 zero padding을 이용한 convolution layer를 통해 공간적 크기를 유지하면서, Image의 모든 Pixel에 대한 분류를 수행하고, 최종적으로 CxHxW size의 Tensor를 출력합니다. 여기서 C는 카테고리 갯수를 의미하기에 결국 이 Tensor는 모든 Pixel에 대한 카테고리 분류 점수를 의미하게 됩니다. 이러한 작업들은 Convolution Layer를 쌓아서 한번에 계산할 수 있고, 역전파를 통한 training도 가능합니다. 하지만, Input Image의 크기를 유지하는데, 많은 계산 cost가 들어가는 단점이 있습니다.
위와같은 단점을 극복하기 위해 down-sampling과 up-sampling을 사용하여 계산 cost를 낮춰줍니다. down-sampling은 Feature Map의 크기를 줄여주는 기능을 하고, up-sampling은 Feature map의 크기를 늘려주는 기능을 합니다. 간단하게 생각하면, down-sampling을 통해 크기가 작은 Feature Map에 대한 계산을 수행하고, 이를 다시 up-sampling하여 최종적으로 Input Image와 같은 크기의 출력값을 내보내어 계산 cost를 줄인다는 방법입니다. down-sampling 방법은 이전 Convolution Network강의에서 stride 값을 조정하거나 Max pooling과 같은 Pooling Layer를 통해 수행할 수 있다고 배웠습니다. 이번에는 upsampling에 대해서 알아보겠습니다.
첫번째로 소개할 upsampling 방법은 Max Unpooling입니다. pixel의 Max값의 위치를 기억하고 있다가 upsampling시에 대응되는 해당 위치에 값을 지정해주는 방식입니다.
두번째로 소개할 upsampling 방법은 Transpose Convolution입니다. Weight가 있는 filter를 설정한 stride 단위로 옮겨가면서 Convolution연산을 수행하여 upsampling하는 방식입니다. weight가 있는 filter를 사용하기에 Learnable한 방식이고, 학습을 통해 convolution연산을 수행하게 됩니다.
이렇게 Semantic Segmentation은 down-sampling과 up-sampling을 이용하고, Fc Layer를 제거하여 Convolutional Layer로만 이루어진 Fully Convolutional Network를 통해 최종적으로 Input Image의 모든 pixel에 대한 카테고리 분류를 수행하게 됩니다.
다음으로 알아볼 task는 Classification + Localization입니다. 이는 이미지 내의 Object를 분류하는 작업과 해당 Object의위치를 찾아 box를 쳐주는 task입니다. Classification + Localization은 Single Object에 대한 task를 수행하기에 이후에 배울 Object Detection과 차이점이 있습니다.
Classification + Localization은 ImageNet으로 pre-trained된 모델을 불러와 Input Image에 대한 4096x1 크기의 Feature vector를 추출합니다. 그리고 Multi-task Loss를 사용하여 2개의 task작업에 대한 train을 진행합니다. Multi-task Loss는 Input Image의 class를 예측하는 Classification Loss과 해당 Object의 위치를 예측하는 Box Coordinate Loss를 더하는 것으로 구성되어 있으며, 최종적으로 두개를 더하여 Loss와 역전파를 통한 training을 진행합니다.
다음으로 알아볼 task는 Object Detection입니다. 이는 앞서 배운 Localization과 다르게 Multiple Object에 대한 Classification과 Localization을 수행합니다.
Input Image에서 Multiple Object의 위치를 찾는 작업은 regression작업에 해당하고, BoundingBox regression을 위해 Region Proposal 방식을 사용합니다. 이는 Object가 있을법한 RoI(Region of Interest)를 찾는 과정으로 Selective Search 알고리즘을 이용하여 Input Image에서 Object가 있을만한 RoI 1000개를 추출하는 역할을 합니다.
Object Detection의 초기 모델인 R-CNN입니다. 이는 위에서 배운 Region Proposal 방식을 사용하여 Object가 있을법한 RoI를 찾아내고, 이를 CNN모델(당시 SOTA모델인 AlexNet을 사용)에 넣기 위해 Input size를 맞춰주는 Crop and Resize 작업을 수행합니다. 이후 CNN을 거쳐서 나온 Feature Vector를 이용하여 BoundingBox Regression작업과 Classification 작업을 수행합니다. 하지만, R-CNN은 Selective Search를 통해 추출한 수천개의 RoI를 모두 CNN에 넣기에 시간이 오래 걸린다는 단점과 Crop and Resize 작업에서의 정보 손실, CNN, BoundingBox Regression, Classification 작업이 따로 학습되어 시간이 오래걸린다는 단점이 존재합니다.
Fast R-CNN
R-CNN의 단점을 극복한 Fast R-CNN입니다. 이는 Input Image에서 RoI를 찾는 것이 아닌 CNN을 통해 추출된 Feature Map에서 RoI를 추출합니다. 이는 R-CNN이 Input Image에서 추출한 수천개의 RoI를 전부 CNN에 넣는 작업을 Input Image를 CNN에 바로 넣어 1번의 작업 수행으로 끝냄으로써 속도면에서의 향상을 가져왔습니다. Feature Map에서 추출된 RoI들은 고정된 크기로 맞춰주기 위해 RoI Pooling작업을 거쳐서 Fc Layer로 들어가 BoundingBox Regression, Classification 작업을 수행합니다.
위 슬라이드를 보면 확인 할 수 있듯이, Fast R-CNN이 R-CNN보다 약 9배정도 빨라진 것을 알 수 있지만, RoI를 추출하는 Selective Search 알고리즘이 CPU에서 수행되기에 병목현상이 발생하여 여전히 속도가 느리다는 단점이 존재하였습니다.
Fast R-CNN의 단점을 극복하기 위해 Faster R-CNN이 등장하였습니다. 이는 기존의 RoI를 추출하는 Selective Search 알고리즘을 사용하지 않고, RPN(Region Proposal Network)를 사용하여 속도 향상을 이루어 냈습니다. RPN은 Object가 있을법한 RoI를 추출하며, BoundingBox의 좌표도 regression합니다.
이렇게 추가된 RPN을 통해 GPU를 통한 RoI 추출이 가능하게 됐고, 이는 곧 속도의 향상과 RoI 추출 또한 end-to-end로 학습이 가능하게 되어 RoI 추출의 정확도 향상이라는 결과를 가져왔습니다. 이처럼 Input Image에 대해 Object가 있을법한 RoI를 추출하고, 추출한 RoI에 대해 BoundingBox Regression과 Classification작업을 수행하는 방식을 2-Stage Detector라고 합니다. 이제는 이를 한번에 수행하는 1-Stage Detector에 대해서 알아보겠습니다.
YOLO와 SSD는 하나의 Network가 BoundingBox Regression도 수행하고, Classification도 수행하는 1-Stage Detector입니다. 그래서 2-Stage Detector보다 빠르다는 장점이 있다고 합니다.
'Lecture > CS231n' 카테고리의 다른 글
CS231n 16강 (0) | 2024.02.23 |
---|---|
CS231n 13강 (0) | 2024.02.07 |
CS231n 10강 (0) | 2024.02.01 |
CS231n 9강 (0) | 2024.02.01 |
CS231n 8강 (0) | 2024.02.01 |
댓글