我已用随机生产函数取模拟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()的更多相关文章

  1. CVPR2019 | Mask Scoring R-CNN 论文解读

    Mask Scoring R-CNN CVPR2019 | Mask Scoring R-CNN 论文解读 作者 | 文永亮 研究方向 | 目标检测.GAN 推荐理由: 本文解读的是一篇发表于CVPR ...

  2. 论文阅读笔记三十六:Mask R-CNN(CVPR2017)

    论文源址:https://arxiv.org/pdf/1703.06870.pdf 开源代码:https://github.com/matterport/Mask_RCNN 摘要 Mask R-CNN ...

  3. 目标检测论文解读11——Mask R-CNN

    目的 让Faster R-CNN能做实例分割的任务. 方法 模型的结构图如下. 与Faster R-CNN相比,主要有两点变化. (1) 用RoI Align替代RoI Pool. 首先回顾一下RoI ...

  4. CVPR2019 | Libra R-CNN 论文解读

    作者 | 文永亮 学校 | 哈尔滨工业大学(深圳) 研究方向 | 目标检测.GAN 推荐理由 ​ 这是一篇发表于CVPR2019的paper,是浙江大学和香港中文大学的工作,这篇文章十分有趣,网友戏称 ...

  5. [Network Architecture]Mask R-CNN论文解析(转)

    前言 最近有一个idea需要去验证,比较忙,看完Mask R-CNN论文了,最近会去研究Mask R-CNN的代码,论文解析转载网上的两篇博客 技术挖掘者 remanented 文章1 论文题目:Ma ...

  6. Mask RCNN 学习笔记

    下面会介绍基于ResNet50的Mask RCNN网络,其中会涉及到RPN.FPN.ROIAlign以及分类.回归使用的损失函数等 介绍时所采用的MaskRCNN源码(python版本)来源于GitH ...

  7. 物体检测之FPN及Mask R-CNN

    对比目前科研届普遍喜欢把问题搞复杂,通过复杂的算法尽量把审稿人搞蒙从而提高论文的接受率的思想,无论是著名的残差网络还是这篇Mask R-CNN,大神的论文尽量遵循著名的奥卡姆剃刀原理:即在所有能解决问 ...

  8. Mask R-CNN详解和安装

    Detectron是Facebook的物体检测平台,今天宣布开源,它基于Caffe2,用Python写成,这次开放的代码中就包含了Mask R-CNN的实现. 除此之外,Detectron还包含了IC ...

  9. Mask R-CNN论文理解

    摘要: Mask RCNN可以看做是一个通用实例分割架构. Mask RCNN以Faster RCNN原型,增加了一个分支用于分割任务. Mask RCNN比Faster RCNN速度慢一些,达到了5 ...

  10. [代码解析]Mask R-CNN介绍与实现(转)

    文章来源 DFann 版权声明:如果你觉得写的还可以,可以考虑打赏一下.转载请联系. https://blog.csdn.net/u011974639/article/details/78483779 ...

随机推荐

  1. 记一次asp.net core 在iis上运行抛出502.5错误

    asp.net core 在iis上运行抛出502.5异常的部分原因以及解决方案 环境说明 已安装 .net core runtime 2.1.401 已安装 .net core windows ho ...

  2. python3 FastDFS 配置文件 客户端连接 删除文件 bug

    文件传输使用FastDFS 很方便, 不管是大小文件, 用默认的配置就可以, 这里插入一个配置文件 :  (后补python连接FastDFS上传下载文件) # connect timeout in ...

  3. 剑指offer 15:链表的倒数第k个节点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思路 使用快慢指针法,让快指针先走k步,然后再让慢指针开始走,当快指针到达链表尾部时,慢指针刚好到达倒数第k个节点. C++代码实现: /* ...

  4. nRF24L01+不能接收或接收偶尔异常等问题实战分享

    nRF24L01+接收异常问题综述 在调试nRF24L01+无线收发模块的时候,最具标志性的环节就是在接收端可以收到数据.在实际应用调试中,会出现很多意想不到的情况,造成nRF24L01+模块接收端无 ...

  5. Ubuntu18.04 安装TensorFlow 和 Keras

    TensorFlow和Keras是当前两款主流的深度学习框架,Keras被采纳为TensorFlow的高级API,平时做深度学习任务,可以使用Keras作为深度学习框架,并用TensorFlow作为后 ...

  6. Tensorflow之变量赋值输出1+2+3+4+5+6+7+8+...

    一.导入tensorflow import tensorflow as tf 二.定义计算图 (1)常量初始化 constant_name = tf.constant(value) (2)变量初始化 ...

  7. Ubuntu环境下打开Firefox报错: Firefox is already running, but is not responding.

    在ubuntu下启动firefox可能会报错 Firefox is already running, but is not responding. To open a new window, you ...

  8. Jenkins如何集成运行testng.xml文件的解决方案

    前言: 在我们使用maven+testng+restassured+reportng实现接口测试框架时,会发现在本机创建项目,进行一些pom引用和简单的封装后,很快就可以直接利用idea自带的test ...

  9. Mybatis介绍(一)

    MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .201 ...

  10. 鲜贝7.3--mysql安装

    1.安装包下载 首先是下载 mysql-installer-community-5.6.14.0.msi ,大家可以到 mysql 官方网去下载. win10的安全机制比较严格,安装前最好到<设 ...