ลาก่อนตัวเลข! รู้จัก Fashion-MNIST แบบฝึกหัดอัปเกรดที่มาท้าทายวงการ Image Classification

1. 🎯 ตอนที่ 40: ลาก่อนตัวเลข! รู้จัก Fashion-MNIST แบบฝึกหัดอัปเกรด
สวัสดีครับน้องๆ วิศวกรสาย Vision ทุกท่าน! กาแฟในมือพร้อมแล้วใช่ไหมครับ ในบทความก่อนหน้านี้ พี่ได้พาน้องๆ ไปลุยกับชุดข้อมูลในตำนานอย่าง MNIST (ตัวเลขเขียนด้วยลายมือ 0-9) ซึ่งเปรียบเสมือนด่าน “Hello World” ของวงการปัญญาประดิษฐ์กันไปแล้ว
แต่ในบริบทของวงการ Image Classification (การจำแนกประเภทภาพ) ปัจจุบัน แหล่งข้อมูลระดับโลกชี้ให้เห็นว่า MNIST แบบดั้งเดิมนั้น “ง่ายเกินไป” แล้วครับ โมเดลยุคใหม่แทบจะหลับตาทายก็ยังได้ความแม่นยำทะลุ 99% ได้อย่างชิลๆ ทำให้มันหมดความท้าทายในการนำมาใช้วัดผลความเก่งกาจของสถาปัตยกรรมใหม่ๆ
วันนี้พี่เลยจะพาน้องๆ ไปรู้จักกับแฝดคนละฝาที่เกิดมาเพื่อ “แทนที่” MNIST โดยตรง มันคือชุดข้อมูลที่ชื่อว่า Fashion-MNIST ครับ เรามาดูกันว่าแค่เปลี่ยนจาก “ตัวเลข” มาเป็น “เสื้อผ้า” มันจะสร้างความปวดหัว (และสนุก) ให้กับการออกแบบ Convolutional Neural Networks (CNNs) ได้อย่างไร!
2. 📖 เปิดฉาก (The Hook)
ลองนึกภาพตามนะครับ ถ้าน้องสอน AI ให้แยกแยะเส้นขีดโค้งๆ สีขาวบนพื้นดำ AI จะเรียนรู้แค่ว่า “มีวงกลมสองวงต่อกันคือเลข 8” หรือ “มีขีดตรงยาวๆ คือเลข 1” ซึ่งมันไม่มีพื้นผิว (Texture) หรือลวดลายอะไรให้วิเคราะห์เลย
ทีมนักวิจัยจาก Zalando จึงเกิดไอเดียว่า “ทำไมเราไม่สร้างชุดข้อมูลที่มีความท้าทายแบบโลกความจริงมากขึ้น แต่ยังคงขนาดเล็กและโหลดง่ายเหมือนเดิมล่ะ?” พวกเขาจึงได้รวบรวมรูปภาพสินค้าแฟชั่นมาทำเป็น Fashion-MNIST ซึ่งถูกออกแบบมาให้เป็น “Drop-in replacement” หรือชุดข้อมูลที่สามารถเปลี่ยนชื่อตัวแปรในโค้ดเก่า แล้วรันแทน MNIST เดิมได้ทันทีแบบไร้รอยต่อ
แต่ความพีคคือ… พอเปลี่ยนชุดข้อมูลปุ๊บ โมเดลเก่าที่เคยทำคะแนนได้สวยหรู กลับมีเปอร์เซ็นต์ความแม่นยำร่วงกราวรูดเลยครับ!
3. 🧠 แก่นวิชา (Core Concepts)
ในมุมมองของการพัฒนาโมเดล แหล่งข้อมูลได้อธิบายความน่าสนใจของ Fashion-MNIST ไว้ดังนี้ครับ:
- 1. โครงสร้างข้อมูลแบบดั้งเดิม (The Drop-in Specs): เพื่อให้นักพัฒนาใช้งานง่ายที่สุด Fashion-MNIST จึงรักษาโครงสร้างเดิมของ MNIST ไว้ทุกประการ นั่นคือประกอบด้วยภาพสำหรับฝึกสอน (Training set) 60,000 ภาพ และภาพสำหรับทดสอบ (Test set) อีก 10,000 ภาพ โดยทุกภาพเป็นภาพขาวดำ (Grayscale) ขนาดเล็กจิ๋วเพียง $28 \times 28$ พิกเซล
- 2. คลาสทั้ง 10 ของโลกแฟชั่น (The 10 Classes):
แทนที่จะเป็นตัวเลข 0-9 ชุดข้อมูลนี้แบ่งหมวดหมู่เป็น 10 คลาสของเสื้อผ้า ได้แก่:
- 0: T-shirt/top (เสื้อยืด/เสื้อท่อนบน)
- 1: Trouser (กางเกงขายาว)
- 2: Pullover (เสื้อสวมหัว)
- 3: Dress (ชุดกระโปรง)
- 4: Coat (เสื้อโค้ท)
- 5: Sandal (รองเท้าแตะ)
- 6: Shirt (เสื้อเชิ้ต)
- 7: Sneaker (รองเท้าผ้าใบ)
- 8: Bag (กระเป๋า)
- 9: Ankle boot (รองเท้าบูทหุ้มข้อ)
- 3. ความซับซ้อนที่ซ่อนอยู่ (The Hidden Complexity): ทำไมมันถึงยากกว่า? เพราะภาพเสื้อผ้ามีความหลากหลายในคลาสเดียวกันสูงมาก (Intra-class variance) เช่น รองเท้าผ้าใบกับรองเท้าบูทอาจจะมีรูปทรงคล้ายกันมากในมุมมองขาวดำ แหล่งข้อมูลระบุว่า หากเราใช้โมเดลเชิงเส้น (Linear model) ธรรมดารันบน MNIST อาจได้ความแม่นยำถึง 92% แต่พอมารันบน Fashion-MNIST ความแม่นยำจะร่วงลงมาเหลือเพียงแค่ราวๆ 83% เท่านั้น!
- 4. เครื่องมือทดสอบฝีมือชั้นยอด (The Ideal Benchmark): ปัจจุบัน โมเดลแบบ Deep Learning (CNNs) ชั้นดีสามารถทำความแม่นยำบน Fashion-MNIST ได้ประมาณ 90% ถึง 95% ในชุดทดสอบ ทำให้มันกลายเป็นฐานข้อมูลมาตรฐานตัวใหม่สำหรับวิศวกรที่ต้องการฝึกฝนการเขียน CNN จากศูนย์ (From scratch) ทดสอบการปรับแต่งโมเดล (Hyperparameter tuning) โดยที่ไม่ต้องใช้การ์ดจอระดับเซิร์ฟเวอร์ เพราะภาพมีขนาดเล็กและประมวลผลได้รวดเร็ว

4. 💻 ร่ายมนต์โค้ด (Show me the Code)
ด้วยความที่มันเป็นชุดข้อมูลมาตรฐาน Keras จึงฝังมาให้เราโหลดใช้ได้ง่ายๆ ด้วยคำสั่งเดียวครับ ลองดูตัวอย่างการโหลดข้อมูลและเตรียม Labels ไปใช้งานกันครับ:
import tensorflow as tf
from tensorflow.keras.datasets import fashion_mnist
import matplotlib.pyplot as plt
import numpy as np
# -------------------------------------------------------------
# 📌 1. โหลดข้อมูล Fashion-MNIST (ง่ายเหมือนโหลด MNIST ปกติเลย!)
# -------------------------------------------------------------
(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()
# -------------------------------------------------------------
# 📌 2. เนื่องจากข้อมูลให้มาแค่ตัวเลข Label (0-9) เราต้องแมพชื่อคลาสเอง
# -------------------------------------------------------------
class_names = ["T-shirt/top", "Trouser", "Pullover", "Dress", "Coat",
"Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"]
print(f"ภาพแรกใน Training set คือคลาส: {class_names[y_train]}")
# ผลลัพธ์ที่ได้น่าจะเป็น 'Ankle boot'
# -------------------------------------------------------------
# 📌 3. การเตรียมข้อมูล (Preprocessing)
# อย่าลืมแปลงพิกเซลจาก 0-255 ให้เป็น 0-1 (Normalization) ก่อนป้อนเข้าโมเดล
# และเพิ่มมิติ Channel=1 ให้ภาพเพื่อใช้กับชั้น Conv2D
# -------------------------------------------------------------
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0
# ขยายมิติภาพจาก (60000, 28, 28) เป็น (60000, 28, 28, 1)
X_train = np.expand_dims(X_train, axis=-1)
X_test = np.expand_dims(X_test, axis=-1)
print(f"รูปร่างของชุดข้อมูล Train: {X_train.shape}")คอมเมนต์: ถ้าน้องๆ มีโมเดลเก่าที่เคยเขียนทายตัวเลข MNIST ไว้ น้องสามารถเอาโค้ดด้านบนไปเสียบแทนที่ได้เลยครับ แล้วรันเทรนดู จะเห็นชัดเจนว่า Loss ลดลงช้ากว่า และ Accuracy จะไม่พุ่งไปแตะ 99% ง่ายๆ เหมือนแต่ก่อน!
5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips)
พี่มีมุมมองจากหน้างานและงานวิจัยที่ใช้ Fashion-MNIST มากระซิบบอกครับ:
- ลืม Fully-Connected ไปได้เลย: ถ้าน้องใช้โมเดลแบบ Multi-Layer Perceptron (MLP) ธรรมดา โดยการสั่ง
Flattenรูปแล้วเข้า Dense Layer ทันที (เหมือนที่เคยรอดใน MNIST) ในงานเสื้อผ้านี้ผลลัพธ์จะแย่ครับ เพราะ MLP ขาดคุณสมบัติ Spatial Invariance (การเข้าใจว่าไม่ว่าลายเสื้อจะอยู่ตรงไหน มันก็คือลายเสื้อ) น้องโดนบังคับให้ต้องงัดสถาปัตยกรรม CNN (Convolutional Neural Networks) ขึ้นมาสกัดฟีเจอร์อย่างหลีกเลี่ยงไม่ได้ - ใช้งานในเชิง Unsupervised และ Outlier Detection: แหล่งข้อมูลระบุว่า เราสามารถใช้ประโยชน์จากภาพพวกนี้โดยไม่สนใจ Label เลยก็ได้ครับ! เช่น การเอาภาพ MNIST มาปนกับ Fashion-MNIST แล้วสอนโมเดลประเภท Autoencoder ให้จับผิดว่าภาพไหนคือ “ข้อมูลผิดปกติ (Outlier/Anomaly)” ซึ่งโมเดลสามารถคำนวณค่า Error (Mean Absolute Error) แยกความแตกต่างระหว่างตัวเลขและเสื้อผ้าได้เลย
- จุดเริ่มต้นสู่ GANs (Generative Adversarial Networks): ด้วยความที่ภาพ Fashion-MNIST คลีน สี่เหลี่ยมเป๊ะ และประมวลผลไว มันจึงเป็น “ของเล่น” ชิ้นเยี่ยม หากน้องอยากฝึกสร้างโมเดล AI “เสกรูป (Generative Model)” อย่าง DCGAN เพื่อให้ AI ลองวาดรูปแฟชั่นดีไซน์ใหม่ๆ ออกมาด้วยตัวเองบนคอมพิวเตอร์สเปคทั่วไปครับ!
6. 🏁 บทสรุป (To be continued…)
โดยสรุปแล้ว Fashion-MNIST คือสะพานเชื่อมที่ยอดเยี่ยมระหว่างแบบฝึกหัดระดับเริ่มต้นกับความท้าทายระดับโปรเจกต์จริง
มันทำหน้าที่ขจัดภาพมายาที่ว่า “โมเดลง่ายๆ ก็ทำงานได้สมบูรณ์แบบ” ทิ้งไป และบังคับให้วิศวกรคอมพิวเตอร์วิทัศน์ต้องดึงศักยภาพของการออกแบบ Convolutional Networks ออกมาให้มากที่สุด เพื่อรับมือกับความซับซ้อนของพื้นผิวและรูปทรง
แต่แน่นอนครับ โลกความเป็นจริงยิ่งโหดร้ายกว่าภาพ 28x28 ขาวดำมาก ภาพของจริงมี “สี” มี “ฉากหลัง” และมีวัตถุหลายชิ้น ในบทความหน้า พี่จะพาน้องๆ ข้ามจาก Fashion-MNIST ไปสู่ชุดข้อมูลในระดับถัดไปที่มีสีสัน (RGB) อย่าง CIFAR เตรียมตัวให้พร้อม แล้วพบกันครับ!
ต้องการที่ปรึกษาและพัฒนาระบบ Automation & Machine Vision ให้กับโรงงานของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและติดตั้งระบบแบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p