项目目标
红外相机在野生动物调查中会积累大量图片,逐张人工筛选的成本很高。本项目希望训练一个基础模型,从包含多种动物的相机图片中重点识别两类目标:藏酋猴和野猪。
本阶段先使用公开的 LoTE-Animal 数据集完成训练和独立测试。模型当前处理的是已经由标注框裁剪出的动物区域,因此属于“物种分类器”。后续还需要在分类器之前接入动物检测模型,才能直接处理整张、未标注的红外相机 JPG 图片。
数据集介绍
LoTE-Animal 是一个面向濒危动物理解的长期野外数据集。其数据来自真实自然环境,时间跨度约 12 年,包含昼夜变化、不同季节、遮挡、运动模糊和复杂背景等情况。数据集论文发表于 ICCV 2023,可在 CVF Open Access 查看。
本项目使用 LoTE-Animal 的 wild 图片子集和修正版 COCO 标注,共读取到:
| 数据项 | 数量 |
|---|---|
| JPG 图片 | 21,987 张 |
| 动物实例框 | 35,278 个 |
| 原始物种 | 11 种 |
根据实际任务,将原始 11 个物种重新映射为三个分类标签:
tibetan_macaque:藏酋猴,对应MacacaThibetana;wild_boar:野猪,对应SusScrofa;other:其余 9 种动物,用于降低其他物种被误报为目标物种的概率。
沿用数据集提供的训练集、验证集和测试集划分。以下数字按动物实例框统计,而不是按图片统计:
| 划分 | other | 藏酋猴 | 野猪 | 合计 |
|---|---|---|---|---|
| 训练集 | 18,883 | 4,512 | 1,214 | 24,609 |
| 验证集 | 2,688 | 634 | 152 | 3,474 |
| 测试集 | 5,479 | 1,382 | 334 | 7,195 |
可以看到,野猪样本明显少于另外两类,因此训练时不能只关注总体准确率,还要分别查看藏酋猴和野猪的精确率、召回率及 F1 分数。
训练集样例
下面给出两张实际训练图像。红框来自 LoTE-Animal 提供的 COCO 标注;训练时程序并不是直接把整张图送入分类网络,而是围绕红框向外保留约 15% 的边缘,再裁剪动物区域。两张图分别展示了林下近距离拍摄的藏酋猴和雪地环境中的野猪,也说明数据中同时存在视角、背景、季节与目标尺度的变化。

训练集藏酋猴样例。目标距离相机较近,动物只占据画面的局部区域。

训练集野猪样例。积雪、枝叶遮挡和背景变化增加了识别难度。图像来源:LoTE-Animal 数据集。
算法介绍
1. 动物区域裁剪
训练时根据 COCO 标注中的目标框裁剪动物,并在目标框四周保留约 15% 的边缘,使模型既能看到动物主体,也能保留少量环境信息。裁剪在读取图片时动态完成,不额外复制一套裁剪图,节省磁盘空间。
2. 分类网络
分类模型采用在 ImageNet 上预训练的 EfficientNet-B0,再针对 other、tibetan_macaque 和 wild_boar 三个类别进行微调。选择该网络的原因是模型规模较小、训练和推理成本适中,适合作为第一版基线以及后续 ONNX 部署。
输入图片统一缩放为 224×224。训练阶段使用随机裁剪、水平翻转、颜色扰动和随机灰度等数据增强,以提高模型对红外图像、光照变化和拍摄条件变化的适应能力。
3. 类别不平衡处理
由于野猪样本较少,损失函数使用按类别频率计算权重的交叉熵,使少数类别的错误获得更高权重。优化器采用 AdamW,初始学习率为 3e-4,并通过余弦退火逐步降低学习率。
4. 训练设置
正式训练在一张 NVIDIA RTX 3090(24 GB 显存)上完成,主要设置如下:
| 参数 | 设置 |
|---|---|
| 深度学习框架 | PyTorch 2.4.1 |
| 主干网络 | EfficientNet-B0 |
| 输入尺寸 | 224×224 |
| Batch size | 128 |
| 最大训练轮数 | 15 |
| 优化器 | AdamW |
| 初始学习率 | 0.0003 |
| 混合精度 | 开启 |
| 早停耐心值 | 4 轮 |
模型选择不以总体准确率为唯一标准,而是根据藏酋猴与野猪两类 F1 的平均值保存最佳权重,从而让结果更符合本项目的实际目标。
实验结果
模型完成了全部 15 轮训练。按藏酋猴与野猪两类 F1 平均值选择的最佳权重来自第 14 轮;随后只使用该权重在未参与训练和模型选择的测试集上评估。
测试集共包含 7,195 个动物实例,总体准确率为 98.25%。各类别结果如下:
| 类别 | 测试实例 | 精确率 | 召回率 | F1 |
|---|---|---|---|---|
| other | 5,479 | 99.34% | 98.45% | 98.89% |
| 藏酋猴 | 1,382 | 95.48% | 97.83% | 96.64% |
| 野猪 | 334 | 92.55% | 96.71% | 94.58% |
两个目标物种的平均 F1 为 95.61%。从召回结果看,模型正确识别了 1,382 个藏酋猴实例中的 1,352 个,以及 334 个野猪实例中的 323 个。
混淆矩阵如下,行表示真实类别,列表示模型预测类别:
| 真实类别 \ 预测类别 | other | 藏酋猴 | 野猪 |
|---|---|---|---|
| other | 5,394 | 62 | 23 |
| 藏酋猴 | 27 | 1,352 | 3 |
| 野猪 | 9 | 2 | 323 |
结果表明,这个三分类基线已经能够较好地区分两个目标物种。野猪精确率低于其召回率,说明模型对野猪的筛选相对积极:漏掉的野猪较少,但仍有少量其他动物被误判成野猪。实际部署时可以通过调整野猪类别的置信度阈值,在漏检率和人工复核量之间取得平衡。
独立测试集样例
为了把汇总指标落实到具体图像,下面从未参与训练和模型选择的测试集中各选取一张藏酋猴与野猪样例。红框仍表示数据集标注的目标区域;模型实际判断的是红框外扩后得到的动物裁剪图,而不是整张照片。两张样例的真实类别与模型预测类别一致。

藏酋猴测试样例:同一画面中存在多个个体,模型对红框所对应的个体给出了正确分类。

野猪测试样例:目标位于雪地和竹林背景中,模型对红框所对应的个体给出了正确分类。图像来源:LoTE-Animal 数据集。
这些图片用于直观展示数据和正确识别案例,不能替代对全部 7,195 个测试实例的统计评估;总体性能仍应以表格中的精确率、召回率、F1 和混淆矩阵为准。
如何理解这些结果
精确率衡量“模型报出来的目标中有多少是真的”,召回率衡量“真实目标中有多少被模型找到了”,F1 则综合两者。实际用于野外图片初筛时,可以根据工作需求调整置信度阈值:希望尽量不漏掉动物时,可偏向更高召回率;希望减少人工复核量时,可偏向更高精确率。
需要注意,本次结果衡量的是已裁剪动物区域的三分类性能,不能直接等同于整张相机照片的端到端识别率。此外,红外相机常以连拍方式产生相似画面,官方划分中的时间和地点相关性也可能使测试结果高于跨保护区、跨设备部署时的实际表现。因此,最终是否可用仍需在自己的未标注数据中抽样复核。
下一步计划
下一阶段将完成以下工作:
- 导出 ONNX 模型,降低推理环境对 PyTorch 的依赖;
- 接入 MegaDetector,先在整张 JPG 中定位动物,再将动物区域交给本分类器;
- 对自有红外相机数据进行批量推理,输出文件名、预测类别和置信度;
- 人工复核高置信度结果和疑似漏检样本,建立本地小规模标注集;
- 使用本地数据继续微调,改善不同相机、地点和季节造成的域差异。
这版模型的意义是先建立一条可重复运行的数据处理与训练基线。真正面向业务使用时,检测、分类、阈值调整和人工复核应当作为一个完整流程共同评估。