Detect-and-Track论文:3D Mask R-CNN Caffe2源代码解析——4. 网络头解析

2023-05-16

在第三部分,我们对3D Mask R-CNN的RPN和FPN进行了详解,在特征图经过RoIAlign过程之后,我们得到了Resize后的特征图。下一步就是将这些维度相同的特征图送入“网络头/Net Head”部分进行最终处理。这篇文章我们就一起探究以下这两个网络头:Cls_Head和Key_Head。

参考内容链接如下:

Detect-and-Track论文:【网页链接】

Detect-and-Track源代码:【网页链接】

Fast R-CNN论文:【网页链接】


目录

一、框架详解

二、Fast R-CNN回顾

三、Net_Head代码详解

1. Fast R-CNN网络头

1) add_roi_frcn_head_func() 

2)add_fast_rcnn_outputs()

2. Mask分支

3.关键点支路

1) add_roi_keypoint_head_func()

2) add_heatmap_outputs()

四、一些感想


一、框架详解

上图中HighLight出来的部分就是网络头。网络头由一对姊妹支流构成:Fast R-CNN Head(又简称Cls_Head)和Key Point_Head,两路支路功能如下:

  • Fast R-CNN Head:之所以这样起名是因为这个结构初创于Fast R-CNN,其中cls用于确定目标类别,reg是对RoI进行Bounding Box回归。其中的cls使用softmax损失值,reg使用L1损失值。
  • Key Point Head:这个分支用于生成人体关键点。所采用的方法是:先使用8层卷积将RoI变小,之后使用两层DeConv层得到Heatmap。这一层使用的是空间softmax损失值。

二、Fast R-CNN回顾

论文网址已经贴在上边了,具体的内容用一张核心的图就可以表示出来:

好了,这个部分我们主要还是了解一下Fast R-CNN的作者:Ross Girshick。免得以后人家再出了大文章我们不认识。首先来看一下Fast R-CNN的题目:

够霸气吧……一个人独立完成了RCNN向Fast R-CNN的进化。Ross Girshick的个人主页在这里:http://www.rossgirshick.info/ ,2012年芝加哥大学博士毕业,先后在Microsoft Research和FAIR工作,后来又去U.C. Berkeley做博士后。在这里膜拜一下大佬,希望大佬保佑我早日毕业!

三、Net_Head代码详解

model_builder()一直都是Key Point R-CNN构建的核心函数,上节分析到了RPN和FPN,现在继续。我们到了这一段。三个星星将三段程序完美地隔开:第一段程序是添加Fast R-CNN头;第二段程序是生成Mask;第三段程序是生成关键点。我们依次分开来看。

1. Fast R-CNN网络头

# ★  Add the Fast R-CNN branch(生成cls和reg)
		blob_frcn, dim_frcn, spatial_scale_frcn = add_roi_frcn_head_func(model, blob_conv, dim_conv, spatial_scale_conv)
# ResNet3D.add_ResNet18_roi_conv5_head
		add_fast_rcnn_outputs(model, blob_frcn, dim_frcn, is_head_3d=head_3d)

首先由add_roi_frcn_head_func()添加网络头,生成的参数都在最后添加了frcn。之后用add_fast_rcnn_outputs()直接生成了cls和reg结果。我们分开来看:

1) add_roi_frcn_head_func() 

实质是ResNet3D.add_ResNet18_roi_conv5_head,定位到此函数:

def add_ResNet18_roi_conv5_head(*args, **kwargs):
	""" Usable with R18/34 models. """
	kwargs['dim_out'] = 512		# 修改输出维度为512
	kwargs['block_counts'] = 2	# 含有2个bottleneck block
	return add_ResNet_roi_conv5_head(*args, **kwargs)

核心程序是add_ResNet_roi_conv5_head()函数,再定位到此函数。可以发现,首先对输入的张量使用RoIFeatureTransform()进行了RoIAlign变换,应该是变换成为7*7的小特征图。之后通过了两个bottleneck blocks,最后通过维度扩展得到了3*4的张量。

def add_ResNet_roi_conv5_head(model, blob_in, dim_in, spatial_scale, block_counts=3, dim_out=2048):
	"""Adds an RoI feature transformation (e.g., RoI pooling) followed by a res5/conv5 head applied to each RoI."""
	# TODO(rbg): This contains Fast R-CNN specific config options making it non-
	# reusable; make this more generic with model-specific wrappers
	
	# 进行RoI特征变换
	model.RoIFeatureTransform(
		blob_in, 'pool5',
		blob_rois='rois',
		method=cfg.FAST_RCNN.ROI_XFORM_METHOD,	# RoIAlign	
		resolution=cfg.FAST_RCNN.ROI_XFORM_RESOLUTION,	# 分辨率:7
		sampling_ratio=cfg.FAST_RCNN.ROI_XFORM_SAMPLING_RATIO,	# 采样率:2
		spatial_scale=spatial_scale)
		
	dim_bottleneck = cfg.RESNETS.NUM_GROUPS * cfg.RESNETS.WIDTH_PER_GROUP	# 1*64
	stride_init = int(cfg.FAST_RCNN.ROI_XFORM_RESOLUTION / 7)	# 步长
	
	# 添加2个bottleneck blocks
	s, dim_in = add_stage(4, model, 'res5', 'pool5', block_counts, dim_in, dim_out, dim_bottleneck * 8, 1, stride_init)
	
	# Reduce mean across all dimensions (h,w,t)
	model.ReduceBackMean(s, 'res5_pool_w')
	model.ReduceBackMean('res5_pool_w', 'res5_pool')
	
	# Do not pool on time as well, as I use a 3D head on top, so leave it as a
	# 3D blob so I can do 3D conv on it.
	# s = model.ReduceBackMean('res5_pool', 'res5_pool')
	s = model.ExpandDims('res5_pool', 'res5_pool', dims=[3, 4])	# 扩展为3*4的,与3帧图像有关
	return s, dim_out, spatial_scale

2)add_fast_rcnn_outputs()

作用是生成分类结果和回归结果。cls_score由一次卷积直接得出;final_shape由一次卷积和多次Resize得出。如果不是3D模式,则使用全连接层。

def add_fast_rcnn_outputs(model, blob_in, dim, is_head_3d):

	# 将3D张量卷积为2D
	if is_head_3d:	
		# As per the changes to ResNet head, the output will be a 3D blob
		# so that I can run 3D convolutions on it. But be careful to output a 2D
		# blob from here
		cls_score = model.ConvNd(	# 进行卷积
			blob_in, 'cls_score_1', dim, model.num_classes,
			[1, 1, 1], pads=2 * [0, 0, 0], strides=[1, 1, 1],
			weight_init=('GaussianFill', {'std': 0.01}),
			bias_init=('ConstantFill', {'value': 0.}))
		# Does not support inplace operations! WOW
		model.ReduceBackMean(model.ReduceBackMean(model.ReduceBackMean(
			cls_score, 'cls_score_2'), 'cls_score_3'), 'cls_score')
			
	# 如果不是3D模式,就用全连接层
	else:
		# Original code
		model.FC(
			blob_in, 'cls_score', dim, model.num_classes,
			weight_init=('GaussianFill', {'std': 0.01}),
			bias_init=('ConstantFill', {'value': 0.}))
	
	# 只有测试的时候才用softmax	
	if not model.train:  # == if test
		# Only add softmax when testing; during training the softmax is combined
		# with the label cross entropy loss for numerical stability
		model.Softmax('cls_score', 'cls_prob', engine='CUDNN')	
		
	if is_head_3d:
		model.ConvNd(
			blob_in, 'bbox_pred_1', dim,
			4 * model.num_classes, [1, 1, 1],	# 4倍个种类
			pads=2 * [0, 0, 0], strides=[1, 1, 1],
			weight_init=('GaussianFill', {'std': 0.01}),
			bias_init=('ConstantFill', {'value': 0.}))
		# 接下来是一系列的张量操作,不停地调整维度
		# Convert into the format bbox losses expect (Same as RPN)
		
		# Convert the Bx(4C)xTxHxW -> BxCx4xTxHxW
		model.ExpandDims('bbox_pred_1', 'bbox_pred_2', dims=[2])		# 扩展一个维度
		model.Reshape(['bbox_pred_2'], ['bbox_pred_3', model.net.NextName()],	# 自动填充这个维度
					  shape=(0, -1, 4, 0, 0, 0))
					  
		# Convert the BxCx4xTxHxW -> BxCxTx4xHxW
		model.Transpose('bbox_pred_3', 'bbox_pred_4',	# 重新调整维度次序
						axes=(0, 1, 3, 2, 4, 5))
						
		# Convert the BxCxTx4xHxW -> Bx(C*T*4)xHxW
		batch_size = model.GetShapeDimIdx(blob_in, 0)
		ht = model.GetShapeDimIdx(blob_in, 3)
		wd = model.GetShapeDimIdx(blob_in, 4)
		final_shape = model.GetNewShape(batch_size, -1, ht, wd)
		model.Reshape(['bbox_pred_4', final_shape],
					  ['bbox_pred_5', model.net.NextName()])
					
		# Does not support inplace operations! WOW
		model.ReduceBackMean(model.ReduceBackMean('bbox_pred_5', 'bbox_pred_6'), 'bbox_pred')
	else:
		model.FC(
			blob_in, 'bbox_pred', dim, model.num_classes * 4,
			weight_init=('GaussianFill', {'std': 0.001}),
			bias_init=('ConstantFill', {'value': 0.}))

2. Mask分支

这个框架没有使用到Mask,仅仅只是预测关键点。

# ★  Add the mask branch(生成Mask),但是在KeyPoint R-CNN中没有使用到Mask
		if cfg.MODEL.MASK_ON:
			if is_inference:
				bbox_net = copy.deepcopy(model.net.Proto())

			# Add the mask branch
			blob_mrcn, dim_mrcn, _ = add_roi_mask_head_func(model, blob_conv, dim_conv, spatial_scale_conv)
			blob_mask = add_mask_rcnn_outputs(model, blob_mrcn, dim_mrcn)

			if is_inference:
				# Extract the mask prediction net, store it as its own network,
				# then restore the primary net to the bbox-only network
				model.mask_net, blob_mask = get_suffix_net(
					'mask_net', bbox_net.op, model.net, [blob_mask])
				model.net._net = bbox_net

3.关键点支路

此支路用于生成HeatMap关键点。

# ★  Add the keypoint branch(关键点支路)
		if cfg.MODEL.KEYPOINTS_ON:
			if is_inference:	# 测试模式
				bbox_net = copy.deepcopy(model.net.Proto())
				
			# RoIAlign操作和8层3D卷积
			blob_krcnn, dim_krcnn, _ = add_roi_keypoint_head_func(	# keypoint_rcnn_heads.add_roi_pose_head_v1convX_3d
				model, blob_conv, dim_conv, spatial_scale_conv)
			
			# 生成热图	
			blob_keypoint = add_heatmap_outputs(
				model, blob_krcnn, dim_krcnn, time_dim=out_time_dim, is_head_3d=head_3d)

			if is_inference:
				model.keypoint_net, keypoint_blob_out = get_suffix_net(
					'keypoint_net', bbox_net.op, model.net, [blob_keypoint])
				model.net._net = bbox_net

1) add_roi_keypoint_head_func()

此函数通过add_roi_pose_head_v1convX()函数进行链接,内容是完成8层Conv的添加。

def add_roi_pose_head_v1convX(model, blob_in, dim_in, spatial_scale, nd=False):
	# 先经过RoIAlign,再通过8层3D卷积
    hidden_dim = cfg.KRCNN.CONV_HEAD_DIM		# 512
    kernel_size = cfg.KRCNN.CONV_HEAD_KERNEL
    pad_size = kernel_size // 2
	
    current = model.RoIFeatureTransform(
        blob_in, '_[pose]_roi_feat',
        blob_rois='keypoint_rois',
        method=cfg.KRCNN.ROI_XFORM_METHOD,	# RoIAlign
        resolution=cfg.KRCNN.ROI_XFORM_RESOLUTION,	# 14
        sampling_ratio=cfg.KRCNN.ROI_XFORM_SAMPLING_RATIO,	# 2
        spatial_scale=spatial_scale)

    for i in range(cfg.KRCNN.NUM_STACKED_CONVS):	# 8
        if nd:	# 执行N维卷积
            current = model.ConvNd(
                current, 'conv_fcn' + str(i + 1), dim_in, hidden_dim,
                [cfg.VIDEO.TIME_KERNEL_DIM.HEAD_KPS, kernel_size, kernel_size],
                pads=2 * [cfg.VIDEO.TIME_KERNEL_DIM.HEAD_KPS // 2, pad_size, pad_size],
                strides=[1, 1, 1],
                weight_init=(cfg.KRCNN.CONV_INIT, {'std': 0.01}),
                bias_init=('ConstantFill', {'value': 0.}))
        else:
            current = model.Conv(
                current, 'conv_fcn' + str(i + 1), dim_in, hidden_dim,
                kernel_size, stride=1, pad=pad_size,
                weight_init=(cfg.KRCNN.CONV_INIT, {'std': 0.01}),
                bias_init=('ConstantFill', {'value': 0.}))
        current = model.Relu(current, current)
        dim_in = hidden_dim

    return current, hidden_dim, spatial_scale

2) add_heatmap_outputs()

按照配置文件添加解卷积层,生成heatmap。这个程序实在是太长了我就不放了。。。

四、一些感想

都说caffe代码比较“乱”,个人感觉的确是有一点,因为找函数要不停地跳。其实现在看代码只到了比较宏观的程度,还没有具体到代码的细节,如每个张量的维度、每个操作的函数。还是有很长的路要走啊。

今天公司里新到了DGX工作站,价格是50万,操作界面都是命令行,看来要彻底抛弃Ubuntu界面了。加油,早日跑起D&T来!

 

 

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

Detect-and-Track论文:3D Mask R-CNN Caffe2源代码解析——4. 网络头解析 的相关文章

  • 转载篇:优秀博文汇总

    1 Pytorch中堆网络语法 xff1a nn moduleList 和Sequential由来 用法和实例 写网络模型 https blog csdn net e01528 article details 84397174 2 CNN中
  • 批量归一化:Batch Normalization层 原理+Pytorch实现

    一 BN层概念明晰 BN层存在的意义 xff1a 让较深的神经网络的训练变得更加容易 BN层的工作内容 xff1a 利用小批量数据样本的均值和标准差 xff0c 不断调整神经网络中间输出 xff0c 使整个神经网络在各层的中间输出的数值更加
  • 模型量化——基础知识 & LSQ论文阅读

    感谢陈老师给的机会 xff0c 有幸能够参加2020年的DAC比赛 我在其中负责目标检测器的调试和量化 自己第一次接触量化这个任务 xff0c 很多东西都是一点一点学 一 量化基础 对于一个全精度的值 v v v xff0c 若量化步长为
  • python3安装tensorflow遇到的问题

    1 使用命令 xff1a sudo pip3 install upgrade https storage googleapis com tensorflow linux cpu tensorflow 1 1 0rc2 cp35 cp35m
  • argparse模块使用说明

    深度学习的工程中 xff0c py文件中的main函数一开始总会有大量的参数传入 xff0c 而通常使用的方法就是使用argparse通过命令行传入 xff0c 这篇博文旨在记录argparse的常用方法 一 语句简介 1 载入argpar
  • Tensorboard在网络训练中的Logger使用方法

    做为神经网络训练中最常用的可视化工具 xff0c Tensorboard经常在Pytorch和Tensorflow框架中做为可视化工具 但是其使用的确是有点繁琐 xff0c 所以开设了一个这样的专题 xff0c 用于总结见过的工程里面的数据
  • Pytorch训练流程

    调试了很久YOLO的标准Pytorch实现 xff0c 将Train代码进行了重新整理 xff0c 抽出了标准的Pytorch训练框架 现在整理下来 xff0c 以备后用 整理后的代码分为三个大部分 xff0c 每个大部分分为三个小部分 x
  • 初识Vulkan渲染管线

    目前参考 Vulkan规范 和 Vulkan开发实战详解 对渲染管线有了一个初步的认识 现结合中英文的渲染管线图进行笔记整理 中英文的渲染管线图分别如下所示 xff1a 绘制命令送入设备队列执行后 xff0c Vulkan将原始的物体顶点坐
  • Vulkan着色器的GLSL创建、编译、加载、创建流程

    Vulkan没有指定官方的着色器编程语言 xff0c 而是采用SPIR V二进制中间格式进行表示 开发人员一般需要基于某种着色器编程语言开发着色器 xff0c 之后再编译为SPIR V格式 可以选用GLSL着色器编程语言进行开发 大型游戏场
  • 神经网络运算量&参数量估计——FLOPS和FLOPs辨析

    一 概念明晰 首先要明确 运算量 和 参数量 两个概念 xff1a 参数量 xff1a 这个比较好理解 xff0c 例如卷积层中的卷积核c i k k n o xff0c 其参数量就是相乘的结果 而且 xff0c 无论输入图像的尺寸怎么变
  • 机器学习基础——彻底搞懂Precision\Recall\F1\P-R\ROC

    一直以为自己理解这些概念 xff0c 但是其实只是听说过而已 这些概念的释义来自于周志华教授的 机器学习 xff0c 都属于对机器学习算法的性能度量 一 错误率与精度 还是使用书上的定义写的明确 xff0c test set中所有样本预测对
  • [交叉熵损失函数的由来:KL散度] & [softmax+交叉熵损失函数求梯度 推导]

  • SSH基础操作

    这里写自定义目录标题 SSH基础操作SSH免密登录客户端 快捷登录服务器端 sshd配置配置完成后重启服务器端sshd服务 SSH基础操作 span class token function ssh span span class toke
  • Linux下screen的使用

    关掉xshell之后网站也随着关闭 xff0c 我们可以使用screen命令 xff0c 来让保证退出ssh之后程序继续在后台跑 利用SSH远程连接服务器 xff0c 运行程序需要保证在此期间窗口不能关闭并且连接不能断开 xff0c 否则当
  • SAI 串行音频接口学习

    SAI 简介 串行音频接口 xff08 SAI xff09 xff0c SAI具有灵活性高 配置多样的特点 SAI 通过两个完全独立的音频子模块来实现这种灵活性与可配置型 xff0c 每个音频子模块与多达4个引脚 xff08 SD SCK
  • Tensorflow笔记1:Graph

    参考内容都出自于官方API教程tf Graph 一 Graph类调用 这里使用的是1 15版本 xff0c TF官方为了能够在2 0 43 版本中保持兼容 xff0c 因此调用时使用了tf compat v1 Graph 若安装的就是1 1
  • Tensorflow笔记2:Session

    参考内容都出自于官方API教程tf Session 一 Session类基本使用方法 这里使用的是1 15版本 xff0c TF官方为了能够在2 0 43 版本中保持兼容 xff0c 因此调用时使用了tf compat v1 Session
  • Tensorflow笔记3:Variable

    调用Variable类即可向Graph中添加变量 Variable在创建之后需要给定初始值 xff0c 可以是任意type shape的Tensor 一旦使用初始值完成了初始化 xff0c type和shape都固定 xff0c 除非使用a
  • TensorFlow-Slim API 官方教程

    https blog csdn net u014061630 article details 80632736 TF Slim 模块是 TensorFlow 中最好用的 API 之一 尤其是里面引入的 arg scope model var
  • Tensorflow笔记4:Saver

    Saver类位于tf train中 xff0c 属于训练过程中要用到的方法 xff0c 主要作用就是保存和加载save amp restore ckpt 最简单的保存应用举例 xff1a saver span class token pun

随机推荐

  • Tensorflow笔记4:学习率衰减策略tf.train.cosine_decay_restarts

    TF在learning rate decay py中提供了几种非常骚气的学习率下降方法 xff0c 今天就来玩一玩 只需要简单的参数设定 xff0c 就能够产生神奇的lr衰减效果 首先简介lr的一般使用方法 xff1a lr span cl
  • ffmpeg使用笔记

    视频压缩 ffmpeg i lt input gt vcodec libx264 crf 25 lt output gt 分辨率调整 ffmpeg i 123 mp4 s 960x540 1 mp4 视频截取 截取 xff08 t1 43
  • Pytorch 入门

    1 加载模型 seg model 61 torchvision models detection maskrcnn resnet50 fpn pretrained 61 True seg model 61 seg model cuda 1
  • 小白之通俗易懂的贝叶斯定理

    原文链接 xff1a https zhuanlan zhihu com p 37768413 概率论与数理统计 xff0c 在生活中实在是太有用了 xff0c 但由于大学课堂理解不够深入 xff0c 不能很好地将这些理论具象化并应用到实际生
  • tf.variable_scope中的reuse

    一 两种scope xff1a variable与name tf variable scope 是对变量进行命名管理 xff0c 而tf name scope 是对算子 op 进行命名管理 xff0c 二者相互不影响 见下例 xff1a i
  • HTML+CSS 简易搜索框

    搜索框是页面中很常见的一种 xff0c 下面分享一段简单搜索框案例 xff0c 直接上代码 HTML部分 lt DOCTYPE html gt lt html gt lt head gt lt meta charset 61 34 UTF
  • frp内网穿刺/反向代理教程

    文章目录 前言一 明确基本概念二 frp下载与使用1 云服务器做为Server端2 GPU服务器做为Client端3 远程访问 三 云服务器防火墙端口开启 前言 frp 是一个高性能的反向代理应用 xff0c 可以帮助开发者轻松地进行内网穿
  • Keras模型基本流程

    文章目录 前言一 Keras流程二 Keras中的模型定义1 基于Sequential 类2 基于函数式API 前言 目前打算看tensorflow probability模块 xff0c 但是发现整个都是适配Keras的 xff0c 很多
  • pytorch自动混合精度训练

    from torch cuda amp import autocast GradScaler Init Step 1 Create Model model device start epoch 61 create model opt if
  • Linux系统查看CPU个数&超线程&线程数

    小命令 xff1a Linux查看CPU详细信息 简书 jianshu com Intel CPU产品规范 xff1a 英特尔 产品 xff1a 处理器 xff0c 英特尔 NUC 迷你电脑 xff0c 内存和存储 xff0c 芯片组 in
  • Tensorflow学习笔记(1)——Tensorflow-CPU版安装躺坑实录

    从今天开始就要出品自己的Tensorflow系列啦 xff01 由于是第一篇关于Python的博文 xff0c 所以先把接触Python以来的感想和心得都放了进来 xff0c 想看Tensorflow的博友请直接跳到标题三 一 Python
  • Tensorflow学习笔记(3)——图、会话基本语法

    前言 xff1a Tensorflow xff0c 与我们之前熟悉的C C 43 43 Python的确不太一样 xff0c 建议初学者当作一门新的语言来学 如果看的过程中忽然有一种 的确不太一样 的感觉 xff0c 并且明白了哪里不一样
  • Tensorflow学习笔记(2)——Tensorflow-GPU版安装总结

    经历了N多次的失败 xff0c TF GPU的环境终于搭建好了 xff0c 全程连着弄了三天 现在把安装中的注意事项总结一下 xff0c 希望大家少走弯路 xff01 先把自己的配置列表说一下 xff1a Windows7 x64 VS20
  • 深度学习基础——彻底掌握卷积层的计算

    机器学习也是刚刚入门 xff0c 虽然对卷积 池化等过程很熟悉 xff0c 但是一直不太清楚具体的计算 xff0c 幸好在博文上看到了讲解过程 xff0c 看完以后受益匪浅 xff0c 然后自己又重新写了一遍 有这个表格 xff0c 再也不
  • Mask R-CNN 简介与论文笔记

    本篇文章是面向Mask R CNN的初学者 xff0c 旨在梳理大体思路 xff0c 认识框架基础概念 由于自己现在大四 xff0c 也是刚刚入足深度学习领域 xff0c 所以文章中免不了有错误之处 xff0c 欢迎各位博友批评指正 本博文
  • Detect-and-Track论文:3D Mask R-CNN Caffe2源代码解析——1.模型构建梳理

    这篇博文的内容是对Detect and Track的源代码进行解析 xff0c 由于是第一篇 xff0c 所以展示的是代码的脉络 xff0c 以及如何寻找到3D Mask R CNN的构建过程 博文的目录是按照文件来的 xff1a 参考内容
  • INRIA数据集

    INRIA数据集 HOG 43 SVM是经典的行人检测方法 xff0c 论文作者同时搞了一个INRIA数据集 INRIA数据集官方页面 xff1a http pascal inrialpes fr data human xff0c 不过说真
  • Detect-and-Track论文:3D Mask R-CNN Caffe2源代码解析——2.ResNet18_3D解析

    在上一篇博文中 xff0c 我们对Detect and Track论文源码中模型构建部分进行了代码梳理 xff0c 此篇博文我们对其采用的主干网络ResNet18进行详细分析 参考内容链接如下 xff1a Detect and Track论
  • Detect-and-Track论文:3D Mask R-CNN Caffe2源代码解析——3.RPN&FPN构建

    在第二部分 xff0c 我们对ResNet18的结构进行了分析 当图像经过ResNet18后 xff0c 会产生Feature Map xff08 特征图 xff09 这些特征图将会被送到RPN xff08 Region Proposal
  • Detect-and-Track论文:3D Mask R-CNN Caffe2源代码解析——4. 网络头解析

    在第三部分 xff0c 我们对3D Mask R CNN的RPN和FPN进行了详解 xff0c 在特征图经过RoIAlign过程之后 xff0c 我们得到了Resize后的特征图 下一步就是将这些维度相同的特征图送入 网络头 Net Hea