Depthwise Convolutional Layer 구현
요약
본 문서는 MobileNet 아키텍처에 필요한 Depthwise Convolutional Layer의 Caffe 구현체와 활용 방법을 안내합니다. 기존 네트워크를 모바일넷 형식으로 변환하는 스크립트도 제공하여, 효율적인 모바일 비전 애플리케이션 개발을 돕습니다.
핵심 포인트
- Depthwise Convolutional Layer의 Caffe 구현체를 제공합니다.
- 기존 일반 네트워크를 MobileNet 형태로 변환할 수 있는 스크립트를 사용하세요.
- GPU 성능 테스트 결과, 직접 구현한 버전이 매우 높은 효율성을 보여줍니다.
깊이별 컨볼루션 레이어 (Depthwise Convolutional Layer)
서론
본 문서는 모바일 컨볼루션 레이어(mobile convolution layer)에 대한 개인적인 caffe 구현체입니다. 자세한 내용은 원 논문을 참고해 주십시오:
구축 방법
- 레포지토리(repo)의 caffe 폴더를 사용자의 caffe와 병합합니다.
$ cp -r $REPO/caffe/* $YOURCAFFE/ - 그런 다음 make 명령을 실행합니다.
$ cd $YOURCAFFE && make
사용법
모바일 컨볼루션 레이어의 타입을 "DepthwiseConvolution"으로 대체하기만 하면 됩니다. 이 예시는 다음과 같은 파일에서 수정되었습니다:
- MobileNet-Caffe
예시 파일: example/Withdw_MN_train_128_1_train.prototxt
예제 네트워크의 GPU 성능
| GPU Performance | Origin1 | Mine |
|---|---|---|
| forward_batch1 | 41 ms | 8 ms |
| ... |
일반 네트워크를 모바일넷으로 변환하기
저는 일반 네트워크(normal net)를 모바일넷 형식으로 변환하는 스크립트 [transfer2Mobilenet.py]를 작성했습니다. 이 또한 사용해 보실 수 있습니다.
사용법:
python ./transfer2Mobilenet.py sourceprototxt targetprototxt [--midbn nobn --weight_filler msra --activation ReLU] ["--origin_type"은 깊이별 컨볼루션 레이어의 타입이 "DepthwiseConvolution" 대신 "Convolution"이 되도록 의미합니다]
깊이별 컨볼루션 레이어의 타입을 "Convolution"에서 "DepthwiseConvolution"으로 변경하는 데는 "transferTypeToDepthwiseConvolution.py"가 사용됩니다.
Footnotes
-
cudnn을 활성화할 경우, mobilenet의 메모리 사용량이 믿기 어려울 정도로 증가합니다. 시도해 볼 수 있습니다. ↩
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub GameDev의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기