
แบบจำลองการตรวจจับวัตถุที่ไม่มีจุดยึดที่มีน้ำหนักเบาเร็วและมีความแม่นยำสูง เรียลไทม์บนอุปกรณ์มือถือ

Nanodet เป็นรูปแบบการตรวจจับวัตถุแบบแยกส่วนหนึ่งขั้นตอน FCOS ซึ่งใช้การสูญเสียโฟกัสทั่วไปเป็นการจำแนกประเภทและการสูญเสียการถดถอย
ใน Nanodet-Plus เราเสนอกลยุทธ์การกำหนดฉลากใหม่ด้วย โมดูลคำแนะนำการกำหนดอย่างง่าย (AGM) และ ตัวกำหนดป้ายกำกับ Soft Label แบบไดนามิก (DSLA) เพื่อแก้ปัญหาการกำหนดฉลากที่ดีที่สุดในการฝึกอบรมแบบจำลองน้ำหนักเบา นอกจากนี้เรายังแนะนำปิรามิดคุณสมบัติเบาที่เรียกว่า Ghost-Pan เพื่อปรับปรุงการหลอมรวมคุณสมบัติหลายชั้น การปรับปรุงเหล่านี้ช่วยเพิ่มความแม่นยำในการตรวจจับของ Nanodet ก่อนหน้านี้โดย 7 แผนที่ บนชุดข้อมูล Coco
Nanodet-plus 知乎中文介绍
นาโนเดต知乎中文介绍
qq 交流群: 908606542 (答案: 炼丹)
| แบบอย่าง | ปณิธาน | แผนที่ Val 0.5: 0.95 | เวลาแฝง CPU (i7-8700) | เวลาแฝงแขน (4xa76) | ความกระฉับกระเฉง | พารามิเตอร์ | ขนาดรุ่น |
|---|---|---|---|---|---|---|---|
| Nanodet-M | 320*320 | 20.6 | 4.98ms | 10.23ms | 0.72 กรัม | 0.95m | 1.8MB (FP16) | 980kB (int8) |
| Nanodet-plus-M | 320*320 | 27.0 | 5.25ms | 11.97ms | 0.9G | 1.17m | 2.3MB (FP16) | 1.2MB (int8) |
| Nanodet-plus-M | 416*416 | 30.4 | 8.32ms | 19.77ms | 1.52G | 1.17m | 2.3MB (FP16) | 1.2MB (int8) |
| Nanodet-Plus-M-1.5X | 320*320 | 29.9 | 7.21ms | 15.90ms | 1.75 กรัม | 2.44m | 4.7MB (FP16) | 2.3MB (int8) |
| Nanodet-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.5 กรัม | 1.9m | 3.8MB (FP16) |
| fbnetv5 | 320*640 | 30.4 | - | - | 1.8 กรัม | - | - |
| Mobiledet | 320*320 | 25.6 | - | - | 0.9G | - | - |
ดาวน์โหลดรุ่นที่ผ่านการฝึกอบรมมาก่อนและค้นหารุ่นเพิ่มเติมใน Model Zoo หรือในไฟล์รุ่น
ประสิทธิภาพของแขนวัดจาก Kirin 980 (4xA76+4XA55) CPU ARM ที่ใช้ NCNN คุณสามารถทดสอบเวลาแฝงบนโทรศัพท์ของคุณด้วย ncnn_android_benchmark
ประสิทธิภาพของ Intel CPU วัดจาก Intel Core-I7-8700 ตาม OpenVino
แผนที่นาโน (0.5: 0.95) ได้รับการตรวจสอบความถูกต้องในชุดข้อมูล Coco Val2017 โดยไม่มีการเพิ่มเวลาทดสอบ
แผนที่ YOLOV3 & YOLOV4 หมายถึงจาก Scaled-YOLOV4: การปรับสเกลเครือข่ายบางส่วนข้ามเวที
[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 Release! การเพิ่ม AGM (กำหนดโมดูลคำแนะนำ) & DSLA (ตัวกำหนดฉลากซอฟต์แบบไดนามิก) เพื่อปรับปรุง แผนที่ 7 ด้วยค่าใช้จ่ายเพียงเล็กน้อยเท่านั้น
ค้นหาบันทึกการอัปเดตเพิ่มเติมในบันทึกการอัปเดต

โครงการสาธิต Android อยู่ในโฟลเดอร์ Demo_android_NCNN โปรดดูคู่มือการสาธิต Android
นี่คือการใช้งานที่ดีกว่า ncnn-android-nanodet
การสาธิต C ++ ที่ใช้ NCNN อยู่ในโฟลเดอร์ DEMO_NCNN โปรดดูคู่มือการสาธิต CPP
การอนุมานโดยใช้กรอบ MNN ของอาลีบาบาอยู่ในโฟลเดอร์ DEMO_MNN โปรดดูคู่มือการสาธิต MNN
การอนุมานโดยใช้ OpenVino อยู่ในโฟลเดอร์ DEMO_OPENVINO โปรดดูคู่มือการสาธิต OpenVino
https://nihui.github.io/ncnn-webassembly-nanodet/
ขั้นแรกให้ติดตั้งข้อกำหนดและการตั้งค่านาโนเม็ตตามคู่มือการติดตั้ง จากนั้นดาวน์โหลดน้ำหนัก Coco Pretrain จากที่นี่
จุดตรวจ 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 รองรับ backbones ที่หลากหลาย ไปที่โฟลเดอร์ config เพื่อดูไฟล์การฝึกอบรมตัวอย่าง
| แบบอย่าง | กระดูกสันหลัง | ปณิธาน | แผนที่ Coco | ความกระฉับกระเฉง | พารามิเตอร์ | น้ำหนักก่อนรถไฟ |
|---|---|---|---|---|---|---|
| Nanodet-M | shufflenetv2 1.0x | 320*320 | 20.6 | 0.72 กรัม | 0.95m | การดาวน์โหลด |
| Nanodet-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.75 กรัม | 2.44m | น้ำหนัก | ด่าน |
| Nanodet-Plus-M-1.5X-416 ( ใหม่ ) | shufflenetv2 1.5x | 416*416 | 34.1 | 2.97G | 2.44m | น้ำหนัก | ด่าน |
ข้อสังเกต : ความแตกต่างระหว่าง Weight และ Checkpoint เป็นน้ำหนักเท่านั้นที่ให้เวลาพารามิเตอร์ในเวลาอนุมาน แต่จุดตรวจมีพารามิเตอร์เวลาการฝึกอบรม
สวนสัตว์รุ่นมรดก
| แบบอย่าง | กระดูกสันหลัง | ปณิธาน | แผนที่ Coco | ความกระฉับกระเฉง | พารามิเตอร์ | น้ำหนักก่อนรถไฟ |
|---|---|---|---|---|---|---|
| Nanodet-M-416 | shufflenetv2 1.0x | 416*416 | 23.5 | 1.2 กรัม | 0.95m | การดาวน์โหลด |
| Nanodet-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 | การดาวน์โหลด |
| Nanodet-M-0.5x | Shufflenetv2 0.5x | 320*320 | 13.5 | 0.3G | 0.28m | การดาวน์โหลด |
| Nanodet-T | shufflenetv2 1.0x | 320*320 | 21.7 | 0.96 กรัม | 1.36m | การดาวน์โหลด |
| Nanodet-G | CSP NET ที่กำหนดเอง | 416*416 | 22.9 | 4.2 กรัม | 3.81m | การดาวน์โหลด |
| Nanodet-efficientlite | efficientnet-lite0 | 320*320 | 24.7 | 1.72G | 3.11m | การดาวน์โหลด |
| Nanodet-efficientlite | Efficientnet-Lite1 | 416*416 | 30.3 | 4.06G | 4.01m | การดาวน์โหลด |
| Nanodet-efficientlite | Efficientnet-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 (darknet txt) โปรดดูที่ config/nanodet-plus-m_416-yolo.yml
หรือแปลงคำอธิบายประกอบชุดข้อมูลของคุณเป็นรูปแบบ MS Coco (รายละเอียดรูปแบบคำอธิบายประกอบ Coco)
เตรียมไฟล์กำหนดค่า
คัดลอกและแก้ไขตัวอย่างไฟล์กำหนดค่า YML ในการกำหนดค่า/ โฟลเดอร์
เปลี่ยน save_dir เป็นที่ที่คุณต้องการบันทึกโมเดล
เปลี่ยน num_classes ใน model-> arch-> head
เปลี่ยนเส้นทางภาพและเส้นทางคำอธิบายประกอบทั้งใน Data-> Train และ Data-> Val
ตั้งค่า GPU ID คนงาน NUM และขนาดแบทช์ใน อุปกรณ์ เพื่อให้พอดีกับอุปกรณ์ของคุณ
ตั้งค่า Total_epochs , LR และ LR_SCHEDULE ตามชุดข้อมูลและ BatchSize ของคุณ
หากคุณต้องการแก้ไขเครือข่ายการเพิ่มข้อมูลหรือสิ่งอื่น ๆ โปรดดูรายละเอียดไฟล์กำหนดค่า
เริ่มการฝึกอบรม
Nanodet กำลังใช้ Pytorch Lightning สำหรับการฝึกอบรม
สำหรับทั้ง GPU Single-GPU หรือ Multiple-GPUs, Run:
python tools/train.py CONFIG_FILE_PATHแสดงภาพบันทึก
บันทึก Tensorboard จะถูกบันทึกไว้ใน save_dir ซึ่งคุณตั้งค่าในไฟล์ config
หากต้องการแสดงภาพบันทึก Tensorboard ให้เรียกใช้:
cd < YOUR_SAVE_DIR >
tensorboard --logdir ./Nanodet ให้การสาธิต C ++ หลายแบ็คเอนด์รวมถึง NCNN, OpenVino และ MNN นอกจากนี้ยังมีการสาธิต Android ตามห้องสมุด NCNN
ในการแปลงโมเดล 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