ncnn - 텐센트 오픈소스 모바일 신경망 추론 프레임워크
프로젝트 개요
ncnn은 모바일 환경에 최적화된 고성능 신경망 순방향 계산 프레임워크입니다. ncnn은 설계 초기부터 모바일 환경에서의 배포 및 사용을 깊이 고려했습니다. 타사 종속성이 없으며, 크로스 플랫폼을 지원하고, 모바일 CPU에서 현재 알려진 모든 오픈소스 프레임워크보다 빠른 속도를 제공합니다.
프로젝트 주소: https://github.com/Tencent/ncnn
개발팀: 텐센트 회사 오픈소스 프로젝트
핵심 특징
1. 최고의 모바일 최적화
- 모바일 플랫폼을 위해 탄생: 설계 초기부터 모바일 장치에 특화되어 최적화됨
- 타사 종속성 없음: BLAS, NNPACK 등 다른 계산 프레임워크에 의존하지 않음
- 순수 C++ 구현: 크로스 플랫폼 호환성 및 고성능 보장
2. 뛰어난 성능
- ARM NEON 어셈블리 레벨 최적화: 어셈블리 레벨의 정교한 최적화로 계산 속도가 매우 빠름
- 정밀한 메모리 관리: 메모리 점유율이 매우 낮아 리소스가 제한된 모바일 장치에 적합
- 멀티 코어 병렬 계산: ARM big.LITTLE CPU 스케줄링 최적화 지원
3. 광범위한 플랫폼 지원
- 크로스 플랫폼: Android, iOS, Linux, Windows, macOS 등 다양한 플랫폼 지원
- 다중 아키텍처 지원: ARM, x86 등 다양한 CPU 아키텍처 지원
- GPU 가속: Vulkan API 기반 GPU 가속 지원
4. 풍부한 모델 지원
- 다중 프레임워크 모델 가져오기: Caffe, PyTorch, MXNet, ONNX, Darknet, Keras, TensorFlow 등 주요 프레임워크 모델 가져오기 가능
- 양자화 지원: 8bit 양자화 및 반정밀도 부동 소수점 저장 지원
- 직접 메모리 로드: 제로 카피 참조를 통한 네트워크 모델 로드 지원
기술 아키텍처
지원하는 네트워크 유형
- 클래식 CNN 네트워크: VGG, AlexNet, GoogleNet, Inception 등
- 실용적인 CNN 네트워크: ResNet, DenseNet, SENet, FPN 등
- 경량 CNN: SqueezeNet, MobileNet 시리즈, ShuffleNet 시리즈, MNasNet 등
- 얼굴 감지: MTCNN, RetinaFace, SCRFD 등
- 객체 감지: YOLO 시리즈, SSD 시리즈, Faster-RCNN 등
- 이미지 분할: FCN, PSPNet, UNet, YOLACT 등
- 자세 추정: SimplePose 등
플랫폼 호환성 매트릭스
| 플랫폼/하드웨어 | Windows | Linux | Android | macOS | iOS |
|---|---|---|---|---|---|
| Intel CPU | ✔️ | ✔️ | ❔ | ✔️ | / |
| Intel GPU | ✔️ | ✔️ | ❔ | ❔ | / |
| AMD CPU | ✔️ | ✔️ | ❔ | ✔️ | / |
| AMD GPU | ✔️ | ✔️ | ❔ | ❔ | / |
| NVIDIA GPU | ✔️ | ✔️ | ❔ | ❔ | / |
| Qualcomm | ❔ | ✔️ | ✅ | / | / |
| ARM CPU | ❔ | ❔ | ✅ | / | / |
| Apple CPU | / | / | / | ✔️ | ✅ |
✅ = 알려진 실행 가능 및 성능 우수; ✔️ = 알려진 실행 가능; ❔ = 이론적으로 가능하지만 확인되지 않음; / = 해당 없음
실제 응용
ncnn은 현재 텐센트의 여러 핵심 애플리케이션에서 사용되고 있습니다.
- QZone (QQ 공간)
- 微信 (WeChat)
- 天天P图 (TianTianPitu)
- 기타 텐센트 애플리케이션
개발 생태계
예제 프로젝트
- Android 애플리케이션 예제:
- SqueezeNet 이미지 분류
- 스타일 전이 애플리케이션
- MobileNet-SSD 객체 감지
- MTCNN 얼굴 감지
- YOLOv5/YOLOv7 객체 감지
- SCRFD 얼굴 감지
도구 지원
- 모델 시각화: Netron을 사용한 모델 시각화 지원
- 사용자 정의 레이어: 사용자 정의 레이어 등록 및 구현 지원
- 양자화 도구: 모델 양자화 도구 제공
커뮤니티 지원
- 기술 교류 QQ 그룹: 637093648, 677104663, 818998520
- Telegram 그룹 및 Discord 채널
- 자세한 문서: 완전한 wiki 문서 및 API 참조
시작하기
빌드 지원
ncnn은 다음 플랫폼에서 빌드를 지원합니다.
- Linux / Windows / macOS
- Raspberry Pi 3/4
- Android
- iOS
- WebAssembly
- NVIDIA Jetson
- 全志D1 (Allwinner D1)
- 龙芯2K1000 (Loongson 2K1000)
빠른 시작
ncnn을 사용하여 AlexNet 실행하기 튜토리얼부터 시작하는 것을 추천합니다. 이 튜토리얼은 자세한 단계별 설명을 제공하며, 특히 초보자에게 적합합니다.
프로젝트 장점
- 뛰어난 성능: 모바일 CPU에서의 실행 속도가 알려진 모든 오픈소스 프레임워크를 능가함
- 리소스 친화적: 메모리 점유율이 매우 낮아 리소스가 제한된 환경에 적합
- 쉬운 통합: 타사 종속성이 없어 통합이 간단함
- 생산 검증: 텐센트의 여러 억 단위 사용자 애플리케이션에서 검증됨
- 지속적인 유지 관리: 활발한 오픈소스 커뮤니티 및 지속적인 버전 업데이트
- 광범위한 호환성: 주요 딥러닝 프레임워크의 모델 가져오기 지원
ncnn은 모바일 AI 애플리케이션 개발에 이상적인 선택이며, 특히 모바일 장치에 딥러닝 모델을 배포해야 하는 개발자 및 기업에 적합합니다.