ก้าวข้ามอนุบาล! ทำความรู้จัก CIFAR-10/100 สนามฝึกระดับมัธยมของ AI สายตา

1. 🎯 ตอนที่ 40: ก้าวข้ามอนุบาล! ทำความรู้จัก CIFAR-10/100
สวัสดีครับน้องๆ วิศวกรสาย Vision ทุกท่าน! กลับมาพบกันอีกแล้วนะครับ ในบทความที่ผ่านมา เราได้พูดถึงชุดข้อมูล MNIST ซึ่งเปรียบเสมือน “แบบฝึกหัดระดับอนุบาล” หรือ Hello World ของวงการที่เอาไว้เช็กตรรกะเบื้องต้นว่าโค้ดเราไม่พัง
แต่ในโลกความเป็นจริง หน้างานในโรงงานหรือภาพถ่ายทั่วไป มันไม่ได้มีแค่ “ตัวเลขสีขาวบนพื้นดำ” ที่จัดวางมาตรงกลางเป๊ะๆ หรอกครับ! วัตถุในโลกจริงมี “สี (Color)” มี “ฉากหลังที่วุ่นวาย (Clutter)” และมีมุมมองที่หลากหลาย นี่คือจุดที่อัลกอริทึมยุคเก่าเริ่มไปต่อไม่ไหว และเป็นจุดที่ชุดข้อมูลอย่าง CIFAR-10 และ CIFAR-100 ก้าวเข้ามาเป็น “สนามฝึกระดับมัธยม” ที่ช่วยผลักดันให้โลกของ Image Classification (การจำแนกประเภทภาพ) ก้าวกระโดดเข้าสู่ยุคของ Convolutional Neural Networks (CNNs) อย่างแท้จริงครับ!
2. 📖 เปิดฉาก (The Hook)
ลองจินตนาการดูนะครับ ถ้าน้องใช้โมเดล Feedforward Neural Network ธรรมดา (ที่มีแต่ Fully-Connected Layers) ไปทายภาพในชุดข้อมูล MNIST โมเดลจะจำได้ว่า “อ๋อ ถ้ามีพิกเซลสีขาวเรียงกันเป็นเส้นโค้งๆ ตรงกลางภาพ น่าจะเป็นเลข 0 หรือเลข 8”
แต่พอเราก้าวเข้าสู่ชุดข้อมูล CIFAR-10 กฎของเกมเปลี่ยนไปอย่างสิ้นเชิงครับ! แหล่งข้อมูลเปรียบเทียบไว้อย่างเห็นภาพว่า ใน CIFAR-10 ถ้าน้องเห็น “พิกเซลสีเขียว” อยู่ในภาพ น้องไม่สามารถสรุปได้เลยว่ามันคือ “กบ (Frog)” เพราะพิกเซลสีเขียวนั้นอาจจะเป็น “ต้นไม้ที่เป็นฉากหลังของกวาง (Deer)” หรืออาจจะเป็น “รถยนต์สีเขียว (Automobile)” ก็ได้!
ความแปรปรวนมหาศาล (Dramatic variance) ของรูปลักษณ์วัตถุและฉากหลังนี่แหละครับ ที่เป็นตัว “ฆ่า” โมเดลแบบเก่า และบังคับให้วิศวกรต้องหันมาพึ่งพาสถาปัตยกรรมที่ฉลาดกว่าอย่าง CNNs เพื่อสกัดจุดเด่น (Feature Extraction) แทนการจำตำแหน่งพิกเซลทื่อๆ
3. 🧠 แก่นวิชา (Core Concepts)
ในบริบทที่กว้างขึ้นของวงการ AI แหล่งข้อมูลระดับโลกได้ให้คำนิยามและความสำคัญของตระกูล CIFAR ไว้ดังนี้ครับ:
- 1. กำเนิด CIFAR (The Canadian Institute For Advanced Research): ชุดข้อมูลนี้ถูกพัฒนาขึ้นโดยนักวิจัยจากสถาบัน CIFAR (นำโดยปรมาจารย์ Alex Krizhevsky) มันเป็นส่วนย่อยที่ถูกคัดกรองมาจากฐานข้อมูล 80 Million Tiny Images
- 2. คุณลักษณะของข้อมูล (Data Characteristics):
- CIFAR-10: ประกอบด้วยภาพสี (RGB) ขนาดจิ๋วเพียง $32 \times 32$ พิกเซล จำนวน 60,000 ภาพ แบ่งเป็น 10 คลาส (เช่น เครื่องบิน, รถยนต์, นก, แมว, กวาง, สุนัข, กบ, ม้า, เรือ, รถบรรทุก) โดยใช้ 50,000 ภาพสำหรับ Train และ 10,000 ภาพสำหรับ Test
- CIFAR-100: เป็นรุ่นพี่ที่ยากขึ้นไปอีก มีภาพจำนวนเท่ากัน แต่ซอยย่อยเป็น 100 คลาส (คลาสละ 600 ภาพ) ความเจ๋งคือมันมี Label 2 ระดับ คือ “ฉลากแบบหยาบ (Coarse label)” ที่แบ่งเป็น 20 หมวดหมู่ใหญ่ และ “ฉลากแบบละเอียด (Fine label)” ที่บอกคลาสย่อย 100 คลาส
- 3. ความท้าทายเชิงมิติ (Dimensionality & Variance): แม้ภาพจะเล็กแค่ 32x32 แต่มันเป็นภาพสี 3 แชนเนล (RGB) ทำให้คอมพิวเตอร์ต้องมองเห็นตัวเลขถึง $32 \times 32 \times 3 = 3072$ ตัวต่อ 1 ภาพ ความท้าทายหลักคือภาพมีความละเอียดต่ำมาก (Low-resolution) จนบางครั้งมนุษย์อย่างเรามองด้วยตาเปล่ายังแยกยากเลยครับว่าก้อนพิกเซลเบลอๆ นี้คือสุนัขหรือแมว!
- 4. สถานะปัจจุบัน (A “Solved” Problem): ปัจจุบัน CIFAR-10 ถือเป็นโจทย์ที่ “ถูกพิชิตแล้ว (Solved problem)” การทำความแม่นยำระดับ 80% เป็นเรื่องพื้นฐานมาก และหากใช้สถาปัตยกรรม Deep Learning ที่ลึกขึ้น (เช่น VGG, ResNet) ก็สามารถทำ Accuracy ทะลุ 90-93% ได้สบายๆ บนชุดทดสอบ แต่มันก็ยังเป็นมาตรฐาน (Benchmark) ยอดฮิตที่นักวิจัยมักหยิบมาใช้เพื่อทดสอบไอเดียโครงสร้างเครือข่ายแบบใหม่ๆ หรือทดสอบเทคนิค Regularization อยู่เสมอครับ

4. 💻 ร่ายมนต์โค้ด (Show me the Code)
เหมือนกับ MNIST ครับ ใน Keras/TensorFlow เราสามารถโหลดชุดข้อมูล CIFAR-10 มาใช้งานได้ด้วยคำสั่งง่ายๆ ลองดูโค้ดการโหลดข้อมูลและการปรับสเกลสี (Image Preprocessing) กันครับ:
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras import layers, models
# -------------------------------------------------------------
# 📌 1. โหลดชุดข้อมูล CIFAR-10
# (ครั้งแรกอาจจะรอนานนิดนึง เพราะไฟล์ขนาดประมาณ 170MB ครับ)
# -------------------------------------------------------------
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
print(f"ขนาดข้อมูล Train: {X_train.shape}") # ผลลัพธ์: (50000, 32, 32, 3)
# -------------------------------------------------------------
# 📌 2. ทำ Image Preprocessing
# แปลงประเภทข้อมูลเป็น float32 และทำ Normalization ให้อยู่ในช่วง
# -------------------------------------------------------------
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0
# -------------------------------------------------------------
# 📌 3. สร้างโมเดล CNN พื้นฐาน (สไตล์คล้ายๆ VGG)
# สังเกตว่าเราใช้ Conv2D เพื่อรับมือกับภาพสี (input_shape=(32, 32, 3))
# -------------------------------------------------------------
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=(32, 32, 3)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu', padding='same'),
layers.MaxPooling2D((2, 2)),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax') # 10 คลาสของ CIFAR-10
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# โมเดลพร้อมเทรนแล้ว!
# model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test))คอมเมนต์: สังเกตจุดที่แตกต่างจาก MNIST นะครับ ในชั้น Conv2D แรกสุด input_shape ต้องระบุเป็น (32, 32, 3) เพื่อรับจำนวนแชนเนลสี RGB ทั้ง 3 แชนเนลครับ
5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips)
ในมุมมองของวิศวกร พี่มีข้อควรระวังในการนำ CIFAR ไปใช้ฝึกวิชามาฝากครับ:
- ระวังกับดักความละเอียดต่ำ (Low-Res Trap): ด้วยความที่ภาพมีขนาดแค่ $32 \times 32$ เวลาน้องออกแบบโมเดล CNN น้องจะใช้ชั้น Pooling (ย่อขนาดภาพ) ได้ไม่กี่ครั้งครับ (ย่อ 3 ครั้งภาพก็เหลือ $4 \times 4$ แล้ว!) ถ้าน้องเอาสถาปัตยกรรมลึกๆ ที่ออกแบบมาเพื่อภาพขนาดใหญ่มาใส่โดยไม่ปรับแต่ง เครือข่ายจะพังเพราะขนาด Feature map ลดลงจนติดลบหรือเป็นศูนย์ครับ!
- Overfitting มาแน่!: เนื่องจากจำนวนข้อมูลมีจำกัดเมื่อเทียบกับความซับซ้อนของภาพ โมเดลของน้องจะเกิดอาการ “ท่องจำข้อสอบ (Overfitting)” ได้ง่ายมากๆ! แหล่งข้อมูลชี้ว่า การจะทำให้โมเดลได้ Accuracy สูงๆ บน CIFAR นั้น การใช้แค่ชั้น Conv2D ไม่พอครับ น้องต้องงัดเอาอาวุธอย่าง Data Augmentation (หมุนภาพ, พลิกภาพ) และใส่ Dropout Layers รวมถึง Batch Normalization เข้ามาช่วยชะลอการลู่เข้าและบังคับให้โมเดลมองหาจุดเด่นที่แท้จริงครับ
- บันไดสู่โลกกว้าง (Transfer Learning Playground): นอกจากจะใช้เทรนโมเดลจากศูนย์แล้ว CIFAR ยังถูกใช้เป็นตัวชี้วัดความ “ครอบคลุม (Generality)” ของชุดข้อมูลอื่นด้วยครับ วิศวกรมักจะเอาโมเดลที่ถูกพรีเทรน (Pre-trained) มาจากชุดข้อมูลใหญ่ระดับโลก แล้วเอามาดัดแปลง (Fine-tune) เพื่อทดสอบบน CIFAR เพื่อดูว่าความรู้เดิมที่ AI มี มันสามารถประยุกต์ใช้กับวัตถุที่มีความแปรปรวนสูงๆ ได้ดีแค่ไหน
6. 🏁 บทสรุป (To be continued…)
โดยสรุปแล้ว การเปลี่ยนผ่านจาก MNIST มาสู่ CIFAR-10 และ CIFAR-100 ไม่ใช่แค่การเปลี่ยนชุดข้อมูลครับ แต่มันคือการเปลี่ยน “กระบวนทัศน์ (Paradigm)” ของวิศวกร AI ให้ตระหนักว่า ฟีเจอร์ของวัตถุในโลกจริงนั้นมีความซับซ้อน วุ่นวาย และเต็มไปด้วยสัญญาณรบกวน (Noise) ซึ่งบังคับให้เราต้องละทิ้งโครงข่ายแบบเก่า และนำพลังของ Convolutional Neural Networks มาใช้เป็นมาตรฐานหลัก
เมื่อเราผ่านบททดสอบระดับมัธยมอย่าง CIFAR มาได้ด้วย CNNs แล้ว ในตอนหน้า พี่จะพาน้องๆ ก้าวเข้าสู่สนามประลองระดับ “โอลิมปิก” ของแท้ ที่มีภาพกว่าล้านภาพ และมีคลาสให้ทายถึง 1,000 คลาส! เตรียมตัวพบกับตำนานที่เปลี่ยนโฉมหน้าโลก AI ไปตลอดกาล นั่นคือ ImageNet (ILSVRC) ครับ รอติดตามความเดือดได้เลย!
ต้องการที่ปรึกษาและพัฒนาระบบ Automation & Machine Vision ให้กับโรงงานของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและติดตั้งระบบแบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p