1.introduction

key = improve of efficiency

 

Related work

method1 : 네트워크자체를 경량화

-Enception and Xception

-Extremely Factorized networks

-Squeezenet

 

method2 : fatorizing pretrained NN

-distilling

-hashing , pruning

-vector quantization

 

mobilenetv1 의 소개와 Related work 시작이다, 

다양한 deeplearning이 발전되면서 당연히 네트워크를 어떻게 효율적으로 만드느냐에 대해서도 발전이되어왔다.

첫번째 방법으로서는 네트워크자체를 경량화하는 방법이있다. 1x1 3x3 등을 섞어서 가볍고 깊은 네트워크를 사용하는 inception 과 그것을 더 개선한 Xception 등이있습니다. Squeezenet 같은 경우에도 그러한 부분을 개선함

 

 

2. Key Architecture

 

a.1x1 convolution (= pointwise convolution) (출처 hwiyong.tistory.com/45)

  1. Channel 수 조절
  2. 연산량 감소(Efficient)
  3. 비선형성(Non-linearity)

 

network 차수는 높아지면서, parameter 는 낮아진다. 

>> 예를 들면 어떤 문제를 f 를 x,y,z의 대한 함수로 근사할 때 

f = x^4 +y^4 +z^4 + x^2yz + xy^2z + xyz^2  대신
f = x^10 + y^10+ z^10 ( 소량의 term ,but high degree) 를 놓는 것이라 생각한다.

 

다만 뭐가 f 에 더 정확하다고 볼수는 없다, 그러나  더 강하게 휘면서도 simple 해진다고 본다. 명확히 분류의 경계가 있는 문제에 대해서는  좋아 질 수 밖에 없다. 

 

b.depthwise convutions

위의 1 by 1 point wise conv 과 모티브는 비슷하다.  depth 가 깊어지고, parameter 는 작아지는(width 가 작아지는)

효과가 있다.

일종의 3 by 3 by #c  의 conv filter 를 가진 cnn 이 3 by 3by 1    * 1 by 1by c 의 두개의 Matrix factorization

로 분해 가 되면서 2개의 cnn 이 원래의 conv filter 역할 을 대체 하는 것이다.

cnn
deptwise

 

 

 

 

test for mnist

원래 CNN

conv1 = nn.Conv2d(1, 6, 5, 1)  # 6@24*24
# activation ReLU
pool1 = nn.MaxPool2d(2)  # 6@12*12
bn1 = nn.BatchNorm2d(6)
conv2 = nn.Conv2d(6, 16, 5, 1)  # 16@8*8
# activation ReLU
bn2 = nn.BatchNorm2d(16)
pool2 = nn.MaxPool2d(2)  # 16@4*4


self.conv_module = nn.Sequential(
conv1,
nn.ReLU(),
bn1,
pool1,
conv2,
nn.ReLU(),
bn2,
pool2
)

deptwiseconv

super(depthwisecnn, self).__init__()
conv1 = nn.Conv2d(1, 1, 5, 1)  # 1@24*24
conv1_2 = nn.Conv2d(1, 6, 1, 1)  # 6@24 24
bn2 = nn.BatchNorm2d(6)

# activation ReLU
pool1 = nn.MaxPool2d(2)  # 16@12*12

conv2 = nn.Conv2d(6, 6, 5, 1)  # 6@8 8
conv2_2 = nn.Conv2d(6, 16, 1, 1)  # 16@8*8
bn3 = nn.BatchNorm2d(16)

# activation ReLU
pool2 = nn.MaxPool2d(2)  # 16@4*4
self.conv_module = nn.Sequential(
  conv1,
  conv1_2,
  nn.ReLU(),
  bn2,
  pool1,
  conv2,
  conv2_2,
  nn.ReLU(),
  bn3,
  pool2
)

# of params

acc 97.16 > 87 (deptwise)

 

*with batch norm

depthwise cnn 이 배치놈의 효과를 많이 받는다. (cnn 은 layer 하나로 처리하는것에 최적화되어있는듯)

97.98 > 97.16 (deptwise)

 

 

 

'Machine.Learning > ML- Models' 카테고리의 다른 글

mobilenet v2, mobilenet v3  (0) 2021.01.28
Generative vs Discriminative  (0) 2019.12.22

+ Recent posts