การอ่านและแสดงข้อมูลจาก CSV เพื่อจำแนกภาพ


1. การอ่านไฟล์จาก csv


import pandas as pd
rcsv = pd.read_csv('train.csv', dtype={'image': 'object', 'category': 'int8'})
rcsv.head()


2. การแยกคอลัมน์เป็น array


x = rcsv.iloc[:, :-1].values
y = rcsv.iloc[:, 1].values


3. การดึงข้อมูลมาสร้างเป็น list ธรรมดา


list_x = []
for i in range(len(x)):
    list_x.append(x[i][0])


หรือจะใช้วิธีเรียกรายชื่อไฟล์จากโฟลเดอร์ก็ได้ แต่ให้ระวังเรื่องลำดับที่ตรงกับ label

import os
path_dir = 'train'
list_x_from_dir = []
for file in os.listdir(path_dir):
    list_x_from_dir.append(file)


4. การอ่านรูปภาพ ตามขนาดที่กำหนด


from keras.preprocessing.image import load_img
img_path = 'train/2823080.jpg'
img_dim = (150, 150)
img1 = load_img(img_path, target_size=img_dim)


5. การแปลงรูปภาพเป็น Array


from keras.preprocessing.image import img_to_array, array_to_img
arr_img1 = img_to_array(img1)
arr_to_img1 = array_to_img(arr_img1)

6. การสร้าง list ของรูปที่เป็น array


list_arr_images = []
for img_name in list_x:
    list_arr_images.append(img_to_array(load_img('train/'+img_name, target_size=img_dim)))
หรือเขียนแบบสั้นๆ ดังนี้
list_arr_images = [img_to_array(load_img('train/'+img_name, target_size=img_dim)) for img_name in list_x]


7. การแปลงให้รูปเป็น numpy array


import numpy as np
np_arr_x = np.array(list_arr_images)


8. การแปลง label ให้เป็นตัวเลข 

ตัวเลขใน label ต้องเริ่มจาก 0 จึงจะมาแปลงเป็น to_categorical ได้ จึงต้องลบ 1 เพราะ label เดิมคือ 1, 2, 3, 4, 5

y_cat = rcsv['category'].values

from keras.utils import to_categorical
y_to_cat = to_categorical(y_cat-1)


9. การแบ่งข้อมูลสำหรับ train และ validation


from sklearn.model_selection import train_test_split
x_train, x_val, y_train, y_val = train_test_split(np_arr_x, y_to_cat, test_size=0.2, random_state=42)



9. การกำหนดค่า augmentation และ rescale ด้วย ImageDataGenerator


from keras.preprocessing.image import ImageDataGenerator

batch_size = 32

#Create the augmentation configuration
train_datagen = ImageDataGenerator(rescale=1./255,  
                                    rotation_range=40,
                                    width_shift_range=0.2,
                                    height_shift_range=0.2,
                                    shear_range=0.2,
                                    zoom_range=0.2,
                                    horizontal_flip=True,)
val_datagen = ImageDataGenerator(rescale=1./255)

#Create the image generators
train_generator = train_datagen.flow(x_train, y_train, batch_size=batch_size)
val_generator = val_datagen.flow(x_val, y_val, batch_size=batch_size)


หรือใส่ชนิดค่าและการ rescale เอง (manually)

np_arr_x_float = np_arr_x.astype('float32')
np_arr_x_scaled /= 255

10. การสร้าง Model


from tensorflow.keras import layers
from tensorflow.keras import models
from tensorflow.keras import optimizers

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',input_shape=(150, 150, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dropout(0.5)) 
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(5, activation='softmax'))
model.summary()


Previous
Next Post »