본문 바로가기
데이터 과학 관련 스터디/cs231n

cs231n 11강 Detection and Segmentation요약

by inhovation97 2020. 12. 26.

벌써 11강입니다. 

오늘은 컴퓨터 비전중에서도 몇가지 task로 단순히 image classification이 아니라 아이디어가 결합된 모델들을 봅니다.

 

우선 강의하면서 계속 본 기본적인 이미지 분류를 보면,

이미지 데이터를 입력 ->  네트웍을 거치면서 feature vector 반환 -> 1000개의 카테고리별 스코어 출력 이었습니다.

 

위 네가지 task의 모델들을 살펴봅니다. 

Segmentation, localization, object detection에 대해서 공부합니다.

 

Sementic Segmentation을 살펴봅시다.

객체가 아닌 픽셀을 분류하는 task입니다.

 

위 슬라이드 그대로 이미지의 모든 픽셀을 카테고리별로 분류하게 됩니다.

cow는 픽셀 덩어리로 분류해버립니다. 

2마리인지도 모르고 또 아마 이렇게하면 분류도 잘 안될 겁니다.

해당 카테고리의 고유 형태가 아니니까요.

 

슬라이딩 윈도우는 이미지를 훑어가는 것일 겁니다.

이미지를 쪼개서 보는 것이죠.

근데 슬라이딩 윈도우 방식은 그렇게 이미지를 전부 쪼갠 것들을 슬라이드처럼 전부 forward, backward 과정을 거치면 비용, 시간이 너무 많이 듭니다.

 

그래서 FC layer를 제외한 Fully Convolutional 네트웍을 이용합니다.

어떤 식으로 진행하는지 봅시다.

 

슬라이드를 보면 차원이 계속 똑같습니다. 

3x3 zero 패딩으로 정보 손실을 막고, 스코어 값을 (C,H,W)를 반환합니다.

이미지 픽셀들을 분류한 카테고리의 개수입니다.

모든 픽셀들을 분류해서 loss를 계산한 뒤, backward로 update해주는 방식입니다.

 

모든 픽셀들에 대한 loss를 계산하기 위해서는 train 이미지 픽셀 전부가 labeling이 되어 있어야 합니다.

 

하지만 이것도 이미지 원본의 size를 계속 유지시켜서 모든 픽셀에 대해서 분류하다보니 연산량이 expensive한 문제가 생깁니다.

 

그래서 이렇게 down sampling을 해준 뒤, upsamping을 해준다고 합니다.

우리는 앞서서 풀링이나 stride를 조절한 필터를 돌려 size를 공간정보를 압축(?)시키는 down sampling을 알지만 upsampling은 처음 듣습니다.

 

upsampling이 뭔지 살펴봅시다.

 

강의 2강에서 배운 Nearest Neighbor를 여기서 써먹네요.

이렇게 unpooling으로 업샘플링을 해주는 방식이 있습니다.

 

Max Unpooling이 있습니다.

픽셀의 max값 위치를 기억했다가 업샘플링 해주는 것입니다.

Max Unpooling 방식이 좀 더 합리적으로 보이는데 실제로 더 좋다고 합니다.

 

가중치가 있는 필터를 stride 단위로 옮겨가며 합성곱을 해주었던 convolution 방식이 있었습니다.

이걸 transpose해주어 upsmapling 하는 방식을 볼 겁니다.

이 방식이 Learnable이라고 하네요.

네트워크가 학습해서 합성곱을 한다고 합니다.

 

필터에 가중치는 여전히 있습니다.

zero padding을 해준 것이고, 스트라이드가 2일 때는 저렇게 값을 배정한다고 합니다.

겹치는 부분은 그냥 더해준다고합니다.

 

이해를 돕기위한 슬라이드입니다.

크게 어려운 부분이 없죠.

 

x, y, z이므로 혼동이 없으시길 바랍니다.

transpose 했으므로 행렬이 오른쪽으로 바뀌는 것이 이해가 가시죠?

 

이거는 stride가 2인 경우인데, 이를 일반적인 합성곱의 transpose라고 하지 않는다는 것 같아요.

그냥 넘어갔습니다 ㅋㅋ...

 

Semantic Segmentaion은 이렇게 결과를 output하게 됩니다.

 

이번에는 clssfication + localization을 살펴봅니다.

얘는 이미지를 분류하는 것은 물론이고, 객체의 위치를 박스치는 task입니다.

object detection과의 차이가 있는데 무조건 single object를 가정합니다.

 

 

이미 이미지 넷으로 학습된 아키텍쳐를 가져옵니다. 

transfer learning이죠.

 

그리고나서 multi task로 두개의 task를 진행합니다.

우선 원래대로 class score를 반환하고, 동시에 box coordinate를 반환합니다.

bounding box의 위치입니다. 두 개는 서로 다른 loss를 이용하죠.

더해서 최종 loss가 산출되고, 그렇게 backward 과정으로 갑니다.

 

얘도 supervised learning이라서 bounding box ground truth가 있는 이미지로 학습한다고 합니다.

 

이번에는 object detection을 봅니다.

 

localization과는 다르게 여러가지의 다양한 카테고리를 분류하고 bbox를 표시합니다.

좀 더 어려운 과정이죠.

 

bounding box를 산출하는 것은 분류가 아니라 regression입니다. 

좌표를 이용해서 아마 함수를 이용해서? regression으로 산출을 하는데, object detection은 여러 카테고리의 여러 객체들의 bbox를 예측해야합니다. 이렇게나 복잡하죠.

 

그래서 localization과는 다른 접근 방식이 필요합니다.

 

region proposal 방식입니다.

1000개의 region 후보군에서 객체가 있을 만한 bbox를 찾아내는 겁니다.

이건 딥러닝이 아니라 selective search로 객체가 있을 region proposals을 찾는 것이라고 합니다.

 

region proposals은 주변 픽셀 간의 유사도를 기준으로 Segmentation을 만들고, 이를 기준으로 물체가 있을법한 박스를 추론합니다.

 

region proposals이 나중에는 전부 그냥 딥러닝 과정으로 수행하고 R-CNN은 지금은 잘 안쓰인다고 합니다.

object detection의 시초 모델인 것 같아요.

그 아이디어가 바로 R-CNN이고, 이미지가 입력되면, region propsal 네트웍을 수행합니다.

RoI(Regions of interest)를 selective search로 2000개를 얻어내는데, 이는 전부 size가 다르기 때문에 슬라이드처럼 size를 통일시킨 뒤, CNN에 통과 시키고 아까처럼 bbox regression(region proposal을 보정시켜줍니다.) & classification을 해주는 것이죠. 독특한건 clssification을 SVM으로 해줍니다.

 

그 이유는 그냥 단순히 조금 더 효과가 좋다고합니다.

제가 참고했던 블로그를 포스팅 끝에 공유해드리겠습니다.

 

하지만 R-CNN은 너무 계산비용이 많고 느리다는 것이 단점입니다.

 

그래서 Fast R-CNN이 나옵니다.

ROI마다 각각 CNN을 수행하지 않고, 우선 input image를 CNN에 넣고 거기서 나온 feature map에서 ROI를 찾습니다.

 

ROI를 똑같이 크기를 통일시키고, FC에 넣습니다.

 

이제 clsssification score와 linear regression을 산출합니다.

 

최종 loss는 둘의 합인데 여기서부터 다시 backward를 해주죠.

 

Fast R-CNN이 훨씬 빠르지만, 2000개 ROI들을 selective search 하는 데에 2초를 소요합니다. 그 구간이 비효율적인 거죠. 그래서 그 병목구간을 해결하려합니다.

 

그래서 Region proposal network을 추가합니다.

4개의 loss를 뽑아내서 동시에 train한다고하는데

 

1. RPN에서 객체의 유무를 판단합니다.

2. RPN에서 box의 좌표를 regress합니다.

3. 객체의 최종 분류 스코어를 반환합니다.

4. 최종 box 좌표를 반환합니다.

multi task로 수행합니다.

 

병목을 해결해서 굉장히 빨라졌다고 합니다.

R-CNN 모델들을 regrion-based method라고 하네요.

 

이제 region-based 방식이 아닌 YOLO(You Only Look Once)와 SSD(Single Shot Detection)가 있습니다.

 

YOLO는 네트워크의 최종 출력단에서 경계박스를 위치 찾기와 클래스 분류가 동시에 이뤄지는데.

하나의 네트워크가 한번에 특징도 추출하고, 경계박스도 만들고, 클래스도 분류합니다.

그러므로 간단하고 빠르죠. 유명한 알고리즘입니다.

 

강의에서는 깊게 설명안하는데 이것도 잘 설명되어있는 블로그를 참고로 올립니다.

이 당시에는 region based 방식이 더 유명했나봅니다.

 

마지막으로 Instance Segmentation입니다.

 

instance segmentaion은 semantic segmentation과 object detection을 합친거라고합니다.

Fast R-CNN과 방식이 유사하다는데 얘는 설명이 많이 부족하네요.

ROI Align 후에 스코어와 box 조정을 하고, 뒤에는 segmentation mask를 예측합니다.

emantic segmentation과 object detection을 합친거이기 때문에 bbox에서 범위를 좁혀서 segmentation을 하는 방식인것 같습니다.

 

 

*강의자료

**R-CNN 모델

***Yolo모델

cs231n.stanford.edu/2017/syllabus.html

 

Syllabus | CS 231N

Lecture 8 Thursday April 27 Deep Learning Software Caffe, Torch, Theano, TensorFlow, Keras, PyTorch, etc [slides] [video]

cs231n.stanford.edu

yeomko.tistory.com/13

 

갈아먹는 Object Detection [1] R-CNN

들어가며 2020년을 맞이하여 가장 먼저 Object Detection을 공부해보기로 결심하여, 논문들을 차례로 리뷰해보려 합니다. (열정 충만!) 그 첫 번째 논문으로 딥 러닝 기반의 Object Detection의 시작을 연 R-

yeomko.tistory.com

blog.naver.com/PostView.nhn?blogId=sogangori&logNo=220993971883&parentCategoryNo=6&categoryNo=&viewDate=&isShowPopularPosts=true&from=search

 

YOLO, Object Detection Network

You Only Look Once : Unified, Real-Time Object Detection Joseph Redmon - University of ...

blog.naver.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글