Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices #18

Open
chullhwan-song opened this issue Jul 13, 2018 · 2 comments
Labels

Comments

@chullhwan-song
Copy link
Owner

https://arxiv.org/abs/1707.01083
MobileNet과 성능, 계산량이 비슷함

@chullhwan-song
Copy link
Owner Author

chullhwan-song commented Jul 13, 2018

https://www.youtube.com/watch?v=pNuBdj53Hbc&feature=share 먼저 논문과 이 동영상을 보고 정리한것임 > 하도 논문이 많이 나오는 관계로, 다 읽을수 없으니 이런 좋은 refer가 있음 참고하여 정리하려고 함.

@chullhwan-song
Copy link
Owner Author

이전 연구

  • 일반적인 3x3 Convolution
    image
    • x3 convolution은 vgg에서 처음 소개 이후 inception에서 적극적으로 차용하기 시작함.
  • inception (v2, v3)
    • 1x1 > 3x3 진행
      • 1x1 은 채널방향으로 학습시키는 형태(의미)를 가짐
    • 이는 depthwise separable conv에 영향
  • depth-wise separable convolution > mobilenet
    image
    • 채널각각에 대해 conv를 했다는 의미 > 한채널은 3x3 -> 1x1 로 변경
  • alexnet ?
    • 자세히 보면 convolution이 이상함.
      image
      • 2개의 pass
        • 채널도 나뉘어서 봄 또 중간에 cross(빨깐색), fc에서도 cross
        • 이처럼 전체 채널을 보지않고 일부만 보는 convolution 형태를 shufflnet에서는 Grouped Convolution이라고 불림
        • 이는 GPU 성능때문에 어쩔수 없이 한 상황. but 여기서 예기치 않게 현재 alexnet를 한 gpu내에서 테스트해보면, 논문과 같은 성능이 나오지 않음. 즉, 성능때문에 gpu를 두개쓴 케이스로 인해 성능이 좋아졌다고 봄.
        • shufflenet은 이 아이디어를 적극적으로 채용
          • 1x1 conv사용하는데 일부채널만 채용하겠다는 의미
          • 실제로 alexnet 는 2gpu만에서 성능이 좋음 > 4gpu는 낮음. (??)

shufflenet

  • depth-wise separable convolution
  • 채널을 shuffling 하여 일부만 채용
  • 하지만 최종단에서는 대부분 채널을 사용함.
  • 위에서 소개되었던 Grouped Convolution
    image
    • feature map를 두개로 나뉘어 convolution을 시도
    • 이전 resnext 에서도 채널을 나뉘어 conv 를 시도
      image
      • group 32개 즉, 1 conv은 4채널 기준으로
      • 위의 3개는 같은 연산임.
  • shuffling
    image
    • a) 처럼 한쪽채널만 보는것은 문제가 있어보임
    • 그래서 b)처럼 shuffle > 단순 랜덤 셔플이 아니라, 모든 채널에서 섞이도록~하고 concat한다.
    • tf 소스
      image
      • [-1, h, w, 그룹갯수, 그룹으로 나눈 채널개수]
      • [그룹갯수, 그룹으로 나눈 채널개수] 순서를 바꿈 > [그룹으로 나눈 채널개수, 그룹갯수]
      • 다시 원래대로 [-1, h, w, c]크기로 reshape하면 shuffling
      • 근데 나도 신기함..(제대로 이해가 좀 안감 python의 힘ㅠ > 난 이런게 힘듬.ㅠ)
  • shuffling unit을 만듬
    image
    • c)와 같이 concat하는 이유는, feature map를 반으로 줄이는 방법은 보통 filter사이즈를 두배로 키우면 됨, 하지만, 단순히 왼쪽에서 반 오른쪽에서 반오는 형태로하여 feature map를 반으로 줄일수 있음.
  • complexity
    image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant