SPPNet : Spatial Pyramid Pooling 

in Deep Convolutional Networks for Visual Recognition


SPPNet

 

가장 큰 장점

1. R-CNN은 이미지 한 장당 수천 번의 CNN을 수행함(Time-Consuming).

이미지 안에서 bounding box Selective Search 방법을 사용.

반면에 SPPNet은 딱 한 번 CNN을 수행함(one-pass).

ImageFeature Map에서 어떤 위치에 해당하는 정보를 뽑아냄.

 

2. SPPNet은 이미지의 Scale(확대/축소), Size(크기), Aspect Ratio(종횡비)에 영향을 받지 않음.

 

기존의 CNN의 입력

무조건 고정 크기가 입력됨.

: Fully Connected Layer 때문이다(fixed-length Vector가 필요함).

 

Crop(자르기) : 전체 객체가 들어가지 않는 경우가 발생.

Warp(줄이거나 늘리기) : 원하지 않는 왜곡이 발생.

 

사실, Convolution Layer에는 고정 크기의 입력이 필요하지 않음.

 

BoW(Bag of Words) 기법의 확장


 [Box of Words]


1. Feature Extracting

2. Clustering : K-Means 알고리즘 사용, Codeword 찾아냄

3. Codebook Generation

4. Image Representation : Histogram화 시킴(bin 개수 = Codeword 개수)

5. Learning and Recognition : SVM 등의 방법으로 분류


R-CNN 방법과 SPPNet 방법


[R-CNN]


R-CNNImage 영역(Selective Search 방법으로 수천 개를 만듦.)을 추출하고 Warp 시킴.

원하지 않는 왜곡(Unwanted geometric distortion)이 발생함.

이후 추출한 영역을 CNN으로 학습시킴.

매우 느리다(time-consuming).

 

[Spatial Pyramid Pooling]


SPPNet Convolution 마지막 층에서 나온 Feature Map을 분할하여 평균을 내고 

고정 크기로 만들어버림.

→ '06년 발표된 Spatial Pyramid Matching 방법에서 나옴.    


[Spatial Pyramid Matching]


분할 방법은 “fast” mode of Selective Search

[논문 : “Segmentation as selective search for object recognition,” in ICCV, 2011.]

마지막 Pooling LayerSPP(Spatial Pyramid Pooling)로 대체함.

+ 내부적으로 Global Max Pooling 사용.

분할하는 크기만 동일하면 어떤 Size, Scale, Aspect Ratio를 가진 이미지가 와도 똑같은 크기의 

Vector가 출력됨.(이후 FC Layer에 입력으로 들어감.)

분류기 : 이진 선형 SVM


[Spatial Pyramid Pooling Network Architecture]

 

분할 크기(4-level Spatial Pyramid)

50 bins : {6x6, 3x3, 2x2, 1x1} 12,800-dimension(256x50) representations

30 bins : {4x4, 3x3, 2x2, 1x1}

→ stride를 각각의 크기 별로 따로 적용함.



SPP Layer의 출력

(K * M)-dimensional Vector (K는 마지막 Feature Mapdimension, Mbin의 크기)

 

Training

Single-size training : 224x224 size로만 학습, {3x3, 2x2, 1x1} SPP 사용.

2. Multi-size training : 180x180 and 224x224 두 종류를 학습.

180-Network224-Network의 출력은 동일하다.

? 나누고, 평균을 구해서 뽑기 때문.

Network Switching 방법? Epoch 1180-Network, Epoch 2224-Network... 반복!

 

실험 네트워크


[Test Network Architecture : 1. ZFNet, 2. AlexNet, 3. Overfeat Architecture]


ZFNetAlexNetConvolution Layer5

Overfeat 구조는 FC Layer1x1 Convolution으로 이해한 구조.

Sliding Window 개념 적용 가능, 연산량 감소 but 정확도는 높지 않음.

 

Improves Accuracy 



1. Multi-level Pooling

{6x6, 3x3, 2x2, 1x1}{4x4, 3x3, 2x2, 1x1}의 차이는 거의 없다.

하지만, SPP를 사용한 것과 사용하지 않은 것은 확실한 차이가 있다.

(50 bin pyramid : 34.98/14.14, no-SPP : 35.99/14.76)

 

2. Multi-size Training(그림 참조)

Multi-size SPPNet(Overfeat-7) : 29.68%

Single-size SPPNet : 30.36% / no-SPP : 32.01%


3. Full-image Representations



 다중 조합 뷰가 싱글 Full-Image 뷰보다 더 좋은 경우도 있음.

(We find that the combination of multiple views is substantially better than the single full-image view.)

 

하지만 여전히 Full-Image View는 장점이 있는데

1. 수십 개의 뷰를 조합한 경우에도 추가적인 두 개의 전체 이미지 뷰에서 약 0.2%의 성능 향상이 있음.

2. 전체 이미지 뷰는 원래의 방식과 동일하다.

3. 응용 프로그램에서 이미지 자체를 표현하는 것을 요구할 수 있음.

Detection Result



Positive Sample vs Negative Sample(Data Labeling) 


[Positive Sample and Negative Sample]


positive sample : ground-truth(=GT) Sample을 사용.

negative sample : positive sample과 최대 30% 겹치는 Sample을 사용(IOU 측정법).


[Intersection over Union]


Result 



Conclusion

- SPPNet은 다른 크기, 다른 사이즈, 다른 종횡비를 다루기 위한 유연한 방법이다.

ClassificationDetection에서 높은 정확성, 특히 DNN 기반의 Detection을 크게 빠르게 해줌.



Posted by NDC :


MobileNet v2 : Inverted residuals and linear bottlenecks



MobileNet V2

 

이전 MobileNet 일반적인 Conv(Standard Convolution)이 무거우니 이것을 Factorization

Depthwise Separable Convolution(이하 DSC)을 사용

 

사용한 기법들

1. Depthwise Separable Convolution

2. Inverted Residuals

 


Depthwise Separable Convolution

방식 : Standard ConvolutionSeparate Depthwise Conv. + Pointwise Conv.

 

1) Depthwise Convolution : kernelwidth * height * depth=1 로 설정하고

입력 이미지의 각 Channel 마다 별개로 Convolution 실시

(각 채널마다 독립적으로 Convolution)

 

2) Pointwise Convolution : kernelwidth=1 * height=1 * depth 로 설정하고

Convolution 실시(Network in Network 논문의 1 by 1 convolution과 동일)

 


기존 Convolution Layer의 연산량

DKDKMNDFDF

 

DSC(Depthwise Separable Convolution) Layer의 연산량

DKDKMDFDF + MNDFDF

= DFDFM(DKDK + N)

 

Standard Convolution보다 8~9배 수준의 속도 향상을 가져옴.

 

(추가 1. Batch Normalization 대신 Fused Batch Normalization 사용이 더 좋다.)



Linear Bottlenecks

방식: Residual Learning 방식을 통해 네트워크를 깊게 구성할 경우, 연산량이 많이 늘어나게 된다.

1 by 1 Convolution을 활용해 채널 수를 감소시킴.

(Residual Learning? : 학습을 위한 Weight Layer를 거친 후에, 초기 Input의 값을 더해주는 형태)

 

1) 일반적인 방식

일반적인 3*3 convolution 실시

 

2) Bottleneck 방식

1 by 1 convolution으로 채널 수를 줄이고 3 by 3 convolution을 실시 다시 1 by 1 convolution으로 채널 수를 복구시킴.



Q. Inverted Residual 인가?

A. 기존의 bottleneck(C)은 채널 감소 학습(DSC) 채널 복구 방식이지만,

Inverted Residual(D)은 채널 증가 학습(DSC) 채널 감소 방식이다(Inverted .)

 

Input DataOutput Data의 크기가 작기 때문에 메모리 효율적이다.



Network Architecture





 

1) 19개의 Layer로 구성되어 있음.

2) building block1번 이상의 동일 구조의 반복으로 되어 있다.(parameter n 참조)

 

Posted by NDC :