paddle_圖像識別實戰(一)----如何根據已有圖片生成測試和訓練信息並保存到文件

圖像識別實戰(一)----如何根據已有圖片生成測試和訓練信息並保存到文件

提前知道

本實驗爲手勢識別,具體圖片可以參考下圖,經過訓練我們得知,標籤爲5.

在這裏插入圖片描述

總體目標

Dataset文件夾下面有0-9十個文件,其中有幾十張代表文件夾數值的手勢圖片。

我們的目標便是將Dataset文件夾下面的圖片進行訓練,最後得出模型進行預測。

本次目標

將Dataset下面的所有圖片的路徑及其標籤保存到兩個文件train.list&test.list中,便於模型訓練時調用。

1、導入庫

import os
import time
import random
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import paddle
import paddle.fluid as fluid
import paddle.fluid.layers as layers
from multiprocessing import cpu_count
from paddle.fluid.dygraph import Pool2D,Conv2D
from paddle.fluid.dygraph import Linear

導入庫的時候可以導入多餘的庫,所以可以放心導入。

2、生成保存信息的文件

data_path = '/home/aistudio/data/data23668/Dataset'
#每個人的數據都可能保存在不同的路徑,所以可以按需修改
character_folders = os.listdir(data_path)
#查詢data_path下面的所有文件,本次程序中是0-9是個文件夾
if os.path.exists('./train_data.list'):
	os.remove('./train_data.list')
if(os.path.exists('./test_data.list')):
    os.remove('./test_data.list')

意義:查詢我們需要生成用來保存信息的文件是否已經存在,如果已經存在則刪除(後面我們會自行創建),如果不存在則不進行其他任何操作。

目的:爲了防止已經存在目標文件,且文件中有數據,造成後續程序運行出錯

3、保存圖片路徑和標籤信息

for character_folder in character_folders:
	with open('./train_data.list','a') as f_train:
        with open('./test_data.list','a') as f_test:
        	if character_folder = 'DS.Store':
        	#在解壓文件時會產生一些垃圾文件,遇見不處理就行
        		continue
        	character_imgs = os.listdir(os.path.join(data_path,character_folder)
        	count = 0#用來計數,劃分測試和訓練集
        	for img in character_imgs:
        	if count%10 == 0:
      			f_test.write(os.path.join(data_path,character_folder,img)+
      										'\t'+character_folder+'\n')
        		else :
        		f_train.write(os.path.join(data_path,character_folder,img)+
        									'\t'+character_folder+'\n')
        	count+=1
print('文件已經從創建完成!')
        	

with open(’./train_data.list’,‘a’) as f_train:

‘a’,有不存在則創建的含義,和第二步對應。如果想具體瞭解的話可以點擊’a’進行進一步學習。

4、數據提供器

train_reader = paddle.batch(reader = paddle.reader.shuffle(reader = 		    								data_reader('./train_data.list'),buf_size = 256),batch_size = 32)
test_reader = paddle.batch(reader = data_reader('./test_data.list'),batch_size = 32)

buf_size-------設置緩衝區大小

batch_size—一次訓練所選取的樣本數

那麼

reader = data_reader('./train_data.list')

代表什麼呢?

reader是一種迭代器,每次返回一條數據,本次實驗爲每次放回一張圖片的地址及其對應的標籤,however reader需要用戶我們自己定義。

So, reader需要怎麼定義呢?

請欣賞"圖像識別實戰(二)"!!!!!!博主會努力更新的,所以也請不要吝嗇你們的點贊!!!

對了,老子愛你們!

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