7.4. การโหลดโมเดล¶
ml.Model อ่านไฟล์โมเดลจากแฟลช แยกวิเคราะห์โมเดล จัดสรร RAM ที่โครงข่ายต้องการระหว่างการอนุมาน และส่งคืนออบเจ็กต์ที่บรรจุทุกสิ่งที่สคริปต์ส่วนที่เหลือต้องรู้เกี่ยวกับโครงข่ายที่โหลดแล้ว
7.4.1. Constructor¶
Constructor รับเส้นทางและตัวประมวลผลหลัง (post-processor) แบบเสริม:
model = ml.Model("/rom/blazeface_front_128.tflite",
postprocess=BlazeFace())
โมเดลบน /rom/ (ระบบไฟล์ที่อยู่ในแฟลช) จะถูกอ่านจากตำแหน่งเดิม: น้ำหนักของโครงข่ายยังคงอยู่ในแฟลชและโมเดลที่โหลดแล้วใช้ RAM เฉพาะขนาดของ tensor arena เท่านั้น โมเดลบน /sdcard/ จะถูกคัดลอกเข้า RAM เมื่อโหลด ดังนั้นค่าใช้จ่ายรวมคือขนาดไฟล์โมเดลบวกกับ tensor arena ทั้งสองเส้นทางใช้งานได้ โดยต้องพิจารณาการแลกเปลี่ยนด้าน RAM
หากมีไฟล์ .txt ในไดเรกทอรีเดียวกันที่มีชื่อฐานเหมือนกัน เนื้อหาของไฟล์นั้นจะถูกโหลดเข้า labels โดยอัตโนมัติ คีย์เวิร์ด postprocess= ลงทะเบียน callable ที่ predict() จะเรียกใช้หลังจากการอนุมานแต่ละครั้ง
7.4.2. คุณสมบัติแบบอ่านอย่างเดียว¶
โมเดลที่โหลดแล้วจะเปิดเผยชุดคุณสมบัติแบบอ่านอย่างเดียวจำนวนเล็กน้อย ซึ่งอธิบายโครงข่ายโดยไม่ต้องรันโครงข่าย
ไฟล์และหน่วยความจำ.
len-- ขนาดไฟล์โมเดลบนดิสก์ หน่วยเป็นไบต์ram-- ขนาดของ tensor arena ที่โครงข่ายต้องการสำหรับการกระตุ้นค่ากลางระหว่างการอนุมาน หน่วยเป็นไบต์
เทนเซอร์อินพุต.
input_shape-- รายการของ tuple หนึ่งรายการต่อเทนเซอร์อินพุต ระบุรูปร่างที่โครงข่ายคาดหวัง โครงข่ายการมองเห็นจะมีอินพุตหนึ่งตัวที่มีรูปร่าง(1, H, W, C)input_dtype-- รายการของรหัส dtype แบบอักขระเดี่ยว ('b'int8,'B'uint8,'h'int16,'H'uint16,'f'float32) หนึ่งรายการต่ออินพุตinput_scaleและinput_zero_point-- พารามิเตอร์การ quantization ที่แปลงระหว่างอินพุตที่มีค่าจริงที่โครงข่ายถูกฝึกมาและการแทนค่าจำนวนเต็มที่ cam รันเทียบกัน
เทนเซอร์เอาต์พุต. เป็นภาพสะท้อนของชุดอินพุต: output_shape, output_dtype, output_scale, output_zero_point โครงข่ายการตรวจจับผลิตเทนเซอร์เอาต์พุตสองหรือสามตัว (กล่อง คะแนนความเชื่อมั่น บางครั้งมีความน่าจะเป็นของคลาส) โครงข่ายการจำแนกประเภทผลิตเทนเซอร์หนึ่งตัว
ข้อมูลเพิ่มเติม. labels คือรายการชื่อคลาสที่โหลดจากไฟล์ .txt ในไดเรกทอรีเดียวกัน หรือ None postprocess คือตัวประมวลผลหลังที่ลงทะเบียนไว้ หรือ None
7.4.3. การตรวจสอบ BlazeFace¶
การโหลดโมเดล BlazeFace ที่มาพร้อมเครื่องและพิมพ์คุณสมบัติแต่ละอย่างจะให้ตัวเลขจริง:
import ml
from ml.postprocessing.mediapipe import BlazeFace
model = ml.Model("/rom/blazeface_front_128.tflite",
postprocess=BlazeFace())
print("file size: ", model.len, "bytes")
print("tensor arena: ", model.ram, "bytes")
print("input shape: ", model.input_shape)
print("input dtype: ", model.input_dtype)
print("input scale: ", model.input_scale)
print("input zp: ", model.input_zero_point)
print("output shape: ", model.output_shape)
print("output dtype: ", model.output_dtype)
print("output scale: ", model.output_scale)
print("output zp: ", model.output_zero_point)
ตัวเลขเหล่านี้ระบุอินเทอร์เฟซของโครงข่ายอย่างชัดเจน: เทนเซอร์อินพุต int8 ขนาด (1, 128, 128, 3) หนึ่งตัว และเอาต์พุต int8 สองตัว -- ตัวหนึ่งสำหรับค่าสัมประสิทธิ์การถดถอยของกรอบล้อมรอบ อีกตัวสำหรับคะแนนความเชื่อมั่นต่อ anchor พารามิเตอร์การ quantization อธิบายว่าค่า int8 เหล่านั้นแมปกับค่า float จริงที่โครงข่ายถูกฝึกมาอย่างไร ตัวประมวลผลหลังใช้พารามิเตอร์เหล่านั้นเพื่อยกเลิก quantization ก่อนถอดรหัสกรอบล้อมรอบ
คุณสมบัติแต่ละอย่างเป็นแหล่งความจริงเดียวสำหรับสิ่งที่มันอธิบาย สคริปต์อ่าน input_shape เพื่อทราบว่าต้องบันทึกที่ความละเอียดใด อ่าน output_scale และ output_zero_point เพื่อถอดรหัสเทนเซอร์ด้วยตนเอง และอ่าน labels สำหรับชื่อคลาสที่อ่านได้โดยมนุษย์ -- ไม่มีการฮาร์ดโค้ด ไม่มีการสันนิษฐาน