spp 넷에서 rcnn의 단점인 2000번의 cnn연산과 warp과정에서 정보손실을 해결했지만

 

svm과 bbr이 따로 수행되고 svm이 gpu에서 돌아가지 않는다는 단점들은 해결되지않은 상태였다.

 

이를 해결하며 나온 것이 fast R-cnn이다.

이름에서 볼 수 있듯이 속도면에서 R-cnn에 비해 훌륭했고 정확도도 높아졌다.

 

 

 

fast R-cnn의 과정은 다음과 같다

 

1. 이미지를 cnn에 통과 시켜 feature map을 얻는다.

2. selective search를 통해 찾은 ROI들을 featuremap에 대응시키고 RoI pooling을 적용하여 고정된 feature vector를 얻는다

3. feature vector를 softmax, bbr에 활용한다.

 

1. ROI pooling 

 

vgg net을 바탕으로 fine tuning을 한다.

 

spp넷에서 언급했던 피라미드풀링과 비슷한 개념이라생각하면된다. 단 점점 작아지는 모습을 보였던 것과 달리

하나의 레이어만을 사용한다. 여기서는 7x7을 사용하였다

 

 

 

2, Multi task loss

 

spp net과 rcnn에서는 분류기로 cnn에서 softmax를 사용한 것이아니라 feature만을 추출하여 개별적인 svm 및 bbr을 활용하였다.

하지만 fast rcnn은 classification과 bounding box regression을 적용하여 각각의 loss를 얻어내고, 이를 back propagation하여 전체 모델을 학습시키도록 했다. 이를 위해서는 두개념을 통합한 loss가 필요했는데 아래 식이 Multi task loss이다. 

먼저 classification loss부분부터보면

p는 어떤 클래스일지 예측한 확률 (p0, ..., pk) k+1 길이의 벡터이고 u는 해당 roi의 true값이다.

 

Localization loss를 보면

tu는 tx, ty, tw, tw인 벡터이고 모두 0이상 1이하의 값을 같는 이미지내에서의 상대적인 값을 가진다.

lambda는 두 loss사이의 balancing parameter이다. 

 

 

하지만 roi를 찾는 과정에서 selective search를 하는 것은 이전과 동일하여 이부분에서 속도향상은 없었다. 이를 faster R-CNN에서 해결한다.

'CV > object detection' 카테고리의 다른 글

[cv] SPP-net  (0) 2022.06.01
[CV] R-CNN  (0) 2022.06.01
[cv] object detection 기본용어  (0) 2022.05.25

SPP -net은 Spatial Pyramid Pooling의 준말이다.

 

R-CNN의 단점은 crop/warp를 거치면서 이미지가 찌그러져 가지고있는 정보를 잃는다는 점이다. 

warp는 feature vector의 크기를 맞추기 위하여 사용되었는데

다른 방법으로 feature vector의 크기를 맞출 수 있다면 정보를 보전한 상태로 분류에 사용할 수 있을 것이다.

이를 극복한 방법이 SPP다.

 

 

SPP net의 과정은 다음과 같다.

 

1. 이미지를 cnn에 통과 시켜 feature map을 얻는다.

2. selective search를 통해 찾은 ROI들을 featuremap에 대응시키고 spp를 적용하여 고정된 feature vector를 얻는다

3. R-cnn과 같이 svm, bbr을 적용시킨다.

 

고정된 feature vector를 얻는 방식을 제외한다면 R-cnn의 과정과 같다고 볼 수 있다.

 

1. SPP - Spatial Pyramid Pooling

 

 

위의 그림처럼 먼저 cnn을 이용하여 featuremap을 얻고 SS를 통해 얻은 ROI를 대응시킨다.

 

위와 같이 crop된 feture map을 얻게 될텐데 이를 4x4 , 2x2, 1x1로 쪼갠이후 각 영역별로 맥스풀링한 결과를 얻게된다.

이를 spatial pyramid pooling layer 라고한다. 

위의 경우 16 + 4 + 1 = 21크기의 vector를 얻을 수 있을 것이다.이는 하나의 채널에 대한 내용이고 채널이 256개있다면 

총 21 x 256개의 고정된 vector를 얻을 수 있는것이다.

저자들은 1x1, 2x2, 3x3, 6x6 총 4개의 피라미드로 SPP를 적용합니다.

 

 

2. R-cnn과의 비교

 

r-cnn은 2000번의 cnn을 거친데 반에 spp는 1번의 cnn을 거치기 때문에 속도차이가 있을 것이고

warp과정에서 정보손실이 적어 더 좋은 결과를 가져올 수 있들 것이다.

하지만 rcnn의 다른 단점이었던 cnn, svm, bbr이 여전히 나누어져있다는 점은 여전히 해결되지 않았다는 점에서 한계를 가지기도 한다.

'CV > object detection' 카테고리의 다른 글

[CV] fast-R-cnn  (0) 2022.06.01
[CV] R-CNN  (0) 2022.06.01
[cv] object detection 기본용어  (0) 2022.05.25

 

 

r-cnn의 과정

 

1. 이미지를 입력 받는다

2. selective search 를 통해 region proposals (물체가 있을 것이라고 예상되는 영역)을 2000개 추출한다.

3. 추출한  region proposal을 고정된 크기의 이미지로 warp한다. (4.에서 추출될 feature vector의 길이를 통일 시키기위함)

4. warp한 이미지를 cnn에 넣어 feature vector를 추출한다.

5. feature vector를 SVM에 넣어 어떤 이미지일지 classification한다.

 

크게 나누면

1. 물체가 있을 만한 영역 (RoI)을 찾는다.

2. 영역에 해당하는 이미지가 무엇인지 판단한다.

 

이렇게 두 stage로 나뉘게 되는데 이런 detector를 2-stage detector라고 하며 r-cnn계열이 대표적이다

반면에 1-stage detector은 YOLO가 대표적이다.

 

 

 

다시 rcnn으로 넘어와 하나하나의 과정을 디테일하게 살펴보자

 

1. Selective search 

 

https://www.geeksforgeeks.org/selective-search-for-object-detection-r-cnn/

Region proposal 단계에서 물체가 있을만한 영역을 찾는 기법이다.

 

1. Efficient GraphBased Image Segmentation 이라는 기법을 통해 초기 영역을 생성한다

2. 작은 영역들을 유사도가 비슷한 영역끼리 합쳐 큰영역으로 통합한다.

 

Selective search는 위와 같은 과정을 반복하여 총 2000개의  roi를 찾아낸다.

이는 추후에 사용되지않는 방법이기 때문에 자세히 설명하지 않고 넘어간다.

이후 같은 크기로 warp한다.

 

2. CNN

alex net
warp

 

227*227 크기로 warp 하여 cnn모델에 넣는다. 모델은 alex net의 구조를 거의 따와 finetuning 한다.

 

인풋은 train image중에 selectiove search의 결과물을 crop한 것이다.

이때에 iou가 0.5이상인경우 positive, 즉 물체이다. 아닐경우 negative, 즉 배경이라고 전제하고 학습하게된다.

이렇게 데이터셋을 구축후에 alexnet을 기반으로 finetuning한다

 

이 crop시에 원래의 값대로 crop하는 것보다 padding을 16pixel만큼 줘서(원래보다 16pixel씩 w,h를 더 늘렸다) crop한것이 더 성능이 높았다고 한다. (warp이미지의 1행이 without padding 2행이 padding)

 

아직 GAP나 Roi pool, FCN이 나오지 않은 시기이기때문에 CNN에서 나오는 feature vector(4096)의 크기를 일치시키기 위하여 warp한다.

 

fine tuning 시에 k 종류의 object를 인식한다하면 k+1개를 학습하게 되는데 +1은 배경이다 측 k개에 해당하지 않는경우이다.

 

이 finetuning 완료된 cnn을 통해 softmax이전의 4096 길이의 feature vector를 얻는다.

 

3. SVM

 

위의 과정을 거쳐 4096크기의 vector를 통해 classification을 진행한다.

총 k개의 오브젝트가 있다면 배경을 포함해 k+1개의 linear SVM을 학습한다. (이진분류)

 

SVM의 학습시에도 selective search의 결과물을 학습에 이용하는데 

이때 원래 박스값 ground truth만을 positive로 사용하고 IOU 0.3미만인 값을 negative로 사용한다.

 

학습된 SVM에 2000*4096을 입력하여 각 region의 class와 confidence를 얻는다.

 

cnn에서 softmax를 사용하지 않은 이유는 단순히 cnn으로 나온 벡터를 통한 svm의 성능이 좋아서였다. 

 

 

 

4. Bounding box regression

 

https://lilianweng.github.io/posts/2017-12-31-object-recognition-part-3/

bounding box의 위치를 실제와 가깝게 만들기 위하여 bounding box regressor을 이용한다 G 가 ground truth, p가 예측 bounding box이며 t 는 이동량이다.

 

cnn을 통과한 4096의 벡터를 bbr에 통과시켜 x,y,w,h를 얻는다.

 

이후 NMS를 거쳐 최선의 bb를 출력한다.

 

 

R-CNN은 당시의  엄청나게 좋은성능을 가졌지만 여러 단점을 가진다

1. 2000번의 cnn연산

2. cnn, svm, brr 따로 학습 및 예측

3. selective search의 느린속도

 

위의 것을 보완해서 fast R-CNN 이 나오게된다

'CV > object detection' 카테고리의 다른 글

[CV] fast-R-cnn  (0) 2022.06.01
[cv] SPP-net  (0) 2022.06.01
[cv] object detection 기본용어  (0) 2022.05.25

1. object detection이란

 

한 이미지에서 물체를 둘러싼 사각형(bounding box)를 탐지하는 것으로 
일반적으로 이미지를 입력으로 받고, bounding box와 그에 대응하는 예측 클래스와 클래스의 신뢰도(confidence)를 출력한다. 

 

출처 : https://deep-eye.tistory.com/6

2. IOU (intersection over union)

 

출처 : https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/

정답 값과 모델이 예측한 사각형이 얼마나 겹치는 지를 나타내는 지표이며 높을수록 잘 예측한 모델이다.

import numpy as np

def compute_iou(pred_box, gt_box):
  x1 = np.maximum(pred_box[0], gt_box[0]) 
  y1 = np.maximum(pred_box[1], gt_box[1])
  x2 = np.maximum(pred_box[2], gt_box[2])
  x2 = np.maximum(pred_box[3], gt_box[3])

  intersection = np.maximum(x2 - x1, 0 ) * np.maximum(y2 - y1, 0)

  pred_box_area = (pred_box[2] - pred_box[0]) * (pred_box[3]- pred_box[1])
  gt_box_area = (gt_box[2] - gt_box[0]) * (gt_box[3]- gt_box[1])

  union = pred_box_area + gt_box_area - intersection

  iou = intersection / union
  return iou

pred_box와 gt_box 는 각각 

 

 

3. NMS(non maximum suppression, 비최댓값 억제)

 

한가지 object에 여러가지 bbox가 겹쳤을 경우

확률이 가장 높은 상자와 겹치는 상자들을 제거하는 과정

 

1) 확률 기준으로 모든 상자를 정렬하고 먼저 가장 확률이 높은 상자를 취함
2) 각 상자에 대해 다른 모든 상자와의 IOU를 계산
3) 특정 임곗값을 넘는 상자는 제거 (너무 겹치는 녀석을 없앤다)

 

위와 같은 과정으로 이루어진다.

https://pyimagesearch.com/2015/02/16/faster-non-maximum-suppression-python/

def non_max_suppression_fast(boxes, overlap_thresh):
  if len(boxes) ==0:
    return []
  if boxes.dtype.kind == 'i':
    boxes = boxes.astype('float')

  pick = []
  x1, y1, x2, y2 = boxes[:,0], boxes[:,1], boxes[:,2], boxes[:,3]

  area = (x2 -x1 + 1) - (y2 - y1 +1)
  idxs = np.argsort(y2)

  while len(idxs) > 0:
    last = len(idxs) - 1
    i = idxs[last]
    pick.append(i)

    xx1 = np.maximum(x1[i], x1[idxs[:last]])
    yy1 = np.maximum(y1[i], y1[idxs[:last]])
    xx2 = np.maximum(x2[i], x2[idxs[:last]])
    yy2 = np.maximum(y2[i], y2[idxs[:last]])

    w = np.maximum(0, xx2 - xx1 +1)
    h = np.maximum(0, yy2 - yy1 +1)

    overlap = (w*h) / area[idxs[last]]

    idxs = np.delete(idxs, np.concatenate(([last], np.where(overlap > overlap_thresh)[0])))

  return boxes[pick].astype('int')

 

4. 모델 성능평가

 

4-1. 정밀도와 재현율

https://towardsdatascience.com/precision-and-recall-made-simple-afb5e098970f

 

모델이 객체 존재를 엄격하지 않게하면 FP가 커져 precision(정밀도)이 낮아지고

너무 엄격해서 FN이커져 recall(재현율)이 낮아지게된다.

 

 

 

4-2 정밀도 재현율 곡선

 

https://github.com/ultralytics/yolov3/issues/898

 

T이하는 제거하는 임계값 T에 따라 정밀도와 재현율이 달라지게 된다.

- 0 < T < 1 

- T가 1에 가까우면 놓치는 객체가 많아져 재현율이 낮아지고 신뢰도가 높은 예측만 유지하여 정밀도는 높아진다.

- T가 0에 가까우면 대부분의 예측을 유지하기에 재현율은 높어자고 정밀도는 낮아진다.

 

예를 들어 모델이 보행자를 참지하면 이유없이 차를 세우더라도 보행자를 놓지지않도록 재현율을 높여야한다.

 

 

4-3 AP, mAP

 

위 그래프의 곡선 아래영역의 넓이이다. 

항상 0~1사이 값을 가지며

단일 클래스에 대한 모델성능 정보를 제공한다.

데이터셋이 10개의 클래스로 구성된다면 각 클래스에 대한 ap를 계산하고 그의 평균인 map를 구한다.

 

 

'CV > object detection' 카테고리의 다른 글

[CV] fast-R-cnn  (0) 2022.06.01
[cv] SPP-net  (0) 2022.06.01
[CV] R-CNN  (0) 2022.06.01

dense라는 말은 보통 딥러닝에서 FC를 의미한다.

 

하지만 densenet에서의 dense는 레이어들 간에 모두 연결되어있다는 것을 의미한다,

 

1. Dense Block

저자는 dense block의  네가지 장점을 말한다.

  • vanishing-gradient 완화 : 값의 직접적 연결때문 
  • feature propagation 강화
  • feature 재사용 : concat이기 떄문에
  • parameter 수 줄임 : concat이기에 각 레이어별 채널수가 낮음

 

1) dense block은 block내의 레이어끼리 모두 연결한다. 이를 논문에서는 drirect connection이라고 하는데 총 

L * (L+1) / 2 개의 direct connection 이 존재한다.(L : 레이어의 수)

여기서 connection은 add가 아닌 concat이다.

 

2) growth rate

growth rate란 블록안에 두번째 레이어 이후 갯수

L번째 레이어의 갯수는 k0+k*(L-1) 여기서 k0는 인풋채널수이다.  즉 k에 따라 모델이 넓어지거나 좁아질 수있다.

 

 

3) 이번에도 BN ReLU, conv순으로 이어진다

4) resnet과의 차이

resnet은 add함으로써 보존해야할 정보가 바뀌어서 다음 layer에 전해주는데에 반해서

densenet은 정보를 바꾸지 않으며 concat하여 직접적으로 하위의 모든 layer에 연결시킨다

이전의 정보를 모두를 가지고 있다는 장점이 있다.

 

 

5) bottle neck

k개의 feature map이 input 될 때 1x1conv 시 4k 

 

 

6) pool

1x1으로 차원을 줄이고 2x2 avg pool stride2로 사이즈를 절반씩 줄였다. 아무래도 dense를하려면 쭉 사이즈가 같아야해서 그런 것 같다

 

2. architecture 

resnet에 비해 효율적이다.

'CV > classification' 카테고리의 다른 글

[CV] Shuffle Net  (0) 2022.05.04
[CV] ResNext  (0) 2022.05.04
[CV] Mobile Net V2  (0) 2022.05.04
[CV] Squeeze Net  (0) 2022.05.04
[CV] MobileNet  (0) 2022.05.03

 

 

1. Pointwise Group Conv, Channel Shuffle

1x1 conv를 group을 나누어 병렬 처리한다. (다양한 feat)

 

depthwise로 3x3 conv한 후

 

group으로 나누었던 channel들을 섞고 다시 그룹을 나누어 pointwise group conv를 한다.

 

2. ShuffleNet Unit

b. depth wise separable conv를 pointwise시에 group으로 실시하고 사이에 activation 이 들어가지ㅇ 않는다  add하기 전에도 activation를 생략후에 (xception과 resnext의 activation이 정보량을 줄일 것이라는 것과 비슷) add한다.

 

c. short cut 에서 avgpool(overlapping 경계선정보를 잃지 않기 위해)과 stride를 2로 두어 크기를 줄인다.

 

 

3. architecture

'CV > classification' 카테고리의 다른 글

[CV] DenseNet  (0) 2022.05.05
[CV] ResNext  (0) 2022.05.04
[CV] Mobile Net V2  (0) 2022.05.04
[CV] Squeeze Net  (0) 2022.05.04
[CV] MobileNet  (0) 2022.05.03

 

 

1. Group Conv, STM (Split Transform Merge)

 

resnet과 resnext의 shortcut 구조가 상이함을 볼 수 있다.

(a) channel 4개인 32개의 path 가 병렬로 실행된 후 add

(b) channel 4개인 32개의 path 가 병렬로 실행되고concatenation 한 후 1x1 conv를 수행한다.

(c) group convolution을 한다.

 

여러개의 path를 multi branch라고도한다

res net에서 나온 net이니 만큼 short cut을 가져간다

세가지가 모두 동일한 역할을 한다. 이때 path 의 개수 = cardinality 이다.

 

 

 

group conv는 그룹을 만들어서 그 안에서 conv를 수행한다고 이해하면 편하다.

병렬로 처리하면서 자연스럽게 연산량이 줄 수 있다.

 

알렉스넷에서 두개의 gpu에서 서로 다른 특징들을 학습했던 느낌으로 피처가 다양하지는 것 같다.

 

 

 

2. architecture

 

7x7로 nonlinearity를 줄이고 선이나 면같은 부분을 빠르게 학습, 메모리소모 down

 

일반 resnet에 비해 파라미터 수는 비슷한 것에 반에 성능은 좋은 것을 확인할 수 있다.

cardinality에 따라서 성능이 달라지는 것을 확인할 수 있다. 여기서 d = depth이다.

 

'CV > classification' 카테고리의 다른 글

[CV] DenseNet  (0) 2022.05.05
[CV] Shuffle Net  (0) 2022.05.04
[CV] Mobile Net V2  (0) 2022.05.04
[CV] Squeeze Net  (0) 2022.05.04
[CV] MobileNet  (0) 2022.05.03

모바일 넷의 두번째 버전이다. res넷의 res block을 가져왔따.

이해하기위해서는 mobilenet v1 과 depthwise separable에 대해 필수적으로 알아야하니 

https://gwoolab.tistory.com/65

 

[CV] MobileNet

모바일환경에서도 잘 작동할 수 있도록 파라미터와 연산량을 줄이며 성능을 확보한 모델이다. 1. Depthwise Separable Convolution Xception 에서 언급했던 Depthwise Separable Convolution을 활용하여 연산량..

gwoolab.tistory.com

저번 게시물을 참고하면 좋겠다.

 

 

 

 

1. Linear Bottleneck

 

 

linear는 그냥 activation을 적용하지않았다고 생각하면 된다.

 

고차원의 데이터가 저차원으로 압축되면서 특정 정보들이 저차원의 어떤 영역으로 매핑이 되게 되는데, 이것을 manifold라 한다. 저자는 manifold에 activation을 적용하면 relu가 정보를 줄일 것이라 한다.

실제로 위의 그래프에서 볼 수 있듯 activation을 적용하지않은 것이 성능이 좋았다. 

 

relu의 문제점 dying relu 중  gradient exploding 후자의 문제점을 해결하고자  6이후로 6을 보내는

relu6 : min(6,max(0,x)) 를 활용한다. (실험을 통해 6으로 결정했다고한다.)

 

 

stride1 block

1x1conv는 역시 채널을 줄이려고 사용했고 short cut까지 적용하여 학습이 잘되도록했다.

stride2 block

사이즈를 줄이기 위해 풀링이 아닌 stride 2를 활용하였다.

 

2. Inverted Residuals

 

 

 

일반적인 res block 은

input을 1x1로 채널을 줄이고 3x3conv로 feature를 추출한뒤에 skip connect와 합치기 위해 다시 채널을 줄이는

wide(input) -> narrow(bottleneck) -> wide(input과 같은 사이즈) 형태이다

 

inverted res block 은

input을 1x1로 채널을 확장하고 3x3conv로 feature를 추출한뒤에 skip connect와 합치기 위해 다시 채널을 늘이는

narrow(expansion) -> wide(depthwise) -> narrow(projection) 형태이다. 이때 projection에서는 relu를 거치지않는다.

 

위의 t는 얼마나 expansion할것인가 하는 하이퍼파라미터이다.

 


저차원의 channel에는 필요한 정보만 압축되어서 저장되어 있다라는 가정했기 때문이다.
필요한 정보는 저차원의 channel에 있기대문에, skip connect를 사용해도 필요한 정보를 더 깊은 layer까지 잘 전달할 것이라는 것이다
물론 메모리 사용량을 줄이기 위한 부분도 있다.

 

 

3. Architecture

 

 

 

 

 

 

'CV > classification' 카테고리의 다른 글

[CV] Shuffle Net  (0) 2022.05.04
[CV] ResNext  (0) 2022.05.04
[CV] Squeeze Net  (0) 2022.05.04
[CV] MobileNet  (0) 2022.05.03
[CV] Xception  (0) 2022.05.03

최초의 경량화 모델로 알렉스넷과 비슷한 성능을 보인 모델이다. 

모델의 구조와 함께 대학 논문답게 여러가지 개념을 잘 정리해준 논문이다.

 

 

1. 적은 파라미터의 이점

 

1) 효율적인 분산 훈련

- 작은 모델이 적은 서버와의 소통으로 빠른 훈련이 가능하다

 

2) 새로운 모델 배포시에 걸리는 시간이 짧다

- 테슬라의 오토파일럿이나 IOT기기 같은 기기에 업데이트를 배포시에 작은 모델일 수록 배포 및 관리가 쉽다

 

3) 작은 기기에도 모델을 담을 수 있다.

 

2. Accuracy를 유지하면서 파라미터를 줄이는 방법

 

1) 3x3을 1x1conv로 대체해라

- 1x1conv는 3x3conv보다 파라미터가 9배 적다

 

2) 3x3conv에 들어가는 인풋채널의 수를 줄여라

- 총 파라미터는 (number of input channel) * (number of filter) * (3*3)이다. 3x3conv를 줄이는 것도 중요하지만 인풋채널을 줄이는 것도 중요하다

 

3) feature맵의 크기를 줄이는 것을 뒤로 미뤄라

- feature맵의 크기는 (1) 인풋데이터의 크기 (2) 구조에서 줄이는 것 두가지 방법으로 줄일 수 있다. 방법(2)로는 conv + stride >1 or pooling 으로 줄이게 된다.

- 저자는 큰 feature map이 좋은 acc를 얻게했다고한다. 실험을 통해서도 늦은 다운샘플이 좋은 성능을 가져왔다 한다.

 

3. Fire Module

 

스퀴즈 넷은 위와 같은 fire module로 이루어진 모델이다. 

먼저 s1x1개의 1x1conv로 채널을 squeeze한뒤에 

각각 e1x1개의 1x1conv와 e3x3개의 3x3conv를 한뒤에 concat하는 구조로 이루어진다. 

 

 

4. architecture

 

전체 구조를 보면 bypass (resnet의 그것 skip connection) 을 차용하고 있는데 첫 모델은 bypass를 적용하지않는 경우 두번째 모델은 bypass를 채널이 맞는 경우만 사용한경우 세번째는 conv11으로 채널을 맞춰서 모든 구간에 bypass를 적용한 것이다

두번째 모델이 가장 좋은 성능을 보였다

 

bypass를 추가한 이유는 Fire Module내에서 repre~ bottleneck 문제가 발생하기 때문입니다. squeeze layer의 파라미터 수는 expand layer보다 작다. 이는 모델을 가볍게 해주지만 정보 손실이 발생한다. 따라서 bypass를 추가하여 정보 손실을 막은것이다.

 

추가적으로 확인할 점은 avgpool을 활용해서 파라미터를 많이 줄엿다는 점이다.

파라미터는 비슷한 성능을 내는 alex넷과 비교했을 떄 3배가량줄었다.

 

 

Deep Compression로 추가로 더 파라미터를 줄일 수 있다고 하는데 이는 추후에 언급하겠다

'CV > classification' 카테고리의 다른 글

[CV] ResNext  (0) 2022.05.04
[CV] Mobile Net V2  (0) 2022.05.04
[CV] MobileNet  (0) 2022.05.03
[CV] Xception  (0) 2022.05.03
[CV] Inception V2, V3  (0) 2022.05.03

모바일환경에서도 잘 작동할 수 있도록 파라미터와 연산량을 줄이며 성능을 확보한 모델이다.

 

1. Depthwise Separable Convolution

 

Xception 에서 언급했던 Depthwise Separable Convolution을 활용하여 연산량과 파라미터를 많이 줄였다

 

일반적인 conv의 연산량은 다음과 같다

 

일반적인 conv의 연산량 Dk : 커널크기 , M : 입력채널, N : 출력채널, Df : 출력크기(피처맵크기)

하지만 depth wise conv는 cross channel 연산이 없기때문에 아래의 좌측항이고

그리고 pointwise conv는 Dk가 1이기 때문에 우측항이다 

두 항을 더하면 위와 같은 식을 보이는데 Depthwise Separable Convolution의 연산량은 위와 같다고 할 수 있다

일반적인 conv와 비를 구하면 위의 식이 나오는데 mobile net의 경우 Dk=3 이기때문에 8배에서 9배 감소된 연산량을 가질 수 있는것이다. 

 

 

2. 

 

줄어든 연산량에도 성능이 유지되지않는다면 의미가 없기 때문에 저자는 여러가지 실험을 했다고 한다.

 

xception에서는 point wise와 depthwise사이에 activation을 두지않았지만

mobilenet에서는 Bn과 activation을 같이 가져가는 것을 확인할 수 있다.

 

이런 activation은 위치와 유뮤 문제는 밝혀진게 없어 실험으로 확인하는 수 밖에 없다고한다.(이론적 근거가 없다.)

 

 

3. Architecture

풀링이 없이 stride로 feature map의 사이즈를 줄이는 것을 확인할 수 있다. (representional bottleneck을 피하기 위해)

 

resnet이후 논문임에도 불구하고 shortcut 구조(깊이가 깊어져도 학습이 잘됨)가 없다. 일단은 가볍게 하려고 그런 것 같다

 

'CV > classification' 카테고리의 다른 글

[CV] Mobile Net V2  (0) 2022.05.04
[CV] Squeeze Net  (0) 2022.05.04
[CV] Xception  (0) 2022.05.03
[CV] Inception V2, V3  (0) 2022.05.03
[CV] ResNet  (0) 2022.05.03

+ Recent posts