การจำแนกภาพเบื้องต้นด้วย 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
 
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
สอบถามกดลิงค์เปิดแท๊บใหม่ แต่อยู่หน้าเว็บเดิมเหมือนกด Ctrl + click
โดย eange08 จ 28 เม.ย. 2025 1:25 pm บอร์ด JavaScript & jQuery Ajax & Node.JS
2
26
จ 28 เม.ย. 2025 2:13 pm โดย eange08 View Topic สอบถามกดลิงค์เปิดแท๊บใหม่ แต่อยู่หน้าเว็บเดิมเหมือนกด Ctrl + click
Encrypt ไฟล์ ด้วย PGP คืออะไร
โดย noncup302 ศ 25 เม.ย. 2025 9:41 am บอร์ด Programming - C/C++ & java & Python
0
166
ศ 25 เม.ย. 2025 9:41 am โดย noncup302 View Topic Encrypt ไฟล์ ด้วย PGP คืออะไร
สร้างไฟล์ excel ด้วย python มีการเรียกใช้งาน และบรรทัดสุเท้ายใช้คำสั่ลบไฟล์แต่ลบไม่ได้ แก้ยังไงคะ
โดย MBMoo พฤ 24 เม.ย. 2025 5:33 pm บอร์ด Programming - C/C++ & java & Python
6
165
ศ 25 เม.ย. 2025 5:51 pm โดย veras View Topic สร้างไฟล์ excel ด้วย python มีการเรียกใช้งาน และบรรทัดสุเท้ายใช้คำสั่ลบไฟล์แต่ลบไม่ได้ แก้ยังไงคะ
วิธีการเข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP แล้ว อัพโหลดไฟล์ด้วย sftp ไปยัง Server ปลายทาง
โดย mindphp พ 23 เม.ย. 2025 11:07 am บอร์ด Python Knowledge
1
145
จ 28 เม.ย. 2025 4:41 pm โดย MBMoo View Topic วิธีการเข้ารหัสไฟล์ ด้วย Python ใช้ PUBLIC KEY และ PGP แล้ว อัพโหลดไฟล์ด้วย sftp ไปยัง Server ปลายทาง
สอบถามทำเชื่อมการชำระเงินด้วย Kbank ของ joomla 3
โดย eange08 พ 23 เม.ย. 2025 10:05 am บอร์ด Joomla Development
2
185
ศ 25 เม.ย. 2025 6:13 pm โดย veras View Topic สอบถามทำเชื่อมการชำระเงินด้วย Kbank ของ joomla 3
สารละลาย คืออะไร เรื่องน่ารู้พื้นฐานของคนเรียนเคมีสายวิทย์
โดย Tontong อ 22 เม.ย. 2025 11:04 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
126
อ 22 เม.ย. 2025 11:04 am โดย Tontong View Topic สารละลาย คืออะไร เรื่องน่ารู้พื้นฐานของคนเรียนเคมีสายวิทย์
Vendor lock-in การหากินขอ vendor ที่ไม่แฟร์กับลุกค้า vendor หลายเจ้าที่ให้บริการ ERP license SAP, Oracle, MS Dynamic
โดย mindphp อ 22 เม.ย. 2025 10:28 am บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
1
452
พ 23 เม.ย. 2025 7:52 pm โดย mindphp View Topic Vendor lock-in การหากินขอ vendor ที่ไม่แฟร์กับลุกค้า vendor หลายเจ้าที่ให้บริการ ERP license  SAP, Oracle, MS Dynamic
คะแนน NETSAT ใช้ยื่นคณะไหนของ ม.ขอนแก่น บ้าง รู้ไว้ก่อนสอบ
โดย Tontong อ 22 เม.ย. 2025 10:02 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
160
อ 22 เม.ย. 2025 10:02 am โดย Tontong View Topic คะแนน NETSAT ใช้ยื่นคณะไหนของ ม.ขอนแก่น บ้าง รู้ไว้ก่อนสอบ