MobileNet의 등장 배경
구글의 Alphago의 경우 판후이와의 대결에서의 알파고는 1202개의 CPU와 176개의 GPU
를 사용했고,
2016년 3월의 이세돌 九단과의 대결에서는 GPU대신 48개의 TPU
를 사용했다고 합니다.
이 정도의 막대한 컴퓨팅파워를 가진 환경이라면 어떤 모델을 넣더라도 문제가 안 됨.
고성능이 아닌 환경에서는 ?
고성능의 디바이스가 아니라 자동차, 드론, 스마트폰과 같은 환경에서는 CPU를 하나 정도 가지고 있는 경우도 많고, GPU가 없을 수도 있으며, 메모리도 부족할 경우가 보통임. 구글 colab의 경우도 batch size를 조금만 키우면 out of memory가 나옴 .
MobileNet은 컴퓨터 성능이 제한되거나 배터리 퍼포먼스가 중요한 곳에서 사용될 목적으로 설계된 CNN 구조이다.
Mobile net에 사용된 주요 기술
Depthwse Separable Convolutions
- depthwise convolution과 pointwise convolution의 결합으로 생각 하면 된다.
Depthwise convoultion
위 이미지를 보면 8 x 8 x 3 의 matrix를 depthwise convolution 하기 위해서 3 x 3 x 3의 커널을 사용하였다. 이 때 3x3x3의 커널은 각 채널별로 분리되어 3x3의 2차원 커널을 8x8 로 각각 분리된 matrix에 붙어 각 convolution을 진행하고 다시 합쳐지는 구조로 되어 있다.
Pointwise convolution
PointWise convolution은 공간 방향의 convolution은 진행하지 않고, 채널 방향의 convolution을 진행하는 것이다.
위 이미지는 Pointwise convolution의 예시인데, 1 x 1 x c 크기의 kernel을 사용하여 input의 특징을 1개의 채널로 압축시키는 효과가 있다.
이렇다 보니 input의 채널을 압축 시키는 효과가 있어 연산속도를 향상 시킬 수 있다는 장점이 있다. 물론 압축되면서 없어지게 되는 데이터도 있지만, 이는 연산속도와 trade-off 관계에 있는 것이라 값을 조정해나가는 과정이 필요하다.
mobileNet v2
mobileNet v2에는 다음 기술들이 추가 되었다.
- Linear Bottleneck block
- ReLu 6
- Inverted Residulal connections
- SSD Lite
LInear Bottleneck block
- mobile Net v1 의 연산량을 대략 살펴보면
DW(Depthwise) : 3 x 3 x 64 = 576
PW(Pointwise) : 1 x 1 x 64 x 64 = 4096
일반적으로 PW가 더 연산을 많이 필요로 함을 알 수있다.
mobileNet v2 는 PW의 부담을 인식하고 DW 연산 비중을 올리는 테크닉을 사용
Expansion Layer, Projection Layer 를 추가 하였다.
즉 , Expansion Layer PW에서 Channel을 늘려준 상태에서, DW를 하고
Projection Layer에서는 원래의 Channel 개수로 줄여주는 역할을 한다.
Channel을 기준으로, Expansion 하고 Projection 한다고 생각하됨
Mobile Net v1의 연산량과 Mobile Net v2의 연산량을 비교해보자.kernel 3x3
,in_channel
: 144, out_channel
: 144 의 layer가 있다고 가정.
- Mobile Net v1의 연산량
- DW : 3 x 3 x 144 = 1296
- PW : 1 x 1 x 144 x 144 = 200736
- DW+PW : 22,032
- Mobile Net v2의 연산량
- Extention Layer : 1 x 1 x 24 x 144 = 3456
- DW : 3 x 3 x 144 = 1296
- Projection Layer = 1 x 1 x 144 x 244 = 3456
- total : 8,208
기존 대비 연산량이 37%로 줄어들었음을 알 수 있다.
ReLU6 activation
- ReLU6 는 Maximum value가 6을 넘지 못하게 하는 활성화 함수.
- 만약 upper bound가 없으면 point를 표현하는 데 수많은 bit를 사용해야 하지만 6으로 상한선을 두게 된다면 최대 3 bit만 있으면 되기 때문에 상한선을 두는 것은 최적화 관점에서 꽤나 도움이 됩니다.
- 논문에 따르면 ReLU에 상한선을 두게 되면 딥러닝 모델이 학습 할 때, sparse한 feature를 더 일찍 학습할 수 있게 된다는 이유로 상한선을 두었고 여러가지 테스트를 통해 확인해 보았을 때, 6을 상한선으로 둔 것이 성능에 좋았기 때문에 ReLU6를 사용했다는 것입니다.
Mobile net v3
- 네트워크를 Auto ML적인 관점을 활용하여 개선하였다.
- V2에 있던 porjection layer를 제거
- 모바일에서는 sigmoid를 쓰기 힘들기 때문에 rele와 비슷한 h-swish라는 함수사용
- 원래는 3x3 conv 와 32개의 필터를 사용했지만, 기존 ReLU나 swish와 32개의 filter를 썻을 때와 동일한정확도를 h-swish + 절반인 16개의 필터를 사용하여 구현함.
- Mobilenet V3에는 2개의 버전이 있다.
- lagre: 연산 속도가 높고 가벼운 모델 -> 정확도가 small에 비해 낮음
- small : 연산속도가 좀더 낮고 무거운 모델 -> 속도가 large에 비해 낮음
Reference
depthwise convolution / pointwise convolution
MobileNet v2
Searching for MobileNetV3
'딥러닝 > Vision' 카테고리의 다른 글
Mask R-CNN (0) | 2022.03.30 |
---|---|
Object Detection (0) | 2022.03.30 |
CNN with pytorch (0) | 2022.02.12 |
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks (0) | 2021.07.25 |
CNN (0) | 2021.03.10 |