การจำแนกภาพเบื้องต้นด้วย Keras

Convolutional Neural Network (CNN) เป็นเทคนิคที่ได้รับความนิยมอย่างมากในงานด้านการประมวลผลข้อมูล โดยเฉพาะการจำแนกประเภทภาพ การตรวจจับวัตถุ และการแยกส่วนภาพ ด้วยโครงสร้างเครือข่ายที่เลียนแบบการมองเห็นของมนุษย์ CNN สามารถดึงคุณลักษณะสำคัญจากภาพ เช่น เส้นขอบ รูปทรง และลักษณะเฉพาะของวัตถุได้อย่างมีประสิทธิภาพ ในบทความนี้ เราจะอธิบายการประมวลผลภาพเบื้องต้นด้วย CNN ตั้งแต่การเตรียมข้อมูล การสร้างโมเดลด้วย Keras ไปจนถึงการฝึกฝนและประเมินผลโมเดล ซึ่งเหมาะสำหรับผู้ที่เริ่มต้นศึกษาในสาย Deep Learning และงานประมวลผลภาพโดยเฉพาะ เราจะมากล่าวถึงการประมวลผลภาพเบื้องต้นโดยใช้ขั้นตอนหลักๆ ดังนี้
- การเตรียมข้อมูล
- การโหลดข้อมูล
ในขั้นตอนนี้จะเป็นการเตรียมข้อมูลภาพที่เราจะนำมาใช้ โดยมักจะใชเชุดข้อมูลที่มีภาพมาพร้อมกับป้ายกำกับหรือคำตอบของภาพนั้นๆ โดยใน keras จะมีชุดข้อมูลเบื้องต้นให้ เช่น MNIST, CIFAR-10, Fashion MNIST และอื่น ๆ - การปรับขนาดภาพ (Reshape/Resize)
ภาพจากชุดข้อมูลต่างๆ อาจมีขนาดแตกต่างกันออกไป แต่โมเดล CNN ต้องการขนาดภาพที่สม่ำเสมอ ดังนั้นเราจำเป็นต้องปรับขนาดภาพ (Resize) ให้เหมาะสมกับโมเดล เช่น ขนาด 28*28, 64*62 หรือ 128*128การแปลงข้อมูลเป็นตัวเลข - ภาพในคอมพิวเตอร์จะถูกจัดเก็บในรูปของพิกเซลที่มีค่าอยู่ในช่วง 0-255 (8-bit) ซึ่งโมเดล CNN จะทำงานได้ดีกว่าเมื่อข้อมูลถูก Normalize ให้อยู่ในช่วง [0, 1] หรือ [-1, 1]
- การแปลง Label เป็น One-Hot Encoding
ป้ายกำกับ (Label) หรือคำตอบของรูปภาพที่ใช้ในการจำแนกประเภทของภาพมักจะถูกเก็บในรูปของตัวเลข เช่น [0, 1, 2, ...] แต่เพื่อให้โมเดลสามารถประมวลผลได้ง่ายขึ้น เราจะแปลง Label ให้อยู่ในรูปแบบ One-Hot Encoding
- การโหลดข้อมูล
- การสร้างโมเดล CNN
โมเดล CNN ประกอบไปด้วยหลายๆ ชั้นที่ช่วยในการดึงคุณลักษณะจากภาพ เช่น Convolutional Layer, Pooling Layer, และ Fully Connected Layer - การคอมไพล์โมเดล
หลังจากสร้างโมเดลแล้ว ต้องทำการคอมไพล์โมเดลด้วยการกำหนด loss function, optimizer, และ metrics ที่จะใช้ในการประเมินผล - การฝึกฝนโมเดล
หลังจากคอมไพล์โมเดลเสร็จแล้ว ให้ทำการฝึกฝนโมเดลด้วยข้อมูลที่เตรียมไว้ - การประเมินผลโมเดล
หลังจากฝึกฝนเสร็จแล้ว คุณสามารถประเมินผลการทำงานของโมเดลด้วยข้อมูลทดสอบ (Test Data)- Loss: เป็นค่าความผิดพลาดที่โมเดลทำขณะทำนาย ยิ่งค่าต่ำหมายความว่าโมเดลทำงานได้ดีขึ้น
- Accuracy: เป็นเปอร์เซ็นต์ความถูกต้องในการทำนาย ยิ่งใกล้ 100% ยิ่งดี
- การทำนาย
เมื่อโมเดลได้รับการฝึกฝนแล้ว คุณสามารถใช้โมเดลเพื่อทำนายผลลัพธ์จากข้อมูลที่แบ่งไว้สำหรับทดสอบ หรือจะใช้ข้อมูลใหม่ก็ได้
ตัวอย่างโค้ดจำแนกรูปภาพข้อมูล MNIST ด้วย Keras
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Conv1D, MaxPooling1D, Flatten, Dense, Dropout
from keras.optimizers import Adam
import numpy as np
# โหลดข้อมูล MNIST
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
# แปลงค่าพิกเซลให้อยู่ในช่วง [0, 1]
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
# จำนวนคลาส (ใน MNIST มี 10 คลาส คือ 0-9)
num_classes = 10
# แปลง Label
y_train = np_utils.to_categorical(y_train, num_classes)
y_test = np_utils.to_categorical(y_test, num_classes)
# Build and compile model
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(x_train.shape[1],x_train.shape[2])))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(10, activation='softmax',name='Output'))
model.compile(optimizer=Adam(learning_rate=0.001),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10, batch_size=200, validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
predictions = model.predict(x_test)
print(predictions[0]) # แสดงผลลัพธ์ที่ทำนายออกมา
y_pred_classes = np.argmax(predictions, axis=1)
print(y_pred_classes) #แสดงผลลัพธ์เป็นคำตอบของภาพ
สรุป
การเตรียมข้อมูลสำหรับ CNN ใน Keras ประกอบด้วยการโหลดข้อมูล, การปรับขนาดและ Normalize, การแปลง Label, การแบ่งข้อมูล, และการเพิ่มความหลากหลายผ่าน Data Augmentation ขั้นตอนนี้เป็นพื้นฐานที่สำคัญต่อการพัฒนาโมเดลที่แม่นยำและเชื่อถือได้ในงานประมวลผลภาพ
การประยุกต์ใช้ CNN สามารถนำไปใช้ในหลายด้าน เช่น ตรวจจับโรคในทางการแพทย์, ระบบตรวจจับใบหน้า, ระบบไร้คนขับ, การวิเคราะห์โรคพืชหรือคุณภาพสินค้าเกษตร, การตรวจสอบคุณภาพสินค้าในโรงงาน และการจัดหมวดหมู่หรือตรวจจับเนื้อหาออนไลน์ ซึ่งช่วยเพิ่มความแม่นยำและลดเวลาการประมวลผลในหลายอุตสาหกรรม
อ้างอิง
ฝึกใช้ไลบรารีสำหรับ Machine Learning: Scikit-Learn, TensorFlow และ Keras ,[ออนไลน์], เข้าถึงได้จาก https://www.mindphp.com/forums/viewtopic.php?t=104875
Neural Network Programming ,[ออนไลน์], เข้าถึงได้จาก https://guopai.github.io/ml-blog15.html
การประยุกต์ใช้ CNN เพื่อจำแนกประเภทภาพตัวเลขจากชุดข้อมูล MNIST ,[ออนไลน์], เข้าถึงได้จาก https://pws.npru.ac.th/piya/data/files/Lec12%20-%20MNIST.pdf