这是一个用于评估UAV和鸟类检测模型性能的完整工具集,包括误报率、漏报率、分类准确率和推理速度等关键指标的评估。
model_evaluator.py
- 主要的模型评估类,包含所有评估逻辑run_evaluation.py
- 简化的运行脚本,提供命令行接口evaluation_config.json
- 配置文件,可自定义评估参数generate_test_data.py
- 测试数据生成器(当没有真实数据时使用)example_balanced_evaluation.py
- 平衡采样评估示例脚本✅ 多种评估指标
✅ 推理速度评估
✅ 灵活的数据加载
✅ 可视化和报告
✅ 多模型支持
确保已安装必要的依赖:
pip install opencv-python numpy matplotlib seaborn pandas tqdm
将测试数据按以下结构组织:
data/
├── BIRDS/ # 鸟类图像
├── UAV/ # 无人机图像
└── OTHERS/ # 其他类型图像(背景等)
基本用法:
python run_evaluation.py --data-dir ./data
平衡采样评估(推荐):
# 使用2:2:6比例进行平衡采样
python run_evaluation.py \
--data-dir ./data \
--sample-size 1000 \
--balanced-sampling \
--bird-ratio 0.2 \
--uav-ratio 0.2 \
--others-ratio 0.6
自定义参数:
python run_evaluation.py \
--model-type uav_and_bird \
--threshold 0.6 \
--data-dir ./test_data \
--sample-size 1000 \
--output-dir ./results
完整参数列表:
python run_evaluation.py \
--model-type uav_and_bird \
--threshold 0.5 \
--data-dir ./data \
--sample-size 1000 \
--balanced-sampling \
--bird-ratio 0.2 \
--uav-ratio 0.2 \
--others-ratio 0.6 \
--output-dir ./results \
--config ./evaluation_config.json \
--generate-data
参数说明:
--model-type
: 模型类型 (uav_and_bird, Anti_UAV, UAV-250411)--threshold
: 置信度阈值 (0.0-1.0)--data-dir
: 测试数据目录--sample-size
: 采样大小,None表示使用全部数据--balanced-sampling
: 启用平衡采样--bird-ratio
: 鸟类样本比例 (0.0-1.0)--uav-ratio
: 无人机样本比例 (0.0-1.0)--others-ratio
: 其他样本比例 (0.0-1.0)--output-dir
: 输出目录--config
: 配置文件路径--generate-data
: 强制重新生成测试数据运行示例脚本:
# 运行平衡采样示例
python example_balanced_evaluation.py
python run_evaluation.py --help
参数说明:
--config, -c
: 配置文件路径(默认:evaluation_config.json)--data-dir, -d
: 测试数据目录(默认:Data)--model-type, -m
: 模型类型(uav_and_bird/Anti_UAV/UAV-250411)--threshold, -t
: 置信度阈值(默认:0.5)--sample-size, -s
: 采样大小(None表示全部数据)--generate-data, -g
: 强制重新生成测试数据--output-dir, -o
: 输出目录(默认:evaluation_results)可以通过修改 evaluation_config.json
来自定义评估参数:
{
"evaluation_settings": {
"model_type": "uav_and_bird",
"confidence_threshold": 0.5,
"iou_threshold": 0.5,
"sample_size": null,
"balanced_sampling": {
"enabled": false,
"bird_ratio": 0.2,
"uav_ratio": 0.2,
"others_ratio": 0.6,
"description": "平衡采样配置:按指定比例抽取各类别样本"
}
},
"data_settings": {
"data_directory": "Data",
"use_folder_structure": true,
"annotation_file": null
},
"output_settings": {
"output_directory": "evaluation_results",
"generate_plots": true,
"save_detailed_results": true
}
}
平衡采样是一种重要的评估策略,可以确保各类别样本按指定比例分布,避免数据不平衡对评估结果的影响:
为什么使用平衡采样?
from model_evaluator import ModelEvaluator
# 初始化评估器
evaluator = ModelEvaluator(
model_type='uav_and_bird',
threshold=0.5,
iou_threshold=0.5
)
# 加载ground truth
ground_truth = evaluator.load_ground_truth_from_folder_structure('Data')
# 运行评估
metrics = evaluator.evaluate_dataset(ground_truth, sample_size=100)
# 生成报告
report_file = evaluator.generate_report(metrics, 'results')
plot_file = evaluator.plot_results(metrics, 'results')
如果有自定义的标注文件,格式应为:
[
{
"image_path": "path/to/image1.jpg",
"label": "uav",
"bbox": [x, y, width, height] // 可选
},
{
"image_path": "path/to/image2.jpg",
"label": "bird",
"bbox": [x, y, width, height] // 可选
}
]
然后使用:
ground_truth = evaluator.load_ground_truth_from_file('annotations.json')
混淆矩阵是评估分类模型性能的基础,包含四个关键指标:
真正例(True Positive, TP):模型正确地将正样本(如UAV或鸟类)识别为正类的数量。
假正例(False Positive, FP):模型错误地将负样本识别为正类的数量,即误报。
假负例(False Negative, FN):模型错误地将正样本识别为负类的数量,即漏报。
真负例(True Negative, TN):模型正确地将负样本识别为负类的数量。
精确率衡量模型预测为正类的样本中实际为正类的比例,反映了模型的准确性。
召回率衡量模型能够正确识别出的实际正样本的比例,反映了模型的完整性。
F1分数是精确率和召回率的调和平均值,提供了模型性能的综合评价。
准确率衡量模型正确预测的样本比例。
误报率衡量模型将负样本错误分类为正样本的比例。
漏报率衡量模型将正样本错误分类为负样本的比例。
对于多类别检测(如区分UAV和鸟类),系统会计算每个类别的单独指标:
这些指标帮助分析模型对不同类别的识别能力,发现模型在特定类别上的优势和不足。
IoU是评估目标检测边界框准确性的关键指标。
高精确率的重要性:
高召回率的重要性:
生态保护场景:
机场鸟击防护:
实时监控系统:
批量处理系统:
提高精确率的方法:
提高召回率的方法:
提高推理速度:
保持准确性:
UAV检测模型:
鸟类检测模型:
高精确率,低召回率:
低精确率,高召回率:
精确率和召回率都低:
推理速度慢:
评估完成后,会在输出目录中生成:
evaluation_report_YYYYMMDD_HHMMSS.txt
- 详细的文本报告evaluation_plots_YYYYMMDD_HHMMSS.png
- 可视化图表detailed_results_YYYYMMDD_HHMMSS.json
- 详细的JSON结果(如果启用)模型加载失败
找不到测试数据
--generate-data
生成测试数据内存不足
--sample-size
限制处理的图像数量推理速度慢
在代码中设置详细日志:
import logging
logging.basicConfig(level=logging.DEBUG)
在 ModelEvaluator
类中添加新的方法:
def calculate_custom_metric(self, results):
# 实现自定义指标计算
pass
在 inference.py
中添加新的模型处理逻辑,然后在评估器中引用。
修改 plot_results
方法来添加新的图表类型。
欢迎提交问题报告和功能请求。如果要贡献代码,请:
本项目采用 MIT 许可证。详见 LICENSE 文件。