当前位置: 首页 > news >正文

R2CNN_Faster-RCNN_Tensorflow网络架构深度剖析:ResNet+RPN双路旋转检测的TensorFlow实现原理

R2CNN_Faster-RCNN_Tensorflow网络架构深度剖析:ResNet+RPN双路旋转检测的TensorFlow实现原理

【免费下载链接】R2CNN_Faster-RCNN_TensorflowDetectionTeamUCAS/R2CNN_Faster-RCNN_Tensorflow: 是一个基于TensorFlow实现的Faster R-CNN变体,适用于遥感图像处理。适合用于需要针对遥感图像进行目标检测的项目。特点是可以提供针对遥感图像优化的模型结构和训练流程。项目地址: https://gitcode.com/gh_mirrors/r2/R2CNN_Faster-RCNN_Tensorflow

R2CNN_Faster-RCNN_Tensorflow 是一个基于TensorFlow实现的旋转目标检测(Oriented Object Detection)开源项目,它在经典 Faster R-CNN 两阶段框架的基础上,为遥感图像、场景文字等任意角度目标增加了"旋转分支",最终输出带角度 θ 的旋转框。本文将从骨干网络、RPN 锚点设计、双路回归头到损失函数,完整拆解它的网络架构与实现原理。🔍

🎯 为什么遥感目标检测需要"旋转"检测?

传统 Faster R-CNN 输出的是水平框(x1, y1, x2, y2)。但遥感场景中的船只、飞机、停车场车辆、文字标牌几乎都是任意方向排列的:

  • 用一个水平框去框住一条斜 45° 的船,框内会包含大量无关背景,IoU 天然偏低;
  • 正负样本标注困难,模型难以收敛,mAP 显著下降。

R²CNN(Rotational Region CNN)的核心思想正是:在 Fast-RCNN 阶段同时输出水平框和旋转框(cx, cy, w, h, θ),用双头结构分别监督。本项目忠实复现了这一思想,并配套了完整的训练、推理与旋转 NMS 工具链。

网络全景:一张图看懂六大模块

整个网络在 libs/networks/build_whole_network.py 中由DetectionNetwork类统一构建,数据流分为 6 步:

  1. 骨干网络(ResNet-101 或 MobileNetV2)提取 C4 特征图;
  2. RPN在特征图上预测"前景/背景"分数与锚点回归量;
  3. 锚点生成:按 stride 16 在特征图上铺开 78 组候选框;
  4. Proposal 后处理:解码 → 裁剪 → TopK → NMS,得到 ROI;
  5. ROI Warping从特征图裁剪 14×14 小块,送入 Fast-RCNN;
  6. 双路分支:水平分支(4 维回归)+ 旋转分支(5 维回归)同时输出。

所有超参数集中在 libs/configs/cfgs.py,例如 DOTA 配置下骨干为resnet_v1_101,类别数CLASS_NUM = 15

第一级:ResNet 骨干与 C4 特征图

骨干网络实现在 libs/networks/resnet.py 的resnet_base中:

阶段结构输出步长
卷积17×7 Conv + 最大池化64 通道×2
block1ResNet 残差块C2(256ch)×4
block2ResNet 残差块C3(512ch)×8
block3ResNet 残差块(stride=1)C4(1024ch)×16

几个工程细节值得注意:

  • C4 步长固定为 16(block3 的最后一个残差块改为 stride=1),这是 RPN 锚点ANCHOR_STRIDE = 16的由来,保证特征点与原图坐标可以线性对齐;
  • 冻结策略FIXED_BLOCKS = 2会冻结 block1、block2,只微调后段,小批量训练时更稳定;
  • 骨干默认关闭 BatchNorm 学习is_training=False的 BN 参数),避免小 batch 下统计量抖动;
  • 若追求轻量化(如人脸检测 FDDB 场景),可切换为 MobileNetV2,骨干替换逻辑同样在 build_whole_network.py 的build_base_network中。MobileNet 系列以极少的运算量换取了可观的精度,非常适合嵌入式部署:

第二级:RPN 区域提议网络

每个特征点 78 个锚点:规模×比例组合

RPN 结构是标准配置:C4 上先接一层 512 通道的 3×3 卷积,再分两个 1×1 卷积头——rpn_cls_score(每点 2×78 个前景/背景分数)和rpn_bbox_pred(每点 4×78 个回归量)。

锚点生成在 libs/box_utils/anchor_utils.py 的make_anchors中完成,DOTA 配置下:

参数取值说明
基础锚点256×256BASE_ANCHOR_SIZE_LIST
步长 stride16特征点间隔
6 种 scale0.0625 ~ 2.0覆盖小目标(16px)到大目标(512px)
13 种 ratio1, 1/2, 2, 1/3, 3, 5, 1/4, 4, 1/5, 6, 1/6, 7, 1/7适配长条形目标
每点锚点数6 × 13 =78远超常规 9 个,专为形状多变的遥感目标设计

从分数到 Proposal:解码→裁剪→TopK→NMS

后处理流程在 libs/detection_oprations/proposal_opr.py 的postprocess_rpn_proposals中:

  1. 解码:用decode_boxes把网络输出的 4 维偏移量还原成真实坐标(宽高在 log 空间回归,用exp还原);
  2. 裁剪:把越界框裁回图像边界内;
  3. TopK:按前景概率取前 12000(训练)/ 10000(测试)个;
  4. NMS:IoU 阈值 0.7,保留最多 2000(训练)/ 300(测试)个 ROI。

第三级:Fast-RCNN 双路分类回归

ROI Warping:裁剪到 14×14

与标准 Faster R-CNN 的 ROIAlign 7×7 不同,本项目采用ROI Warping:先用tf.image.crop_and_resize把 ROI 特征裁剪到 14×14,再经 2×2 最大池化得到 7×7 特征(ROI_SIZE = 14),随后复用 ResNet 的block4(C5)+ 全局平均池化得到特征向量——这部分在restnet_head中实现。

水平分支与旋转分支

得到特征向量后,网络分叉为两个全连接分支:

分支分类头回归头输出维度
水平分支horizen_branchCLASS_NUM+14 × (CLASS_NUM+1)(x1,y1,x2,y2)
旋转分支rotation_branchCLASS_NUM+15 × (CLASS_NUM+1)(cx,cy,w,h,θ)

以 DOTA 15 类为例,旋转回归头每个 ROI 输出 16×5=80 个数。分类与回归各自独立,两条分支共享同一骨干与 C5 特征,互不干扰。

旋转框是怎么解码出来的?

旋转框的编解码在 libs/box_utils/encode_and_decode.py 中:

  • 旋转框统一表示为(cx, cy, w, h, θ),角度 θ 约束在[-90°, 0°)区间,基准角取 -90°;
  • 解码时中心点偏移按框宽高归一化,宽高取exp还原,角度则做θ = tθ × 180/π + (-90°)的线性还原;
  • 回归量会先除以缩放因子ROI_SCALE_FACTORS = [10, 10, 5, 5, 5],即角度方向的偏移被放大 5 倍参与梯度,让模型对角度更敏感——这正是旋转检测精度的关键之一。

损失函数:六项损失联合训练

损失构建在 libs/losses/losses.py,共 6 项:

损失项类型权重σ
RPN 分类Softmax CE2.0
RPN 定位Smooth L11/73.0
RCNN 分类(水平)Softmax CE2.0
RCNN 定位(水平)Smooth L14.01.0
RCNN 分类(旋转)Softmax CE2.0
RCNN 定位(旋转)Smooth L14.01.0

正负样本按 IOU 阈值划分:RPN 用 0.7/0.3,Fast-RCNN 用 0.4/0.0,正样本占比分别为 50% 和 35%。此外项目还支持将FAST_RCNN_MINIBATCH_SIZE设为 -1 启用OHEM在线难样本挖掘。优化器为 SGD(学习率 3e-4,动量 0.9),训练入口在 tools/train.py。

推理流程与旋转 NMS

推理时的后处理同样双路并行:

  • 水平路:解码 → 裁剪到图像边界 → 标准 NMS(tf.image.non_max_suppression,IoU 阈值 0.1);
  • 旋转路:解码出旋转框 →旋转 NMS,由 libs/box_utils/nms_rotate.py 提供,并可通过 CUDA 算子(rotate_polygon_nms)在 GPU 上加速,IoU 由 C++ 库rbbox_overlaps计算任意角度框的重叠度。

批量推理可用 tools/inference.py,带可视化绘图的演示脚本是 tools/demo_rh.py。

实测效果:DOTA、ICDAR2015 与 FDDB

项目在三个数据集上验证了架构的通用性:

① DOTA 遥感数据集(15 类):车辆、船只、飞机、操场、桥等目标均可用贴合的旋转框检测,效果如下(左为原图,右为检测结果):

② ICDAR2015 场景文字检测:输入一张商场实景照片——

旋转分支能把任意倾斜的文字行完整框出(上两图为广告牌检测,下两图为货架标签检测):

③ FDDB 人脸检测:换用 MobileNetV2 骨干后同样可实时检测人脸,配置见 libs/configs/cfgs_FDDB_mobilenet_v1.py。

快速上手:三步跑通旋转检测

  1. 准备数据:按 VOC 格式整理标注(旋转框 5 维 + 类别),用 data/io/convert_data_to_tfrecord.py 转成 TFRecord;
  2. 修改配置:在 libs/configs/cfgs.py 中设置CLASS_NUMDATASET_NAMEVERSION,并在 libs/label_name_dict/label_dict.py 中注册类别名;
  3. 训练与推理python tools/train.py训练(DOTA 数据先跑data/io/DOTA/train_crop.py切图),完成后python tools/demo_rh.py即可看到旋转框检测结果。

总结

R2CNN_Faster-RCNN_Tensorflow 用一套清晰的工程化架构回答了"如何让两阶段检测器理解角度"这个问题:ResNet 提供强特征、RPN 用 78 组密集锚点保证候选召回、双路 Fast-RCNN 头分别负责水平与旋转回归、旋转 NMS 完成最终筛选。如果你想在自己的遥感或文字检测任务上实现旋转框检测,这套从骨干到后处理、从数据到训练的完整 TensorFlow 实现,是一个非常值得研读的起点。🚀

【免费下载链接】R2CNN_Faster-RCNN_TensorflowDetectionTeamUCAS/R2CNN_Faster-RCNN_Tensorflow: 是一个基于TensorFlow实现的Faster R-CNN变体,适用于遥感图像处理。适合用于需要针对遥感图像进行目标检测的项目。特点是可以提供针对遥感图像优化的模型结构和训练流程。项目地址: https://gitcode.com/gh_mirrors/r2/R2CNN_Faster-RCNN_Tensorflow

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4157877.html

相关文章:

  • ThriftPy2协议层深度解析:Binary、Compact、JSON协议全对比与选型建议
  • 基于BERT的情感分析实战:从Hugging Face微调到生产部署全流程
  • 中文AI绘图神器ComfyUI-Kolors-MZ:为什么它能让快手Kolors在ComfyUI原生采样?完整概览
  • YAMLScript快速上手教程:5步安装ys和libys,跑通你的第一个YAML程序
  • Apktool APK 逆向完整指南:如何快速解码与重打包一个 Android 应用
  • Vue 文档编辑器快速上手指南:如何把 Vue 应用变成 A4 纸式的在线文档
  • 无界 Wujie 微前端实战:三步接入、三种模式与高频坑的完整指南
  • IP地址与子网掩码深度解析:从原理到实战的网络配置指南
  • Numa Balancing 入门
  • kaml快速开始:data class与YAML双向转换,4个实战例子讲清核心用法
  • OBS RTSP 服务器搭建:5分钟装好 obs-rtspserver 插件并出流
  • MobaXterm Keygen 快速上手:3 步生成专业版许可证文件
  • 拆解Orbit区块链交易调查工具核心代码:ranker排行算法、getNew去重与pageLimit分页机制详解
  • 现货电价API接入最佳实践:日前电价、实时电价、节点电价和96点数据
  • 安全先行:office-docs-powershell管理员必须知道的8个PowerShell认证与权限最佳实践清单
  • Triton前置——Python基础语法
  • HumanInput源码剖析:8KB事件库如何解析复杂的组合事件字符串,EventHandler设计全解读
  • NAND闪存工作原理——SSD数据是如何存储的?
  • SDRangel SDR信号接收与频谱分析快速上手
  • 一台电脑两台手柄?任意 PC 游戏双人分屏的完整指南
  • 跑通多模态情感分析:Multimodal-Sentiment-Analysis 图文融合实战指南
  • MonitorControl|macOS外接显示器亮度音量一键调:多屏办公党的屏幕控制方案
  • 论文AI率0%黑科技!降AIGC网站留学生亲测::Turnitin查重秒变“教授最爱”原创风
  • 题解:洛谷 P3184 [USACO16DEC] Counting Haybales S
  • 文档加载工程:从多格式数据到标准化Document对象的实战指南
  • 5 步装好 Windows 微信防撤回补丁:RevokeMsgPatcher 新手完整教程
  • Unlock-Music 音乐解密完整指南:在浏览器里批量解密 qmc、ncm 等加密音乐文件
  • AnythingLLM 本地部署完全指南:私有知识库文档问答
  • Linux入门攻坚——86、ELK Stack-1-基本概念
  • SpringBoot+微信小程序旅游平台:从零到部署的毕设实战指南