일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 지리산 펜션
- python yield
- LISP
- 파이썬 GUI
- 인공지능
- LISP 함수
- anaconda tensorflow
- 하늘숲펜션
- 지리산 황토 펜션
- 아나콘다 텐서플로
- HTML
- 파이썬
- 전용 계곡
- CUDA9.0
- 하늘숲황토펜션
- 하늘숲 황토 펜션
- 오봉 계곡
- 출근 전날
- Python
- 지리산 둘레길
- tensorflow 설치
- machine learning
- 파이썬 yield
- 텐서플로 설치
- ubuntu
- 계곡 펜션
- 산청 황토 펜션
- tensorflow
- cuda
- 황토펜션
- Today
- Total
YongWook's Notes
<인공지능> Multiple-Object Detection (3) Fast R-CNN 본문
Multiple-Object Detection에 관한 두번째 포스트(http://man-about-town.tistory.com/52)에서는 SPP-Net을 이야기해 보았다.
SPP-Net에 대해 요약해 보자. SPP-Net은 전체 Input image를 곧바로 CNN에 넣고 특징을 추출한다. 그리고 그것을 Spatial Pyramid Pooling layer라고 하는 특수한 장치에 집어넣어서 Region단위 연산으로 RoI를 만들어낸다. 이 SPP-layer는 CNN에서 올라온 Feature map을 Spatial bin이라 불리는 여러 filter들로 pooling하고 그 결과를 Concatenate하므로써 Local 정보를 만든다. 그 결과물을 FC layer에 넣고 순차적으로 SVM과 Boudning box regressor에 넣게된다. R-CNN에 비해서 속도가 빨라졌다는 장점이 있지만 아직 3단계 파이프라인의 한계를 벗어나지는 못했다.
그 이후 등장하게 된 개념이 Fast R-CNN이다.
Fast R-CNN
사실 Fast R-CNN은 SPP-Net과 크게 다르지 않다. 먼저 간략하게 구조에 대해 알아보자. Fast R-CNN에서는 크게 다음의 과정을 따른다.
- Input image를 CNN에 넣고 feature map을 뽑는다.
- RoI Pooling Layer에서 RoI를 인식하고 이를 곧바로 Fully Connected Layer와 연결한다.
- Softmax classifier와 Bounding Box Regressor에 의해 결과를 도출한다.
위 그림에서 보듯 Fast R-CNN은 CNN의 결과인 Feature Map을 RoI Pooling Layer에 넣는다. 여기서 각각의 RoI는 4개의 tuple (r, c, h, w)로 구성되어 있다. 이는 각각 top-left corner의 좌표 (r, c)와 해당 RoI의 height, width (h, w)를 말한다. RoI Pooling Layer는 사전에 h×w로 정의된 fixed size window를 이용하여 Max Pooling한다. 이러한 과정은 1-level SPP layer로 해석될 수 있다.
큰 변화가 아닌 것 같아보이지만 1-level SPP layer의 채택은 큰 의미를 내포한다. Multi-level SPP layer를 사용하는 SPP-Net은 3단계 파이프라인 구조였던 것을 떠올려보자. SPP-Net은 사실 CNN의 다양한 layer들 사이에 SPP-layer 하나를 추가해놓은 구조라고 생각해도 무방하다. SPP-Net이 3단계 파이프라인이 되어버린데에는 절대적으로 SPP-layer에서 일어나는 "Concatenation"의 역할이 가장 컸다고 할 수 있다.
Conv Net의 연산들과 Spatial Pyramid Pooling layer의 초반에 Feature Map을 여러가지 bin으로 곱연산하는 과정까지는 각각의 layer에서 요구하는 input이 서로 독립적이기 때문에 하나의 파이프라인 안에 들어갈수 있었다. 하지만 여기서 출력되는 local 정보들을 Concatenate하는 과정에서는 이전까지의 모든 과정이 끝나있어야 한다. 따라서 여기서 하나의 파이프라인이 끊어지고 새로운 파이프라인이 만들어지는 것이다. 이에 대한 보충설명은 다음 그림으로 대신한다.
Fast R-CNN에서는 SPP-Net을 사용하다가 'bin의 갯수와 Model의 성능이 크게 상관없다'라는 경험적 데이터에 근거하여 하나의 bin만을 사용한 것이다. 이 방법으로 SPP-Net의 3단계 파이프라인에서 오는 학습단계의 성능(시간)문제를 해결할 수 있었으며, SPP-Net에서 Conv Net을 학습시키지 못했던 문제또한 개선하였다. 이 작다면 작을 수 있는 변화가 모델의 큰 변화를 주도한 셈이다.
다음의 두 그림은 Fast R-CNN에서 Train과정과 Test과정을 나타낸다. SPP-Net의 구조그림과 비교하여 보면, Conv Net까지 backpropagation이 가능하기 떄문에 Trainable함을 알 수 있다. 하나의 파이프라인 아래 이루어지는 작업이기 때문에 가능한 일이다.
또 하나 개선된 점이 있다면, 여러가지 bin을 사용하지 않았기 때문에 조금 더 image-centric하다는 점이 있다. 만약 SPP-Net처럼 bin을 여러개를 썼다면 해당 image에서 검출된 특정 object에 대해 과도하게 편향되어 overfitting의 가능성이 있다. 이렇게 되면 서로 다른 Image에서 온 같은 Object에 대해 잘못된 판단을 내릴 수 있다. 하지만 Fast R-CNN에서 하나의 bin을 사용하는 경우는 특정 Object보다 image전체에 조금 더 집중하므로 이 같은 문제에서 조금 더 자유롭다는 장점이 있다.
SPP-Net과 Fast R-CNN을 비교하다 보면 앞에서 이미 언급한 것 처럼, 작은 변화가 큰 차이를 만들어 냈음이 느껴진다. 창의적 시각이든, 경험적 성찰이든 결국은 발상의 전환이야말로 멋진 결과를 이끌어내는 원동력이다.
'-software > AI' 카테고리의 다른 글
Tensorflow Machine Learning Cookbook 정리 (0) | 2017.09.26 |
---|---|
<논문정리> Delving Deeper Into Convolutional Networks for learning Video Representation (2) | 2017.05.16 |
<인공지능> Multiple-Object Detection (2) - SPP-Net (1) | 2017.03.14 |
<인공지능> Multiple-Object Detection (1) - RCNN (0) | 2017.03.13 |
<CAFFE> 학습시키기, 사용하기 (0) | 2016.08.30 |