MobileNet และ EfficientNet สำหรับการนำไปใช้งานที่ขอบเครือข่าย
สถาปัตยกรรมน้ำหนักเบา การแปลงเป็น TFLite และการแลกเปลี่ยนระหว่างขนาดแบบจำลองกับความแม่นยำ
MobileNet และ EfficientNet สำหรับการนำไปใช้งานที่ขอบเครือข่าย เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดโมเดลอุปกรณ์ปลายทางจึงแตกต่างกัน
บนโทรศัพท์และอุปกรณ์ฝังตัว คุณต้องแลกความแม่นยำบางส่วนกับขนาดที่เล็กมาก เวลาแฝงต่ำ และการใช้พลังงานต่ำ MobileNet และ EfficientNet ได้รับการออกแบบมาเพื่อจุดประสงค์นี้โดยเฉพาะ โดยใช้ส่วนประกอบสำหรับสร้างโมเดลที่มีประสิทธิภาพแทนคอนโวลูชันแบบหนาแน่นขนาดใหญ่
คอนโวลูชันแบบแยกตามความลึกของ MobileNet
MobileNet แทนที่คอนโวลูชันมาตรฐานด้วย คอนโวลูชันแบบแยกตามความลึก: ตัวกรองเชิงพื้นที่ที่ทำงานแยกตามแต่ละช่องสัญญาณ ตามด้วยการผสมแบบจุดขนาด 1x1 วิธีนี้ลดการคำนวณและจำนวนพารามิเตอร์ได้ประมาณ 8–9 เท่า โดยสูญเสียความแม่นยำเพียงเล็กน้อย
MobileNetV3Small
MobileNetV3Small ได้รับการปรับให้เหมาะกับอุปกรณ์เคลื่อนที่ โดยมีน้ำหนักประมาณ 2.5MB จึงเหมาะอย่างยิ่งเมื่อพื้นที่จัดเก็บและ RAM มีจำกัด
from tensorflow.keras.applications import MobileNetV3Small
base = MobileNetV3Small(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)EfficientNetB0
EfficientNetB0 ใช้การปรับสเกลแบบผสมเพื่อสร้างสมดุลระหว่างความลึก ความกว้าง และความละเอียด โมเดลนี้ให้ความแม่นยำสูงเมื่อเทียบกับขนาด และเป็นทางเลือกกึ่งกลางที่ดีระหว่างโครงข่ายสำหรับอุปกรณ์เคลื่อนที่ขนาดเล็กกับโมเดลเซิร์ฟเวอร์ขนาดใหญ่
from tensorflow.keras.applications import EfficientNetB0
base = EfficientNetB0(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)เลือกระหว่างสองโมเดล
- MobileNetV3Small (~2.5MB): มีขนาดเล็กที่สุด เร็วที่สุด และมีความแม่นยำต่ำที่สุด เหมาะสำหรับงานบนอุปกรณ์เคลื่อนที่แบบเรียลไทม์
- EfficientNetB0: มีสมดุลระหว่างความแม่นยำกับขนาด เหมาะเมื่อคุณสามารถใช้การคำนวณเพิ่มขึ้นได้เล็กน้อย
เลือกโมเดลตามงบประมาณเวลาแฝงและเป้าหมายความแม่นยำของอุปกรณ์
การสร้าง head สำหรับการเรียนรู้แบบถ่ายโอน
รูปแบบการเรียนรู้แบบถ่ายโอนเหมือนเดิมทุกประการ: ตรึง base ทำพูลลิง และเพิ่ม head แบบ Dense
from tensorflow.keras import layers, Model
base.trainable = False
x = layers.GlobalAveragePooling2D()(base.output)
x = layers.Dropout(0.2)(x)
out = layers.Dense(num_classes, activation="softmax")(x)
model = Model(base.input, out)TFLite คืออะไร
TensorFlow รุ่นน้ำหนักเบา คือสภาพแวดล้อมขณะทำงานสำหรับการอนุมานบนอุปกรณ์ คุณจะแปลงโมเดล Keras ที่ฝึกแล้วเป็น flatbuffer ขนาดกะทัดรัด .tflite ซึ่งทำงานได้อย่างมีประสิทธิภาพบน CPU, GPU และ NPU ของอุปกรณ์เคลื่อนที่
การแปลงเป็นรูปแบบทีเอฟไลต์
ใช้ TFLiteConverter เพื่อแปลงโมเดลที่บันทึกไว้
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open("model.tflite", "wb") as f:
f.write(tflite_model)การทำควอนไทซ์ช่วยลดขนาดเพิ่มเติม
การทำควอนไทซ์หลังการฝึกจะจัดเก็บน้ำหนักเป็นจำนวนเต็ม 8 บิตแทนเลขทศนิยม 32 บิต ทำให้ขนาดลดลงประมาณ 4 เท่าและเร่งการอนุมานบนฮาร์ดแวร์เคลื่อนที่ โดยสูญเสียความแม่นยำเพียงเล็กน้อย
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant = converter.convert()การวัดเวลาแฝง
บนฮาร์ดแวร์เคลื่อนที่ทั่วไป MobileNetV3Small มักทำงานได้ภายใน ระดับหลักเดียวถึงหลักสิบต้น ๆ ของมิลลิวินาที ต่อภาพ จึงรองรับการทำงานแบบเรียลไทม์ได้สบาย ส่วน EfficientNetB0 มีขนาดใหญ่กว่าและช้ากว่า แต่ให้ความแม่นยำสูงกว่า
ควรวัดประสิทธิภาพบน อุปกรณ์เป้าหมายจริง เสมอ เพราะเวลาที่วัดจากโปรแกรมจำลองไม่น่าเชื่อถือ ใช้เครื่องมือวัดประสิทธิภาพของทีเอฟไลต์ หรือวัดเวลาการเรียกใช้ invoke() ของ Interpreter
การเรียกใช้การอนุมานด้วยทีเอฟไลต์
โหลดโมเดลด้วย Interpreter กำหนดเทนเซอร์ข้อมูลเข้า เรียกใช้ แล้วอ่านข้อมูลออก
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
inp = interpreter.get_input_details()[0]
out = interpreter.get_output_details()[0]
interpreter.set_tensor(inp["index"], image)
interpreter.invoke()
print(interpreter.get_tensor(out["index"]))ตรวจสอบอย่างรวดเร็ว
ทดสอบความรู้เกี่ยวกับการนำโมเดลไปใช้งานบนอุปกรณ์ปลายทางของคุณ
ทบทวน
คุณได้เปรียบเทียบ MobileNetV3Small (~2.5MB ซึ่งเร็วที่สุด) กับ EfficientNetB0 (มีความสมดุล) สำหรับการใช้งานบนอุปกรณ์ปลายทาง สร้าง head สำหรับการเรียนรู้แบบถ่ายโอนบนโมเดลเหล่านี้ แปลงเป็น ทีเอฟไลต์ ใช้การทำควอนไทซ์เป็นจำนวนเต็ม 8 บิต และวัดเวลาแฝงบนฮาร์ดแวร์จริง เท่านี้ก็จบหลักสูตรการเรียนรู้แบบถ่ายโอนแล้ว หลักสูตรถัดไป: การวิเคราะห์อนุกรมเวลา
คำถามที่พบบ่อย
บทเรียน “MobileNet และ EfficientNet สำหรับการนำไปใช้งานที่ขอบเครือข่าย” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “MobileNet และ EfficientNet สำหรับการนำไปใช้งานที่ขอบเครือข่าย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “MobileNet และ EfficientNet สำหรับการนำไปใช้งานที่ขอบเครือข่าย”
สถาปัตยกรรมน้ำหนักเบา การแปลงเป็น TFLite และการแลกเปลี่ยนระหว่างขนาดแบบจำลองกับความแม่นยำ คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “MobileNet และ EfficientNet สำหรับการนำไปใช้งานที่ขอบเครือข่าย” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แนวคิดและกลยุทธ์การเรียนรู้แบบถ่ายโอน
- การใช้ VGG16 และ ResNet50 เป็นแบบจำลองพื้นฐาน
- การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่
- MobileNet และ EfficientNet สำหรับการนำไปใช้งานที่ขอบเครือข่าย