Computer Vision Applications

Computer Vision에서 CNN을 이용한 분야


Semantic segmentation

image.png


1️⃣ Fully Convolutional Network

아래 사진은 기본적인 CNN구조이다.

image.png

위 처럼 dense layer을 없애고 바로 label로 갈 수 있게 만든 것이 아래와 같은 그림이다.

image.png

이것을 fully convolutional netwok라고 한다. 가장 큰 장점은 dense layer가 없어진 것이다. 결과적으로 보면 위에 두 모델은 입력과 출력이 같다. parameter도 정확히 일치한다.


image.png

이 과정을 convolutionalization이라 부른다.

✅ 왜 이렇게 할까??

입력이 28x28, 32x32로 만든어진 네트워크가 있을때 그 output이 1개의 분류 결과라면 더 큰 이미지에 대해서도 원래 네트워크는 할 수가 없었지만 reshape이 있기 때문에 fully convolutional network는 input이미지의 크기와 상관 없이 돌아 간다. 그리고 output이 커지게 되면 그거에 비례해서 뒷단의 네트워크가 커지게 된다. 근데 convolution은 입력 크기에 상관없이 동일하게 찍기 때문에 찍어져서 나오는 결과의 dimension만 같이 커지지 동작은 시킬 수 있다. 그 동작이 마치 히트맵과 같은 효과가 있다.

image.png

해당 이미지의 고양이가 어디에 있는지에 대한 히트맵이 나오게 된다.



image.png

FCN은 어떤 input 사이즈에서도 돌아가지만, 결과의 dimension은 줄어들게 된다. 그래서 우리는 거친 출력을 고밀도 픽셀로 연결해 주는 방법이 필요하다.



2️⃣ Deconvolution(conv transpose)

Convolution의 역 연산을 진행 하는 것이다.

image.png

stride를 2를 주게 되면 대략 반으로 줄어들게 된다. 그럼 Deconvolutionstride를 2를 주게 되면 2배로 들어나게 된다. dimension을 키워주게 된다. 엄밀히 따지면 Convolution연산의 역은 존재할 수 없다. 그냥 역이라고 생각하는게 편하다. 아래 그림을 통해서 확인 해 보자.

image.png

Convolution의 경우 filter는 3x3이고 padding=0, stride=2로 진행하면 위 와 같이 5x5 → 2x2가 된다.

Deconvolution의 경우 기본 2x2값에 padding을 많이 줘서 만들어진 값에 3x3filter가 지나가서 계산을 했을때 5x5가 되게 만든다.




Object Detection


1️⃣ R-CNN

image.png

  1. input이미지 선택
  2. 2000개의 영역을 추출한다.
  3. 뽑은 영역에 대해 feature들을 계산
  4. linear SVMs로 분류를 한다.



2️⃣ SPPNet

image.png

R-CNN에 경우 crop이미지가 2000개 정도가 나오고 이 이미지를 CNN으로 2000번 돌려야 된다는 문제가 있다. 그러나 SPPNet은 다 똑같은데 이미지 안에서 CNN을 한번만 돌린다. 자세한 내용은 논문을 참고해 보자



3️⃣ Fast R-CNN

  1. 이미지와 bounding boxes set을 선택
  2. convolutional feature map을 만든다.
  3. 각각의 영역에 대해서 ROI pooling으로 부터 fixed length feature을 얻는다.
  4. 두 가지 결과가 나온다. class 와 bounding-box regressor

image.png

Faster R-CNN에서는 아래와 같이 RPN이 추가 되었다.

image.png


✅ Region Proposal Network

참고자료 - https://arxiv.org/abs/1506.01497

image.png

image.png



4️⃣ YOLO

참고자료 - https://arxiv.org/abs/1506.02640

image.png

  • YOLO(v1)은 빠른 detection 알고리즘이다.
    • baseline: 45fps / smaller version: 155fps
  • 특별히 bounding box sampling이 없어서 빠르다.

첫번째로 image.png

가장 먼저 SxS grid로 이미지를 나눈다. 만약 해당 물체의 중심이 grid cell안에 있다면 그 grid cell은 그 물체로 분류된다.

두번째로 image.png

논문에 의하면 각각의 cell은 B개의 bounding box를 예측한다(B=5) 각각의 bounding box는 box의 x,y,w,h 그리고 그 박스가 쓸모 있는지(confidence of objectness)를 찾는다.

image.png

그리고 그와 동시에 처음 나눴던 그 각각의 cell의 어떤 class인지 예측을 한다.

마지막으로 image.png

이 정보들을 취합하게 되면 해당 box가 어떤 class인지가 나오게 된다.
종합적으로 텐서는 SxSx(B$*$5 +C)의 크기를 가진다.

  • SxS: grid cell의 개수
  • B$*$5: x,y,w,h,condidence의 값을 가진 B bounding boxes
  • C: class의 개수

'AI > 이론' 카테고리의 다른 글

Generative Model  (0) 2021.02.05
Transformer - Sequential Models  (0) 2021.02.04
RNN - Sequential Models  (0) 2021.02.04
RNN 맛보기  (0) 2021.02.04
CNN - 1x1 Convolution  (0) 2021.02.03
CNN - Convolution  (0) 2021.02.03
CNN Preview  (0) 2021.02.02
Optimization  (0) 2021.02.02

+ Recent posts