본문 바로가기
Programming/Python

[CNN] Computer Vision Applications (Semantic Segmentation and Detection)

출처: AI 엔지니어 기초 다지기 : 네이버 부스트캠프 AI Tech 준비과정

 

 

Semantic Segmentation

dense classficaton이라고 불리기도 한다.

이미지의 모든 픽셀이 각가 어느 label에 속하는지 찾는 것이다.

 

 

대표적 예시)

자율주행 문제: 앞의 상황이 도로, 인도, 사람, 자동차, 신호등 등을 구분하기

 

 

Remind)

an Ordinary CNN 구조

 

 

 

그렇다면 Semantic Segmentation에서 쓰는 CNN구조는?

Fully Convolutional Network(FCN): Convolutionalization을 사용한 CNN 구조

Convolutionalization: Dense layer를 없애는 과정 (큰 장점이 dense layer를 없애는 것)

 

 

사실 두 방법에서 파라미터 개수 차이가 나지는 않는다.

 

 

 

 

그러면 왜 사용하는걸까?

해당 이미지에 고양이가 어디있는지 heatmap 작동하기

Input image size에 상관없이 작동 可

a classification net can produce a heat map.

 

 

 

 

근데 이 과정에서 output dimension이 subsampling으로 인해 줄어드는 문제점이 있다.

-> 줄어든 output dimension 늘리는 방법 필요 (connect the coarse(드문드문 있는) output to the dense pixels )

 

 

 

Deconvolution(Conv Transpose):  Convolution의 역 연산 같은 개념(파라미터 숫자, 크기 계산 이해 목적)

cf)  엄밀하게 따지면 Convolution의 역 연산이라는 것은 존재하지 않는다. Convolution 자체가 여러개의 부분을 합쳐서 하나로 만든 것인데 이걸 다시 나누는 경우의 수는 매우 많기 때문이다. 2+8 = 10을 만들었다고해서 10을 만들때 무슨 숫자를 더해서 만들었는지 다시 유추하는 것은 불가능하다.

 

 

이 과정을 거친 FCN의 결과이다.

 

 

 

 

 

 

 

 

 

 


Detection

픽셀로 찾는 것이 아닌 bounding box찾는 문제이다.

 

 

 

R-CNN: Detection을 수행하기에 가장 간단한(?) 방법 (Brute Force 완전탐색스러워서 시간도 오래걸림)

2번에서 patch를 뽑아내는 방법으로 사용한 것은 Selective search이다.

3번에서 쓴 것은 AlexNet이다. (일단 CNN하려면 크기맞춰야하니 크기맞추기 작업하는 것)

4번에서 classfiy를 위해 사용한 것은 linear SVMs이다.

 

R-CNN의 결과물. 엄청 정확한 것은 아니다.

 

근데 꼭 이렇게 1개 이미지 분석을 위해 CNN을 2000번 돌려야할까? 

SPPNet: CNN은 1번만 돌려도 된다.

 

 

 

 

Fast R-CNN: SPPNet과 비슷하지만 뒤에 ROi feature vector를 통해서 output을 만든다는게 큰 차이점

bounding boxes 세트를 input에서 추출 (red box)

-> Convolutional feature map 생성 (yellow box)

-> 각 region마다 ROI pooling으로부터 get a fixed length feature (green box)

-> Two outputs: class and bounding-box regressor (blue box)

 

 

 

 

 

 

 

Faster R-CNN: Fast R-CNN + Region Proposal Network(RPN)

 

Region Proposal Network(RPN): 이미지 특정영역(patch)이 bounding box로서 의미가 있을지(Region Proposal, 물체유무여부) 판단

Anchor boxes: 미리 정해놓은 bounding box 크기

 

 

RPN은 FCN도 사용한다.

 

성능이 준수한듯 보인다.

 

 

 

 

 

 

YOLO(v1): 매우 빠른 object detection algorithm. multiple bounding boxes와 class prbabilities 를 동시 추정!

최근엔 v5까지 나왔다고 함

빠른 이유: 그냥 이미지에서 바로 추출하기에 빠름. 즉, bounding box sampling(RPN) 과정이 없음

 

 

 

 

작동원리)

1) 이미지가 주어지면, YOLO는 SxS grid로 이미지를 나눈다.

 

2) 각 grid cell은 B개(논문의 경우 5개)의 bounding boxes를 예측한다. 

이때 각 찾은 box의 x, y, width, hight(사이즈 크기)와 confidence of objectness(유용성 여부)를 추정한다.

이와 동시에 각 cell들은 해당 cell이 어느 class인지에 대한 확률을 계산한다.(class probability map)

 

3) it becomes a tensor with S * S ( B * 5 + C) size.

S * S: Number of cells of the grid

B * 5: B bounding boxes with offsets(x,y,w,h) and confidence

C: Number of classes

 

 

 

YOLO(V1)의 결과

 

 

 

 

 

 

 

 

 

728x90
반응형