尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

R2CNN_Faster-RCNN_Tensorflow网络架构深度剖析:ResNet+RPN双路旋转检测的TensorFlow实现原理 R2CNN_Faster-RCNN_Tensorflow网络架构深度剖析ResNetRPN双路旋转检测的TensorFlow实现原理【免费下载链接】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实现的旋转目标检测Oriented Object Detection开源项目它在经典 Faster R-CNN 两阶段框架的基础上为遥感图像、场景文字等任意角度目标增加了旋转分支最终输出带角度 θ 的旋转框。本文将从骨干网络、RPN 锚点设计、双路回归头到损失函数完整拆解它的网络架构与实现原理。 为什么遥感目标检测需要旋转检测传统 Faster R-CNN 输出的是水平框(x1, y1, x2, y2)。但遥感场景中的船只、飞机、停车场车辆、文字标牌几乎都是任意方向排列的用一个水平框去框住一条斜 45° 的船框内会包含大量无关背景IoU 天然偏低正负样本标注困难模型难以收敛mAP 显著下降。R²CNNRotational Region CNN的核心思想正是在 Fast-RCNN 阶段同时输出水平框和旋转框(cx, cy, w, h, θ)用双头结构分别监督。本项目忠实复现了这一思想并配套了完整的训练、推理与旋转 NMS 工具链。网络全景一张图看懂六大模块整个网络在 libs/networks/build_whole_network.py 中由DetectionNetwork类统一构建数据流分为 6 步骨干网络ResNet-101 或 MobileNetV2提取 C4 特征图RPN在特征图上预测前景/背景分数与锚点回归量锚点生成按 stride 16 在特征图上铺开 78 组候选框Proposal 后处理解码 → 裁剪 → TopK → NMS得到 ROIROI Warping从特征图裁剪 14×14 小块送入 Fast-RCNN双路分支水平分支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 通道×2block1ResNet 残差块C2256ch×4block2ResNet 残差块C3512ch×8block3ResNet 残差块stride1C41024ch×16几个工程细节值得注意C4 步长固定为 16block3 的最后一个残差块改为 stride1这是 RPN 锚点ANCHOR_STRIDE 16的由来保证特征点与原图坐标可以线性对齐冻结策略FIXED_BLOCKS 2会冻结 block1、block2只微调后段小批量训练时更稳定骨干默认关闭 BatchNorm 学习is_trainingFalse的 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到大目标512px13 种 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中解码用decode_boxes把网络输出的 4 维偏移量还原成真实坐标宽高在 log 空间回归用exp还原裁剪把越界框裁回图像边界内TopK按前景概率取前 12000训练/ 10000测试个NMSIoU 阈值 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 的block4C5 全局平均池化得到特征向量——这部分在restnet_head中实现。水平分支与旋转分支得到特征向量后网络分叉为两个全连接分支分支分类头回归头输出维度水平分支horizen_branchCLASS_NUM14 × (CLASS_NUM1)(x1,y1,x2,y2)旋转分支rotation_branchCLASS_NUM15 × (CLASS_NUM1)(cx,cy,w,h,θ)以 DOTA 15 类为例旋转回归头每个 ROI 输出 16×580 个数。分类与回归各自独立两条分支共享同一骨干与 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.0RCNN 分类水平Softmax CE2.0—RCNN 定位水平Smooth L14.01.0RCNN 分类旋转Softmax CE2.0—RCNN 定位旋转Smooth L14.01.0正负样本按 IOU 阈值划分RPN 用 0.7/0.3Fast-RCNN 用 0.4/0.0正样本占比分别为 50% 和 35%。此外项目还支持将FAST_RCNN_MINIBATCH_SIZE设为 -1 启用OHEM在线难样本挖掘。优化器为 SGD学习率 3e-4动量 0.9训练入口在 tools/train.py。推理流程与旋转 NMS推理时的后处理同样双路并行水平路解码 → 裁剪到图像边界 → 标准 NMStf.image.non_max_suppressionIoU 阈值 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。快速上手三步跑通旋转检测准备数据按 VOC 格式整理标注旋转框 5 维 类别用 data/io/convert_data_to_tfrecord.py 转成 TFRecord修改配置在 libs/configs/cfgs.py 中设置CLASS_NUM、DATASET_NAME、VERSION并在 libs/label_name_dict/label_dict.py 中注册类别名训练与推理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),仅供参考
返回列表