faster rcnn resnet_Faster-rcnn 代码详解

ad9abdd954db50acc2e1953e2edb5434.png

使用的代码

faster-rcnn.pytorch

重要参考

CNN目标检测(一):Faster RCNN详解
基於Resnet的Faster R-CNN網絡模型

重要参数

coco: 使用的数据集
coco数据集achor数量为3*4=12个
(P, Q):没有resize之前的原始图像大小.
(M, N): 输入到网络的图像, 是resize之后的图像大小.

重要数据

0c1d16b7a2f9e89895f9347cd222e698.png

im_data:图像数据, size = ([batch, 3, M, N]), 由原始图像(P, Q)统一resize到(M, N).

im_info:图像信息,size = ([batch, 3]),保存的是 resize后的图像的H, W, 也就是上面图中的M, N以及resize的scale,scale = P/M = Q/N.

gt_boxes:gt box信息,size = ([batch, 50, 5]), 每张图片最多50个box, 每个box信息包含box的4个坐标和box的类别.

num_boxes:size= ([batch]), 记录每张图片有多少个box,因为在gt_boxes中每张图片都存储了50个box, 但实际上box数只有num_boxes[i]个,gt_boxes中box不够50的box信息全部填0.

整体结构

  1. 整体网络结构

234d2ae3c32bbbd2e58409c178ec18db.png

2.整体代码结构

a5b54432381a3cc2bc151fabc4a90cf1.png

这里最重要的就是_fasterRCNN的forward过程:i: RCNN_base, 卷积网络提取的图片特征, 输出为base_feat, shape=(batch, 512, M/16, N/16)ii: RCNN_rpn, rpn网络, 计算rios、前景背景2分类loss和粗边框回归loss, 其中rois的shape=(batch, post_top_n, 5), 是排序后并经过nms后的post_top_n个anchor(经过网络预测的delta修正原始anchor之后的anchor),这些anchor都是映射回MxN的图像的, 并且经过剪切, 不会超出图像的大小, 每个anchor由1个占位和x1, y1, x2, y2这4个坐标组成。iii: RCNN_proposal_target, 本过程只有训练阶段有, 目的是得到128个与anchor有最大IOU的gt_box的label, 以及gt_box与anchor之间的偏移, 用作求类别loss和精边框回归loss. iv: RCNN_roi_align, 使用roi_align方法将128个anchor每个都切成7x7的块, 输出为pooled_feat, shape=(batch*128, 512, 7, 7).v: _head_to_tail, 全连接层: (batch*128, 512*7*7) --> (batch*128, 4096).vi: RCNN_cls_score, 全连接层用做分类, 预测score, (batch*128, 4096) --> (batch*128, n_class), 并使用交叉熵求得预测的分类与第iii步得到的gt_box的label的loss.vii: RCNN_bbox_pred, 全连接层, 预测bbox偏移: (batch*128, 4096) --> (batch*128, 4), 并使用smooth_l1求得预测bbox偏移与第iii步得到的gt_box与anchor之间的偏移的loss.

3.训练阶段的反向传播
根据2.ii、2.vi和2.vii求得的4个loss相加然后进行反向传播。

4.测试阶段的后处理i: bbox_transform_inv, 根据2.vii得到的RCNN_bbox_pred 修正2.ii得到的rios.ii: clip_boxes, 将 pred_boxes剪切在图像范围内, 超出边界的都剪切回图像内, pred_boxes个数没有变。iii: 使用nms得到最终的rios和label.

代码细节

  1. rpn网络
    i: rpn整体结构

7a818d8c17e2f3217c4bee520bf79410.png

ii: rpn前置网络

182a116b83144787d80f8b6bd47b2a22.png

iii: RPN_proposal

0d5b33e421945e3a2686f703d3e8866c.png

代码注释 proposal_layer.py / class _ProposalLayer

def 

iv: RPN_anchor_target

ee75cc5a16c3344d558a61cc4d83b011.png

23a6282c626366f5526ce6e81c0a2274.png

代码注释 anchor_target_layer.py / class _AnchorTargetLayer

def 

v: rpn loss

2945259576bf1bf56f7bda86c981b75f.png

2. RCNN_proposal_target网络

7690ad8af2b86f3084d8b6328f9f9c28.png

9a8ed5e4f79f341531384de2a7d71dfd.png

3. RCNN_roi_align roi align原理和流程这里先不介绍

f2524cf43f5b090f2b24905c4f8bed10.png

4. 后置处理

6eec3acc2c7836232ce303f77c3e50fe.png
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值