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

การจำแนกภาพเบื้องต้นด้วย keras เริ่มจากการเตรียมข้อมูล การสร้างโมเดล การฝึกฝนโมเดล และการประเมินผล
ขั้นตอนการประมวลผลภาพด้วย CNN
Convolutional Neural Network (CNN) เป็นเทคนิคที่ได้รับความนิยมอย่างมากในงานด้านการประมวลผลข้อมูล  โดยเฉพาะการจำแนกประเภทภาพ การตรวจจับวัตถุ และการแยกส่วนภาพ ด้วยโครงสร้างเครือข่ายที่เลียนแบบการมองเห็นของมนุษย์ CNN สามารถดึงคุณลักษณะสำคัญจากภาพ เช่น เส้นขอบ รูปทรง และลักษณะเฉพาะของวัตถุได้อย่างมีประสิทธิภาพ ในบทความนี้ เราจะอธิบายการประมวลผลภาพเบื้องต้นด้วย CNN ตั้งแต่การเตรียมข้อมูล การสร้างโมเดลด้วย Keras ไปจนถึงการฝึกฝนและประเมินผลโมเดล ซึ่งเหมาะสำหรับผู้ที่เริ่มต้นศึกษาในสาย Deep Learning และงานประมวลผลภาพโดยเฉพาะ เราจะมากล่าวถึงการประมวลผลภาพเบื้องต้นโดยใช้ขั้นตอนหลักๆ ดังนี้
  1. การเตรียมข้อมูล
    1. การโหลดข้อมูล
      ในขั้นตอนนี้จะเป็นการเตรียมข้อมูลภาพที่เราจะนำมาใช้ โดยมักจะใชเชุดข้อมูลที่มีภาพมาพร้อมกับป้ายกำกับหรือคำตอบของภาพนั้นๆ โดยใน keras จะมีชุดข้อมูลเบื้องต้นให้ เช่น MNIST, CIFAR-10, Fashion MNIST และอื่น ๆ 
    2. การปรับขนาดภาพ (Reshape/Resize)
      ภาพจากชุดข้อมูลต่างๆ อาจมีขนาดแตกต่างกันออกไป แต่โมเดล CNN ต้องการขนาดภาพที่สม่ำเสมอ ดังนั้นเราจำเป็นต้องปรับขนาดภาพ (Resize) ให้เหมาะสมกับโมเดล เช่น ขนาด 28*28, 64*62 หรือ 128*128การแปลงข้อมูลเป็นตัวเลข
    3. ภาพในคอมพิวเตอร์จะถูกจัดเก็บในรูปของพิกเซลที่มีค่าอยู่ในช่วง 0-255 (8-bit) ซึ่งโมเดล CNN จะทำงานได้ดีกว่าเมื่อข้อมูลถูก Normalize ให้อยู่ในช่วง [0, 1] หรือ [-1, 1]
    4. การแปลง Label เป็น One-Hot Encoding
      ป้ายกำกับ (Label) หรือคำตอบของรูปภาพที่ใช้ในการจำแนกประเภทของภาพมักจะถูกเก็บในรูปของตัวเลข เช่น [0, 1, 2, ...] แต่เพื่อให้โมเดลสามารถประมวลผลได้ง่ายขึ้น เราจะแปลง Label ให้อยู่ในรูปแบบ One-Hot Encoding
  2. การสร้างโมเดล CNN
    โมเดล CNN ประกอบไปด้วยหลายๆ ชั้นที่ช่วยในการดึงคุณลักษณะจากภาพ เช่น Convolutional Layer, Pooling Layer, และ Fully Connected Layer
  3. การคอมไพล์โมเดล
    หลังจากสร้างโมเดลแล้ว ต้องทำการคอมไพล์โมเดลด้วยการกำหนด loss function, optimizer, และ metrics ที่จะใช้ในการประเมินผล 
  4. การฝึกฝนโมเดล
    หลังจากคอมไพล์โมเดลเสร็จแล้ว ให้ทำการฝึกฝนโมเดลด้วยข้อมูลที่เตรียมไว้
  5. การประเมินผลโมเดล
    หลังจากฝึกฝนเสร็จแล้ว คุณสามารถประเมินผลการทำงานของโมเดลด้วยข้อมูลทดสอบ (Test Data)

    • Loss: เป็นค่าความผิดพลาดที่โมเดลทำขณะทำนาย ยิ่งค่าต่ำหมายความว่าโมเดลทำงานได้ดีขึ้น
    • Accuracy: เป็นเปอร์เซ็นต์ความถูกต้องในการทำนาย ยิ่งใกล้ 100% ยิ่งดี

  6. การทำนาย
    เมื่อโมเดลได้รับการฝึกฝนแล้ว คุณสามารถใช้โมเดลเพื่อทำนายผลลัพธ์จากข้อมูลที่แบ่งไว้สำหรับทดสอบ หรือจะใช้ข้อมูลใหม่ก็ได้

ตัวอย่างโค้ดจำแนกรูปภาพข้อมูล 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
 
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
CSS will-change คืออะไร? ปรับปรุงประสิทธิภาพ Animation ให้ลื่นไหล
โดย Sakana อ 17 มิ.ย. 2025 5:16 pm บอร์ด HTML CSS
0
36
อ 17 มิ.ย. 2025 5:16 pm โดย Sakana View Topic CSS will-change คืออะไร? ปรับปรุงประสิทธิภาพ Animation ให้ลื่นไหล
แนะนำสถานที่ท่องเที่ยวจังหวัดนนทบุรี และการเดินทางจากเซ็นทรัลเวสต์เกต ไปท่าน้ำนนท์
โดย Sakana จ 16 มิ.ย. 2025 5:17 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
25
จ 16 มิ.ย. 2025 5:17 pm โดย Sakana View Topic แนะนำสถานที่ท่องเที่ยวจังหวัดนนทบุรี และการเดินทางจากเซ็นทรัลเวสต์เกต ไปท่าน้ำนนท์
ติดตั้ง n8n บนเครื่องตัวเอง โดยใช้ Ubuntu เป็น Server
โดย mindphp จ 16 มิ.ย. 2025 1:44 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
8
จ 16 มิ.ย. 2025 1:44 pm โดย mindphp View Topic ติดตั้ง n8n บนเครื่องตัวเอง โดยใช้ Ubuntu เป็น Server
แก้ปัญหาเข้าหน้า Control panel เพื่อจัดการตั้งค่า Network ภายในไม่ได้
โดย mindphp จ 16 มิ.ย. 2025 8:44 am บอร์ด Share Knowledge
0
18
จ 16 มิ.ย. 2025 8:44 am โดย mindphp View Topic แก้ปัญหาเข้าหน้า Control panel เพื่อจัดการตั้งค่า Network ภายในไม่ได้
อัพเดดคืบหน้า แนะนำ Feature - คู่มือ - vdo สอนใช้งาน
โดย mindphp ศ 06 มิ.ย. 2025 7:19 pm บอร์ด AsiaTest - Developer
0
1
ศ 06 มิ.ย. 2025 7:19 pm โดย mindphp View Topic อัพเดดคืบหน้า แนะนำ Feature - คู่มือ - vdo สอนใช้งาน
บันทึกประชุมกับทางลูกค้า สรุปความต้องการ
โดย mindphp ศ 06 มิ.ย. 2025 7:19 pm บอร์ด AsiaTest - Developer
0
1
ศ 06 มิ.ย. 2025 7:19 pm โดย mindphp View Topic บันทึกประชุมกับทางลูกค้า สรุปความต้องการ
สอบถาม Verification ของ google developer ติดขั้นตอน Homepage requirement
โดย eange08 พฤ 29 พฤษภาคม 2025 1:24 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
2
5143
พฤ 05 มิ.ย. 2025 1:51 pm โดย eange08 View Topic สอบถาม Verification ของ google developer ติดขั้นตอน Homepage requirement
ไข้หวัดใหญ่อาการหนักแค่ไหน ค่ารักษาเท่าไหร่
โดย Ellache จ 26 พฤษภาคม 2025 2:36 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
3932
จ 26 พฤษภาคม 2025 2:36 pm โดย Ellache View Topic ไข้หวัดใหญ่อาการหนักแค่ไหน ค่ารักษาเท่าไหร่