일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터 전처리
- Object Detection
- SVM 이란
- CS231n
- Computer Vision
- svdd
- support vector machine 리뷰
- yolov3
- fast r-cnn
- Faster R-CNN
- RCNN
- computervision
- 서포트벡터머신이란
- TCP
- cs231n lecture5
- pytorch project
- yolo
- CNN
- DeepLearning
- EfficientNet
- libtorch
- 논문분석
- SVM hard margin
- pytorch c++
- pytorch
- cnn 역사
- Deep Learning
- darknet
- SVM margin
- self-supervision
- Today
- Total
아롱이 탐험대
Deformable Convolution Nertworks 분석 본문
해당 논문은 정확히 Backbone Network에 관한 논문이 아닌 Backbone Network의 성능 향상을 위해 Microsoft Asia Team에서 발췌한 논문이다.
우리는 늘 size가 fix 되어 있는 layer를 사용한다. 이 논문에서는 이것이 너무 비효율적이고, 다양한 예외 상황이 발생해 정확성을 낮출 것이라는 발상으로 연구를 시작하였다.
따라서 이를 Nueron Network를 통해 학습된 flexible 한 layer로 제작하여 문제를 해결하였다.
만약 이미지가 주어진다면 해당 이미지 뿐만 아니라 회전한 이미지, 반전된 이미지 등 수많은 변형된 이미지들 또한 같은 레이블에 속한다. 하지만 이렇게 변형된 이미지들을 network가 판단하기 위해서는 2가지 문제점이 발생한다.
1. 레이블이 같은 원본의 이미지를 알아야한다.
2. SIFT와 같이 transform invariant feature를 찾는 과정이 쉽지 않다. 따라서 data가 변형되여도 자체의 label이 변화하지 않다는 사실을 사람이 직접 입력하기보다는 컴퓨터가 학습하도록 만들자
우리는 지금까지 이러한 문제점들을 data augmentation에 의존하였다. 그 이유는 지금까지는 fix 된 filter들을 사용하였기 때문이다.
만약 같은 image의 고정된 값의 filter를 사용한다고 가정해보자. 아래의 이미지처럼 small object와 large object를 detection 할 때 같은 크기의 filter를 사용하게 되는데, 이는 이미지를 보면 알겠지만 매우 비효율적이다. 따라서 위에서 언급한 것처럼 flexible 한 filter를 사용하여 문제들을 해결해보자.
이 논문을 쉽게 정리를 하면 convolution layer와 ROI pooling을 각각 deformable conv layer, deformable ROI pooling layer로 upgrade 하였다.
위 이미지를 살펴보면 (a)와 같이 고정된 layer의 경우 양옆, 위, 아래, 대각 부분과 같이 주변 값들만 이용해 연산을 한다. 하지만 (b), (c), (d)와 같이 값들을 유동적으로 변화시키면 좀 더 자연스럽고, 더욱 wide 한 값들을 활용하여 연산이 더 잘될 수도 있다.
이 논문에서 제시한 network는 STN (Spaial Transform Network)와 유사한 method를 사용한다.
STN을 간단하게 설명을 하자면 아래 이미지와 같이 각각의 치우친 숫자들을 가운데로 정렬시키는 방법이다.
더 간단하게 이야기하자면 아래 2번째 이미지와 같이 input x가 layer에 들어가기 전 x를 정렬시켜 layer에 input으로 들어가는 과정이다.
이 논문도 STN과 마찬가지로 이미지에 대해 더 잘 인식하도록 이미지를 조정한다.
기존의 convolution 과정은 위 수식처럼 표현할 수 있다.
Pn에 해당하는 것은 offset으로 위 R 집합처럼 위, 아래, 대각선으로 sift 할 수 있게 하는 parameter이다.
하지만 논문의 저자들은 꼭 1만큼 움직이지 않아도 된다는 것을 입증하고 싶었다. 분수가 와도 되고, 다른 값이 와도 된다고 설명한다.
따라서 저자들은 input의 parameter에 delta Pn값을 도입하였다. delta Pn은 주로 분수 값으로 설정할 것이다.
convolution layer에서의 delta Pn의 값은 bilinear interpolation으로 해결하여 feature map을 생산한다.
Bilinear interpolation은 해당식으로 정의한다. 식은 STN 논문의 식이랑 유사하다.
ROI Pooling Layer도 위와 비슷한 식으로 정의된다.
여기서 delta p의 해당하는 값들은 CNN을 사용하여 학습을 시킬 것이다.
학습시키는 방법은 우선 FC layer로 구성하고, CNN이 학습을 하고 backpropagation을 진행할 때 함께 가중치를 update 하는 방법으로 진행한다.
이렇게 된다면 STN과 같은 방식으로 진행하는 것이다.
이런 방식으로 delta P의 값을 결정한다.
이 논문의 장점은 기존 network를 살짝만 바꾸어도 동작이 수월하고, 또한 one-stage로 동작하는 방식이다.
아래 이미지는 다른 network에 적용시킨 결과이다. detecting 부분이 훨씬 유동적인 모습을 볼 수 있다.
object detection 결과 늘어난 bbox 영역을 볼 수 있다.
STN과 비교를 해보자면 STN은 Linear Transform으로 학습을 진행한다. 따라서 이에 대한 한계가 존재한다.
또한 각 픽셀에 대한 연산을 모두 수행함으로써 cost가 매우 커진다.
우리의 논문의 전환점은 weight보다는 input x에 더 중점을 둔 부분이다.
receptive field와 비교를 해보면 linear 하게 커지지 않고, root에 비례하여 커진다.
또한 STN은 팽창해서 convolution을 하는 방면, 우리는 dynamic 하게 진행을 한다.
각 모델에 적용한 결과 parameter가 조금 늘어나는 대신 성능이 살짝 더 좋아진 모습을 볼 수 있다.
reference
'study > paper reviews' 카테고리의 다른 글
Neural Turing Machines 분석 (0) | 2020.10.13 |
---|---|
Accurate Image Super-Resolution Using Very Deep Convolutional Networks 분석 (0) | 2020.10.06 |
EfficientDet: Scalable and Efficient Object Detection 분석 (0) | 2020.09.14 |
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks 분석 (0) | 2020.09.11 |
YOLOv3: An Incremental Improvement (0) | 2020.06.04 |