네이버 부스트캠프 학습 정리/3주차

[DL basic] Computer Vision Applications

AI쟁이J 2023. 3. 25. 18:57

Semantic Segmentation(의미적 분할)

객체 인식의 영역에서 이미지 내 특정 역역에 대한 분류 결과를 바운딩 박스로 보여주었다면, 의미적 분할에서는 이미지 내 모든 픽셀에 대한 분류 결과를 보여준다. 즉, 어떤 픽셀이 어떤 객체에 속한 픽셀인지를 모두 포함한다.

이런 세세한 분류가 필요한 영역으로는 특히 자율주행 분야에서 사용하고 있다.

 

Fully Convolutional Network

여러 모델에서 마지막에 거치는 flatten model. 이 경우 parameters의 수가 급격하게 증가하며 Million 단위로 증가하게 된다. 이미지의 분류를 위해 하나의 결과값을 뽑기 위한 fully-connected를 통한 출력층이다. 하지만 Sementic Segmentation에서는 fc layer를 사용하는 경우 가지는 한계점이 있다.

Convolution 연산과 달리 fully-connected 연산을 하는 경우 위치정보가 사라지며 이는

위치의 정보를 저장해야하는 semantic segmentation에서는 큰 한계점이다. 따라서 이를 극복하기 위해 출력층에서도 Conv-layer를 사용하는 것이 Fully Convolutional network의 목적이다.

해당 방법을 통해 원본의 위치 정보를 가진 Conv-layer를 통해 semantic segmentation을 수행할 수 있다. 하지만 픽셀 단위 예측에 비해 이 feature map의 크기는 너무 크기 떄문에 원본 이미지 크기에 가까운 dense map으로 변환할 필요가 있다. 이 경우 사용하는 방법 중 Deconvolution이 있다.

 

Deconvolution (conv transpose)

feature map의 크기를 줄이는 convolution 연산과 반대로, feature map의 크기를 증가시키는 방법으로 동작한다.

1. 각각의 픽셀 주위에 zero-padding을 추가한다.

2. 이 padding을 포함한 convolution 연산을 진행한다. 

따라서 아래의 파란색 픽셀에서 위의 청록색 feature map이 연산된다. 하지만 이렇게 진행한 deconvolution은 엄밀한 convolution의 역 연산은 아니다. zero-padding이 추가되었고, 기존의 값이 어떻게 이루어졌는지 판단하는 것은 불가능하기 때문이다.

예를 들어 2 + 8 = 10이다. 하지만 10이라는 값으로 2,8을 정확하게 예측할순 없다. 10은 1 + 9, 3 + 7, 4 + 6 등의 여러 방법으로 생성될 수 있기 때문이다.

 

 

Detection

R-CNN

설정한 Region을 CNN의 input값으로 활용해 Object Detection을 진행하는 신경망.

물체를 식별하는 Classification 문제와 이 위치를 찾는 Localization문제를 합한 문제인 Object Detection에서 R-CNN은 이 문제를 순차적으로 진행하는 2-stage Detector 방법이다.

 

SPPNet (Spatial Pyramid Pooling Network)

기존의 CNN에서 고정 크기의 입력값을 맞추기 위해 crop, warp등을 활용한다. 따라서 crop된 부분만 입력값으로 들어가기에 전체 이미지의 정보에서 손실이 발생하거나 warp 과정에서 이미지에 변형이 일어난다. 그리고 평균적으로 R-CNN에서는 crop/warp 과정이 2,000번 이상 진행되기에 CNN이 2,000번 이상 돌아가게 된다.

이를 개선한 SPPNet에서는 "Spatial Ptramid Pooling"을 진행해 이미지의 크기/스케일에 관계없이 고정 길이의 표현을 생성한다. 

위 : 기존의 CNN 아래 : SPPNet

SPP의 실행

SPP에서는 먼저 이미지를 CNN에 통과시켜 feature map을 추출한다. 그리고 미리 정해진 피라미드 영역으로 feature map을 나눈다. 4x4, 2x2, 1x1 세 가지 피라미드가 존재하고, max pooling을 적용하여 각 피라미드 크기에 맞게 max값을 뽑아낸다. 각 피라미드 별로 뽑아낸 max값들을 쭉 이어붙여 고정된 크기 vector를 만들고 이 벡터는 FC layer의 input으로 들어간다. 따라서 2,000개의 region proposal을 만든 후 이를 SPPNet을 통해 고정된 vector를 얻는 연산 1번으로 줄어든다.

 

Fast R-CNN

이전 R-CNN의 한계

1. ROI (Region of Interest) 마다 CNN을 연산함 (위에서 말한 것처럼 2,000번 이상)

2. multi-stage pipelines으로서 모델을 한번에 학습하지 못함

이를 극복한 Fast R-CNN에서는

1. ROI pooling

2. 하나의 모델에서 모두 학습

을 사용해 해당 한계점을 개선했다. 

수행과정

1-1. R-CNN에서와 마찬가지로 Selective Search를 통해 RoI를 찾는다.

1-2. 전체 이미지를 CNN에 통과시켜 feature map을 추출한다.

2. Selective Search로 찾았었던 RoI를 feature map크기에 맞춰서 projection시킨다.

3. projection시킨 RoI에 대해 RoI Pooling을 진행하여 고정된 크기의 feature vector를 얻는다.

4. feature vector는 FC layer를 통과한 뒤, 구 브랜치로 나뉘게 된다.

5-1. 하나는 softmax를 통과하여 RoI에 대해 object classification을 한다.

5-2. bounding box regression을 통해 selective search로 찾은 box의 위치를 조정한다. 

 

Region Proposal Network

RPN의 input 값은 이전 CNN의 feature map이다. Region proposal 생성을 위해 n x n window를 만든다.

구성요소

1. 앵커 : 미리 정한 바운딩의 크기

2. Delta : Anchor의 크기와 위치를 조정하기 위한 값 (가중치와 비슷)

3. Probability : Anchor 내부에 객체가 존재할 확률

 

최종 FC layer에서 parameters의 수는 9 * (4 + 2) 개이다.

9 : (128, 256, 512) 세 개의 각 다른 region sizes 와 3개의 비율 (1:1, 1:2, 2:1)

4 : 4개의 바운딩 박스 크기 조절 parameters

2 : box classification (사용할 지 아닐지)

 

YOLO

최초의 1-stage Detector 방법으로 물체를 식별하는 Classification 문제와 이 위치를 찾는 Localization문제를 합한 문제를 동시에 수행하기 때문에 (You Only Look Once)라는 이름이 붙었다. 특징으로는

1. 이미지 전체를 한 번만 본다.
2. CNN처럼 이미지를 여러장으로 분할해 해석하지 않는다.

3. 통합된 모델을 사용해 간단하다.

4. 기존의 모델보다 빠른 성능으로 실시간 객체 검출이 가능하다.

등의 특징이 있다.

YOLO 모델에 새로운 사진이 입력되면 (1)의 과정처럼 그리드 영역으로 이 이미지를 나눈다. 그리고 네트워크 연산을 통해 (2), (3)의 결과를 얻고 경계 박스의 개수를 예측 후, 신뢰점수를 계산해 이 신뢰점수가 높은 위치에 객체 카테고리를 선정하는 방식으로 이루어진다.

 

 

참고 : https://medium.com/@msmapark2/fcn-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-fully-convolutional-networks-for-semantic-segmentation-81f016d76204

 

FCN 논문 리뷰 — Fully Convolutional Networks for Semantic Segmentation

딥러닝 기반 OCR 스터디 — FCN 논문 리뷰

medium.com

https://velog.io/@suminwooo/RPNRegion-Proposal-Network-%EC%A0%95%EB%A6%AC

 

RPN(Region Proposal Network) 정리

 

velog.io

https://velog.io/@whiteamericano/R-CNN-%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

 

R-CNN 을 알아보자

딥러닝(CNN)을 Object Detection 분야에 최초로 적용시킨 모델이며 이전의 Object Detection 모델에서 성능을 상당히 향상시키고, 이후 Fast R-CNN, Faster R-CNN, Mask R-CNN을 나오게 한 의미있는 모델인 R-CNN에 대

velog.io