Tensorflow(4) Semantic Segmentation 圖片預處理
阿新 • • 發佈:2019-02-18
在語義分割中我們常用的資料集是VOC2012,在實際訓練的時候我們如何利用這個資料集對模型進行訓練呢,下面是處理的一些細節以及相關程式碼。這個資料集的介紹詳細請見我的另一篇部落格
用tensorflow對其進行處理
tensorflow讀圖片的方式:
import tensorflow as tf
img_content = tf.read_file(filepath)
img = tf.image.decode_image(img_content)
# tf.image.decode_image()會根據讀入的圖片的channel數
# 分別等價於 tf.image.decode_png() channel=1
# tf.image.decode_jpeg() channel=3
# tf.image.decode_gif() channel=4
1.如果直接從SegmentationClass裡面讀.png圖片,列印其ndarray,會發現你讀出來的ndarray裡面最大的數值居然是220。而原本應該是255(SegmentationClass裡面的圖片的邊緣是白色)。並且並不能讀出正確的分類資訊。這個時候要先用skimage來對圖片做一次轉換。轉換程式碼如下:
import numpy as np
from skimage import io
im = Image.open(src_filepath)
io.imsave(dest_filepath, np.array(im))
2.對圖片進行解碼之後,我們要把圖片裡面的255全部轉換成0,因為255是描出來的邊,並不屬於voc的21類裡面。那該如何轉換呢?
import tensorflow as tf
label = tf.cast(label, tf.float32)
ignore = 255
label = label-ignore
label = tf.cast(label,tf.uint8)