Deep Learning Cnn Image Classification AI

Deep Learning Cnn Image Classification

📅 2026-02-09 | โดย อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์ — SiamCafe.net Since 1997

Deep Learning CNN Image Classification คืออะไร / ทำไมถึงสำคัญ

เอาจริงๆ นะ สมัยผมทำร้านเน็ต SiamCafe เมื่อ 20 กว่าปีก่อน ใครจะคิดว่าคอมพิวเตอร์มันจะฉลาดขนาดนี้! Deep Learning เนี่ย มันเหมือนเราสอนให้คอมพิวเตอร์ "มอง" รูปภาพ แล้ว "เข้าใจ" ว่าในรูปนั้นมีอะไรบ้าง CNN หรือ Convolutional Neural Network เนี่ย เป็นเหมือนตัวกรองพิเศษที่ช่วยให้คอมพิวเตอร์ดึงเอาลักษณะเด่นๆ ของภาพออกมาได้

Image Classification ก็ตรงตัวเลย คือการ "จัดหมวดหมู่" รูปภาพ เช่น บอกว่ารูปนี้เป็น "แมว" รูปนี้เป็น "หมา" หรือรูปนี้เป็น "รถยนต์" สมัยก่อนเราต้องเขียนโปรแกรมดักจับสี จับรูปร่างเอง โค้ดเป็นพันๆ บรรทัด กว่าจะแม่นยำก็ยากเย็นแสนเข็ญ แต่ Deep Learning CNN ทำให้ทุกอย่างง่ายขึ้นเยอะครับ

ทำไมมันถึงสำคัญน่ะเหรอ? คิดดูสิครับ ตั้งแต่การแพทย์ที่ช่วยวินิจฉัยโรคจากภาพ X-Ray, การเกษตรที่ช่วยตรวจสอบผลผลิต, ไปจนถึงรถยนต์ไร้คนขับที่ต้อง "มอง" ถนนให้ได้ CNN Image Classification มันแทรกซึมอยู่ในชีวิตประจำวันของเราโดยที่เราไม่รู้ตัวด้วยซ้ำ

พื้นฐานที่ต้องรู้

Convolution

Convolution เนี่ย เปรียบเหมือนเราเอาแผ่นกรอง (Kernel) ไปสแกนบนรูปภาพ แผ่นกรองนี้จะช่วยเน้นลักษณะเด่นๆ ของภาพออกมา เช่น ขอบ เส้น หรือพื้นผิว สมัยก่อนผมเคยเขียนโปรแกรมทำ Image Processing เอง กว่าจะทำ Convolution ได้แต่ละที เลือดตาแทบกระเด็น! แต่ Deep Learning จัดการให้เราหมดแล้ว


# ตัวอย่าง Kernel ง่ายๆ สำหรับตรวจจับขอบแนวตั้ง
kernel = [[-1, 0, 1],
          [-2, 0, 2],
          [-1, 0, 1]]

Pooling

Pooling เหมือนเป็นการ "ย่อ" ขนาดภาพลง เพื่อลดภาระการคำนวณ และทำให้โมเดลของเรา "ทนทาน" ต่อการเปลี่ยนแปลงเล็กๆ น้อยๆ ในภาพ เช่น ภาพแมวตัวเดิม แต่ถ่ายจากมุมที่ต่างกัน Pooling จะช่วยให้โมเดลยังจำได้ว่ามันคือแมว

Activation Function

Activation Function เป็นตัวตัดสินว่า Neuron แต่ละตัวใน Neural Network จะ "ทำงาน" หรือไม่ทำงาน เปรียบเหมือนสวิตช์ไฟ ที่จะเปิดหรือปิดตามค่าที่ได้รับมา ReLU (Rectified Linear Unit) เป็น Activation Function ที่นิยมใช้กัน เพราะคำนวณง่าย และให้ผลลัพธ์ที่ดี


# ตัวอย่าง ReLU Activation Function
def relu(x):
  return max(0, x)

วิธีใช้งาน / เริ่มต้นยังไง

สมัยนี้มี Frameworks เก่งๆ ให้ใช้เยอะแยะ ไม่ต้องเขียนโค้ดเองทั้งหมดเหมือนสมัยก่อน TensorFlow และ PyTorch เป็นตัวเลือกยอดนิยม ทั้งสองตัวมี Community ขนาดใหญ่ และมี Tutorial ให้ศึกษามากมาย

ถ้าอยากเริ่มต้นง่ายๆ ลองใช้ Keras ดูครับ Keras เป็นเหมือน Wrapper ที่ครอบ TensorFlow และ PyTorch อีกที ทำให้เราสามารถสร้างโมเดล Deep Learning ได้ง่ายขึ้นด้วยโค้ดเพียงไม่กี่บรรทัด

ขั้นตอนปฏิบัติจริง

เตรียมข้อมูล

ข้อมูลคือหัวใจสำคัญของการทำ Deep Learning ยิ่งมีข้อมูลเยอะ โมเดลก็จะยิ่งฉลาด เราต้องเตรียมรูปภาพให้พร้อม แบ่งเป็นชุด Training (สำหรับฝึกโมเดล) และชุด Validation (สำหรับทดสอบประสิทธิภาพของโมเดล) สมัยก่อนผมเคยใช้เวลาเป็นอาทิตย์เพื่อรวบรวมรูปภาพ! สมัยนี้มี Datasets สำเร็จรูปให้ดาวน์โหลดมากมาย เช่น ImageNet, CIFAR-10

สร้างและฝึกโมเดล

หลังจากเตรียมข้อมูลแล้ว ก็ถึงเวลาสร้างโมเดล CNN ของเรา เริ่มจากกำหนด Layer ต่างๆ เช่น Convolutional Layer, Pooling Layer, Activation Function และ Fully Connected Layer จากนั้นก็ Compile โมเดล และเริ่มทำการฝึก (Training) SiamCafe Blog มีบทความเกี่ยวกับเรื่องนี้อยู่ด้วยนะครับ ลองไปอ่านดูได้


# ตัวอย่างการสร้างโมเดล CNN ด้วย Keras
model = keras.Sequential([
    keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Flatten(),
    keras.layers.Dense(10, activation='softmax')
])

ประเมินผลและปรับปรุงโมเดล

หลังจากฝึกโมเดลเสร็จแล้ว เราต้องประเมินผลว่าโมเดลของเรา "แม่นยำ" แค่ไหน โดยใช้ชุด Validation ถ้าผลลัพธ์ไม่ดี เราก็ต้องปรับปรุงโมเดล อาจจะเพิ่ม Layer, เปลี่ยน Activation Function, หรือปรับ Learning Rate

เปรียบเทียบกับทางเลือกอื่น

ก่อนที่ Deep Learning จะเข้ามาครองโลก เรามีทางเลือกอื่นๆ อีกมากมาย เช่น Support Vector Machine (SVM), Random Forest, และ K-Nearest Neighbors (KNN) แต่ทางเลือกเหล่านี้มักจะมีข้อจำกัดเมื่อต้องจัดการกับข้อมูลที่มีความซับซ้อนสูง และต้องการ Feature Engineering ที่ซับซ้อน

Deep Learning CNN มีข้อดีคือ สามารถเรียนรู้ Feature ได้เองโดยอัตโนมัติ ไม่ต้องเสียเวลา Feature Engineering แต่ก็มีข้อเสียคือ ต้องการข้อมูลจำนวนมาก และใช้เวลาในการฝึกนานกว่า

Algorithm ข้อดี ข้อเสีย เหมาะสำหรับ
SVM แม่นยำ, ใช้ได้กับข้อมูลขนาดเล็ก ไม่เหมาะกับข้อมูลขนาดใหญ่, ต้องการ Feature Engineering ข้อมูลที่มีมิติสูง แต่มีจำนวนน้อย
Random Forest ใช้งานง่าย, ทนทานต่อ Outliers อาจ Overfit, ต้องการ Feature Engineering ข้อมูลที่มีความซับซ้อนปานกลาง
KNN เข้าใจง่าย, ไม่ต้องฝึกโมเดลนาน คำนวณช้า, ต้องการ Feature Engineering ข้อมูลที่ไม่ซับซ้อนมากนัก
CNN เรียนรู้ Feature ได้เอง, แม่นยำสูง ต้องการข้อมูลจำนวนมาก, ใช้เวลาฝึกนาน ข้อมูลภาพที่มีความซับซ้อนสูง

สรุปคือ เลือกใช้ Algorithm ให้เหมาะสมกับลักษณะของข้อมูล และเป้าหมายของเรานะครับ SiamCafe Blog มีบทความเปรียบเทียบ Algorithm อื่นๆ อีกมากมาย ลองไปอ่านดูได้ เผื่อจะเจอ Algorithm ที่เหมาะกับงานของคุณ

Best Practices / เคล็ดลับจากประสบการณ์

เอาล่ะน้องๆ มาถึงตรงนี้แล้ว ผมจะมาแชร์ประสบการณ์จริงที่เจอมาตอนทำโปรเจกต์ Deep Learning CNN Image Classification นะ สมัยผมทำ SiamCafe.net เนี่ย ก็ต้องปรับตัวตามเทคโนโลยีตลอด ไม่งั้นอยู่ไม่ได้

เรื่องพวกนี้มันไม่ได้มีสอนในตำราเสมอไป ต้องลองผิดลองถูกเองเยอะ บางทีก็เสียเวลาไปกับอะไรที่ไม่เวิร์ค แต่ก็ถือว่าเป็นบทเรียนราคาแพง

3-4 เทคนิคที่ใช้ได้จริง

1. Data Augmentation แบบจัดเต็ม: อย่าคิดว่าแค่ Rotate, Flip แล้วจะพอ สมัยผมทำเนี่ย ต้องถึงขั้นใช้ GANs สร้างภาพปลอมๆ มาเพิ่ม Data set กันเลยทีเดียว ไม่งั้น Model มัน Overfit ง่ายมาก

2. Transfer Learning คือเพื่อนแท้: อย่าเสียเวลา Train Model ตั้งแต่ 0 เลยครับน้องๆ ไปดึง Model ที่เค้า Train มาแล้วอย่าง ResNet, Inception มา Fine-tune เอาดีกว่า ประหยัดเวลา และได้ Performance ที่ดีกว่าเยอะ


from tensorflow.keras.applications import ResNet50
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Model

# Load ResNet50 pre-trained on ImageNet, without the top layer
resnet = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

# Freeze the layers
for layer in resnet.layers:
    layer.trainable = False

# Add custom layers
x = Flatten()(resnet.output)
x = Dense(1024, activation='relu')(x)
predictions = Dense(num_classes, activation='softmax')(x)

# Create the model
model = Model(inputs=resnet.input, outputs=predictions)

3. Hyperparameter Tuning แบบละเอียด: Learning Rate, Batch Size, Optimizer พวกนี้มีผลต่อ Performance มหาศาล ต้องใช้พวก Grid Search หรือ Bayesian Optimization ช่วยหาค่าที่เหมาะสม

4. Monitor Validation Loss อย่างใกล้ชิด: อย่าดูแค่ Training Loss อย่างเดียว Validation Loss ต่างหากที่บอกว่า Model เราดีจริงไหม ถ้า Validation Loss เริ่มสูงขึ้น แสดงว่า Overfit แล้ว ต้องรีบปรับ

FAQ คำถามที่พบบ่อย

ทำไม Train Model แล้ว Accuracy สูง แต่พอเอาไปใช้จริง Accuracy ต่ำ?

อันนี้ Overfit ชัดเจนครับน้องๆ Data set ที่ใช้ Train มันอาจจะ Specific เกินไป ลองเพิ่ม Data Augmentation, Regularization หรือหา Data set ที่หลากหลายกว่านี้มา Train เพิ่ม

ควรใช้ GPU แบบไหนดี?

ถ้ามีงบเยอะก็จัดพวก NVIDIA Tesla V100, A100 ไปเลยครับ แต่ถ้า Budget จำกัด ก็พวก RTX 3060, 3070 ก็พอไหว แต่ต้องดู Power Supply ให้ดีนะ เดี๋ยวไฟไม่พอ

ทำไม Train Model นานจัง?

หลายปัจจัยครับน้องๆ Data set ใหญ่, Model ซับซ้อน, Batch Size เล็ก, Learning Rate ต่ำ ลองปรับพวกนี้ดูครับ หรือไม่ก็ลองใช้พวก Cloud GPU อย่าง Google Colab, AWS SageMaker ช่วย Train

Validation Loss ไม่ลดเลย ทำยังไงดี?

ลองลด Learning Rate ดูครับ บางที Learning Rate มันอาจจะสูงเกินไป ทำให้ Model มันกระโดดข้าม Optimum ไปหมด หรือไม่ก็ลองเปลี่ยน Optimizer ดูครับ

สรุป

Deep Learning CNN Image Classification ไม่ใช่เรื่องยาก แต่ก็ไม่ง่าย ต้องอาศัยความเข้าใจพื้นฐาน, ประสบการณ์ และความอดทนในการลองผิดลองถูก หวังว่าน้องๆ จะได้ประโยชน์จากบทความนี้นะครับ

อย่าลืมไปลองทำกันดูนะครับ แล้วจะรู้ว่ามันสนุกแค่ไหน และถ้าสนใจเรื่อง Forex ลองดู iCafeForex ได้นะครับ

และถ้าอยากอ่านบทความอื่นๆ ที่ผมเขียนไว้ เข้าไปดูได้ที่ SiamCafe Blog นะครับ