VGGNet คืออะไร?
VGGNet ถูกพัฒนาโดยทีมวิจัยจากมหาวิทยาลัย Oxford (Visual Geometry Group - VGG) นำโดยคุณ Karen Simonyan และ Andrew Zisserman โดยจุดเด่นของโมเดลนี้คือ
- โครงสร้างแบบลึก (Deep Network):
- ใช้ convolutional layers ที่มี kernel ขนาดเล็ก (3x3) ซ้อนกันจำนวนหลายชั้น
- ความลึกของโมเดลมีขนาดเพิ่มขึ้นถึง 16 หรือ 19 ชั้น (เรียกว่า VGG16 และ VGG19 ตามลำดับ)
- ความเรียบง่ายของโครงสร้าง:
- ใช้เพียง convolutional layers, max pooling layers และ fully connected layers โดยไม่มีการเพิ่มเทคนิคพิเศษอย่างเช่น inception module หรือ residual connections (เหมือนในโมเดลที่พัฒนาภายหลัง เช่น ResNet)
- การออกแบบแบบ:
- ทุก convolutional layer ใช้ kernel ขนาด 3x3 และ stride ขนาด 1
- Max pooling ใช้ kernel ขนาด 2x2 และ stride ขนาด 2
- ในการแข่งขัน ILSVRC 2014, VGGNet (โดยเฉพาะ VGG16 และ VGG19) ทำผลงานได้โดดเด่น:
- ติดหนึ่งใน Top-5 Error Rate เพียง 7.3% ซึ่งเป็นหนึ่งในผลงานที่ดีที่สุดในขณะนั้น
- โมเดลมีความแม่นยำสูงในงานประเภทการจำแนกประเภทภาพ (image classification) และสามารถปรับใช้ได้ดีในงานด้านอื่น ๆ เช่น object detection และ semantic segmentation
- VGGNet เป็นโมเดลแรก ๆ ที่แสดงให้เห็นถึงพลังของ deep network และความสำคัญของการเพิ่มความลึกให้กับโครงสร้างของโมเดล
- การใช้ kernel ขนาดเล็ก (3x3):
- ช่วยลดจำนวนพารามิเตอร์เมื่อเทียบกับ kernel ขนาดใหญ่ (เช่น 5x5 หรือ 7x7) แต่ยังคงประสิทธิภาพในการเรียนรู้ feature
- การใช้ kernel ขนาดเล็กซ้อนกันหลายชั้นช่วยเพิ่ม receptive field (เช่น 2 ชั้นของ 3x3 มี receptive field เท่ากับ 5x5)
- โครงสร้างที่เป็นระบบ:
- การออกแบบที่เรียบง่ายและ consistent ทำให้สามารถทดลองเพิ่มความลึกได้ง่าย
- ความสามารถในการจับ feature ที่ซับซ้อน:
- ความลึกที่เพิ่มขึ้นทำให้โมเดลสามารถเรียนรู้ feature ที่ละเอียดและซับซ้อนมากขึ้น
- จำนวนพารามิเตอร์มากเกินไป:
- VGG16 มีพารามิเตอร์มากกว่า 138 ล้านตัว ซึ่งทำให้ใช้หน่วยความจำและเวลาในการประมวลผลสูงมาก
- ต้องการทรัพยากรสูง:
- ต้องใช้ GPU ที่มีประสิทธิภาพสูงในการเทรนและทดสอบ
- โมเดลใหม่ ๆ เช่น ResNet และ Inception ลดข้อจำกัดนี้ด้วยการเพิ่มความลึกในลักษณะที่ประหยัดพลังงานและหน่วยความจำมากกว่า
ถ้าคุณต้องการใช้ VGG16 ที่ถูกเทรนมาแล้วบน ImageNet โดยไม่ต้องสร้างโครงสร้างเอง คุณสามารถใช้โมเดลที่มีอยู่ใน Keras ได้เลย
โค้ด: เลือกทั้งหมด
from tensorflow.keras.applications import VGG16
# โหลดโมเดล VGG16 พร้อมกับ pre-trained weights จาก ImageNet
model = VGG16(weights='imagenet', include_top=True, input_shape=(224, 224, 3))
# ดูโครงสร้างโมเดล
model.summary()
โค้ด: เลือกทั้งหมด
from tensorflow.keras.applications.vgg16 import preprocess_input, decode_predictions
from tensorflow.keras.preprocessing.image import load_img, img_to_array
import numpy as np
# โหลดและเตรียมภาพสำหรับการทำนาย
image_path = 'path_to_your_image.jpg'
img = load_img(image_path, target_size=(224, 224)) # Resize ภาพให้เป็นขนาด 224x224
img_array = img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
img_array = preprocess_input(img_array) # Preprocess ภาพตามที่ VGG16 ต้องการ
# ทำนายผล
predictions = model.predict(img_array)
# แปลงผลลัพธ์ให้เป็น label
decoded_predictions = decode_predictions(predictions, top=5) # แสดง top-5 classes
for i, (imagenet_id, label, score) in enumerate(decoded_predictions[0]):
print(f"{i+1}: {label} ({score:.2f})")
หากคุณใส่ภาพของสุนัข Golden โมเดลอาจแสดงผลลัพธ์ดังนี้:
โค้ด: เลือกทั้งหมด
1: golden_retriever (0.85)
2: Labrador_retriever (0.05)
3: cocker_spaniel (0.03)
4: Afghan_hound (0.02)
5: Irish_setter (0.01)
VGGNet เป็นโมเดลที่มีโครงสร้างเรียบง่ายแต่ทรงพลัง เหมาะสำหรับการเรียนรู้เชิงลึก (Deep Learning) ในงานที่เกี่ยวกับภาพ เช่น การจำแนกวัตถุ การตรวจจับวัตถุ หรือการแยกส่วนภาพ แม้ว่าในปัจจุบันจะมีโมเดลที่ทันสมัยกว่า แต่ VGGNet ยังคงเป็นทางเลือกที่ดีสำหรับการเรียนรู้พื้นฐานและการพัฒนาโมเดลสำหรับงานที่ต้องการความแม่นยำสูงในด้านการประมวลผลภาพ
อ้างอิง
https://medium.com/misl/โครงข่ายประสาทเทียมแบบคอนโวลูชันเชิงลึกสำหรับการจำแนกพรรณไม้ที่อยู่ในสิ่งแวดล้อมทางธรรมชาติ-9d8b797ff704
https://medium.com/bigdataeng/เริ่มต้น-deep-learning-application-ไปกับภาพวาดสไตล์-doodle-กันเถอะ-c48561f2661b
https://thanahongsuwan.medium.com/มาสร้าง-vgg-16-โดยใช้-pytorch-กัน-ad6f3169b922
https://algoaddict.wordpress.com/2019/06/22/neural-style-transfer-พาอาจารย์-stephen-hawking-ไปอวกาศก/