基于昇腾 NPU 的昆虫目标检测与细粒度识别模型,支持 2037 个昆虫类别,涵盖目、科、属、种等多个分类级别。该模型专为生态学、农业保护和生物多样性研究设计,能够在昇腾 NPU 上高效完成昆虫图像中的目标检测和精准分类。
pip install torch torch_npu torchvision pillow numpy onnx onnx2torch modelscopepip install modelscope
modelscope download --model Genius-Society/insecta --local_dir ./insecta_model# 单张图片推理(含精度对比验证)
python inference.py --image insecta_model/examples/butterfly.jpg --conf 0.15
# 跳过精度对比,仅 NPU 推理
python inference.py --image insecta_model/examples/beetle.jpg --no-comparepython inference.py --image insecta_model/examples/butterfly.jpg --benchmarkpython evaluation/eval_precision.pypython evaluation/eval_performance.py| 项目 | 说明 |
|---|---|
| 模型名称 | Insecta - Insect Detection & Identification |
| 任务类型 | 目标检测 + 细粒度昆虫分类 |
| 模型结构 | YOLOv5 检测器 + CNN 分类器(两阶段级联) |
| 检测器输入 | RGB 图像 (640x640) |
| 检测器输出 | 边界框 + 置信度 + 类别 (25200 候选 x 6) |
| 分类器输入 | RGB 裁剪区域 (224x224) |
| 分类器输出 | 2037 类昆虫概率分布 |
| 支持类别数 | 2037 个昆虫分类单元(目/科/属/种) |
| 原始框架 | PyTorch (ONNX 导出) |
| 适配框架 | PyTorch + torch_npu (ONNX->PyTorch 转换) |
| 原项目 | quarrying/quarrying-insect-id |
Pipeline: 两阶段级联推理
Input Image (任意分辨率)
│
▼
┌─────────────────┐
│ Stage 1: YOLOv5 │ Input: [1, 3, 640, 640]
│ Detector │ Output: [1, 25200, 6]
└────────┬────────┘ NMS + Confidence Filtering
│
▼ Crop Regions
┌─────────────────┐
│ Stage 2: CNN │ Input: [1, 3, 224, 224]
│ Identifier │ Backbone: Conv+BN+ReLU6 Blocks
│ │ Head: FC -> 2037 classes
└────────┬────────┘ Output: [1, 2037] logits
│
▼ Softmax + Top-K
┌─────────────────┐
│ Result: │
│ Class + BBox + │
│ Confidence │
└─────────────────┘测试平台:Ascend 910A / CANN 8.5.1 / torch_npu 2.9.0
| 测试图片 | 检测数 (CPU) | 检测数 (NPU) | Top-1 类别一致性 | 标识符相对MAE | 结果 |
|---|---|---|---|---|---|
| butterfly.jpg | 1 | 1 | 金斑蝶 (Danaus chrysippus) | 0.1277% | PASS |
| beetle.jpg | 1 | 1 | 麻步甲 (Carabus brandti) | 0.1516% | PASS |
各模块精度偏差:
| 模型模块 | 元素数 | 最大绝对误差 | 平均绝对误差 | 相对 MAE |
|---|---|---|---|---|
| 检测器 (Detector) | 151,200 | 0.9390 | 0.00664 | 0.0053% |
| 分类器 (Identifier) | 2,037 | 0.0055 | 0.00099 | 0.1277% |
精度判定: PASS — 相对MAE < 1%阈值,Top-1 类别 100% 一致,检测框数量完全匹配。
| 指标 | CPU | NPU | 加速比 |
|---|---|---|---|
| 检测器延迟 | 454.41 ms | 11.01 ms | 41.3x |
| 分类器延迟 | 29.18 ms | 4.66 ms | 6.3x |
| 端到端推理 (单检测) | 483.59 ms | 15.67 ms | 30.9x |
NPU 分类器批量吞吐量:
| Batch Size | 延迟 | 吞吐量 |
|---|---|---|
| 1 | 4.71 ms | 212.3 imgs/s |
| 2 | 4.71 ms | 424.8 imgs/s |
| 4 | 4.69 ms | 852.7 imgs/s |
| 8 | 5.66 ms | 1412.9 imgs/s |
精度评测和性能评测源代码位于 evaluation/ 目录:
# 精度评测 (CPU vs NPU 原始输出对比)
python evaluation/eval_precision.py
# 性能评测 (延迟基准测试)
python evaluation/eval_performance.py├── README.md # 本文档(部署文档 + 评测报告)
├── inference.py # NPU 推理脚本(含精度验证 + 性能基准)
├── evaluation/
│ ├── eval_precision.py # 精度评测脚本
│ ├── eval_precision.log # 精度评测运行日志
│ ├── eval_performance.py # 性能评测脚本
│ └── eval_performance.log # 性能评测运行日志
└── insecta_model/ # 模型文件 (ModelScope 下载)
├── quarrying_insect_detector.onnx # YOLOv5 检测器 (27MB)
├── quarrying_insect_identifier.onnx # CNN 分类器 (21.6MB)
├── quarrying_insectid_label_map.txt # 2037 类标签映射
├── configuration.json # 模型配置
└── examples/
├── butterfly.jpg # 示例:金斑蝶
└── beetle.jpg # 示例:麻步甲onnx2torch 将原始 ONNX 模型转换为 PyTorch FX GraphModule.eval() 设置评估模式.to("npu") 将模型移至 Ascend NPU,torch_npu 自动处理算子映射