ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
Opened this issue · 2 comments
chullhwan-song commented
https://arxiv.org/abs/1707.01083
MobileNet과 성능, 계산량이 비슷함
chullhwan-song commented
https://www.youtube.com/watch?v=pNuBdj53Hbc&feature=share 먼저 논문과 이 동영상을 보고 정리한것임 > 하도 논문이 많이 나오는 관계로, 다 읽을수 없으니 이런 좋은 refer가 있음 참고하여 정리하려고 함.
chullhwan-song commented
이전 연구
- 일반적인 3x3 Convolution
- x3 convolution은 vgg에서 처음 소개 이후 inception에서 적극적으로 차용하기 시작함.
- inception (v2, v3)
- 1x1 > 3x3 진행
- 1x1 은 채널방향으로 학습시키는 형태(의미)를 가짐
- 이는 depthwise separable conv에 영향
- 1x1 > 3x3 진행
- depth-wise separable convolution > mobilenet
- 채널각각에 대해 conv를 했다는 의미 > 한채널은 3x3 -> 1x1 로 변경
- alexnet ?
- 자세히 보면 convolution이 이상함.
- 2개의 pass
- 채널도 나뉘어서 봄 또 중간에 cross(빨깐색), fc에서도 cross
- 이처럼 전체 채널을 보지않고 일부만 보는 convolution 형태를 shufflnet에서는 Grouped Convolution이라고 불림
- 이는 GPU 성능때문에 어쩔수 없이 한 상황. but 여기서 예기치 않게 현재 alexnet를 한 gpu내에서 테스트해보면, 논문과 같은 성능이 나오지 않음. 즉, 성능때문에 gpu를 두개쓴 케이스로 인해 성능이 좋아졌다고 봄.
- shufflenet은 이 아이디어를 적극적으로 채용
- 1x1 conv사용하는데 일부채널만 채용하겠다는 의미
- 실제로 alexnet 는 2gpu만에서 성능이 좋음 > 4gpu는 낮음. (??)
- 2개의 pass
- 자세히 보면 convolution이 이상함.
shufflenet
- depth-wise separable convolution
- 채널을 shuffling 하여 일부만 채용
- 하지만 최종단에서는 대부분 채널을 사용함.
- 위에서 소개되었던 Grouped Convolution
- feature map를 두개로 나뉘어 convolution을 시도
- 이전 resnext 에서도 채널을 나뉘어 conv 를 시도
- group 32개 즉, 1 conv은 4채널 기준으로
- 위의 3개는 같은 연산임.
- shuffling
- shuffling unit을 만듬
- c)와 같이 concat하는 이유는, feature map를 반으로 줄이는 방법은 보통 filter사이즈를 두배로 키우면 됨, 하지만, 단순히 왼쪽에서 반 오른쪽에서 반오는 형태로하여 feature map를 반으로 줄일수 있음.
- complexity