mask-rcnn的解读(三):batch_slice()
我已用随机生产函数取模拟5张图片各有8个box的坐标值,而后验证batch_slice()函数的意义。
由于inputs_slice = [x[i] for x in inputs] output_slice = graph_fn(*inputs_slice)
代码一时蒙蔽,故而对其深入理解,如下: 代码如下:
import tensorflow as tf
import random
import numpy as np
sess=tf.Session()
input=np.array([random.randint(0,150) for i in range(5*8*4)]).reshape((5,8,4))
# print('show input=',input)
ax=np.array([random.randint(0,7) for i in range(5*6)]).reshape((5,6))
inputs=[input,ax]
print('true_inputs=',inputs) def batch_slice(inputs, graph_fn, batch_size, names=None):
"""Splits inputs into slices and feeds each slice to a copy of the given
computation graph and then combines the results. It allows you to run a
graph on a batch of inputs even if the graph is written to support one
instance only. inputs: list of tensors. All must have the same first dimension length
graph_fn: A function that returns a TF tensor that's part of a graph.
batch_size: number of slices to divide the data into.
names: If provided, assigns names to the resulting tensors.
"""
if not isinstance(inputs, list): # 判断inputs是否为list类型
inputs = [inputs] outputs = []
for i in range(batch_size):
inputs_slice = [x[i] for x in inputs] # 是一个二维矩阵(去掉了图片张数的维度)# 表示切batch_size,即原来有5个图片,现在截取batch_size=3个图片
output_slice = graph_fn(*inputs_slice) # 根据ax值取值
if not isinstance(output_slice, (tuple, list)):
output_slice = [output_slice]
outputs.append(output_slice)
# Change outputs from a list of slices where each is
# a list of outputs to a list of outputs and each has
# a list of slices
outputs = list(zip(*outputs))
if names is None:
names = [None] * len(outputs)
result = [tf.stack(o, axis=0, name=n) for o, n in zip(outputs, names)]
if len(result) == 1:
result = result[0]
return result d=pre_nms_anchors = batch_slice(inputs, lambda a, x: tf.gather(a, x), 3, names=["pre_nms_anchors"])
d=sess.run(d)
print('result',d) # 最终结果
print('show value=',[x for x in inputs]) # 与下面代码比较,理解inputs_slice = [x[i] for x in inputs]的意义
for i in range(2):
inputs_slice = [x[i] for x in inputs]
print('%id='%(i),inputs_slice)
print('show inputs_slice=',inputs_slice) 结果如下:
true_inputs= [array([[[102, 7, 45, 34],
[ 19, 105, 82, 83],
[ 84, 89, 70, 8],
[ 57, 81, 138, 122],
[ 69, 54, 61, 116],
[108, 120, 46, 122],
[102, 29, 39, 97],
[ 49, 92, 117, 52]],
[[ 52, 124, 86, 86],
[ 54, 9, 70, 104],
[102, 27, 29, 119],
[124, 82, 17, 4],
[ 53, 87, 69, 98],
[127, 106, 80, 40],
[ 78, 121, 84, 28],
[ 86, 111, 129, 149]],
[[112, 98, 89, 142],
[ 20, 134, 40, 50],
[139, 101, 99, 99],
[140, 60, 148, 49],
[ 49, 113, 26, 58],
[143, 85, 96, 142],
[ 42, 70, 16, 123],
[ 12, 92, 77, 143]],
[[136, 137, 31, 31],
[ 78, 28, 32, 87],
[ 39, 12, 124, 47],
[100, 96, 131, 12],
[111, 27, 28, 118],
[ 14, 130, 16, 43],
[ 77, 127, 69, 60],
[ 62, 53, 85, 95]],
[[ 17, 112, 122, 149],
[ 5, 89, 40, 105],
[ 49, 128, 128, 121],
[ 25, 1, 31, 52],
[127, 149, 9, 115],
[ 37, 103, 114, 119],
[130, 23, 29, 86],
[ 46, 111, 101, 69]]]), array([[3, 2, 6, 7, 2, 6],
[1, 1, 0, 6, 1, 7],
[1, 7, 0, 6, 6, 6],
[6, 3, 7, 7, 6, 0],
[0, 7, 4, 6, 3, 0]])]
result [[[ 57 81 138 122]
[ 84 89 70 8]
[102 29 39 97]
[ 49 92 117 52]
[ 84 89 70 8]
[102 29 39 97]]
[[ 54 9 70 104]
[ 54 9 70 104]
[ 52 124 86 86]
[ 78 121 84 28]
[ 54 9 70 104]
[ 86 111 129 149]]
[[ 20 134 40 50]
[ 12 92 77 143]
[112 98 89 142]
[ 42 70 16 123]
[ 42 70 16 123]
[ 42 70 16 123]]]
show value= [array([[[102, 7, 45, 34],
[ 19, 105, 82, 83],
[ 84, 89, 70, 8],
[ 57, 81, 138, 122],
[ 69, 54, 61, 116],
[108, 120, 46, 122],
[102, 29, 39, 97],
[ 49, 92, 117, 52]],
[[ 52, 124, 86, 86],
[ 54, 9, 70, 104],
[102, 27, 29, 119],
[124, 82, 17, 4],
[ 53, 87, 69, 98],
[127, 106, 80, 40],
[ 78, 121, 84, 28],
[ 86, 111, 129, 149]],
[[112, 98, 89, 142],
[ 20, 134, 40, 50],
[139, 101, 99, 99],
[140, 60, 148, 49],
[ 49, 113, 26, 58],
[143, 85, 96, 142],
[ 42, 70, 16, 123],
[ 12, 92, 77, 143]],
[[136, 137, 31, 31],
[ 78, 28, 32, 87],
[ 39, 12, 124, 47],
[100, 96, 131, 12],
[111, 27, 28, 118],
[ 14, 130, 16, 43],
[ 77, 127, 69, 60],
[ 62, 53, 85, 95]],
[[ 17, 112, 122, 149],
[ 5, 89, 40, 105],
[ 49, 128, 128, 121],
[ 25, 1, 31, 52],
[127, 149, 9, 115],
[ 37, 103, 114, 119],
[130, 23, 29, 86],
[ 46, 111, 101, 69]]]), array([[3, 2, 6, 7, 2, 6],
[1, 1, 0, 6, 1, 7],
[1, 7, 0, 6, 6, 6],
[6, 3, 7, 7, 6, 0],
[0, 7, 4, 6, 3, 0]])]
0d= [array([[102, 7, 45, 34],
[ 19, 105, 82, 83],
[ 84, 89, 70, 8],
[ 57, 81, 138, 122],
[ 69, 54, 61, 116],
[108, 120, 46, 122],
[102, 29, 39, 97],
[ 49, 92, 117, 52]]), array([3, 2, 6, 7, 2, 6])]
1d= [array([[ 52, 124, 86, 86],
[ 54, 9, 70, 104],
[102, 27, 29, 119],
[124, 82, 17, 4],
[ 53, 87, 69, 98],
[127, 106, 80, 40],
[ 78, 121, 84, 28],
[ 86, 111, 129, 149]]), array([1, 1, 0, 6, 1, 7])]
show inputs_slice= [array([[ 52, 124, 86, 86],
[ 54, 9, 70, 104],
[102, 27, 29, 119],
[124, 82, 17, 4],
[ 53, 87, 69, 98],
[127, 106, 80, 40],
[ 78, 121, 84, 28],
[ 86, 111, 129, 149]]), array([1, 1, 0, 6, 1, 7])]
Process finished with exit code 0
mask-rcnn的解读(三):batch_slice()的更多相关文章
- CVPR2019 | Mask Scoring R-CNN 论文解读
Mask Scoring R-CNN CVPR2019 | Mask Scoring R-CNN 论文解读 作者 | 文永亮 研究方向 | 目标检测.GAN 推荐理由: 本文解读的是一篇发表于CVPR ...
- 论文阅读笔记三十六:Mask R-CNN(CVPR2017)
论文源址:https://arxiv.org/pdf/1703.06870.pdf 开源代码:https://github.com/matterport/Mask_RCNN 摘要 Mask R-CNN ...
- 目标检测论文解读11——Mask R-CNN
目的 让Faster R-CNN能做实例分割的任务. 方法 模型的结构图如下. 与Faster R-CNN相比,主要有两点变化. (1) 用RoI Align替代RoI Pool. 首先回顾一下RoI ...
- CVPR2019 | Libra R-CNN 论文解读
作者 | 文永亮 学校 | 哈尔滨工业大学(深圳) 研究方向 | 目标检测.GAN 推荐理由 这是一篇发表于CVPR2019的paper,是浙江大学和香港中文大学的工作,这篇文章十分有趣,网友戏称 ...
- [Network Architecture]Mask R-CNN论文解析(转)
前言 最近有一个idea需要去验证,比较忙,看完Mask R-CNN论文了,最近会去研究Mask R-CNN的代码,论文解析转载网上的两篇博客 技术挖掘者 remanented 文章1 论文题目:Ma ...
- Mask RCNN 学习笔记
下面会介绍基于ResNet50的Mask RCNN网络,其中会涉及到RPN.FPN.ROIAlign以及分类.回归使用的损失函数等 介绍时所采用的MaskRCNN源码(python版本)来源于GitH ...
- 物体检测之FPN及Mask R-CNN
对比目前科研届普遍喜欢把问题搞复杂,通过复杂的算法尽量把审稿人搞蒙从而提高论文的接受率的思想,无论是著名的残差网络还是这篇Mask R-CNN,大神的论文尽量遵循著名的奥卡姆剃刀原理:即在所有能解决问 ...
- Mask R-CNN详解和安装
Detectron是Facebook的物体检测平台,今天宣布开源,它基于Caffe2,用Python写成,这次开放的代码中就包含了Mask R-CNN的实现. 除此之外,Detectron还包含了IC ...
- Mask R-CNN论文理解
摘要: Mask RCNN可以看做是一个通用实例分割架构. Mask RCNN以Faster RCNN原型,增加了一个分支用于分割任务. Mask RCNN比Faster RCNN速度慢一些,达到了5 ...
- [代码解析]Mask R-CNN介绍与实现(转)
文章来源 DFann 版权声明:如果你觉得写的还可以,可以考虑打赏一下.转载请联系. https://blog.csdn.net/u011974639/article/details/78483779 ...
随机推荐
- Microsoft Office自制安装指南 —Nusen_Liu
Microsoft Word 2010 正版下载安装步骤 版权来自:Nusen_Liu 1. 解压文件(推荐解压到当前文件夹,大神也可以自定义的)下载地址在第16步 (*^__^*) 2. 解 ...
- 实战FFmpeg--编译iOS平台使用的FFmpeg库(支持arm64的FFmpeg2.6.2)
编译环境:Mac OS X 10.10.2 ,Xcode 6.3 iOS SDK 8.3 FFmpeg库的下载地址是 http://www.ffmpeg.org/releases/ . ...
- Python单元测试工具doctest和unittest
Python标准库包含两个测试工具. doctest:一个简单的模块,为检查文档而设计,但也适合用来编写单元测试. unittest:一个通用的测试框架. 一.使用doctest进行单元测试 创建文件 ...
- TypeScript 学习笔记(三)
类: 1.TypeScript 是面向对象的 JavaScript,类描述了创建的对象共同的属性和方法 2.类通过关键字 class 声明,使用 extends 关键字进行继承 3.在引用一个类成员时 ...
- hbase相关操作
hbase安装 下载 wget http://apache.gree.com/apache/hbase/hbase-1.2.11/hbase-1.2.11-bin.tar.gz tar -zxvf b ...
- Jenkins配置:添加用户和管理权限
Jenkins配置:添加用户和管理权限 参考文章:http://www.cnblogs.com/zz0412/p/jenkins_jj_14.html 今天给大家说说使用Jenkins专有用户数据库的 ...
- tf.summary.scalar()和tf.summary.histogram
用法: 1.tf.summary.scalar 用来显示标量信息,其格式为: tf.summary.scalar(tags, values, collections=None, name=None) ...
- 洛谷P4169 [Violet]天使玩偶/SJY摆棋子
%%%神仙\(SJY\) 题目大意: 一个二维平面,有两种操作: \(1.\)增加一个点\((x,y)\) \(2.\)询问距离\((x,y)\)曼哈顿最近的一个点有多远 \(n,m\le 300 0 ...
- Python中的赋值、深拷贝与浅拷贝(内存地址)
Python中的赋值.深拷贝与浅拷贝(内存地址) 1.python中的可变对象与不可变对象 (1) 可变对象:dict,list def dict_test(): a = {} b = a print ...
- 震惊!CCF改名为中国沙雕化学学会!!!
震惊!中国沙雕计算机学会要改名中国沙雕化学学会??? Ak元素 据传,CCF,发现了一种新元素,元素符号暂命名为为Ak,中文名称暂未命名,据说是第250号元素. Ak 元素的发现 珂学家在一个叫洛谷的 ...