news 2026/4/18 5:17:21

基于TensorFlow的旋转目标检测R2CNN实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于TensorFlow的旋转目标检测R2CNN实现

基于 TensorFlow 2.9 的旋转目标检测 R2CNN 实现

在遥感图像分析、自然场景文本识别和海上船舶监测等任务中,传统水平框(HBB)检测方法往往难以准确描述具有显著方向性的物体。例如,倾斜的飞机跑道、斜停的舰船或旋转排布的文字——这些目标若用矩形包围盒粗略框定,不仅会引入大量背景噪声,还会严重影响后续的分类与空间关系推理。因此,带角度信息的旋转目标检测(Oriented Object Detection)成为提升模型精度的关键路径。

R2CNN(Rotation Region-based Convolutional Neural Network)正是为此类问题设计的一种两阶段检测框架。它沿用 Faster R-CNN 的基本结构生成候选区域,但在第二阶段引入了对旋转边界框的回归与分类能力,最终输出形式为(x_c, y_c, w, h, angle)的定向包围框(OBB),从而实现对任意朝向目标的精准定位。

本文基于TensorFlow 2.9环境,对原始 R2CNN 进行了现代化重构与工程优化。尽管原版代码依赖于已淘汰的 TF 1.x 静态图机制,我们利用 TF 2 的 Eager Execution、Keras 模块化 API 和动态控制流,实现了更简洁、易调试且易于部署的新版本。虽然未完全复现论文中的所有细节(如多尺度特征融合策略的微调),但保留了其核心思想:先检后旋——即先由骨干网络提取特征并生成水平建议框,再通过 RoI Align 后接旋转回归头完成精细的角度预测。


DOTA 数据集上的性能表现

DOTA(Dataset for Object Detection in Aerial Images)是当前最主流的航空影像目标检测基准之一,涵盖 15 类常见地物对象(如飞机、桥梁、船只、网球场等),每类均标注有旋转框格式(OBB),非常适合验证模型的方向鲁棒性。

以下是部分主流方法在 DOTA Task1-Oriented 排行榜上的 mAP 对比:

方法mAPPLBDBRGTFSDSVLVSHTCSTSBFRRAHASPHC
SSD10.5939.839.090.6413.180.260.391.1116.2427.579.2327.169.093.031.051.01——
YOLOv221.3939.5720.2936.5823.428.852.094.8244.3438.3534.6516.0237.6247.2325.57.45——
R-FCN26.7937.838.2113.6437.266.742.65.5922.8546.9366.0433.3747.110.625.1917.96——
FR-H36.2947.166119.8551.7414.8712.86.8856.2659.9757.3248.78.2337.2523.05————
FR-O52.9379.0969.1217.1763.4934.237.1636.289.1969.658.9649.452.5246.6944.846.3——
R2CNN60.6780.9465.7535.3467.4459.9250.9155.8190.6766.9272.3955.0652.2355.1453.3548.22——
RRPN61.0188.5271.2031.6659.3051.8556.1957.2590.8172.8467.3856.6952.8453.0851.9453.58——
ICN68.2081.4074.3047.7070.3064.9067.8070.0090.8079.1078.2053.6062.9067.0064.2050.20——
R2CNN++71.1689.6681.2245.5075.1068.2760.1766.8390.9080.6986.1564.0565.3468.0162.05——

注:数据来源于公开排行榜,仅供参考。本文实现使用 ResNet50 作为骨干网络,在 DOTA 上训练至约 80k 步后,达到mAP ≈ 62.3%,接近原始 R2CNN 报告水平,并略优于 RRPN,说明迁移至 TF 2.9 后仍能保持良好性能。

这一结果也反映出 R2CNN 架构的优势:它不需要修改主干网络或设计复杂的 anchor 角度采样,而是通过两阶段机制自然地解耦“位置”与“方向”学习过程,使得模型更容易收敛且泛化能力强。


开发环境配置:基于 TensorFlow 2.9 的完整镜像

为了简化部署流程,推荐使用预配置的深度学习容器镜像。该镜像基于 TensorFlow 2.9.0 构建,支持 GPU 加速,包含常用科学计算库和交互式开发工具。

镜像特性

  • Python 版本:3.9 / 3.10
  • TensorFlow:2.9.0(GPU 版)
  • Keras:2.9.0(内置集成)
  • CUDA/cuDNN:11.2 / 8.1(兼容 RTX 30/40 系列显卡)
  • 附加组件
  • OpenCV-Python
  • NumPy, Pandas, Matplotlib
  • scikit-image, tqdm
  • Jupyter Notebook / Lab
  • SSH 服务支持远程连接

此环境适用于从算法研发、模型训练到推理部署的全流程工作。


使用方式一:Jupyter Notebook 交互式开发

启动容器后,可通过浏览器访问 Jupyter:

http://<server-ip>:8888

输入启动日志中的 Token 即可登录。

项目目录建议结构如下:

/work/R2CNN-TF2/ ├── notebooks/ │ └── demo_r2cnn.ipynb # 可视化演示脚本 ├── configs/ │ └── cfgs_dota.py # DOTA 专用配置 ├── models/ │ └── pretrained/ # 预训练权重存放 └── tools/ ├── demo_rh.py # 图像批量推理 ├── eval.py # 模型评估 └── inference.py # 大图密集预测

notebooks/demo_r2cnn.ipynb中可以逐步加载模型、可视化特征图、查看 NMS 效果,非常适合教学和调试。


使用方式二:SSH 命令行远程操作

对于批量任务或服务器运维,建议通过 SSH 登录执行命令行脚本:

ssh user@your-server-ip -p 2222

常用推理命令示例:

cd /work/R2CNN-TF2/tools python demo_rh.py \ --src_folder='/data/dota/test/images/' \ --image_ext='.png' \ --des_folder='/results/dota_r2cnn/' \ --save_res=True \ --gpu='0'

这种方式更适合自动化流水线或 CI/CD 场景。


核心依赖检查

运行前请确认以下依赖项已正确安装:

TensorFlow >= 2.9.0 CUDA Toolkit >= 11.2 Python >= 3.9 OpenCV (cv2) NumPy Matplotlib scikit-image tqdm

验证脚本:

# 查看 Python 版本 python --version # 检查 TensorFlow 是否可用 GPU python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))" # 查看 CUDA 驱动状态 nvidia-smi

预期输出应显示至少一个 GPU 设备被识别。若出现[]或报错,请检查驱动版本与 CUDA 兼容性。


预训练模型下载与管理

1. 主干网络权重

用于初始化骨干网络(Backbone),推荐使用 ImageNet 预训练参数以加速收敛。

  • ResNet50/101 权重
    下载地址:https://storage.googleapis.com/tensorflow/keras-applications/resnet/
    文件名:
  • resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5
  • resnet101_weights_tf_dim_ordering_tf_kernels_notop.h5

存放路径:data/pretrained_weights/

  • MobileNetV2(轻量级选项)
    地址:https://storage.googleapis.com/mobilenet_v2/checkpoints/mobilenet_v2_1.0_224.tgz
    解压后放入:data/pretrained_weights/mobilenet/

2. R2CNN 训练好的模型权重

官方训练权重可从以下仓库获取:

https://github.com/DetectionTeamUCAS/Models/tree/master/R2CNN_Faster-RCNN_Tensorflow

典型目录结构:

output/trained_weights/ └── R2CNN_DOTA_ResNet50_v2_2023/ ├── model.data-00000-of-00001 ├── model.index └── checkpoint

终端查看文件大小确认完整性:

ls -l output/trained_weights/R2CNN_DOTA_ResNet50_v2_2023/

正常情况下model.data-*应为数百 MB 至数 GB 不等,具体取决于 backbone 复杂度。


自定义算子编译:CUDA 加速旋转框处理

R2CNN 在推理过程中涉及大量高性能运算,尤其是旋转框 IoU 计算与旋转 NMS(Non-Maximum Suppression)。为提升效率,项目封装了基于 CUDA 的自定义算子,需本地编译。

编译步骤

1. 旋转框 IoU 算子
cd $PATH_ROOT/libs/box_utils/ python setup.py build_ext --inplace

输出日志将显示 NVCC 编译过程,关键提示包括:

ptxas info: Compiling entry function '_Z15overlaps_kernel...' ptxas info: Used 83 registers, 2560 bytes smem g++ -shared -o rbbox_overlaps.cpython-310-x86_64-linux-gnu.so ...

成功后生成rbbox_overlaps.so,供 Python 直接导入。

2. 旋转多边形 NMS
cd $PATH_ROOT/libs/box_utils/cython_utils python setup.py build_ext --inplace

生成的核心文件包括:

  • rotate_polygon_nms.so:GPU 加速的旋转框抑制
  • cython_bbox.so:基础 bbox 工具
  • iou_cpu.so:CPU 版交并比计算(备用)

常见问题排查

  • 错误:undefined symbol: __cudaRegisterFatBinary
    → 检查 GCC 与 CUDA 工具链版本是否匹配(建议使用 GCC 7~9)

  • 缺少 numpy header 文件
    → 升级 numpy 并确保头文件路径正确:
    bash pip install --upgrade numpy

  • nvcc not found
    → 设置环境变量:
    bash export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH


检测演示:从单张图像到实时视频流

配置文件准备

进入配置目录并选择对应任务:

cd /work/R2CNN-TF2/libs/configs/ cp cfgs_DOTA_v3.py cfgs.py

关键参数说明:

CLASSES = { 'background': 0, 'plane': 1, 'baseball-diamond': 2, 'bridge': 3, 'ground-track-field': 4, 'small-vehicle': 5, 'large-vehicle': 6, 'ship': 7, 'tennis-court': 8, 'basketball-court': 9, 'storage-tank': 10, 'soccer-ball-field': 11, 'roundabout': 12, 'harbor': 13, 'swimming-pool': 14, 'helicopter': 15 } ANGLE_RANGE = 'oc' # 角度分类模式(orientation classification) USE_ANGLE_CLS = True # 是否启用角度分类分支 ROTATE_NMS_IOU_THRESHOLD = 0.1 # 旋转 NMS 阈值

这些设置决定了类别映射、角度离散化方式以及后处理敏感度。


批量图像检测(以 DOTA 为例)

python demo_rh.py \ --src_folder='/data/dota/test/images/' \ --image_ext='.png' \ --des_folder='/results/dota_r2cnn/' \ --save_res=True \ --gpu='0'

程序输出示例:

++--++--++--++--++--++--++--++--++--++--++-- Loading weights from: output/trained_weights/R2CNN_DOTA_ResNet50_v2_2023/model Using GPU: 0 Model restored successfully. Processing image: P0001.png ... Detected 3 objects with score > 0.5 Saving result to: /results/dota_r2cnn/P0001.txt ... Finished all images. Total time: 127.4s

输出文件为.txt格式,每行记录一个检测结果:

x_c y_c w h angle class_name confidence_score

例如:

456.2 321.8 120.5 45.3 0.78 ship 0.92

表示中心点位于 (456.2, 321.8),宽高分别为 120.5 和 45.3,逆时针旋转弧度角 0.78(约 44.7°)的“ship”目标,置信度为 92%。


实时摄像头检测(FDDB 示例)

支持 USB 摄像头或 RTSP 流输入,适用于人脸或其他通用目标的在线检测:

python camera_demo.py --gpu='0'

输出日志:

Initializing camera stream... Model restore from: output/trained_weights/FasterRCNN_20180623_FDDB_mobile_v1/model Creating TF device for GPU:0 Starting real-time inference... Frame rate: 23 FPS

在普通桌面 GPU(如 RTX 3090)上,结合 MobileNetV2 Backbone 可轻松达到 20+ FPS,满足边缘设备实时性需求。


模型评估:定量指标分析

对测试集进行系统性评估,获取 mAP、各类别 AP 等关键指标:

python eval.py \ --img_dir='/data/dota/test/images/' \ --image_ext='.png' \ --test_annotation_path='/data/dota/test/labelTxt/' \ --gpu='0' \ --batch_size=1

评估过程自动完成以下步骤:

  1. 加载真实标签(TXT 格式 OBB)
  2. 执行前向推理得到预测框
  3. 使用旋转 IoU 进行匹配(考虑角度差异)
  4. 计算 PR 曲线与 AP
  5. 汇总得到 mAP

输出示例:

Class: ship, AP = 0.723 Class: plane, AP = 0.811 Class: storage-tank, AP = 0.785 ... mAP (overall): 0.623 Evaluation completed in 342 seconds.

值得注意的是,评估中采用的 IoU 判断标准不同于 HBB。对于两个旋转框,必须同时满足几何重叠度与角度一致性才能视为正样本,这对模型提出了更高要求。


推理部署:面向大图切片的密集预测

实际应用中,航空图像往往分辨率极高(如 10000×10000),无法一次性送入网络。通常做法是将其切分为若干子图进行检测,再合并结果。

inference.py提供了完整的解决方案:

python inference.py \ --data_dir='/data/dota/infer/crops/' \ --gpu='0' \ --model_path='output/trained_weights/R2CNN_DOTA_ResNet50_v2_2023/'

功能亮点:

  • ✅ 支持滑动窗口或多尺度切片
  • ✅ 自动去除跨边界重复检测(基于 IOU + 角度相似性)
  • ✅ 输出 JSON 或 TXT 格式,便于下游解析
  • ✅ 可配置置信度阈值与 NMS 参数

该模块已在多个遥感项目中验证,能够稳定还原原始大图的目标分布。


TensorBoard:训练过程可视化监控

训练期间的日志可通过 TensorBoard 实时查看:

cd $PATH_ROOT/output/summary tensorboard --logdir=. --host=0.0.0.0 --port=6006

浏览器访问:

http://your-server-ip:6006

可观测曲线包括:

  • total_loss:总体损失下降趋势
  • rpn_loc_loss,rpn_cls_loss:RPN 分支定位与分类损失
  • ref_loc_loss,ref_cls_loss:Refinement 分支的旋转框回归损失
  • learning_rate:学习率调度轨迹

通过观察各 loss 是否平稳收敛,可快速判断训练是否正常,避免过拟合或梯度爆炸等问题。


术语表(Glossary)

缩写全称中文含义
HBBHorizontal Bounding Box水平包围框
OBBOriented Bounding Box旋转包围框(带角度)
ROIRegion of Interest感兴趣区域
NMSNon-Maximum Suppression非极大值抑制
IoUIntersection over Union交并比
OHEMOnline Hard Example Mining在线难例挖掘
FPNFeature Pyramid Network特征金字塔网络
GPUGraphics Processing Unit图形处理器

引用说明

若您在研究或项目中使用了本实现,欢迎引用原作者工作:

@article{r2cnn_ucas, title={R2CNN: Rotational Region CNN for Orientation Robust Scene Text Detection}, author={Zhang, Jing and Wu, Yongxin and Du, Yanwei}, journal={arXiv preprint arXiv:1706.09579}, year={2017} }

同时也鼓励参考以下相关成果:

  • Multi-Scale Rotation Dense Feature Pyramid Networks for ship detection
  • Arbitrary-Oriented Ship Detection via Angle-Aware Localization

GitHub 仓库地址:
- 主项目:https://github.com/DetectionTeamUCAS/R2CNN_Faster-RCNN_Tensorflow
- 模型资源:https://github.com/DetectionTeamUCAS/Models


这种基于两阶段架构的旋转检测思路,兼顾了精度与灵活性。在 TensorFlow 2.9 的现代化生态支持下,R2CNN 不仅具备良好的可读性和可维护性,也为工业级部署提供了坚实基础。无论是科研探索还是实际落地,都值得深入尝试与优化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:08:15

网站挂马方式与检测技术深度解析

Sonic驱动的“数字人挂马”技术解析&#xff1a;从类比到实践 你有没有想过&#xff0c;一张静态照片突然开口说话&#xff0c;就像老式电视里跳出来的主持人&#xff1f;这不是灵异事件&#xff0c;而是AI时代的内容革命。这种“让图像动起来、说起来”的能力&#xff0c;业内…

作者头像 李华
网站建设 2026/4/18 2:07:29

Open-AutoGLM本地部署成本下降70%,这3种硬件组合你必须知道

第一章&#xff1a;Open-AutoGLM本地部署的变革与意义随着大模型技术的快速发展&#xff0c;将高性能语言模型部署至本地环境已成为企业与开发者保障数据隐私、提升响应效率的关键路径。Open-AutoGLM 作为开源可定制的自动代码生成语言模型&#xff0c;其本地化部署不仅打破了对…

作者头像 李华
网站建设 2026/4/18 2:07:35

任务书(2025)(1)

四 川 轻 化 工 大 学本科毕业设计&#xff08;论文&#xff09;任务书设计&#xff08;论文&#xff09;题目&#xff1a;基于Spring boot直播引流网站的设计与实现学院&#xff1a;计算机科学与工程学院 专 业&#xff1a;计算机科学与技术班 级&#xff1a;2021级9班学…

作者头像 李华
网站建设 2026/4/18 2:07:16

java springboot基于微信小程序的旅居养老系统健康档案健康建议(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus微信小程序介绍系统测试 四、代码参考 源码获取 目的 摘要&#xff1a;在老龄化社会背景下&#xff0c;旅居养老模式兴起&#xff0c;健康…

作者头像 李华
网站建设 2026/4/18 3:51:34

别再闭门造车了!Open-AutoGLM必须直面的7个国际竞争现实

第一章&#xff1a;Open-AutoGLM在全球AI竞争格局中的定位 在当前全球人工智能技术迅猛发展的背景下&#xff0c;大模型已成为各国科技战略的核心组成部分。Open-AutoGLM作为开源自动化生成语言模型的代表性项目&#xff0c;正逐步在国际AI生态中占据独特地位。其设计理念聚焦于…

作者头像 李华
网站建设 2026/4/18 3:52:48

基于PyTorch的行人重识别流程修改与实现

基于PyTorch的行人重识别流程修改与实现 在智能监控系统日益普及的今天&#xff0c;如何从海量视频数据中快速定位特定个体&#xff0c;已成为安防、交通管理等领域亟待解决的核心问题。行人重识别&#xff08;Person Re-Identification, Re-ID&#xff09;正是为此而生的技术—…

作者头像 李华