https://blog.csdn.net/m0_38024332/article/details/81779544

关于 tf.image.crop_and_resize 的使用
  最近在学习fast-RCNN,在写ROI Pooling层看到说可以直接利用 tf.image.crop_and_resize 。但是如何使用这个函数成了很大的问题,查网上很多资料都是复制加翻译从官网api来的,受个人的英语能力又接受不了,最后发帖求助解决了这个问题,兴致盎然分享一遍。

以下是相关的链接:

官网API【www.tensorflow.cn】
发帖求助链接【stackoverflow】
先来个代码引用~
tf.image.crop_and_resize(
    image,
    boxes,
    box_ind,
    crop_size,
    method='bilinear',
    extrapolation_value=0,
    name=None
)
 
上面是函数的相关参数,首先必须说明官网中有输入tensor的要求,但是我直接输入值也是可以的。这里进行相应的解释:

boxes:指需要划分的区域,输入格式为 [[ymin,xmin,ymax,xmax]] (要注意!这是一个二维列表)。官网在这里讲了一大段,看着简直头晕,大概意思是分了两种情况,一种是超出1另一种就是不超出1的。先将输入值范围为0--1的情况,这里其实是这样:
      设crop的区域坐标为 [ y1,x1,y2,x2 ],那么想得到相应正确的crop图形就一定要归!一!化!,即图片长度为 [ W,H ],则实际输入的boxes为 [ y1/H,x1/W,y2/H,x2/W ]。
      那超出1的范围是个啥意思咧?程序将为你自动补齐的意思,我试了几次都是直接用空白补齐,不知道大家有没有不一样的结果,注意奥!你的范围要是全部超出1,那就稳稳当当是个黑色框了,因为超出1根据归一化截取不到图片任何内容啦!
 
box_ind:box_ind 按我的理解,就是 boxes !index 嘛!那就是对应的关系啰。另外,按照官网的想法,投入的是tensor,那么肯定不止一张图片啦,这个参数就是为了索引用的。值得注意的(下方代码贴出来会更清楚。
 
crop_size:这个参数就可想而知啦,本来这就是我用这个函数的原因,输入一个大小即可,可以忽视通道数量这些
 
好啦,参数解释就这么多,但是如果有人按照上面的千辛万苦解决之后,使用 sess.run() 得到实际数据,开开心心 imshow() 一下。然后!得到的东西大概是这样----- ->->

@#!??@#!^@!*&^&*!$JKH !当时心情就是这样

辛亏帖子里的仁兄说明了这个问题,这里我就直接引用了

As you're using float outside the [0,1] range, matplotlib is bounding your values to 1. That's why you get those colored pixels (either solid red, solid green or solid blue, or a mixing of these). Cast your array to uint_8 to get an image that make sense.

大致是因为我使用的是matplotlib模块,而当数据为浮点数则应归一化否则应为整数型 。

那么最后操作: 结果 % 255,或者类似 astype('uint8')

大!功!告!成!
噢噢噢噢噢噢噢噢,贴上真正的结果图(下图下方和右方黑框和白框就是程序自动填充的)

最后贴上我的代码:
import tensorflow as tf
import matplotlib.pyplot as plt

img = plt.imread(image_path)
shape = img.shape
img = img.reshape([1,shape[0], shape[1], shape[2]])
a = tf.image.crop_and_resize(img,[[0.5,0.6,0.9,0.8],[0.2,0.6,1.3,0.9]],box_ind=[0,0],crop_size=(100,100))
sess = tf.Session()
b = a.eval(session = sess)
plt.imshow(b[0]/255)
plt.imshow(b[0].astype('uint8'))
谢谢大家捧场!拱手!
突然想写这个是有些无奈,有时候查一个函数查半天论坛里大部分都是直接引用官网内容,左上角还有个 原创字样 太扎眼。另外任何疑问或者可以改进的地方,希望大家伙都可以帮帮我。希望能在这里快快成长!

2018.12.2

忙着学英语好久没看论坛了,感慨一下。更新一下内容

这里要注意,有人提出 box_ind 的参数解释不清楚,需要再次说明,我们应该把这个参数与 img 和 boxes 联动使用。

假设 img = [img1, img2]

boxes = [boxes1, boxes2]

box_ind = [ 1 , 0 ]

那么,将返回

[使用boxes1 作用于 img2 后的图片 , 使用boxes2 作用于 img1后的图片]

如上。

关于 tf.image.crop_and_resize的使用的更多相关文章

  1. TensofFlow函数: tf.image.crop_and_resize

    tf.image.crop_and_resize( image, boxes, box_ind, crop_size, method='bilinear', extrapolation_value=0 ...

  2. tf.image.crop_and_resize

    https://blog.csdn.net/m0_38024332/article/details/81779544 将图片剪切下来,池化为固定大小.可以快速的对proposal进行池化

  3. 深度学习实践-物体检测-faster-RCNN(原理和部分代码说明) 1.tf.image.resize_and_crop(根据比例取出特征层,进行维度变化) 2.tf.slice(数据切片) 3.x.argsort()(对数据进行排列,返回索引值) 4.np.empty(生成空矩阵) 5.np.meshgrid(生成二维数据) 6.np.where(符合条件的索引) 7.tf.gather取值

    1. tf.image.resize_and_crop(net, bbox, 256, [14, 14], name)  # 根据bbox的y1,x1,y2,x2获得net中的位置,将其转换为14*1 ...

  4. faster-rcnn 笔记

    2019-02-18,15点00 ''' 下面是别人写的原始的笔记,我在上面自己补充了一些. ''' #https://www.cnblogs.com/the-home-of-123/p/974796 ...

  5. (原)faster rcnn的tensorflow代码的理解

    转载请注明出处: https://www.cnblogs.com/darkknightzh/p/10043864.html 参考网址: 论文:https://arxiv.org/abs/1506.01 ...

  6. faster rcnn源码阅读笔记1

    自己保存的源码阅读笔记哈 faster rcnn 的主要识别过程(粗略) (开始填坑了): 一张3通道,1600*1600图像输入中,经过特征提取网络,得到100*100*512的feature ma ...

  7. 『计算机视觉』Mask-RCNN_推断网络其四:FPN和ROIAlign的耦合

    一.模块概述 上节的最后,我们进行了如下操作获取了有限的proposal, # [IMAGES_PER_GPU, num_rois, (y1, x1, y2, x2)] # IMAGES_PER_GP ...

  8. 『计算机视觉』Mask-RCNN_推断网络其二:基于ReNet101的FPN共享网络暨TensorFlow和Keras交互简介

    零.参考资料 有关FPN的介绍见『计算机视觉』FPN特征金字塔网络. 网络构架部分代码见Mask_RCNN/mrcnn/model.py中class MaskRCNN的build方法的"in ...

  9. 『计算机视觉』FPN:feature pyramid networks for object detection

    对用卷积神经网络进行目标检测方法的一种改进,通过提取多尺度的特征信息进行融合,进而提高目标检测的精度,特别是在小物体检测上的精度.FPN是ResNet或DenseNet等通用特征提取网络的附加组件,可 ...

随机推荐

  1. esxi 主机用户功能说明

    1.  root 用户 默认情况下,每个 ESXi 主机都有一个具有管理员角色的 root 用户帐户.该 root 用户帐户可用于本地管理,并可用于将主机连接到 vCenter Server. 此公共 ...

  2. 官网英文版学习——RabbitMQ学习笔记(六)Routing

    有选择的接收消息. 上一节我们使用的是fanout exchange来实现消息的发布/订阅模式,这并没有给我们带来多大的灵活性——它只能够让人盲目地进行广播.而本节我们采用direct类型的交换器来实 ...

  3. QT事件处理–notify()

    转载至:https://www.deeplearn.me/349.html 一.说明 Qt 处理事件的方式之一:”继承 QApplication 并重新实现 notify()函数”.Qt 调用 QAp ...

  4. 本地Redis服务配置

    本地Redis服务配置 要求:在虚拟机中启动redis服务,并要在windows物理机上取得链接 虚拟机安装略,(结果如下) windows工作机上装了Oracle VM VirtualBox,并在其 ...

  5. Java 统计整数二进制中1的个数

    package cookie; public class CountBinary_1 { public static void main(String[] args) { System.out.pri ...

  6. HDU 2586 LCA-Tarjan

    还是LCA-tarjan算法,跟POJ 1330做法基本类似,只是这个题目要求输出两个点的最短距离,其实利用LCA的性质,就是 两个点分别到最近公共祖先的距离之和 一开始本来想用并查集把路径长度给找出 ...

  7. Java中调试与测试常用方法

    一.断言 1.概述 根据之前的条件来对后续的结果进行预判. 2.在Java中,断言默认是不开启的,需要手动进行开启,只需添加参数-ea(enable assert的意思) 开启步骤: 选中项目路径,鼠 ...

  8. 基础语法-其它流程控制语句break和continue

    基础语法-其它流程控制语句break和continue 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.break语句 /** * break语句 * @author 尹正杰 * ...

  9. 每天一点点之 taro 框架开发 - 事件处理与样式表

    1.方法调用 state = { name:'张三' } test(){ this.state.name } <button onClick={ this.test.bind(this) } / ...

  10. tensorflow--建立一个简单的小网络

    In [19]:           import tensorflow as tf import numpy as np # #简单的数据形网络 # #定义输入参数 # X=tf.constant( ...