Faster RCNN 源码解读(1) -- 文件结构分析

2023-11-03

基本介绍

Faster RCNN 在目标检测及其相关领域得到了广泛的运用。其原型RCNN是将CNN引入到目标检测的开山之作,此外基于region proposal是一种十分值得学习的思想。因此将在后续的系列章节中,基于源码,对Faster RCNN进行深入的剖析。

代码结构

从github上的源码看上去就是这个样子:

这里写图片描述

接下来将对各个文件夹的功能进行详细的分析:

caffe-fast-rcnn

Faster RCNN总体代码继承自Fast RCNN, 因此caffe-fast-rcnn中包含的是caffe的框架文件

Data

This directory holds (after you download them):

  • Caffe models pre-trained on ImageNet
  • Faster R-CNN models
  • Symlinks to datasets

参见https://github.com/rbgirshick/py-faster-rcnn/tree/master/data

Experiments

  • logs
  • scripts/faster_rcnn_alt_opt.sh
  • cfgs/faster_rcnn_alt_opt.yml

存放配置文件以及运行的log文件,另外这个目录下有scripts可以用end2end或者alt_opt两种方式训练。

Lib

用来存放一些python接口文件,如其下的datasets主要负责数据库读取,config负责cnn一些训练的配置选项。

lib/rpn

这就是RPN的核心代码部分,有生成proposals和anchor的方法

generate_anchors.py
生成多尺度和多比例的锚点。这里由generate_anthors函数主要完成,可以看到,使用了 3 个尺度( 128, 256,
and 512)以及 3 个比例(1:1,1:2,2:1)。一个锚点由w, h, x_ctr, y_ctr固定,也就是宽、高、x center和y center固定。

proposal_layer.py
这个函数是用来将RPN的输出转变为object
proposals的。作者新增了ProposalLayer类,这个类中,重新了set_up和forward函数,其中forward实现了:生成锚点box、对于每个锚点提供box的参数细节、将预测框切成图像、删除宽、高小于阈值的框、将所有的(proposal, score) 对排序、获取 pre_nms_topN proposals、获取NMS 、获取 after_nms_topN proposals。(注:NMS,nonmaximum suppression,非极大值抑制)

anchor_target_layer.py
生成每个锚点的训练目标和标签,将其分类为1
(object), 0 (not object) , -1 (ignore).当label>0,也就是有object时,将会进行box的回归。其中,forward函数功能:在每一个cell中,生成9个锚点,提供这9个锚点的细节信息,过滤掉超过图像的锚点,测量同GT的overlap。

proposal_target_layer.py
对于每一个object proposal 生成训练的目标和标签,分类标签从0-k,对于标签>0的box进行回归。(注意,同anchor_target_layer.py不同,两者一个是生成anchor,一个是生成proposal)

generate.py
使用一个rpn生成object proposals。

lib/nms文件夹

做非极大抑制的部分,有gpu和cpu两种实现方式
py_cpu_nms.py
核心函数

lib/datasets文件夹

在这里修改读写数据的接口主要是datasets目录下
(1)factory.py
(2)imdb.py
(3)pascal_voc.py
(4)voc_eval.py

lib/fast_rcnn文件夹

主要存放的是python的训练和测试脚本,以及训练的配置文件config.py
(1)config.py
(2)nms_wrapper.py
(3)test.py
(4)train.py

lib/roi_data_layer文件夹

主要是一些ROI处理操作
(1)layer.py
(2)minibatch.py
(3)roidb.py

lib/utils文件夹

(1)blob.py
(2)timer.py

lib/transform文件夹

Models

里面存放了三个模型文件,小型网络的ZF,大型网络VGG16,中型网络VGG_CNN_M_1024。推荐使用VGG16,如果使用端到端的approximate joint training方法,开启CuDNN,只需要3G的显存即可。
(1)fast_rcnn_test.pt
(2)rpn_test.pt
(3)stage1_rpn_train.pt
(4)stage1_fast_rcnn_train.pt
(5)stage2_rpn_train.pt
(6)stage2_fast_rcnn_train.pt

Tools

里面存放的是训练和测试的Python文件。

_init_paths.py

用来初始化路径的,也就是之后的路径会join(path,*)

compress_net.py

用来压缩参数的,使用了SVD来进行压缩,这里可以发现,作者对于fc6层和fc7层进行了压缩,也就是两个全连接层。

demo.py

通常,我们会直接调用这个函数,如果要测试自己的模型和数据,这里需要修改。这里调用了fast_rcnn中的test、config、nums_wrapper函数。vis_detections用来做检测,parse_args用来进行参数设置,以及damo和主函数。

eval_recall.py

评估函数

reval.py

re-evaluate,这里调用了fast_rcnn以及dataset中的函数。其中,from_mats函数和from_dets函数分别loadmat文件和pkl文件。

rpn_genetate.py

这个函数调用了rpn中的genetate函数,之后我们会对rpn层做具体的介绍。这里,主要是一个封装调用的过程,我们在这里调用配置的参数、设置rpn的test参数,以及输入输出等操作。

test_net.py

测试fast rcnn网络。主要就是一些参数配置。

train_faster_rcnn_alt_opt.py

训练faster rcnn网络使用交替的训练,这里就是根据faster rcnn文章中的具体实现。可以在主函数中看到,其包括的步骤为:
RPN 1,使用imagenet model进行初始化参数,生成proposal,这里存储在mp_kwargs
fast rcnn 1,使用 imagenet model 进行初始化参数,使用刚刚生成的proposal进行fast rcnn的训练
RPN 2使用 fast rcnn 中的参数进行初始化(这里要注意哦),并生成proposal
fast rcnn 2,使用RPN 2 中的 model进行初始化参数,

train_net.py

使用fast rcnn,训练自己数据集的网络模型。

train_svms.py

使用最原始的RCNN网络训练post-hoc SVMs。

Outputs

这里存放的是训练完成后的输出目录,默认会在faster_rcnn_end2end文件夹下。

后面将对上述中的重点内容进行细致分析。

protobuf文件定义的结构参数

layer_name表示的是层名,bottom表示层输入数据,top表示层输出数据,kernel_size表示卷积核大小,pad表示边沿补充,stride表示滑动步长。同时,caffe中的数据是通过blob来存储的,blob是一个四维数组,维度从高到低为(num, channels, height, width)。 floating_point 表示浮点运算次数。

参考资料

使用Faster-Rcnn进行目标检测(实践篇)

Faster RCNN文件夹说明

Faster RCNN Test 浮点运算次数

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

Faster RCNN 源码解读(1) -- 文件结构分析 的相关文章

  • 图像目标检测之cascade-rcnn实践

    最近一直在调试目标检测方面的模型 其中mmdetection中就集成了许多的目标检测模型 其中表现比较好的模型中有cascade rcnn 因此也趁这个机会具体了解一下这个模型的发展脉络 1 模型原理 在two stage模型中 常见都会预
  • 【论文笔记_目标检测_2022】Cross Domain Object Detection by Target-Perceived Dual Branch Distillation

    基于目标感知双分支提取的跨域目标检测 摘要 在野外 跨领域目标检测是一项现实而具有挑战性的任务 由于数据分布的巨大变化和目标域中缺乏实例级注释 它的性能会下降 现有的方法主要关注这两个困难中的任何一个 即使它们在跨域对象检测中紧密耦合 为了
  • YOLOV2个人理解总结

    YOLOv2框架图 YOLOv2改进之处 1 Batch Normalization BN Batch Normalization 层简单讲就是对网络的每一层的输入都做了归一化 这样网络就不需要每层都去学数据的分布 收敛会快点 原来的YOL
  • 全新范式

    在本文中提出了一种简单的注意力机制Box Attention 它支持网格特征之间的空间交互 从感兴趣的Box中采样 并提高了Transformer针对多个视觉任务的学习能力 具体来说 介绍的BoxeR 即Box Transformer的缩写
  • IDEA国际化资源Key无法全局重命名的解决方案

    一 前言 最近在开发中使用到了HibernateValidator进行入参校验以及错误消息的国际化支持 大家应该都知道在使用HibernateValidator进行校验的时候 我们只需在需要在校验的变量上添加相应的注解 同时在message
  • Pycharm上Modify Run Configuration的使用方法,带参数配置

    前言 我们在搭建yolo系列目标检测模型时 往往需要对代码进行逐步调试 及时发现错误 所以本文在pycharm的基础上 对yolov6中的infer py进行逐步调试 首先我们在conda环境一切准备就绪的情况下 能在终端tenminal中
  • 目标检测之YOLOv1算法分析

    网络结构 卷积层 池化层 全连接层 输入 448 448 448 448 448 448大小的图片 输出 7 7
  • 【计算机视觉

    文章目录 一 检测相关 11篇 1 1 Perspective aware Convolution for Monocular 3D Object Detection 1 2 SCoRD Subject Conditional Relati
  • YOLO算法v1-v3原理通俗理解

    YOLO算法v1 v3原理通俗理解 深度学习检测方法简述 我们所使用的目标检测 其实就是让机器在图片找到对应的目标 然后给图片上的目标套上一个框框 并贴上标签 比如如果图片上有人 就把人框起来并标注一个 person 使用深度学习进行目标检
  • 迈向多模态AGI之开放世界目标检测

    作者 王斌 谢春宇 冷大炜 责编 夏萌 出品 360人工智能研究院 引言 目标检测是计算机视觉中的一个非常重要的基础任务 与常见的的图像分类 识别任务不同 目标检测需要模型在给出目标的类别之上 进一步给出目标的位置和大小信息 在 CV三大任
  • 华为Atlas200dk使用第三步------只用一根网线登录华为开发板

    华为开发板Atlas200DK ARES500DK开发板 开发板使用心得系列文章目录 第三章 一根线登录华为开发板 目录 前言 同时使用网线和串口线连接开发板有点多余 线多显得乱 串口连接开发板也比较繁琐 因此本文给大家提供两种使用一根网线
  • 【深度学习】yolov5 tag7.0 实例分割 从0到1的体会,从模型训练,到量化完成,bug避坑

    这里记录下yolov5 tag7 0的实例分割 因为也用过paddle家族的实例分割 能够训练出来 但是开放restiful api时遇到点小问题 还是yolov爽啊 通过这篇博文 您可以一步步的搭建自己的分割网络 文章目录 前言 一 小试
  • (linux系统下)MMCV及MMClassification教程及安装问题解决

    说一下依托关系 MMCV是面向计算机视觉的一个基础库 它支持OpenMMLab的各个模块包括MMClassification图像分类 MMDetectionm目标检测 MMOCR文字检测识别等等 本文主要详细介绍一下mmcv和mmcls的安
  • 如何在linux系统下创建空白文本.txt文件

    如何在linux系统下创建空白文本 txt文件 跳转到要新建文本的目录下 打开终端 输入命令 最后 跳转到要新建文本的目录下 可利用cd命令在终端跳转 或者直接到要新建文件的目录文件夹中 打开终端 输入命令 touch 文本名 txt 例如
  • 项目设计:基于YOLO目标检测算法的安全帽/口罩/汽车/行人/交通标志...检测

    本文将详细介绍YOLO目标检测算法 该算法支持各种目标检测 包括 安全帽 汽车 造价 交通标志 等 其他毕业设计题目推荐参考 毕业设计 电子 通信 计算机 物联网专业毕业设计选题参考 嵌入式linux 单片机STM32 web 图像 htt
  • 机器翻译:跨越语言边界的智能大使

    导言 机器翻译作为人工智能领域的瑰宝 正在以前所未有的速度和精度 为全球沟通拓展新的可能性 本文将深入研究机器翻译的技术原理 应用场景以及对语言交流未来的影响 1 简介 机器翻译是一项致力于通过计算机自动将一种语言的文本翻译成另一种语言的技
  • 目标检测YOLO实战应用案例100讲-自动驾驶复杂场景下目标检测(续)

    目录 3 2 YOLOv5框架的分析 3 3改进算法的基本思想 3 4改进聚类算法 3 5重构损失函数模型和NMS算法 lt
  • 目标检测深度学习的anchor

    在目标检测深度学习中 Anchor是一种预定义的框 用于在图像中采样不同位置 尺度和长宽比例的区域 作为目标检测模型的候选区域 Anchor是Faster R CNN等基于Anchor的目标检测算法的核心概念 具体来说 Anchor有以下几
  • 深度学习目标检测全连接层什么意思

    在深度学习目标检测中 通常我们使用卷积神经网络 Convolutional Neural Network CNN 进行特征提取 CNN 的主要结构包括卷积层和池化层 用于从输入图像中提取特征 然而 为了最终输出目标的类别和位置信息 通常在网
  • 多目标跟踪使用较多的数据集

    MOT change网站 MOT Challenge

随机推荐

  • vue中调取支付宝支付接口,后台返回form表单前端处理

    前言 在项目中 支付功能是一个常见的功能 调用支付宝时 后段给我们的是一个form的富文本内容 分享下使用方法 方法 this api abc then res gt res data data默认是我们拿到的form代码 const di
  • AD设置板框内布线禁止区

    这个功能还可用于整体板框扩大 缩小
  • qwt6.0.0交叉编译,在mini2440完美运行

    qwt6 0 0交叉编译 在mini2440完美运行 QWT简介 QWT 全称是Qt Widgets for Technical Applications 是一个基于LGPL版权协议的开源项目 可生成各种统计图 它为具有技术专业背景的程序提
  • Python3 获取本机所有IP地址

    版权声明 更多最新原创文章请访问 最新原创主页 更多最全原创文章请访问 更多原创主页 先上代码 coding utf 8 Time 2018 2 10 18 24 Author 蛇崽 Email 643435675 QQ com File
  • vue2下npm安装国际化i18n包报错

    如题 我项目是vue2 在terminal控制台输入以下指令安装时报错 npm install vue i18n save 原因 在vue2环境下 默认安装 npm install vue i18n 的版本是 vue i18n 9 2 2
  • 【OpenCV图像处理】1.22 像素值映射

    相关理论 什么是像素重映射 简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去 形成一张新的图像 g x y
  • 电子商务计算机考试,电子商务师考试电子商务训练试题

    电子商务师考试电子商务训练试题 导语 电子商务师是指利用计算机技术 网络技术 通过专业的网络商务平台等现代信息技术 帮助商家与顾客或商家与商家之间从事各类商务活动或相关工作的人员 跟着小编一起来看看相关试题吧 1 确定事物之间异同的形式逻辑
  • Ingress配置跨域(服务包含websocket)

    nginx ingress默认是支持websocket 不需要添加配置 如果websocket的端口与当前服务不一致 则需要在rules中配置对应的路径 具体本文不体现 跨域主要配置有 nginx ingress kubernetes io
  • 【Java】maven-shaded-plugin超详细详解

    一 总体介绍 maven shaded plugin提供了两大基本功能 将依赖的jar包打包到当前jar包 常规打包是不会将所依赖的jar包打进来的 对依赖的jar包进行重命名 用于类的隔离 创建一个Shaded JAR maven sha
  • Opencv 入门(三)

    文章目录 图像梯度 Sobel算子 Scharr 算子 Laplacian算子 Canny边缘检测 图像金字塔 高斯金字塔 拉普拉斯金字塔 轮廓检测 画图函数 轮廓特征 面积 周长 轮廓近似 多边形 边界矩形 外接圆 图像梯度 Sobel算
  • 来做一个麦克纳姆轮吧!!

    想玩全向小车么 想搭建一个移动底盘么 想满足中二病的创造欲么 想 那么为什么不自己做一个麦克纳姆轮呢 自己动手丰衣足食 0 准备材料 3D打印机一台 打印耗材 直径2mm 长度60mm的铁轴 这种玩具模型里用的小铁轴刚好可以用来当麦克纳姆轮
  • 03-雾化

    const fog new THREE Fog color near far color 颜色 用于设置雾的颜色 以十六进制表示 near 近平面 处于这个距离之内的物体将被完全雾化 far 远平面 处于这个距离之外的物体将不受雾化影响
  • Java枚举类常量写法

    在写代码的过程中我们常常需要定义一些常量 以下代码是使用枚举类型定义常量的实例 有需要大家可以进行参考 public class MyConstant public enum StatusEnum CREATED 0 状态0 ASSIGNE
  • python趣味编程-盒子追逐者游戏

    在上一期我们用Python实现了一个奥赛罗游戏的游戏 这一期我们继续使用Python实现一个简单的盒子追逐追逐者游戏 让我们开始今天的旅程吧 在Python自由源代码中使用Turtle的盒子追逐者游戏 在Python中使用Turtle的盒子
  • 我使用Java one longin组件进行ADFS连接,但是logout endpoint有问题

    很抱歉 看起来你遇到了使用 Java OneLogin 组件连接 ADFS 时的注销端点问题 这可能是由于 ADFS 设置不正确或 Java OneLogin 组件的配置问题造成的 建议您检查相关文档 并确保 ADFS 和 Java One
  • 龙书(附录A):一个完整的编译器前端(学习记录)

    龙书 完整的编译器前端下载地址 ps 我设置的不要下载积分 如果还是不能下载的话请评论区留言 https download csdn net download Zheng lan 16779204 百度网盘下载 链接 https pan b
  • java8之Stream-Collect操作

    文章目录 collect Collector in Action 收集器 Collectors 常用规约操作 规约到一个单独的值 把数据装进一个list中 将数据收集到一个Set中 把数据收集到一个Map中 Using other coll
  • 《人工智能》之《非经典推理》习题解析

    教材 人工智能及其应用 蔡自兴等 2016m清华大学出版社 第5版 参考书 对应同系列博客 人工智能 之 非经典推理 人工智能 之 非经典推理 习题解析 1 非经典逻辑 非经典推理与经典逻辑 经典推理有何不同 2 什么是不确定性推理 为什么
  • fastapi之tortoise-orm

    目录 概述 fastapi引入 创建对应数据模型 创建Model 设置数据库字段field 字段介绍 自定义字段 设置Meta Model模型方法 查询 Q对象查询 字段过滤 预取 F表达式 功能和聚合 事务 根据Model生成Schema
  • Faster RCNN 源码解读(1) -- 文件结构分析

    基本介绍 Faster RCNN 在目标检测及其相关领域得到了广泛的运用 其原型RCNN是将CNN引入到目标检测的开山之作 此外基于region proposal是一种十分值得学习的思想 因此将在后续的系列章节中 基于源码 对Faster