Semantic Segmentation(시멘틱 세그멘테이션)은 직역하자면 '의미론적인 분할'
어떤 이미지가 있을때 각 이미지를 픽셀별로 사물을 분류해 내는것.
이미지의 모든 픽셀이 어떤 라벨에 속하는지 보고싶다.
자율주행 문제에 많이 활용된다.
이게 fully convolutional network다.
일반적으로 CNN은 다시 컨볼루션 통과하게 하고 flat해서 채널을 피고 dense해서 label을 나오게 만든다.
Fully connected layer는 입력 데이터를 평탄화(flatten)하여 처리하므로, 입력의 공간 구조를 고려하지 않습니다.
하지만 우리는 Dense레이어를 없애고 싶다. output이 1000단이 나오면 이걸 convolution layer로 바꾸자는 것이다.
dense 레이어를 없애자는게 컨볼루셔널라이제이션이다.
앞의 구조와 input, output구조로 봤을땐 똑같다.
컨볼루셔널라이제이션을 하면 FCL과 달리 위치정보나, Class에 대한정보(2차원정보)를 잃어 버리지 않을 수 있게 된다.
20x20x1000 짜리 필터 커널을 만들어서 이걸 1x1x1000짜리 컨볼루션을 만든다?
다시 말하면, Flat -> Dense 의 과정을 한개의 컨볼루션 레이어로 만들겠다는 말이다.
이런게 convolutionalization 이다.
컨볼루션 트랜스 포즈(conv transpose)
컨볼루션의 역 연산.
stride 를 2를 주면 30x30 -> 15x15로 줄어드는데 이걸 역으로 시전해주는거다.
하지만 이걸 역으로 복원하는것은 불가능하다. 예를 들면, 10을 가지고 2와 8 을 복원한다거나. 엄밀히 말하면 컨볼루션의 역은 아니다.
2x2를 컨볼루션하고 여기에 패딩을 많이줘서 결과론적으로 원하는 2x2를 얻는다.
엄밀히 말하면 역은 아니지만, 컨볼루션의 역의 개념과 비슷하다.
딱봐도 뭔가 무식하고 오래걸려보인다.
정확하지 않고 완벽하지는 않지만, 이렇게 detection문제를 풀고자 하는 시도가 있었다.
RPN 이 해주는건 간단하다.
이미지가 있으면, 해당 바운딩 박스가 의미가 있을지를 찾아주는것.
박스 안에 물체가 있을지 확인해 주는것.
여기서도 FCN 이 쓰인다.
해당하는 영역의 이미지가 물체가 들어있을지 안들어있을지 FCN이 가지고 있게 된다.
위와 같이 비율과 region 사이즈를 미리 정해놓는다.
총 54만큼의 컨볼루션 채널이 나온다.
이걸 잘 뜯어보면, 해당 영역에서 어떤 바운딩박스를 사용할지 말지를 정할 수 있다.
결과가 조금더 잘 나오게 된다.
스키도 잘잡고 작은 사람들도 잘 잡는다.
YOLOv1 - 엄청빠른 물체감지 알고리즘이다.
컨볼루션의 서브스탠셜을 분류하는게 아니라 바로 이미지를 찍어서 나올수있게 만들었다.
faster-R-CNN 은 바운딩 박스 를 차지하는 리전 프로포절 네트워크가 있고 또 판단하는 네트워크가 따로있엇는데 이건 그 두개를 한번에 하는것이다.
유독 유쾌한 알고리즘이다.
faster R-CNN에서
바운딩 박스를 찾는것과 클래스를 동시에 진행한다.
뒤로갈수록 real-time을 유지한채 좋은성능을 보여준다.