บทความนี้จะอธิบายวิธีที่จะพอร์ตและเรียกใช้รุ่น MobileNetV3 บนแพลตฟอร์ม NXP i.MX8MP ที่บูรณาการเพื่อให้บรรลุฟังก์ชั่นการรับรู้ดิจิตอลที่เขียนด้วยมือ จากการนําเข้าชุดข้อมูลการฝึกอบรมแบบจําลองและการยืนยันการวัดปริมาณและการใช้งานของ TensorFlow Lite จะแสดงให้เห็นถึงกระบวนการใช้งานของเครื่องมือ eIQ Portal ด้วยกรณีนี้ผู้อ่านสามารถเรียนรู้วิธีใช้การสรุปขอบเขตของรูปแบบการเรียนรู้ลึกน้ําหนักเบาบนแพลตฟอร์ม ARM ชั้นอุตสาหกรรมได้อย่างรวดเร็ว การนําเข้า Dataset ก่อนที่จะฝึกจําลองคุณต้องเตรียมชุดข้อมูลก่อน หากคุณไม่มีชุดข้อมูลคุณสามารถคลิกโดยตรง 'นําเข้าชุดข้อมูล' และเลือกชุดข้อมูลที่ให้ในเครื่องมือ (หากคุณมีชุดข้อมูลของคุณเองคุณสามารถคลิก 'สร้างโครงการว่าง' เพื่อนําเข้าโดยตรง) ตามที่แสดงในภาพด้านล่าง กระดาษนี้ใช้ชุดข้อมูลที่ให้โดยเครื่องมือ ใช้เครื่องมือเพื่อโหลดชุดข้อมูลจาก TensorFlow ตามที่แสดงด้านล่าง คุณสามารถเลือกชุดข้อมูลที่ให้จากเมนู drop-down ในมุมด้านบนด้านซ้าย นี่คือชุดข้อมูลทั้งหมดที่ใช้กันอย่างแพร่หลายใน TensorFlow กระดาษนี้ใช้ชุดข้อมูล mnist ชุดข้อมูล mnist มี 60,000 หมายเลขที่เขียนด้วยมือเป็นชุดการฝึกอบรมและ 10,000 หมายเลขที่เขียนด้วยมือเป็นชุดการยืนยัน นอกจากนี้ยังมีสามชุดข้อมูลอื่น ๆ : cifar10: It contains color images of 10 classes, with 50,000 images as the training set and 10,000 images as the validation set. horses_or_humans: horses_or_humans: It has 2 classes, humans and horses. There are 1,027 images of humans and 1,027 images of horses respectively. tf_flowers: It has 5 classes, with a total of 3,670 images of all kinds of flowers. นอกจากนี้ยังมีเมนู drop-down "ประเภทปัญหา" ในมุมซ้ายด้านบนซึ่งเป็นตัวแทนประเภทงาน ตามที่แสดงด้านล่างรุ่นของเครื่องมือนี้มีเพียงสองประเภทหนึ่งคือการจัดประเภทภาพและอีกหนึ่งคือการตรวจจับวัตถุ ในงานตรวจจับวัตถุมีเพียงหนึ่งชุดข้อมูล coco/2017 ชุดข้อมูลนี้สามารถตรวจจับ 80 ประเภทการรับรู้วัตถุด้วย 118,287 รูปภาพเป็นชุดการฝึกอบรม 5,000 รูปภาพเป็นชุดการตรวจสอบและ 20,288 รูปภาพเป็นชุดทดสอบ หลังจากเลือกชุดข้อมูลคลิกที่ปุ่ม "IMPORT" เลือกไดเรกทอรีบันทึกและรอการนําเข้า ตามที่แสดงในภาพด้านล่าง: เลือกบันทึกไดเรกทอรี รอให้ชุดข้อมูลจะถูกนําเข้า หลังจากที่การนําเข้าเสร็จสมบูรณ์คุณสามารถดูชุดข้อมูล mnist ด้านซ้ายแสดงหมายเลขของแต่ละภาพและฉลากภาพ ด้านขวาแสดงแต่ละภาพในชุดข้อมูล คุณสามารถดูข้อมูลรายละเอียดโดยการเลือกภาพ รูปแบบการฝึกอบรม หลังจากนําเข้าชุดข้อมูลขั้นตอนถัดไปคือการเลือกรูปแบบ ตามที่แสดงด้านล่างคลิกที่ปุ่ม "SELECT MODEL" ในภาพ อินเทอร์เฟซสําหรับการเลือกรุ่นเป็นตัวอย่างด้านล่าง ในอินเทอร์เฟซนี้ตัวเลือกที่แตกต่างกันสามตัวจะแสดงในด้านซ้ายและฟังก์ชั่นของพวกเขาคือดังนี้: RESTORE MODEL: ดาวน์โหลดรุ่นที่ใช้ครั้งสุดท้าย รูปแบบฐาน: เลือกรูปแบบฐานที่ให้ไว้ รุ่นผู้ใช้: เลือกรูปแบบที่คุณสร้าง ด้านขวาแสดงรูปแบบที่มีฟังก์ชั่นที่แตกต่างกันเช่นโมเดลการจัดประเภทโมเดลการแบ่งภาพและโมเดลการตรวจจับวัตถุ กระดาษนี้ใช้รุ่นฐานที่ให้โดย eIQ Portal ดังนั้นเลือก ''BASE MODEL'' ตามที่แสดงในภาพด้านล่าง รูปภาพด้านล่างแสดงหลายรุ่นฐานที่ให้โดยเครื่องมือ กระดาษนี้ใช้รุ่น mobilenet_v3 โครงสร้างของรุ่นที่แตกต่างกันสามารถดูได้ผ่าน 'MODEL TOOL' ในหน้าแรก หลังจากเลือกรุ่นให้เข้าสู่ขั้นตอนการฝึกอบรมแบบจําลอง อินเตอร์เฟซของมันเป็นเช่นที่แสดงด้านล่าง ด้านซ้ายแสดงพารามิเตอร์ที่ต้องปรับเปลี่ยนระหว่างกระบวนการฝึกอบรมรวมถึงอัตราการเรียนรู้ Batchsize และ Epochs ฯลฯ สามารถปรับได้ตามความต้องการ ด้านขวาสามารถแสดงข้อมูลที่เกี่ยวข้องเช่นความถูกต้องและค่าสูญเสียระหว่างกระบวนการฝึกอบรม พารามิเตอร์สําหรับการฝึกอบรมนี้เป็นตามที่แสดงด้านล่าง หลังจากเลือกให้คลิกที่ "เริ่มต้นการฝึกอบรม " กระบวนการฝึกอบรมตามที่แสดงด้านล่าง ความแม่นยําและค่าการสูญเสียของรุ่นที่ด้านขวาสามารถมองเห็นได้ หลังจากเสร็จสิ้นการฝึกอบรมแบบจําลองตามที่แสดงในภาพด้านล่างคุณสามารถตั้งช่วงต่างๆเพื่อดูข้อมูลขั้นตอน รูปแบบการยืนยัน หลังจากเสร็จสิ้นการฝึกอบรมแบบจําลองรุ่นจะต้องได้รับการยืนยัน เลือก ''VALIDATE'' เพื่อเข้าสู่ขั้นตอนการยืนยันแบบจําลอง ตามที่แสดงในภาพด้านล่าง ในอินเตอร์เฟซการยืนยันรุ่นคุณยังต้องตั้งค่าพารามิเตอร์การยืนยันรวมถึง Softmax Threshold และพารามิเตอร์ปริมาณบางอย่าง พารามิเตอร์ที่กําหนดไว้ในกระดาษนี้เป็นดังต่อไปนี้ หลังจากตั้งค่าคลิกที่ "Validate" ตามที่แสดงด้านล่าง หลังจากเสร็จสิ้นการตรวจสอบแล้ว matrix การสับสนและความแม่นยําของรุ่นจะแสดงในอินเตอร์เฟซตามที่แสดงด้านล่าง Model Conversion หลังจากเสร็จสิ้นการฝึกอบรมและการยืนยันแบบจําลองเพื่อเรียกใช้รุ่นบน OKMX8MP รุ่นต้องแปลงเป็นไฟล์ในรูปแบบ the.tflite ดังนั้นจึงต้องแปลงแบบจําลอง คลิกที่ ''DEPLOY'' เพื่อป้อนอินเทอร์เฟซการแปลง ตามที่แสดงในภาพด้านล่าง เลือกประเภทการส่งออกจากเมนูด้านซ้าย - drop - down ในกระดาษนี้รูปแบบการส่งออกคือรูปแบบ TensorFlow Lite ในเวลาเดียวกันสําหรับวัตถุประสงค์น้ําหนักเบาประเภทข้อมูลของ input และ output ทั้งสองจะถูกตั้งค่าเป็น int8 พารามิเตอร์จะถูกตั้งค่าตามที่แสดงด้านล่าง หลังจากตั้งค่าพารามิเตอร์แล้วเลือก "EXPORT MODEL" เพื่อส่งออกรุ่นในรูปแบบ tflite จากนั้นพอร์ตรุ่นในรูปแบบนี้ไปยัง i.MX8MP โมเดลการคาดการณ์ ก่อนการคาดการณ์รุ่นจําเป็นต้องเตรียมไฟล์ต่อไปนี้ Mobilen_v3.tflite ไฟล์ ไฟล์ภาพดิจิตอลที่เขียนด้วยมือที่จะคาดการณ์ ไฟล์สคริปต์ Python สําหรับการโหลดรุ่นและภาพก่อนการประมวลผล ระหว่างพวกเขาไฟล์ tflite สามารถส่งออกได้อย่างประสบความสําเร็จหลังจากการยืนยันรูปแบบ คุณสามารถเลือกไฟล์ภาพหลายตัวเลขที่เขียนด้วยมือจากชุดข้อมูลหรือคุณสามารถเขียนด้วยมือแล้วแปลงเป็นภาพ 28x28 สีดํา - ภูมิหลังสีขาว - รูปภาพตัวละคร กระดาษนี้ใช้ 30 รูปภาพต่อไปนี้สําหรับการคาดการณ์ชื่อในรูปแบบของ ''group number_label'' ตามที่แสดงในภาพด้านล่าง เขียนสคริปต์ Python: import numpy as np from PIL import Image import tflite_runtime.interpreter as tflite -------- การกําหนดค่า -------- MODEL_PATH = "/home/root/mobilenet_v3.tflite" IMAGE_PATHS = [ "/home/root/1_0.jpg", ''/home/root/1_1.jpg", "/home/root/1_2.jpg", "/home/root/1_3.jpg", ''/home/root/1_4.jpg", "/home/root/1_5.jpg", ''/home/root/1_6.jpg", "/home/root/1_7.jpg", "/home/root/1_8.jpg", "/home/root/1_9.jpg", "/home/root/2_0.jpg", ''/home/root/2_1.jpg", "/home/root/2_2.jpg", "/home/root/2_3.jpg", ''/home/root/2_4.jpg", "/home/root/2_5.jpg", ''/home/root/2_6.jpg", "/home/root/2_7.jpg", "/home/root/2_8.jpg", "/home/root/2_9.jpg", "/home/root/3_0.jpg", ''/home/root/3_1.jpg", "/home/root/3_2.jpg", "/home/root/3_3.jpg", ''/home/root/3_4.jpg", "/home/root/3_5.jpg", ''/home/root/3_6.jpg", "/home/root/3_7.jpg", "/home/root/3_8.jpg", "/home/root/3_9.jpg", ] -------- Load the model ------------ `interpreter = tflite.Interpreter(model_path=MODEL_PATH) interpreter.allocate_tensors() input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() รูปแบบการป้อนข้อมูล input_shape = input_details[0]['shape'] # [1, H, W, C] ความสูง, ความกว้าง, ช่อง = input_shape[1], input_shape[2], input_shape[3] input_dtype = input_details[0]['dtype'] # np.float32 หรือ np.int8 พารามิเตอร์ปริมาณ (ถ้า int8) scale, zero_point = input_details[0]['quantization']` -------- การคาดการณ์ -------- for img_path in IMAGE_PATHS: # Open the picture and turn to RGB (3 channels) img = Image.open(img_path).convert('RGB') img = img.resize((width, height)) # Convert to numpy array img_array = np.array(img, dtype=np.float32) # If the training data is black on a white background, it can be reversed #img_array = 255 - img_array # Normalized to 0 ~ 1 img_array = img_array / 255.0 # Adjust the shape to [1, H, W, 3] img_array = img_array.reshape(1, height, width, channels) # If the model is a quantized int8, then transform if input_dtype == np.int8: img_array = img_array / scale + zero_point img_array = np.round(img_array).astype(np.int8) # Set the input interpreter.set_tensor(input_details[0]['index'], img_array) # reasoning interpreter.invoke() # Get output output_data = interpreter.get_tensor(output_details[0]['index']) predicted_label = np.argmax(output_data) print(f''picture{img_path} prediction {predicted_label}") คัดลอกไฟล์ทั้งสามไฟล์ลงใน i.MX8MP ตามที่แสดงในภาพต่อไปนี้ ป้อนคําสั่งต่อไปนี้เพื่อทําการคาดการณ์: python3 demo.py ผลการผลิตดังต่อไปนี้: ตามผลการส่งออกสามารถเห็นได้ว่าฉลากภาพของ 3_9.jpg ควรเป็น 9 ในขณะที่รุ่นคาดการณ์ 7 และภาพอื่น ๆ ทั้งหมดคาดว่าจะเป็นปกติ 3_9 รูปภาพ jpg คือดังนี้: จากผลลัพธ์การคาดการณ์สามารถเห็นได้ว่ารุ่นที่ได้รับการฝึกอบรมครั้งนี้มีความแม่นยําสูงและยังคงทํางานได้ดีเมื่อถ่ายโอนไปยัง i.MX8MP