인공지능 in 네부캠 AI 4기/딥러닝 기본

Computer Vision Applications

제로타이 2022. 10. 4. 12:55

CNN에서는 단순히 한 이미지가 무엇인지에 대해서만 분류만 하는 게 아니다. 다른 방식으로도 적용이 되는데 그것을 보자.

Semantic Segmentation

한 이미지를 픽셀마다 구분 짓는 작업. 자전거 타는 사람 사진에서 자전거랑 사람, 배경을 각각 따로 구분하내는 것. 이런 건 자율주행에서 많이 쓰이는 문제이다. 
이걸 어떻게 하지?

Fully Convolutional Network

여태 우리가 봤던 CNN에서는 마지막에 dense layer를 거쳐 하나의 라벨로 분류되도록 한다. 
하지만 이 dense layer를 없애게 되면(convolutionalization이라 부른다고) 평탄화 작업이 없어지니 채널이 겹겹이 쌓인 결과가 나오게 되는데 이를 Fully Convolutional Network라 부른다.
이게 가지는 효과는 히트맵의 방식과 같다. 채널마다 픽셀 분류를 해주는 게 가능해지는 것. 

이런 식으로 히트맵

여기에 Deconvolution역연산까지 곁들여준다. 내가 원하는 만큼의 크기와 채널로 늘리는 작업. 엄밀하게 말하자면 이런 게 있을 수는 없다. 단순하게 예를 들어도 2와 8을 이용해 10을 만들 수는 있지만, 10으로 정확하게 특정해서 2와 8만을 만들 수 있는 것은 아니다.
그렇지만 패딩을 많이 넣어서 비슷한 효과를 내게 할 수는 있다. 그것을 활용하는 것이 바로 deconvolution.

Detection

이건 한 이미지에서 각 구역이 무엇에 해당하는지 직사각형으로 모양을 쪼개는 형태의 문제이다.

r-cnn

대표적으로 R-CNN이 있다. Region의 약자인 모양인데, 아무튼 방식은 일단 사진을 짤라보고 그것을 각각 CNN을 돌려 뭐가 있는지를 찾아보는 방식이다. 자르는 기준도 없어서 무식하게 자르고 보는 구조. 이걸 통해 어느 위치에 뭐가 있는지 알 수 있게 된다. 
이 방법의 문제는 방금 말했듯이 만약 사진을 2000개로 자를 경우  CNN을 2000번을 돌려야 되게 된다. 어마무시하게 시간이 걸리는 것.

그래서 나오는 것이 SPPNet이다. 이것은 바운더리를 치되 CNN은 한번만 돌자는 게 키포인트다. 한 사진을 CNN 돌리고, 그 이후에 바운더리 칠 만한 부분의 텐서만 긁어오는 방식인데, 순서가 정반대라고 할 수 있다. 이 경우 요점은 텐서로 만들어진 사진에서 어떻게 바운더리를 지을지에 관한 것이다. 그것을 위해 Special Peer Pooling?이라는 과정을 거치는데 아무튼 자세한 내용은 논문 참고..

sppnet도 역시 느리다! 그래서 나오는 것이 Fast R-CNN. 이것은 기본 컨셉은 sppnet과 비슷하다. 대신에 이쪽은 바운더리를 짓는 것도 뉴럴 네트워크의 영역으로 넣어서 해결한다. 

Faster R-CNN의 결과물

여기에서 한 단계 더 나아가면 Faster R-CNN으로, 바운더리를 치는 것도 학습의 영역으로 넣는 모델이다. 뭔가 물체가 있을 것 같은 곳을 잘 바운더리 칠 수 있게 학습시키기.
이러한 경우에서 잘 따져야 하는 문제는 바로 region proposal network, 즉 바운더리 치는 크기를 잘 정하기. anchor 박스라고도 부른다.

YOLO

You Only Live Once! 이제 현재 가장 잘 나가는 모델인 듯. 버전도 해마다 거듭나는 중이다. 
이 놈은 위의 녀석들처럼 바운더리를 일단 쳐보고 그곳에 물체가 있는지 헤아리지 않는다. 단순하게 사진을 빡 찍어서 바로 거기에서 물체를 분류해내는 방식을 사용한다.  

이 사진 하나에 YOLO의 정수가..

일단 처음에는 격자로 사진을 구분해놓는다. 이 그리드 중 물체의 중심에 있는 그리드가 해당 물체를 식별할 책임을 지게 된다. 사진으로 치면 개의 앞다리 부분이 이후 개의 위치를 바운더리 치게 될 놈이라는 것.
이후 그 박스에서 출발해 상하좌우 살피며 다른 박스가 쓸모 있는지 없는지를 판별한다. 동시에 중심 그리드가 어떤 물체인지 예측하는 작업을 진행한다.
이것을 취합하면 최종 그림이 된다!

이런 결과물이..

결과적으로 격자(그리드)를 나누고, 바운더리 갯수, 물체의 갯수의 사이즈가 반환된다고 한다.

'인공지능 in 네부캠 AI 4기 > 딥러닝 기본' 카테고리의 다른 글

Transformer  (0) 2022.10.04
Recurrent Neural Networks  (0) 2022.10.04
Modern Convolutional Neural Networks  (0) 2022.10.04
Convolutional Neural Networks  (0) 2022.10.04
Optimization  (0) 2022.10.03