panhg/insecta
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Insecta - Insect Detection & Identification (Ascend NPU 适配)

基于昇腾 NPU 的昆虫目标检测与细粒度识别模型,支持 2037 个昆虫类别,涵盖目、科、属、种等多个分类级别。该模型专为生态学、农业保护和生物多样性研究设计,能够在昇腾 NPU 上高效完成昆虫图像中的目标检测和精准分类。

  • HuggingFace: https://huggingface.co/Genius-Society/insecta
  • ModelScope: https://www.modelscope.cn/models/Genius-Society/insecta
  • 在线体验: https://www.modelscope.cn/studios/Genius-Society/insecta

环境要求

  • 硬件: 华为昇腾 Atlas 800 A2/A3 (Ascend 910B/910A)
  • CANN: 8.5.1+
  • Python: 3.11+
  • PyTorch: 2.x with torch_npu

依赖安装

pip install torch torch_npu torchvision pillow numpy onnx onnx2torch modelscope

快速开始

下载模型

pip install modelscope
modelscope download --model Genius-Society/insecta --local_dir ./insecta_model

NPU 推理

# 单张图片推理(含精度对比验证)
python inference.py --image insecta_model/examples/butterfly.jpg --conf 0.15

# 跳过精度对比,仅 NPU 推理
python inference.py --image insecta_model/examples/beetle.jpg --no-compare

性能基准测试

python inference.py --image insecta_model/examples/butterfly.jpg --benchmark

精度评测 (CPU vs NPU)

python evaluation/eval_precision.py

性能评测

python 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       │
└─────────────────┘

昇腾 NPU 适配验证结果

精度验证

测试平台:Ascend 910A / CANN 8.5.1 / torch_npu 2.9.0

测试图片检测数 (CPU)检测数 (NPU)Top-1 类别一致性标识符相对MAE结果
butterfly.jpg11金斑蝶 (Danaus chrysippus)0.1277%PASS
beetle.jpg11麻步甲 (Carabus brandti)0.1516%PASS

各模块精度偏差:

模型模块元素数最大绝对误差平均绝对误差相对 MAE
检测器 (Detector)151,2000.93900.006640.0053%
分类器 (Identifier)2,0370.00550.000990.1277%

精度判定: PASS — 相对MAE < 1%阈值,Top-1 类别 100% 一致,检测框数量完全匹配。

性能验证

指标CPUNPU加速比
检测器延迟454.41 ms11.01 ms41.3x
分类器延迟29.18 ms4.66 ms6.3x
端到端推理 (单检测)483.59 ms15.67 ms30.9x

NPU 分类器批量吞吐量:

Batch Size延迟吞吐量
14.71 ms212.3 imgs/s
24.71 ms424.8 imgs/s
44.69 ms852.7 imgs/s
85.66 ms1412.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                        # 示例:麻步甲

适配要点

  1. ONNX -> PyTorch 转换: 使用 onnx2torch 将原始 ONNX 模型转换为 PyTorch FX GraphModule
  2. BatchNorm 修复: 转换后需要显式调用 .eval() 设置评估模式
  3. NPU 部署: 通过 .to("npu") 将模型移至 Ascend NPU,torch_npu 自动处理算子映射
  4. 精度保证: 相对 MAE 0.15% < 1%,检测框数量和 Top-1 分类完全一致

致谢

  • 原始模型: Genius-Society/insecta
  • 原项目: quarrying/quarrying-insect-id
  • 昇腾适配: Huawei Ascend / CANN / torch_npu