SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (ModusToolbox)
Loading...
Searching...
No Matches
Edge AI (libbento_edge_ai.a)

Topics

 วงจรชีวิตของ engine
 ผลลัพธ์ registry และการ settle
 Parallel sets
 การ unload และโมเดลแบบ staged
 จังหวะของเซนเซอร์
 ตัวนับสำหรับวินิจฉัย
 หมายเหตุการใช้งาน

Detailed Description

รันโมเดล DEEPCRAFT ทีละหนึ่งตัว — หรือ parallel set (ชุดโมเดลที่ป้อนข้อมูลขนานกัน) หนึ่งชุด — บน CM55 (TFLite-Micro + Ethos-U55) แล้วเผยแพร่ snapshot ของผลลัพธ์ให้ UI และให้ model link ฝั่ง MicroPython

archive (ไฟล์ไลบรารีแบบสแตติก .a) ตัวนี้ส่งออก symbol 39 ตัว (dist/edge_ai/api.txt): เป็นฟังก์ชัน API 37 ตัวที่ประกาศไว้ใน ai_engine.h และ ai_model_staged.h บวกกับ printf และ puts ซึ่งไม่ใช่ API เลย แต่เป็นอันตราย (hazard) ตอน link-time ที่ผู้ใช้ไลบรารีฝั่ง CM55 ทุกรายต้องรู้ไว้ (อันตรายตอน link ของ printf/puts)

variant ที่ใช้ได้
mtb-mpy และ mtb-only
Note
เครดิต: Ready Model เป็นผลงานของ Infineon โมเดล Siren, Cough และ Factory Alarm ที่ engine นี้รันได้ — siren_lib_eval.a, cough_lib_eval.a, alarm_lib_eval.a — เป็น DEEPCRAFT™ Ready Model ที่ Imagimob AB ซึ่งเป็นบริษัทในเครือ Infineon Technologies เป็นผู้สร้าง และ Infineon เป็นผู้เผยแพร่: https://www.infineon.com/design-resources/embedded-software/deepcraft-edge-ai-solutions/deepcraft-ready-models โมเดลชุดนี้คือเหตุผลที่บอร์ดชุดนี้สาธิต Edge AI ด้านเสียงของจริงได้ TESAIoT อ้างอิงโมเดลเหล่านี้ภายใต้ Imagimob AI Model Evaluation License Agreement และปฏิบัติตามข้อกำหนดนั้น การใช้งานที่นี่เป็นไปเพื่อการวิจัยและการอบรม TESAIoT ไม่มีสิทธิ์ใด ๆ ในโมเดลเหล่านี้ ส่งต่อสิทธิ์ให้ผู้ใดไม่ได้ และไม่แจกจ่ายไฟล์ archive ต่อ การประเมินผลบนบอร์ดของตนเองทำได้ภายใน 60 วัน (§2.1) ส่วนการนำไปใส่ในผลิตภัณฑ์ การแจกจ่ายต่อ และการใช้เชิงพาณิชย์ ทำไม่ได้ (§2.2(a), §2.2(c)) หากต้องการใช้ในการผลิต ให้ซื้อรุ่น non-evaluation จาก Imagimob/Infineon หรือฝึกโมเดลของตนเองใน DEEPCRAFT™ Studio: https://www.infineon.com/design-resources/embedded-software/deepcraft-edge-ai-solutions/deepcraft-studio โมเดลที่ฝึกเองรันบน API ชุดเดียวกันนี้ได้โดยไม่ต้องแก้ และเงื่อนไขสิทธิ์การใช้งานของโมเดลที่ฝึกเองไม่ใช่เงื่อนไขของ Ready Model รายละเอียดฉบับเต็ม การอ้างอิงข้อสัญญา และการเปิดเผยเรื่องการเปลี่ยนชื่อ symbol รายโมเดล อยู่ที่ THIRD_PARTY_NOTICES.md §2.4
เครดิต: โมเดลที่เฟิร์มแวร์ชุดนี้ส่งมอบก็เป็นของ Infineon เช่นกัน โมเดล motion, audio และ radar — proj_cm55/modules/ai_models/model_motion.c, model_audio.c และ model_radar.c — เป็นผลลัพธ์ที่ export ออกมาจาก DEEPCRAFT™ Studio ซึ่งเป็นเครื่องมือ Edge AI ของ Infineon และมีลิขสิทธิ์ของ Imagimob AB ซึ่งเป็นบริษัทในเครือ Infineon Technologies บรรทัดบนสุดของทุกไฟล์ระบุไว้ว่า "Copyright © 2023- Imagimob AB, All Rights Reserved." TESAIoT ไม่ได้ฝึกโมเดลเหล่านี้ ไม่ได้เป็นผู้สร้าง และไม่ได้เป็นเจ้าของ สิ่งที่เป็นของ TESAIoT คือ engine ที่ครอบอยู่ ได้แก่ ทะเบียนโมเดล (registry) ตัวจัดเส้นทางป้อนข้อมูลจากเซนเซอร์ (feed router) และตัวโหลดโมเดลตอนรัน สิ่งใดก็ตามที่ DEEPCRAFT™ Studio สร้างขึ้น หรือที่พัฒนาต่อจากโมเดล DEEPCRAFT™ ย่อมเป็นของ Imagimob และ Infineon ส่วนหัวของไฟล์เหล่านั้นสงวนสิทธิ์ไว้ทั้งหมดและไม่ได้ให้สิทธิ์ใด ๆ ที่นี่จึงไม่มีการส่งต่อสิทธิ์ให้ผู้ใด และสิทธิ์แบบ Apache-2.0 ที่ให้ไว้กับโค้ดของโครงการนี้ไม่ครอบคลุมเนื้อหาภายในไฟล์เหล่านั้น การใช้งานที่นี่เป็นไปเพื่อการวิจัยและการอบรม ไม่ใช่การใช้เชิงพาณิชย์ หากประสงค์จะนำโมเดลเหล่านี้ หรือสิ่งที่พัฒนาต่อจากโมเดลเหล่านี้ ไปใส่ในผลิตภัณฑ์ ต้องตกลงกับ Infineon และ Imagimob ก่อน ผู้ที่ต้องการฝึกโมเดลของตนเองเริ่มได้ที่ https://www.infineon.com/design-resources/embedded-software/deepcraft-edge-ai-solutions/deepcraft-studio รายละเอียดฉบับเต็มอยู่ที่ THIRD_PARTY_NOTICES.md §2.2 และ §4.3

CM55 ไม่ขึ้นกับ variant: symbol ทุกตัวในโมดูลนี้มีพฤติกรรมเหมือนกันทั้งใน build แบบ mtb-mpy และ mtb-only

การเข้าถึงมี 2 ชั้น และทั้ง 2 ชั้นไม่ทับซ้อนกัน โค้ด C ที่คอมไพล์เข้าไปใน proj_cm55 เรียก ai_engine_* และ ai_model_staged_* ได้โดยตรง — และผู้เรียกที่มีอยู่จริงในของที่ส่งมอบทุกรายของส่วนนี้ ล้วนอยู่ภายใน libbento_cm55.a ที่คอมไพล์มาแล้วเอง ส่วน MicroPython ทำงานบน CM33_NS และ เรียก ai_engine_* ไม่ได้เลย: มันเข้าถึงโมดูลนี้ได้ทาง model link บน IPC เท่านั้น — คือ edge_ai.select(), edge_ai.result(), edge_ai.diag() และตัวอื่น ๆ ซึ่งมีความหมายตามที่ระบุไว้ที่นี่ คำอธิบายฉบับเต็ม รวมถึงที่มาของตัวอย่างทุกตัวอย่างในโมดูลนี้ อยู่ที่ การเข้าถึง 2 ชั้น — ใครเรียกอะไรได้บ้าง

วินัย select → confirm → start

engine เก็บดัชนีไว้ 2 ตัว และทั้งโมดูลนี้ขึ้นอยู่กับความต่างของ 2 ตัวนั้น:

สิ่งที่ถาม ฟิลด์ใน engine ความหมาย
ai_engine_requested() s_active โมเดลที่ ai_engine_start() ครั้งล่าสุด REQUESTED ไว้ — ตั้งค่าแบบซิงโครนัส
ai_engine_active() s_current โมเดลที่ LOADED แล้ว — พลิกค่าหลังจาก init() แบบเย็นของ inference task คืนค่ากลับมาแล้วเท่านั้น

การเปิดใช้ TFLite-Micro + Ethos-U55 แบบเย็นทำงานแบบซิงโครนัสอยู่ภายใน init() ของโมเดล active() จึงตามหลัง requested() อยู่เต็มหนึ่งช่วง cold-init (ฝั่ง MicroPython ตั้งงบเวลาไว้ที่ 15 s) จากข้อนี้จึงได้กฎ 3 ข้อ:

  1. select ก่อน แล้ว confirm แล้วจึงพึ่งพา start ได้ หลังเรียก ai_engine_start() ให้วนถาม: active() == want แปลว่าโหลดแล้ว มิฉะนั้นให้วนถาม requested() — เมื่อเห็น requested() == want มาแล้วครั้งหนึ่ง ค่า requested() < 0 ที่เกิดขึ้นภายหลังย่อมหมายความได้อย่างเดียวว่า init() ของโมเดลล้มเหลว จึงให้ล้มเหลวเสียแต่เนิ่น ๆ แทนที่จะรอจนครบเพดาน
  2. ห้ามใช้ ai_engine_active() เป็น gate (ด่านกั้น) ของ fallback ข้อบกพร่องที่บันทึกไว้: การแตะบนหน้าตั้ง s_active = sel แล้วส่ง START ออกไป; ตัวกัน (guard) ที่อ่าน s_current (ซึ่งยังเป็น -1 ใน tick นั้น) ยิง ai_engine_start(0) ออกไปและทับสิ่งที่เลือกไว้ให้กลับไปเป็นโมเดล 0 — "select Radar, Load, get Motion" (ai_engine.c:1868-1873, deepcraft_task.c:634-640) ให้ใช้ ai_engine_requested() เป็นตัวกันแทน
  3. ต้องเรียก ai_engine_init() ก่อน ai_engine_start(); ฟังก์ชันนี้เป็น idempotent สำนวนที่ส่งมอบจริงจึงเรียกซ้ำทันทีก่อน start ทุกครั้ง

ดัชนีเทียมของ set (252..255) และการแปลงค่ารูปเดิม 13/14/15 อธิบายไว้ใน ดัชนีเทียมของ set และการแปลงค่ารูปเดิม