關於 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'))

謝謝大家捧場!拱手!


突然想寫這個是有些無奈,有時候查一個函數查半天論壇裏大部分都是直接引用官網內容,左上角還有個 原創字樣 太扎眼。另外任何疑問或者可以改進的地方,希望大傢伙都可以幫幫我。希望能在這裏快快成長!

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