1. 程式人生 > >使用TFRecord進行圖片格式轉換以及搭建神經網路實驗全過程,使用Tensorflow訓練自己的資料集

使用TFRecord進行圖片格式轉換以及搭建神經網路實驗全過程,使用Tensorflow訓練自己的資料集

最近一個大作業需要進行影象處理可是網上的資源太分散,於是想整合網上資源,形成一個系統:

主要包括

  1. 圖片預處理
  2. 圖片轉TFrecord格式
  3. TFrecord格式轉圖片檢視
  4. 簡單神經網路搭建
  5. TFrecord格式在神經網路中的讀取
  6. batch方法提取資料
  7. 神經網路效能評價
  8. 總結

1.圖片預處理

主要是車牌分類,將每一類資料按照不同資料夾進行儲存。每張圖片格式大概是180*60.

 

2.圖片轉TFrecord格式

tfrecord資料檔案是一種將影象資料和標籤統一儲存的二進位制檔案,能更好的利用記憶體,在tensorflow中快速的複製,移動,讀取,儲存等。

tfrecord會根據你選擇輸入檔案的類,自動給每一類打上同樣的標籤。如在本例中,只有0,1 兩類,想知道資料夾名與label關係的,可以自己儲存起來。

參考連結:https://blog.csdn.net/v1_vivian/article/details/77898414

# -*- coding: utf-8 -*-
"""
Created on Sat Nov  3 09:32:31 2018

@author: Decheng Liu
製作資料集 讀取車牌資料集
https://blog.csdn.net/zhangjunp3/article/details/79627824
"""
import os

import tensorflow as tf
from PIL import Image
import matplotlib.pyplot as plt

# 儲存為TFrecords
cwd = r'H:\部落格\20181115 TFrecord\classes\\'
classes = {'Full_occlusion' , 'Normal', 'Semi_occlusion', 'Unsuspended'}
class_map = {}    # 檔名與label關係,儲存便於檢視
           
writer = tf.python_io.TFRecordWriter('car_License_plate_train.tfrecords') #要生成的檔案

for index ,name in enumerate(classes):
    
    class_path = cwd + name + '\\'
    class_map[index] =  name
    for img_name in os.listdir(class_path):
        img_path = class_path + img_name  # 每一個圖片的地址
        img = Image.open(img_path)
        img = img.resize((180,60))
        
        plt.imshow(img)
        print (img_path)
        img_raw = img.tobytes()   # 將圖片轉換為二進位制
        example = tf.train.Example(features=tf.train.Features(feature={
                  'label':tf.train.Feature(int64_list = tf.train.Int64List(value=[index])),
                  'img_raw':tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))
                  }))    #example 物件對label和image資料進行封裝
        writer.write(example.SerializeToString())   # 序列化為字串
        plt.show()
    print(class_path)
writer.close()


txtfile = open('class_map.txt','w+')
for key in class_map.keys():
    txtfile.writelines(str(key)+":"+class_map[key]+"\n")
txtfile.close()

這時生成一個TFrecord檔案以及一個標籤對映檔案如下:

0:Semi_occlusion
1:Normal
2:Unsuspended
3:Full_occlusion

3.TFrecord格式轉圖片便於檢視與處理

讀取TFRecord的資料,進行解析,此時使用了檔案佇列以及多執行緒