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. Android明密文切换

    前言: 在我们的登录界面经常会遇到查看自己输入密码是否正确,就会用到明密文切换 正文: 我们先写出xml文件文件中的代码,不用过多解释 <EditText android:layout_widt ...

  2. 【转载】Android Gradle Build Error:Some file crunching failed, see logs for details解决办法

    Android Gradle Build Error:Some file crunching failed, see logs for details解决办法 转载请标明出处: http://www. ...

  3. Ajax学习系列——jQuery中Ajax的请求方式

    在jQuery中,Ajax常见的请求方式主要有4种. 1.$.ajax()返回其创建的XMLHttpRequest对象. $.ajax({ type:"POST", content ...

  4. C# Stream篇(七) -- NetworkStream

    NetworkStream 目录: NetworkStream的作用 简单介绍下TCP/IP 协议和相关层次 简单说明下 TCP和UDP的区别 简单介绍下套接字(Socket)的概念 简单介绍下Tcp ...

  5. mysql安装--window版

    一.下载 二.解压 三.配置 四.环境变量 五.安装MySQL服务 六.启动MySQL服务 七.停止MySQL 一.下载 第一步:打开网址,https://www.mysql.com,点击downlo ...

  6. vue学习(七)refs的使用

    ref的使用只有在特殊的情况下使用 1.如果给标签添加ref,获取的就是真实的DOM节点2. 如果给子组件添加ref,获取的就是当前的子组件对象 例子: <div id="app&qu ...

  7. BurpSuite详解

    转载自:http://www.nxadmin.com/tools/689.html 本文由阿德马翻译自国外网站,请尊重劳动成果,转载注明出处 Burp Suite是Web应用程序测试的最佳工具之一,其 ...

  8. 不要对md5file.read()计算md5值

    最近遇到的一个问题,我使用以下代码对备份文件计算MD5值: # md5file=open("%s" % outputpath, 'rb') # md5=hashlib.md5(md ...

  9. 大数据高可用集群环境安装与配置(06)——安装Hadoop高可用集群

    下载Hadoop安装包 登录 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/ 镜像站,找到我们要安装的版本,点击进去复制下载链接 ...

  10. 第二届中国“AI+”创新创业大赛完美收官,京东云赛道硕果累累

    聚焦南京产业发展核心诉求,京东云携手南京政府构建的"平台+生态+赋能"的产业体系,搭建产业创新云平台,以人工智能产业创新链要素补齐为核心,围绕"研.产.供.销.服&quo ...