7.1. โครงข่ายประสาทเทียมคืออะไร

โครงข่ายประสาทเทียม คืออัลกอริทึมที่มีพฤติกรรม เรียนรู้ จากตัวอย่าง แทนที่จะถูกเขียนโค้ดด้วยมือ สถาปัตยกรรมโครงข่ายเดียวกัน เมื่อได้รับภาพใบหน้าหนึ่งล้านภาพ ก็เรียนรู้ที่จะตรวจจับใบหน้า สถาปัตยกรรมเดียวกัน เมื่อได้รับภาพมือหนึ่งล้านภาพ ก็เรียนรู้ที่จะตรวจจับมือ สถาปัตยกรรมเดียวกัน เมื่อได้รับชุดข้อมูลที่มีป้ายกำกับครอบคลุมหลายหมวดหมู่วัตถุ ก็เรียนรู้ที่จะตรวจจับทั้งหมดพร้อมกัน สิ่งที่เปลี่ยนแปลงระหว่างเป้าหมายคือเพียงน้ำหนัก ซึ่งน้ำหนักเหล่านั้นผลิตโดยกระบวนการฝึกอบรมนอกเครื่องที่ดูการทำนายของโครงข่ายเปรียบเทียบกับตัวอย่างที่มีป้ายกำกับ และปรับน้ำหนักจนกว่าจะตรงกัน

7.1.1. กลไกการทำงาน

โครงข่ายประสาทเทียมคือการซ้อนชั้นต่างๆ แต่ละชั้นคูณผลลัพธ์ของชั้นก่อนหน้าด้วยเมทริกซ์ น้ำหนัก บวกเวกเตอร์ไบแอส และใช้ฟังก์ชันไม่เชิงเส้นกับผลลัพธ์ ผลลัพธ์ของชั้นหนึ่งเป็นอินพุตของชั้นถัดไป ภาพที่ถ่ายจะเข้าที่ด้านบนของการซ้อน ไหลลงผ่านสิบหรือร้อยชั้น และออกมาที่ด้านล่างเป็นเทนเซอร์ที่รายการต่างๆ บรรยายสิ่งที่อยู่ในภาพ

สิ่งที่น้ำหนักของแต่ละชั้น ทำ ขึ้นอยู่กับสิ่งที่โครงข่ายถูกฝึกอบรม เมทริกซ์น้ำหนักในชั้นต้นๆ ของโครงข่ายสำหรับวิสัยทัศน์อาจตอบสนองต่อขอบแนวนอนสั้นๆ ชั้นที่ลึกกว่าเล็กน้อยอาจตอบสนองต่อมุม ชั้นที่ลึกกว่าอาจตอบสนองต่อรูปทรงตาที่เป็นวงกลม และชั้นที่ลึกที่สุดอาจตอบสนองต่อการจัดเรียงใบหน้าทั้งหมด ไม่มีสิ่งใดเหล่านี้ถูกเขียนด้วยมือ กระบวนการฝึกอบรมวนซ้ำบนตัวอย่างที่มีป้ายกำกับหลายล้านชิ้น ค่อยๆ ปรับน้ำหนักลงตามฟังก์ชันการสูญเสีย และลำดับชั้นจากขอบ-มุม-ตา-ใบหน้า ก็ปรากฏขึ้นมาจากข้อมูลเอง

A vertical stack of nine labelled boxes representing the layers of a small classification network. The top box is labelled "Input image" with a tensor shape of (192, 192, 3). An arrow leads down to a "Conv + ReLU" box with shape (96, 96, 32). Another arrow leads to a second "Conv + ReLU" box with shape (48, 48, 64). A "MaxPool" box follows with shape (24, 24, 64). Two more "Conv + ReLU" boxes follow with shapes (12, 12, 128) and (6, 6, 256). A "Global average pool" box has shape (256,). A "Fully connected" box has shape (1000,). The bottom box is labelled "Class scores" with shape (1000,). The tensor flow is top to bottom.

โครงข่ายการจำแนกประเภทขนาดเล็กในรูปแบบการซ้อนชั้น เทนเซอร์อินพุตเข้าที่ด้านบนพร้อมรูปร่างของภาพที่ถ่ายและไหลลงผ่านชั้นต่างๆ โดยแต่ละชั้นแปลงขนาดของเทนเซอร์ เทนเซอร์ผลลัพธ์ที่ด้านล่างมีหนึ่งรายการต่อคลาส โครงข่ายสำหรับการตรวจจับและจุดสำคัญใช้รูปแบบการซ้อนชั้นเดียวกัน เพียงแต่การตีความเทนเซอร์ผลลัพธ์เปลี่ยนไป

สถาปัตยกรรม ของโครงข่าย -- วิธีจัดเรียงชั้นต่างๆ และการดำเนินการที่เชื่อมต่อกัน -- คือสิ่งที่โครงข่าย สามารถ ทำได้ น้ำหนักคือสิ่งที่โครงข่าย ได้เรียนรู้ ส่วนหน้าที่ของกล้องคือการโหลดไฟล์น้ำหนักที่ผลิตจากการฝึกอบรมและรันการคำนวณเดิมที่ผู้ฝึกรัน แต่บนเฟรมที่ถ่ายแทนชุดข้อมูลฝึกอบรม

7.1.2. สิ่งที่ป้อนเข้าและสิ่งที่ออกมา

ทั้งสองปลายของโครงข่ายคือ เทนเซอร์ -- อาร์เรย์หลายมิติของตัวเลข ประเภทวัตถุเดียวกับที่บทเรียน numpy เพิ่งแนะนำไป เทนเซอร์อินพุตสำหรับโครงข่ายสำหรับวิสัยทัศน์คือภาพที่ถ่ายซึ่งถูกจัดเรียงใหม่ตามรูปแบบที่โครงข่ายคาดหวัง โดยทั่วไปเป็นรูปร่าง 4-ทูเปิล (B, H, W, C) ที่ B คือขนาดแบตช์ (เสมอเป็น 1 บนกล้อง เนื่องจากประมวลผลทีละหนึ่งเฟรม) H และ W คือความสูงและความกว้างพิกเซลที่โครงข่ายคาดหวัง และ C คือจำนวนช่องสัญญาณ (3 สำหรับโครงข่าย RGB, 1 สำหรับระดับสีเทา)

เทนเซอร์ผลลัพธ์ขึ้นอยู่กับวัตถุประสงค์ของโครงข่าย:

  • โครงข่าย การจำแนกประเภท ผลิตเทนเซอร์ 1-D ของคะแนนความเชื่อมั่น หนึ่งต่อคลาส ดัชนีของคะแนนสูงสุดคือคลาสที่ทำนาย ตัวตรวจจับบุคคลที่ดัดมาจาก MobileNet ที่มาพร้อมกล้องส่วนใหญ่เป็นรูปแบบนี้: สองคะแนน หนึ่งสำหรับ "person" หนึ่งสำหรับ "not person"

  • โครงข่าย การตรวจจับ ผลิตเทนเซอร์ 2-D ที่รายการต่างๆ บรรยายรายการกรอบล้อมรอบพร้อมความน่าจะเป็นของคลาส YOLOv8 เป็นรูปแบบนี้: เทนเซอร์ (84, N) ที่ 4 ใน 84 แถวเป็นค่าการถดถอยกรอบ และอีก 80 เป็นความน่าจะเป็นต่อคลาส ซ้ำกันทั่ว N ตำแหน่งยึด

  • โครงข่าย จุดสำคัญ ผลิตเทนเซอร์ที่รายการต่างๆ เป็นตำแหน่งพิกเซลของจุดสังเกตที่มีชื่อ โมเดลจุดสังเกตใบหน้าของ MediaPipe เป็นรูปแบบนี้: 468 จุดสำคัญต่อใบหน้าที่ตรวจพบ

  • โครงข่าย การแบ่งส่วน ผลิตเทนเซอร์ 2-D ที่รายการต่างๆ เป็นป้ายกำกับคลาสต่อพิกเซล -- มีขนาดเดียวกับอินพุต โดยมีดัชนีหมวดหมู่ที่ทุกตำแหน่ง

  • โครงข่าย การถดถอย ผลิตตัวเลขเดี่ยวหรือเวกเตอร์สั้นๆ ของตัวเลข -- การประมาณความลึก มุม อุณหภูมิ

แต่ละรูปแบบมี ตัวประมวลผลหลัง บนกล้องที่แปลงเทนเซอร์ผลลัพธ์ดิบกลับมาเป็นรูปแบบผลลัพธ์ที่แอปพลิเคชันส่วนที่เหลือใช้ -- กรอบล้อมรอบ รายการจุดสำคัญ ป้ายกำกับคลาส การประมาณตัวเลข ตัวประมวลผลหลังเป็นโค้ดฝั่งแอปพลิเคชันที่รู้รูปแบบผลลัพธ์ของโครงข่าย ส่วนโครงข่ายเองเป็นเพียงการคำนวณที่ผลิตเทนเซอร์

7.1.3. ทำไมสิ่งนี้ถึงใช้งานได้บนกล้อง

การคำนวณสองชนิดทำให้สิ่งนี้ใช้งานได้จริงสำหรับส่วนประกอบระดับไมโครคอนโทรลเลอร์ ชนิดแรกคือ การควอนไทซ์ การฝึกอบรมเกิดขึ้นในการคำนวณจุดทศนิยม 32 บิต การอนุมานสามารถรันในการคำนวณจำนวนเต็ม 8 บิตโดยแทบไม่มีการสูญเสียความแม่นยำสำหรับโมเดลส่วนใหญ่ น้ำหนัก 8 บิตใช้พื้นที่เก็บข้อมูลหนึ่งในสี่และรันเร็วกว่าจุดทศนิยม 32 บิตหลายเท่า ทุกโมเดลที่มาพร้อมกล้องได้รับการควอนไทซ์นอกเครื่องแล้ว

ชนิดที่สองคือ การเร่งความเร็วด้วยฮาร์ดแวร์ การคำนวณเดิมที่ CPU ของไมโครคอนโทรลเลอร์ทำทีละคำสั่ง ตัวเร่งโครงข่ายประสาทเทียมรันได้หลายร้อยการดำเนินการพร้อมกัน กล้องรุ่นใหม่ (AE3 และ N6) มี หน่วยประมวลผลประสาทเทียม (NPU) เฉพาะ -- ตัวเร่งเทนเซอร์บน SoC -- ที่เปลี่ยนโมเดลที่ต้องใช้เวลาหนึ่งวินาทีบน CPU ให้รันในเวลาหลายสิบมิลลิวินาที บทเกี่ยวกับเครื่องยนต์การอนุมานครอบคลุมสิ่งที่ส่วนของกล้องมีลักษณะอย่างไร

7.1.4. สิ่งที่บทนี้ครอบคลุม

การฝึกอบรมไม่ใช่หน้าที่ของกล้อง โมเดลที่ฝึกอบรมแล้วมาถึงกล้องในรูปไฟล์ .tflite กล้องโหลดมัน รันแต่ละเฟรมที่ถ่ายผ่านมัน และถอดรหัสเทนเซอร์ที่ได้ออกมาเป็นผลลัพธ์ที่แอปพลิเคชันสามารถดำเนินการได้ ทุกสิ่งที่ตามมาเกี่ยวกับแต่ละขั้นตอนเหล่านั้น:

  • การโหลดและตรวจสอบโมเดล

  • พาร์ติชันแฟลชที่ไฟล์โมเดลอาศัยอยู่

  • สี่ขั้นตอนของการเรียกการอนุมาน

  • เครื่องยนต์ที่ทำการคำนวณจริงๆ

  • และตัวประมวลผลหลังที่แปลงเทนเซอร์ผลลัพธ์กลับมาเป็นรายการกรอบ จุดสำคัญ หรือคลาส

ตัวตรวจจับในบทภาพแต่ละตัวถูกกำหนดขอบเขตให้กับเป้าหมายเฉพาะ ส่วนที่บทนี้ส่วนที่เหลือครอบคลุมถูกฝึกอบรมจากข้อมูลแทน โดยใช้เครื่องยนต์เดิมรันโมเดลใดก็ตามที่สคริปต์โหลด การเปลี่ยนแปลงกระบวนการทำงานที่มาพร้อมกัน -- อัลกอริทึมเฉพาะเป้าหมายถูกแทนที่ด้วยไฟล์น้ำหนักเฉพาะเป้าหมาย -- เป็นสิ่งต่อไปที่จะอธิบาย