[CS231n] 11. Detection and Segmentation
📗강의노트/CS231n

[CS231n] 11. Detection and Segmentation

728x90
반응형
Segmentation, Localization, Detection 




배울 내용이 다 들어가있는 사진이다. 




첫 번째는 Semantic Segmentation이다. 입력은 이미지고 출력으로는 이미지의 모든 픽셀에 카테고리를 정한다. 

픽셀로 카테고리를 정해서 암소 두마리를 구분할 수가 없다.  이것이 Semantic Segmentation의 단점이다. 이후에 Instance Segmentation이 이를 해결할 수 있다. 




입력 이미지를 아주 작은 단위로 쪼갠다. 해당 영역이 어떤 카테고리에 속하는지 정하는 것이다. 비용이 매우 크다. 다 쪼개고 모든 영역을 forward / backward해야 하기 때문이다. 따라서 개별적으로 적용하는 것은 매우 좋지않다. 




Fully convolutional이 더 낫다. 이미지 영역을 나누고 독립적으로 분류하는 방법이 아니다. 

출력의 모든 픽셀에 크로스엔트로피를 적용한다. 

입력 이미지의 spatial size를 계속 유지시켜야 한다. 그래서 비용이 매우 크다. 




Max Pooling, Stride convolution 등으로 특징맵을 Downsampling 해준다. 

Image classification에서는 FC-Layer가 있었지만, 여기서는 Spatial Resolution을 다시 키운다. 그래서 다시 입력 이미지의 해상도와 같아진다. 

Upsampling의 전략중 하나는 unpooling이다. 




Nearest neighbor unpooling은 해당 원소를 인풋사이즈만큼 늘려서 붙이는 것이고, 

Bed of nails 는 unspooling region에만 값을 복사하고 다른 곳은 0으로 채운다. 

Max unpooling도 있다. 




대칭적으로 연관짓는다. Max Pooling시 사용했던 요소들을 잘 기억하고 있어야 한다. 

Semantic segmentation 에서는 픽셀의 정보를 잘 알고 있어야하는데, Max Pooling을 하면 특징맵의 비균진성이 발생한다. pooling이 어디서 왔는지 모른다. 공간정보를 잃었기 때문이다. 

그래서 unpool시 max pooling에서 온 자리 그대로 입력해준다. 




Tanspose Convolution 은 학습가능한 방법이다. 




위처럼 반복하는 것이 일반적인 Conv이다.




Stride convolution은 두 픽셀씩 움직인다. 출력에서 한 픽셀 씩 움직이려면 입력에서는 두 픽셀 씩 움직여야한다. 




Tanspose Convolution는 반대의 경우이다. 입력과 출력의 사이즈가 반대의 경우이다. 




여기서는 내적을 하지 않고, 입력 특징맵에서 값을 하나 선택한다. 선택한 스칼라 값과 필터(3x3)을 곱한다. 그리고 출력의 3x3 영역에 그 값을 넣는다. 

필터와 입력의 내적을 계산하는 것이 아니라 입력 값이 필터에 곱해지는 가중치의 역할을 한다. 

출력 = 필터 X 입력(가중치) 




한 스칼라 움직이면 output은 두 번 움직인다.  겹치는 경우는 값을 더해준다. 




Convolutional 필터인 vector x는 3개의 원소를 가지고 있다. 입력 vector는 a,b,c,d 총  4개를 가지고 있다. 

앞의 행렬을 transpose 시키고 계산한 결과가 오른쪽이다. 




왼쪽은 stride = 2인 conv를 행렬곱 연산으로 표현한 것이다.  




Classification + localization 이다. 

객체의 카테고리 뿐만 아니라, 어디에 있는지를 알고 싶을 수 있다. 

localization은 이미지 내에서 내가 관심있는 객체가 오직 하나 뿐이라고 가정한다. 




FC-Layer가 하나 더 있는데 이는 Width / Height / x / y 로 bounding box의 위치를 나타낸다. 

두 개의 출력값을 반환하는데, 하나는 class score, 나머지는 bounding box의 좌표이다. 

이 네트워크를 학습할 때는 Loss가 2개 이다. 




Human pose estimation 문제도 있다. 출력이 사람 관절의 위치이다. 




14개의 아웃풋을 낸다. 




Object Detection이다. 

고정된 카테고리가 있다. 이미지가 주어지면 Bbox로 위치를 예측한다. Classification + localization와는 다르다. 왜냐하면 예측해야하는 Bbox의 수가 입력 이미지에 따라 달라지기 때문이다. 




색다를 패러다임이 필요하다. 




배경도 추가하여 예측한다. 하지만 어떻게 영역을 추출할지 모른다. 




R-CNN의 원리이다. 
여전히 계산비용이 높다. Region Proposals 각각이 독립적을 CNN입력으로 들어간다. 






Fast R-CNN는 입력 이미지에서 부터 ROI(Regions of interest)를 가져오지 않는다. 



  






Max pooling과 비슷하다. 





위 만큼 속도차이가 난다. 





Faster R-CNN은 region proposal을 계산하는 과정이 병목이라는 것을 해결한다. 

RPN(Resional Proposal Network)에는 두가지 Losses가 있다. 하나는 이곳에 객체가 있는지 없는지를 예측하고, 나머지 Loss는 예측한 Bbox에 관한 것이다. 




YOLO = You Oney Look Once
SSD = Single Shot Detector




Dense captioning 



Instance segmentation은 모든 것들의 합이다. 입력 이미지가 주어지면 객체 별로 객체의 위치를 알아내야 한다. 객체별 segmentation mask를 예측해야한다. ( 각 픽셀 )






MASK R-CNN은 faster R-CNN과 유사하다. Classification, regression하지 않고 각 Bbox마다 Segmentation mask를 예측하도록 한다. 




















728x90
반응형