R2CNN_Faster-RCNN_Tensorflow评估体系全解:旋转框mAP计算与VOC评测原理(新手友好完整指南) R2CNN_Faster-RCNN_Tensorflow评估体系全解旋转框mAP计算与VOC评测原理新手友好完整指南【免费下载链接】R2CNN_Faster-RCNN_TensorflowDetectionTeamUCAS/R2CNN_Faster-RCNN_Tensorflow: 是一个基于TensorFlow实现的Faster R-CNN变体适用于遥感图像处理。适合用于需要针对遥感图像进行目标检测的项目。特点是可以提供针对遥感图像优化的模型结构和训练流程。项目地址: https://gitcode.com/gh_mirrors/r2/R2CNN_Faster-RCNN_TensorflowR2CNN_Faster-RCNN_Tensorflow 是一个基于 TensorFlow 实现的 Faster R-CNN 旋转框目标检测开源项目专为遥感图像中的船舶、飞机、体育场等任意朝向目标设计。它的核心特色是支持旋转框Rotated Box输出并内置了完整的 VOC 风格评测体系一条命令即可完成水平框与旋转框双路 mAP 计算、PR 曲线绘制。本文将用通俗的语言带你彻底看懂这个目标检测 mAP 评估流程的每一步。 项目速览R2CNN 与传统 Faster R-CNN 有什么不同普通 Faster R-CNN 只能输出与图像边缘平行的水平矩形框而遥感图像里的飞机、船只、球场几乎都是躺着的——用水平框去框住一个 45° 的飞机会框进大量背景既影响检测精度也影响评测公平性。R2CNNRotational Region CNN的改进在于网络在 ROI 特征上做多方向旋转增强最终输出 5 元组的旋转框参数(x, y, w, h, theta)——中心点、宽高和旋转角。评测时框得准不准需要用旋转 IoU任意两个旋转矩形的重叠度来衡量这正是本文要拆解的重点。 评估流程总览一条命令跑完 mAP 评测整个评测入口是 tools/eval.py运行方式python eval.py --img_dir/PATH/TO/DOTA/IMAGES/ --image_ext.png --test_annotation_path/PATH/TO/TEST/ANNOTATION/ --gpu0执行后评测体系按 4 个阶段工作批量推理eval_with_plac()加载训练好的权重逐张读入测试图同时产出水平框和旋转框两组检测结果落盘缓存检测结果分别存为{VERSION}_detections_h.pkl和{VERSION}_detections_r.pkl方便评测失败后免重跑推理双路评测水平框走 libs/val_libs/voc_eval.py旋转框走 libs/val_libs/voc_eval_r.py二者结构几乎一致只是 IoU 计算方式不同输出报告每个类别打印 Recall / Precision / AP绘制 PR 曲线PR_R.png最后输出所有类别 AP 的均值mAP。评测结果保存目录、GT 标注路径等都在 libs/configs/cfgs.py 中配置EVALUATE_H_DIR、EVALUATE_R_DIR、TEST_ANNOTATION_PATH。 旋转框 mAP 是怎么一步步算出来的第一步检测结果写成标准文本文件voc_eval_r.py的write_voc_results_file()会为每个类别生成一个det_类别名.txt每行格式为图像名 置信度 x y w h theta例如img001 0.98 512.0 340.0 96.0 34.0 -30.0表示一张图里检测到一个置信度 0.98、旋转角 -30° 的目标。这个按类别分文件、按置信度打分的格式是 PASCAL VOC 评测的经典约定。第二步旋转 IoU——两个斜着放的矩形重叠多少这是旋转框评测的核心实现在 libs/box_utils/iou_rotate.py 的iou_rotate_calculate1()中思路非常几何化调用 OpenCV 的cv2.rotatedRectangleIntersection()求出两个旋转矩形的相交多边形顶点用cv2.convexHull()对交点取凸包cv2.contourArea()算出交集面积套用 IoU 公式交集 / (面积1 面积2 - 交集)。为保证速度项目提供了两种加速后端Cython 编写的 CPU 版 libs/box_utils/iou_cpu.pyx以及 C/CUDA 加速的 GPU 版libs/box_utils/rbbox_overlaps.pyx编译方法见 libs/box_utils/setup.py。第三步TP / FP 判定——每个真值框只配享一次命中voc_eval()的判定逻辑是 mAP 计算的灵魂见 libs/val_libs/voc_eval_r.py先排序同一类别的所有检测框按置信度从高到低排好贪心匹配依次取出每个检测框与所在图像的所有真值框GT计算旋转 IoU取最大 IoU判定最大 IoU 0.5阈值ovthresh且该 GT 尚未被命中、不是 difficult 框 →TP真正例并打上det标记其他情况IoU 不达标、GT 已被更高分的框命中、difficult 框→FP假正例。每个 GT 只能被认领一次这避免了模型对同一目标输出多个框就能刷分的问题。第四步从 PR 曲线到 AP再到 mAP判定完 TP/FP 后按累计置信度顺序可算出每个阈值点的 Recall召回率和 Precision精确率连起来就是 PR 曲线。AP 由 libs/val_libs/voc_eval_r.py 的voc_ap()计算积分法默认对 Precision 做包络处理每个召回点取右侧最高精度后近似求 PR 曲线下面积11 点插值法VOC07 传统在召回率 0、0.1、…、1.0 共 11 个点上取最高精度求平均。最后do_python_eval()对每个类别各算一个 APmAP 所有类别 AP 的算术平均值见 libs/val_libs/voc_eval_r.py。DOTA 数据集共 15 个类别roundabout、ship、plane 等类别映射定义在 libs/label_name_dict/label_dict.py。 水平框 vs 旋转框评测一张表看懂差异对比项水平框评测旋转框评测实现文件libs/val_libs/voc_eval.pylibs/val_libs/voc_eval_r.py检测结果格式img 分数 xmin ymin xmax ymaximg 分数 x y w h thetaGT 解析取 8 点坐标的 min/max包出外接水平框见 voc_eval.py 的parse_rec()8 点坐标经cv2.minAreaRect还原为(x, y, w, h, theta)见 coordinate_convert.py 的back_forward_convert()IoU 计算轴对齐矩形交并比纯 NumPy 向量化OpenCV 旋转矩形求交 凸包面积一个精妙的设计GT 标注本身就是 8 个顶点的旋转多边形水平框评测直接放宽成外接矩形旋转框评测则收紧成最小外接旋转矩形——同一份标注文件两种口径各取所需这正是 DOTA 数据集Oriented / Horizontal双榜评测的实现基础。⚡ 快速上手跑通评测的 4 个关键步骤编译加速库评测依赖 Cython/CUDA 算子需按 README.md 在libs/box_utils/下执行python setup.py build_ext --inplace环境要求TensorFlow ≥ 1.2、CUDA 8.0、Python 2.7放置权重把训练好的模型放到output/trained_weights/并在 libs/configs/cfgs.py 中设置好VERSION、NET_NAME配置标注路径将--test_annotation_path指向 GT 的 XML 目录XML 中每个object的bndbox需包含x0~y3共 8 个坐标运行并解读结果执行eval.py后终端会逐类打印Recall / Precision / AP最终一行mAP is : xxx即为总指标生成的det_*.txt与PR_R.png可用于论文复现与误差分析。❓ 新手常见问题FAQQ1旋转框 mAP 一定比水平框 mAP 高吗不一定。水平框评测的 GT 被放宽成外接矩形判 TP 的 IoU 门槛相对容易达到旋转框口径更严格但更贴合真实目标形状。两个数值要在同口径下对比才有意义。Q20.5 这个 IoU 阈值可以改吗voc_eval()的ovthresh参数默认 0.5调低会让评测更宽松、mAP 变高。但为了和 DOTA 等公开榜单可比建议保持默认值。Q3difficult 标注有什么用标注为difficult1的真值框不计入num_pos召回率分母命中它也不算 TP——相当于考卷里的超纲题不计分避免遮挡、模糊目标拖累整体指标。Q4评测慢怎么办推理结果已缓存为 pkl改评测逻辑时无需重跑网络IoU 计算可切换 GPU 后端use_gpuTrue大批量图像评测时提速明显。小结R2CNN_Faster-RCNN_Tensorflow 的评估体系 标准 VOC 评测骨架按类分文件、置信度排序、贪心 TP/FP 判定、PR 曲线积分旋转几何内核OpenCV 旋转矩形 IoU、8 点↔5 元组坐标互转。理解了这两层你不仅能跑通 DOTA 的 mAP 评测还能轻松把这套libs/val_libs/评测框架迁移到自己的遥感目标检测项目中。【免费下载链接】R2CNN_Faster-RCNN_TensorflowDetectionTeamUCAS/R2CNN_Faster-RCNN_Tensorflow: 是一个基于TensorFlow实现的Faster R-CNN变体适用于遥感图像处理。适合用于需要针对遥感图像进行目标检测的项目。特点是可以提供针对遥感图像优化的模型结构和训练流程。项目地址: https://gitcode.com/gh_mirrors/r2/R2CNN_Faster-RCNN_Tensorflow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考