关于 tf.image.crop_and_resize的使用

关于 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的要求,但是我直接输入值也是可以的。这里进行相应的解释:

  1. 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根据归一化截取不到图片任何内容啦!
     
  2. box_ind:box_ind 按我的理解,就是 boxes !index 嘛!那就是对应的关系啰。另外,按照官网的想法,投入的是tensor,那么肯定不止一张图片啦,这个参数就是为了索引用的。值得注意的(下方代码贴出来会更清楚。
     
  3. 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'))

谢谢大家捧场!拱手!


突然想写这个是有些无奈,有时候查一个函数查半天论坛里大部分都是直接引用官网内容,左上角还有个 原创字样 太扎眼。另外任何疑问或者可以改进的地方,希望大家伙都可以帮帮我。希望能在这里快快成长!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章