
매우 빠르고 높은 정확도 가벼운 앵커가없는 객체 감지 모델. 모바일 장치에서 실시간.

Nanodet은 일반화 된 초점 손실을 분류 및 회귀 손실로 사용하는 FCOS 스타일의 1 단계 앵커가없는 객체 감지 모델입니다.
Nanodet-Plus에서는 간단한 지정 지침 모듈 (AGM) 과 동적 소프트 레이블 할당자 (DSLA) 가있는 새로운 레이블 할당 전략을 제안하여 경량 모델 교육에서 최적의 레이블 할당 문제를 해결합니다. 또한 다층 기능 퓨전을 향상시키기 위해 Ghost-Pan이라는 가벼운 기능 피라미드를 소개합니다. 이러한 개선 사항은 Coco 데이터 세트에서 이전 Nanodet의 탐지 정확도를 7 맵 으로 향상시킵니다.
나노 렛 플러스 知乎中文介绍
나노 렛 知乎中文介绍
QQ 交流群 : 908606542 (答案 : 炼丹)
| 모델 | 해결 | 지도 발 0.5 : 0.95 | CPU 대기 시간 (i7-8700) | 팔 대기 시간 (4xa76) | 플롭 | 매개 변수 | 모델 크기 |
|---|---|---|---|---|---|---|---|
| 나노 렛 -M | 320*320 | 20.6 | 4.98ms | 10.23ms | 0.72g | 0.95m | 1.8MB (FP16) | 980KB (int8) |
| 나노 렛 -Plus-M | 320*320 | 27.0 | 5.25ms | 11.97ms | 0.9g | 1.17m | 2.3MB (FP16) | 1.2MB (int8) |
| 나노 렛 -Plus-M | 416*416 | 30.4 | 8.32ms | 19.77ms | 1.52G | 1.17m | 2.3MB (FP16) | 1.2MB (int8) |
| 나노 렛 -Plus-M-1.5x | 320*320 | 29.9 | 7.21ms | 15.90ms | 1.75g | 2.44m | 4.7MB (FP16) | 2.3MB (int8) |
| 나노 렛 -Plus-M-1.5x | 416*416 | 34.1 | 11.50ms | 25.49ms | 2.97g | 2.44m | 4.7MB (FP16) | 2.3MB (int8) |
| Yolov3-Tiny | 416*416 | 16.6 | - | 37.6ms | 5.62G | 8.86m | 33.7MB |
| Yolov4-Tiny | 416*416 | 21.7 | - | 32.81ms | 6.96g | 6.06m | 23.0MB |
| yolox-nano | 416*416 | 25.8 | - | 23.08ms | 1.08g | 0.91m | 1.8MB (FP16) |
| yolov5-n | 640*640 | 28.4 | - | 44.39ms | 4.5g | 1.9m | 3.8MB (FP16) |
| fbnetv5 | 320*640 | 30.4 | - | - | 1.8g | - | - |
| Mobiledet | 320*320 | 25.6 | - | - | 0.9g | - | - |
미리 훈련 된 모델을 다운로드하고 모델 동물원 또는 릴리스 파일에서 더 많은 모델을 찾으십시오.
ARM 성능은 NCNN을 기준으로 Kirin 980 (4xA76+4XA55) ARM CPU에서 측정됩니다. ncnn_android_benchmark로 휴대 전화에서 대기 시간을 테스트 할 수 있습니다.
인텔 CPU 성능은 OpenVino를 기반으로 Intel Core-I7-8700으로 측정됩니다.
Nanodet Map (0.5 : 0.95)은 테스트 시간 확대없이 Coco Val2017 데이터 세트에서 검증됩니다.
YOLOV3 & YOLOV4 맵은 Scaled-Nolov4 : Scaling Cross Stage 부분 네트워크를 나타냅니다.
[2023.01.20] Pytorch-Lightning-1.9로 업그레이드. 최소 Pytorch 버전은 1.10으로 업그레이드됩니다. FP16 교육을 지원합니다 (감사합니다 @Crisp-Snakey.). 지원 라벨을 무시하십시오 ( @zero0kiriyu 감사합니다).
[2022.08.26] Pytorch-Lightning-1.7로 업그레이드. 최소 Pytorch 버전은 1.9로 업그레이드됩니다. Pytorch의 이전 버전을 사용하려면 Nanodet <= v1.0.0-alpha-1을 설치하십시오.
[2021.12.25] Nanodet-plus 릴리스! AGM (Guidance Module 할당) 및 DSLA (동적 소프트 레이블 할당자) 추가하여 비용이 적은 비용으로 7 맵을 개선합니다.
업데이트 메모에서 더 많은 업데이트 메모를 찾으십시오.

Android 데모 프로젝트는 demo_android_ncnn 폴더에 있습니다. Android 데모 가이드를 참조하십시오.
다음은 더 나은 구현 NCNN-Android-Nanodet입니다
NCNN을 기반으로 한 C ++ 데모는 DEMO_NCNN 폴더에 있습니다. CPP 데모 안내서를 참조하십시오.
Alibaba의 MNN 프레임 워크를 사용한 추론은 DEMO_MNN 폴더에 있습니다. MNN 데모 가이드를 참조하십시오.
OpenVino를 사용한 추론은 demo_openvino 폴더에 있습니다. OpenVino 데모 가이드를 참조하십시오.
https://nihui.github.io/ncnn-webassembly-nanodet/
먼저, 요구 사항을 설치하고 설치 안내서를 따라 Nanodet을 설정하십시오. 그런 다음 여기에서 Coco Pretrain 무게를 다운로드하십시오
코코 프리 트레인 체크 포인트
사전 훈련 된 중량은 구성 config/nanodet-plus-m_416.yml 에 의해 교육되었습니다.
python demo/demo.py image --config CONFIG_PATH --model MODEL_PATH --path IMAGE_PATHpython demo/demo.py video --config CONFIG_PATH --model MODEL_PATH --path VIDEO_PATHpython demo/demo.py webcam --config CONFIG_PATH --model MODEL_PATH --camid YOUR_CAMERA_ID게다가, 우리는 Pytorch와 함께 작동하는 방법을 보여주는 노트북을 제공합니다.
conda create -n nanodet python=3.8 -y
conda activate nanodetconda install pytorch torchvision cudatoolkit=11.1 -c pytorch -c conda-forgegit clone https://github.com/RangiLyu/nanodet.git
cd nanodetpip install -r requirements.txtpython setup.py developNanodet은 다양한 백본을 지원합니다. 샘플 교육 구성 파일을 보려면 구성 폴더로 이동하십시오.
| 모델 | 등뼈 | 해결 | 코코 맵 | 플롭 | 매개 변수 | 사전 훈련 중량 |
|---|---|---|---|---|---|---|
| 나노 렛 -M | Shufflenetv2 1.0x | 320*320 | 20.6 | 0.72g | 0.95m | 다운로드 |
| 나노 렛 -Plus-M-320 ( 신규 ) | Shufflenetv2 1.0x | 320*320 | 27.0 | 0.9g | 1.17m | 무게 | 검문소 |
| Nanodet-Plus-M-416 ( 신규 ) | Shufflenetv2 1.0x | 416*416 | 30.4 | 1.52G | 1.17m | 무게 | 검문소 |
| Nanodet-plus-m-1.5x-320 ( 신규 ) | Shufflenetv2 1.5x | 320*320 | 29.9 | 1.75g | 2.44m | 무게 | 검문소 |
| Nanodet-plus-m-1.5x-416 ( 신규 ) | Shufflenetv2 1.5x | 416*416 | 34.1 | 2.97g | 2.44m | 무게 | 검문소 |
통지 : Weight 와 Checkpoint 의 차이는 무게 만 추론 시간에 매개 변수를 제공하지만 검사 점에는 훈련 시간 매개 변수가 포함되어 있습니다.
레거시 모델 동물원
| 모델 | 등뼈 | 해결 | 코코 맵 | 플롭 | 매개 변수 | 사전 훈련 중량 |
|---|---|---|---|---|---|---|
| 나노 데트 M-416 | Shufflenetv2 1.0x | 416*416 | 23.5 | 1.2g | 0.95m | 다운로드 |
| 나노 데트 M-1.5x | Shufflenetv2 1.5x | 320*320 | 23.5 | 1.44g | 2.08m | 다운로드 |
| Nanodet-M-1.5x-416 | Shufflenetv2 1.5x | 416*416 | 26.8 | 2.42G | 2.08m | 다운로드 |
| 나노 데트 M-0.5x | Shufflenetv2 0.5x | 320*320 | 13.5 | 0.3g | 0.28m | 다운로드 |
| 나노 렛 -T | Shufflenetv2 1.0x | 320*320 | 21.7 | 0.96g | 1.36m | 다운로드 |
| 나노 렛 -g | 맞춤형 CSP NET | 416*416 | 22.9 | 4.2g | 3.81m | 다운로드 |
| 나노 렛 효율성 | 효율적인 NET-LITE0 | 320*320 | 24.7 | 1.72g | 3.11m | 다운로드 |
| 나노 렛 효율성 | 효율적인 NET-LITE1 | 416*416 | 30.3 | 4.06g | 4.01m | 다운로드 |
| 나노 렛 효율성 | 효율적인 NET-LITE2 | 512*512 | 32.6 | 7.12g | 4.71m | 다운로드 |
| Nanodet-Repvgg | repvgg-a0 | 416*416 | 27.8 | 11.3g | 6.75m | 다운로드 |
데이터 세트를 준비하십시오
데이터 세트 주석이 Pascal Voc XML 형식 인 경우 config/nanodet_custom_xml_dataset.yml을 참조하십시오.
그렇지 않으면, 데이터 세트 주석이 Yolo Format (DarkNet Txt) 인 경우 config/nanodet-plus-m_416-yolo.yml을 참조하십시오.
또는 데이터 세트 주석을 MS Coco 형식으로 변환합니다 (Coco Annotation 형식 세부 사항).
구성 파일을 준비하십시오
구성/ 폴더에서 예제 YML 구성 파일을 복사하여 수정하십시오.
Save_dir를 모델을 저장하려는 곳으로 변경하십시오.
Model-> Arch-> 헤드 에서 Num_classes를 변경하십시오.
데이터-> 트레인 및 데이터-> val 에서 이미지 경로 및 주석 경로를 변경하십시오.
장치 에 GPU ID, Num Workers 및 Batch Size를 설정하십시오.
데이터 세트 및 배치 크기에 따라 Total_epochs , LR 및 LR_SCHEDULE을 설정하십시오.
네트워크, 데이터 증강 또는 기타 사항을 수정하려면 구성 파일 세부 사항을 참조하십시오.
훈련을 시작하십시오
Nanodet은 이제 훈련을 위해 Pytorch Lightning을 사용하고 있습니다.
단일 GPU 또는 다중 GPU의 경우 실행 :
python tools/train.py CONFIG_FILE_PATH로그를 시각화합니다
Tensorboard 로그는 구성 파일에서 설정 한 save_dir 에 저장됩니다.
텐서 보드 로그를 시각화하려면 실행하십시오.
cd < YOUR_SAVE_DIR >
tensorboard --logdir ./Nanodet은 NCNN, OpenVino 및 MNN을 포함한 다중 백 커드 C ++ 데모를 제공합니다. NCNN 라이브러리를 기반으로 한 Android 데모도 있습니다.
Nanodet Pytorch 모델을 NCNN으로 변환하려면이 방법을 선택할 수 있습니다 : Pytorch-> Onnx-> NCNN
Onnx 모델을 내보내려면 tools/export_onnx.py 실행하십시오.
python tools/export_onnx.py --cfg_path ${CONFIG_PATH} --model_path ${PYTORCH_MODEL_PATH}Demo_ncnn을 참조하십시오.
demo_openvino를 참조하십시오.
demo_mnn을 참조하십시오.
Android_demo를 참조하십시오.
이 프로젝트가 연구에 유용하다고 생각되면 인용을 고려하십시오.
@misc { =nanodet ,
title = { NanoDet-Plus: Super fast and high accuracy lightweight anchor-free object detection model. } ,
author = { RangiLyu } ,
howpublished = { url{https://github.com/RangiLyu/nanodet} } ,
year = { 2021 }
}https://github.com/tencent/ncnn
https://github.com/open-mmlab/mmdetection
https://github.com/implus/gfocal
https://github.com/cmdbug/yolov5_ncnn
https://github.com/rbgirshick/yacs