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)
- Channel 수 조절
- 연산량 감소(Efficient)
- 비선형성(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 역할 을 대체 하는 것이다.
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 |