一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

為深度學(xué)習(xí)模型加載自定義圖像數(shù)據(jù)集:第1部分

 悅光陰 2022-10-12 發(fā)布于北京

作者|Renu Khandelwal
編譯|VK
來源|Towards Data Science

在本文中,你將學(xué)習(xí)如何加載自定義數(shù)據(jù)和創(chuàng)建圖像序列和測試數(shù)據(jù)集,作為深度學(xué)習(xí)模型的輸入。

  • Open CV2
  • PIL

這里使用的數(shù)據(jù)集是來自Kaggle的Intel圖像分類。

數(shù)據(jù)集鏈接:https://www./puneet6060/intel-image-classification/version/2

“Intel圖像分類”數(shù)據(jù)集已分為train、test和Val,我們將僅使用訓(xùn)練數(shù)據(jù)集學(xué)習(xí)如何使用不同的庫加載數(shù)據(jù)集。

為深度學(xué)習(xí)模型加載自定義數(shù)據(jù)集的典型步驟

  1. 打開圖像文件。文件的格式可以是JPEG、PNG、BMP等。

  2. 調(diào)整圖像大小以匹配深度學(xué)習(xí)模型的輸入層的輸入大小。

  3. 將圖像像素轉(zhuǎn)換為浮點數(shù)據(jù)類型。

  4. 將圖像標準化,使像素值在0到1之間。

  5. 深度學(xué)習(xí)模型的圖像數(shù)據(jù)應(yīng)該是一個numpy數(shù)組或一個張量對象。

自定義圖像數(shù)據(jù)的文件夾結(jié)構(gòu)

每個類都是一個文件夾,其中包含該特定類的圖像。

使用CV2加載圖像數(shù)據(jù)

導(dǎo)入所需的庫

import pandas as pd
import numpy as np
import os
import tensorflow as tf
import cv2
from tensorflow import keras
from tensorflow.keras import layers, Dense, Input, InputLayer, Flatten
from tensorflow.keras.models import Sequential, Model
from  matplotlib import pyplot as plt
import matplotlib.image as mpimg
%matplotlib inline

從其中一個文件夾中隨機輸出五張圖像

plt.figure(figsize=(20,20))
test_folder=r'CV\Intel_Images\seg_train\seg_train\forest'
for i in range(5):
    file = random.choice(os.listdir(img_folder))
    image_path= os.path.join(img_folder, file)
    img=mpimg.imread(image_path)
    ax=plt.subplot(1,5,i+1)
    ax.title.set_text(file)
    plt.imshow(img)

設(shè)置用于加載數(shù)據(jù)集的圖像維度和源文件夾

IMG_WIDTH=200
IMG_HEIGHT=200
img_folder=r'CV\Intel_Images\seg_train\seg_train\'

從文件夾中的圖像創(chuàng)建圖像數(shù)據(jù)和標簽

在下面的函數(shù)中

  • source文件夾是包含不同類的圖像的輸入?yún)?shù)。

  • 從文件夾中讀取圖像文件并將其轉(zhuǎn)換為正確的顏色格式。

  • 根據(jù)模型所需的輸入尺寸調(diào)整圖像大小

  • 將圖像轉(zhuǎn)換為數(shù)據(jù)類型為float32的Numpy數(shù)組

  • 將圖像數(shù)組標準化,使值在0和1之間,這有助于更快地收斂。

def create_dataset(img_folder):
   
    img_data_array=[]
    class_name=[]
   
    for dir1 in os.listdir(img_folder):
        for file in os.listdir(os.path.join(img_folder, dir1)):
       
            image_path= os.path.join(img_folder, dir1,  file)
            image= cv2.imread( image_path, cv2.COLOR_BGR2RGB)
            image=cv2.resize(image, (IMG_HEIGHT, IMG_WIDTH),interpolation = cv2.INTER_AREA)
            image=np.array(image)
            image = image.astype('float32')
            image /= 255 
            img_data_array.append(image)
            class_name.append(dir1)
    return img_data_array, class_name
# extract the image array and class name
img_data, class_name =create_dataset(r'CV\Intel_Images\seg_train\seg_train')

將文本標簽轉(zhuǎn)換為數(shù)字編碼

為類的所有唯一值創(chuàng)建字典

target_dict={k: v for v, k in enumerate(np.unique(class_name))}
target_dict

根據(jù)字典將類名稱轉(zhuǎn)換為各自的數(shù)值

target_val=  [target_dict[class_name[i]] for i in range(len(class_name))]

創(chuàng)建一個簡單的深度學(xué)習(xí)模型并編譯它

model=tf.keras.Sequential(
        [
            tf.keras.layers.InputLayer(input_shape=(IMG_HEIGHT,IMG_WIDTH, 3)),
            tf.keras.layers.Conv2D(filters=32, kernel_size=3, strides=(2, 2), activation='relu'),
            tf.keras.layers.Conv2D(filters=64, kernel_size=3, strides=(2, 2), activation='relu'),
            tf.keras.layers.Flatten(),
            tf.keras.layers.Dense(6)
        ])

encoder.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

我們最終調(diào)整數(shù)據(jù)集來訓(xùn)練模型。我們可以使用Numpy數(shù)組作為輸入

history = model.fit(x=np.array(img_data, np.float32), y=np.array(list(map(int,target_val)), np.float32), epochs=5)

我們還可以使用tf.cast()將輸入數(shù)據(jù)轉(zhuǎn)換為張量來訓(xùn)練模型。

history = model.fit(x=tf.cast(np.array(img_data), tf.float64), y=tf.cast(list(map(int,target_val)),tf.int32), epochs=5)

我們使用不同的庫加載圖像數(shù)據(jù)集但是我們使用相同的模型來進行進一步的訓(xùn)練

用PIL加載圖像數(shù)據(jù)

添加附加庫以使用PIL加載圖像數(shù)據(jù)集

from PIL import Image

使用PIL從文件夾中的圖像創(chuàng)建圖像數(shù)據(jù)和標簽

在下面的函數(shù)中

  • source文件夾是包含不同類的圖像的輸入?yún)?shù)。

  • 使用PIL從文件夾中打開圖像文件。

  • 根據(jù)模型所需的輸入尺寸調(diào)整圖像大小

  • 將圖像轉(zhuǎn)換為數(shù)據(jù)類型為float32的Numpy數(shù)組

  • 標準化圖像數(shù)組以加快收斂。

def create_dataset_PIL(img_folder):
    
    img_data_array=[]
    class_name=[]
    for dir1 in os.listdir(img_folder):
        for file in os.listdir(os.path.join(img_folder, dir1)):
       
            image_path= os.path.join(img_folder, dir1,  file)
            image= np.array(Image.open(image_path))
            image= np.resize(image,(IMG_HEIGHT,IMG_WIDTH,3))
            image = image.astype('float32')
            image /= 255  
            img_data_array.append(image)
            class_name.append(dir1)
    return img_data_array , class_name
PIL_img_data, class_name=create_dataset_PIL(img_folder)

將文本標簽轉(zhuǎn)換為數(shù)字編碼

下面是我們在CV2中使用的代碼

target_dict={k: v for v, k in enumerate(np.unique(class_name))}
target_val=  [target_dict[class_name[i]] for i in range(len(class_name))]

創(chuàng)建和編譯一個簡單的深度學(xué)習(xí)模型

model=tf.keras.Sequential(
        [
            tf.keras.layers.InputLayer(input_shape=(IMG_HEIGHT,IMG_WIDTH, 3)),
            tf.keras.layers.Conv2D(filters=32, kernel_size=3, strides=(2, 2), activation='relu'),
            tf.keras.layers.Conv2D(filters=64, kernel_size=3, strides=(2, 2), activation='relu'),
            tf.keras.layers.Flatten(),
            tf.keras.layers.Dense(6)
        ])

encoder.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

我們最終調(diào)整數(shù)據(jù)集來訓(xùn)練模型。我們可以使用Numpy數(shù)組作為輸入

history = model.fit(x=np.array(PIL_img_data, np.float32), y=np.array(list(map(int,target_val)), np.float32), epochs=5)

我們還可以使用tf.cast()將輸入數(shù)據(jù)轉(zhuǎn)換為張量來訓(xùn)練模型。

history = model.fit(x=tf.cast(np.array(PIL_img_data), tf.float64), y=tf.cast(list(map(int,target_val)),tf.int32), epochs=5)

除了幾個步驟外,使用CV2和PIL加載數(shù)據(jù)集的過程是相同的。

現(xiàn)在這將幫助你使用CV2和PIL庫加載數(shù)據(jù)集。

這里提供了使用CV2和PIL加載數(shù)據(jù)集的代碼:https://github.com/arshren/Load_Dataset

在下一篇文章中,我們將使用以下的庫來加載數(shù)據(jù)集。

  • Keras
  • tf.data

原文鏈接:https:///loading-custom-image-dataset-for-deep-learning-models-part-1-d64fa7aaeca6

歡迎關(guān)注磐創(chuàng)AI博客站:
http:///

sklearn機器學(xué)習(xí)中文官方文檔:
http:///

歡迎關(guān)注磐創(chuàng)博客資源匯總站:
http://docs./

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美成人免费夜夜黄啪啪| 亚洲视频一级二级三级| 色婷婷视频国产一区视频| 免费高清欧美一区二区视频| 一区二区三区日本高清| 日韩成人中文字幕在线一区| 日韩一区二区三区高清在| 伊人欧美一区二区三区| 久久精品中文扫妇内射| 国产精品十八禁亚洲黄污免费观看| 欧美极品欧美精品欧美| 日韩欧美中文字幕人妻| 九九视频通过这里有精品| 国产视频福利一区二区| 九九热九九热九九热九九热| 91蜜臀精品一区二区三区| 男女午夜福利院在线观看| 中文字幕欧美精品人妻一区| 年轻女房东2中文字幕| 日韩中文字幕人妻精品| 黄色片一区二区三区高清| 国产一区一一一区麻豆| 欧美性欧美一区二区三区| 青青免费操手机在线视频| 91精品国产综合久久精品| 日韩女优视频国产一区| 日韩欧美一区二区不卡看片| 九九热这里只有精品哦| 激情爱爱一区二区三区| 视频一区中文字幕日韩| 欧美日韩国产精品黄片| 久久大香蕉精品在线观看| 精品丝袜一区二区三区性色| 91欧美亚洲视频在线| 香蕉久久夜色精品国产尤物| 伊人网免费在线观看高清版| 男女激情视频在线免费观看| 亚洲午夜福利不卡片在线| 老熟女露脸一二三四区| 中文字幕日韩欧美理伦片| 国产精品美女午夜视频|