Rotated_Faster_Rcnn

2023-11-15

rotated faster rcnn


下面的图片没有画完,只花了roi_head.forward部分,但是代码分析是全的
总结一下从rpn开始一直沿用的是hbb,一直到bbox_head才预测了shape为n,5的结果
然后通过loss来学习。
但是p2rb需要用的是旋转的roi_extractor提取方式
所以准备再看一遍oriented_rcnn

img
extract_feat
rpn_head.forward_train
roi_head.forward_train
loss
roi_head.forward_train
assigner
sampler
bbox_forward_train
self.bbox_forward_train
bbox2roi
_bbox_forward
get_targets
bbox_head.loss
_bbox_forward
bbox_roi_extractor
bbox_head
cls_score,bbox_pred
bbox_head
4_3_2_2_
rpn_head.forward_train

训练

请添加图片描述

rpn_head.forward_train

请添加图片描述
但在这之前必须经历outs=self(x),也就是rpn_head.forward部分
可以看到loss和props是分别self.loss self.get_bboxes获得的。

rpn_head.forward

forward–>forward_single所以下面直接分析forward_single
请添加图片描述
可以看到forward_single非常简单,直接卷积层获得两个–>得分和bbox

feat_channels默认256,如下是rpn_reg和rpn_cls的定义,下面被我的id挡住的是
(self.feat_channels, self.num_anchors4 , 1)
请添加图片描述
这里看到其实是
4就是知道rpn生成的仍然是hbb而不是obb。

rpn_head.loss

下面三个函数共同组成了rpn_head.loss
self.get_anchors
self.get_targets
self.loss_single
也很好理解,毕竟是anchor-based,会根据cfg生成anchor
又会把每一个anchor做一个和gt的匹配
然后再利用bbox_preds, cls_scores计算损失,前面两个部分实际上不会传入bbox_preds, cls_scores

因为没有旋转框,所以和mmdetection的应该无异

rpn_head.get_bboxes

包含两个部分:
self.anchor_genertor.grid_priors(featmap_sizes,device)
get_bboxes_single
从下图可以看到,生成了许许多多的anchors
anchor_generator
下面展示以下get_bboxes_single的cfg部分
请添加图片描述
这里0-3层会保留得分前2000所对应的框
而4层(也就是第五层)会保留所有框
对于这一共8768个框,会使用torch.cat把list5得到tensor 8768,4

下面的代码有三个部分:
torch.cat把所有层的prop整合在一起
decode把所有框的xyxy表达出来
nms对8768个框做一个筛选(保留了3000多个框,可见框与框之间重复的挺严重的,keep是保留的框的id,但是下面的roi其实用不到,所以不用往下传了)
请添加图片描述
所以—nms到底在哪一步使用了,终于搞懂了!

然后由于cfg里面有一个键值叫max_per_img=2000所以最终nms之后保留前2000个框。至此结束get_bboxes

其实并没有结束,注意它会把每个batch里面的每一个图片单独作一次,最后返回的是一个result_list
请添加图片描述

roi_head.forward_train()

调用assigner和sampler
之后bbox_forward_train(),这个函数是roi_head.forward_train()的主体

bbox_forward_train

这张图片是函数的输入,下面的图片是函数主体
请添加图片描述
函数主体,可以看到包含
bbox2roi这个部分只是给box加一个id
得到1024, 5 这里5的第一个是img_id

_bbox_forward显然这一部分的内容是比较多的
get_targers

请添加图片描述

_bbox_forward(x, rois)

这里roi_extractor只是利用rois获得,虽然x有5层,这里只利用了前四层
得到1024 256 7 7,这就是roi的具体输出

所以256 7 7 就可以送入全连接层,是的
with_shared_head=False
self.bbox_head(bbox_feats)显然是最重要的部分

请添加图片描述
下面这张图片展示了bbox_head的主体
请添加图片描述
所以bbox_head就是使用了flatten之后,两个共享全连接层,然后分别使用两个并列的全连接层获取cls_scores和bbox_pred
所以即使bbox_pred输出五个维度,‘并且第五个维度应该是角度,这里可以看到它实际上并没有作任何限制。

下图展示了bbox_forward最终返回的字典内容。
请添加图片描述

bbox_head.get_targetes

请添加图片描述
可以看到主要是调用了get_target_single()
调用single之前,先从sample result中读取了正负例和gt

下面输出的labels中,如果15是背景的意思,而0-14是前景,这里会把正例放前面,负例放在后面,负例只有分类损失。
这里的bbox_targets虽然是512,5但是里面所有的负例对应的行都为0,并且weights也为0,不会参与运算。

请添加图片描述
其实一个不那么显然的部分就是bbox_targets,它对于正例的具体数值到底是多少呢?
其实是deltaXYWHA的编码方式得到的。(起码需要知道,输入第一个是xyxy,而gt是cxcywha,即下面的pos_bboxes,pos_gt_bboxes)
请添加图片描述
说明白了get_targets返回的是什么,就可以进入最后的loss阶段,可以发现get_targets就是为了计算loss服务的,并且encode之后不需要decode因为不需要输出。

bbox_head.loss

请添加图片描述
从配置可见端倪。

请添加图片描述
这里的pos_bbox_pred实际上是前_bbox_forward(x, rois)的输出的一部分
这里实际上没有在具体的预测角度,而是encoder之后的结果,并且用此来训练
然后bbox_targets实际上是前面bbox_head.get_targets的结果。
请添加图片描述

测试

请添加图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rotated_Faster_Rcnn 的相关文章

  • QNAP 安装nextcloud私有网盘

    下载nextcloud服务端 并上传到web文件夹下 首先安装并开启PHPmyadmin 在app store搜索并下载PHPmyadmin 同时 打开自带的mariadb服务 默认用户名密码就是qnap自己的用户名和密码 也可以更改 然后
  • 设计模式:高性能IO之Reactor模式

    讲到高性能IO绕不开Reactor模式 它是大多数IO相关组件如Netty Redis在使用的IO模式 为什么需要这种模式 它是如何设计来解决高性能并发的呢 最最原始的网络编程思路就是服务器用一个while循环 不断监听端口是否有新的套接字
  • 1. TypeScript 基础类型

    TypeScript 基础类型 1 布尔 数字 字符串类型 let myname string 小米 let age number 18 let bool boolean true console log 1 布尔 数字 字符串类型 myn
  • Mysql join大表优化案例

    一 准备知识 Mysql join原理及结论 1 MySQL join分为 inner join left outer join right outer join full join mysql不支持full join 但是可以利用left
  • hive修改字段及字段类型

    hive修改字段类型语句 alter table 表名 change column 原字段名 新字段名 字段类型 alter table user chain change column u register u registe date

随机推荐

  • VSCode 远程连接服务器-亲测有效

    VSCode 远程连接服务器 前言 步骤 前言 网上教程很多 但是还挺坑 自己试了下整个步骤可以很快解决 首先window10需要用ssh功能 这个在win10已经默认安装 就不在赘述 步骤 SSH插件 首先在vscode中安装插件ssh插
  • 大数据课程J2——Scala的基础语法和函数

    文章作者邮箱 yugongshiye sina cn 地址 广东惠州 本章节目的 掌握Scala的基础语法 掌握Scala的函数库 一 Scala 基础语法一 1 概述 语句 说明 示例 var 用来声明一个变量 变量声明后 在程序执行过程
  • 提升页面加载速度的方案

    性能优化是一个庞大而相对复杂的知识 如今互联网发展迅速 市场竞争激烈 在这样的环境下一个网站的性能决定着一个项目的好与坏 为了降低软件项目的跳出率 提高访问速度 减少加载时间 带给用户流畅的终端体验 好的优化是必不可少的 如何判断页面的载入
  • js如\x6C\x69\x6E\x65\x63\x68加密代码解压方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 解码方法如下 简单 复制下面的代码 保存为 html
  • VMware16安装win7 x64 虚拟机

    文章目录 VMware安装win7操作系统 下载iso镜像文件 新建虚拟机 安装VMware Tools 安装VMware Tools 安装程序无法自动安装VSock驱动程序 必须手动安装此驱动程序 出现安装程序无法自动安装VSock驱动程
  • tomcat应用

    web服务器 web服务器是安装在服务端主机上实现了http协议的软件 也叫http服务器 如微软的IIS 当前排名第一开源免费的Apache 个人认为 凡是实现了应用层协议的软件都可以叫web服务器 如ftp服务器 smtp服务器 只不过
  • C++之异常处理机制

    一 C 异常处理机制是由3个部分组成 检查 try 抛出 throw 和捕捉 catch 把需要检查的语句放在try中 throw用来当出现异常时发生一个异常信息 而catch则用来捕捉异常信息 如果捕捉到了异常信息就处理它 二 1 首先介
  • 5、Java入门教程【循环+条件语句】

    一 循环 java有三种主要的循环结构 while 循环 do while 循环 for 循环 1 while 循环 语法 while 布尔表达式 循环内容 示例 public class Test public static void m
  • break和continue跳出多重循环

    关于break和continue 众所周知 break是跳出当前循环 continue是跳出本次循环 但是在多重循环中 我们可能会模糊概念 break是跳出全部循环还是只是某层循环 gt 跳出的是break所在层的循环即当前循环 结论 只要
  • VueUse中文文档Vue官方工具库

    VueUse官网地址https vueuse org 这里就列举常用工具详情请去官网 查看所有API 浏览器 useFullscreen全屏展示 isFullscreen 当前是否是全屏 toggle 是函数直接调用即可 const isF
  • Visual Studio 2022 创建C++项目

    打开Visual Studio 创建新项目 选择平台 选择空项目 点击下一步 设置项目名称以及指定项目文件位置 点击创建 创建成功后 如下图 在源文件中添加代码文件 写入代码 运行代码 F5 运行结果界面如下图所示
  • c语言模板类,C++类模板(Class Template)

    C 除了支持函数模板 还支持类模板 Class Template 函数模板中定义的类型参数可以用在函数声明和函数定义中 类模板中定义的类型参数可以用在类声明和类实现中 类模板的目的同样是将数据的类型参数化 声明类模板的语法为 templat
  • 深度学习论文精读[9]:PSPNet

    场景解析 scene parsing 是语义分割的一个重要应用方向 区别于一般的语义分割任务 场景解析需要在复杂的自然图像场景下对更庞大的物体类别的每一个像素进行分类 场景解析在自动驾驶和机器人感知等方向应用广泛 但由于自然场景的复杂性 语
  • 在Windows 10上安装TensorFlow及PyCharm开发环境

    有时候在查看官方文档时 常常看到很多的分支 所以作为开发者我们都喜欢把最佳实践总结出来 下面一起来看看如何在Windows 10上安装一个TensorFlow和PyCharm开发环境 安装Anaconda 安装Anaconda以后 即可获得
  • Image Super-Resolution Using Very Deep Residual Channel Attention Networks

    因为我是语义分割方向 对图像超分辨率不了解 这里简单记录一下读论文的收获 论文地址 超分辨率的输入是低分辨率 最终恢复超分辨率图片 作者发现低分辨率的图片拥有丰富的低频细节 对应图像中大块的平坦区域 然而低分辨率的每个通道在处理时候总是平等
  • depot_tools安装过程

    depot tools安装过程 使用torserviseSVN 1 6 6版本 移除其它版本 Install the depot tools Chromium and Chromium OS use a package of scripts
  • 数据结构——线性表(C++)

    一 前言 数据结构在逻辑结构上分为线性和非线性 例如链表 顺序表 串 数组都是线性的 他们的特点就是一对一 而非线性结构比如图和二叉树 他们的对应关系是一对多 多对多 这里介绍线性表的顺序表和链表 循环链表和双向链表 还有双向循环链表 链表
  • 关于springboot profiles

    在项目中会遇到项目环境变量切换到的问题 但是主要配置相同 只想切换部分的配置 可以在application yml配置所有的环境变量 然后在application dev yml配置dev中的环境变量 如果dev中没有配置会读取applic
  • tan x x的matlab求解,matlab画x=tan(x)

    matlab怎么解非线性方程 如tan x 4x x 2 4 equ sym tan x 4 x x 2 4 x solve equ gt gt xx 0再问 这只能求出一个解啊再答 还有其他解吗 matlab 求解tan x x 1 0
  • Rotated_Faster_Rcnn

    rotated faster rcnn 文章目录 训练 rpn head forward train rpn head forward rpn head loss rpn head get bboxes roi head forward t