การฝึกอบรมการรับรู้เชิงปริมาณ

ดูแลโดยการปรับโมเดล TensorFlow

การวัดปริมาณมีสองรูปแบบ: การวัดปริมาณหลังการฝึกอบรม และการฝึกอบรมการรับรู้เชิงปริมาณ เริ่มต้นด้วย การวัดปริมาณหลังการฝึกอบรม เนื่องจากใช้งานง่ายกว่า แม้ว่าการฝึกอบรมที่คำนึงถึงปริมาณมักจะดีกว่าสำหรับความแม่นยำของโมเดล

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

ภาพรวม

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

ปรับใช้ด้วยการหาปริมาณ

การหาปริมาณนำมาซึ่งการปรับปรุงผ่านการบีบอัดโมเดลและการลดเวลาแฝง ด้วยค่าเริ่มต้นของ API ขนาดโมเดลจะลดลง 4x และโดยทั่วไปเราจะเห็นการปรับปรุงเวลาแฝงของ CPU ระหว่าง 1.5 - 4x ในแบ็กเอนด์ที่ทดสอบ ในที่สุด การปรับปรุงเวลาแฝงก็สามารถมองเห็นได้บนตัวเร่งความเร็วการเรียนรู้ของเครื่องที่เข้ากันได้ เช่น EdgeTPU และ NNAPI

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

ทดลองกับการหาปริมาณและฮาร์ดแวร์ที่เกี่ยวข้อง

ผู้ใช้สามารถกำหนดค่าพารามิเตอร์การหาปริมาณ (เช่น จำนวนบิต) และอัลกอริธึมพื้นฐานได้ในระดับหนึ่ง โปรดทราบว่าด้วยการเปลี่ยนแปลงเหล่านี้จากค่าเริ่มต้นของ API ขณะนี้ยังไม่มีเส้นทางที่รองรับสำหรับการปรับใช้กับแบ็กเอนด์ ตัวอย่างเช่น การแปลง TFLite และการใช้งานเคอร์เนลรองรับเฉพาะการหาปริมาณ 8 บิต

API เฉพาะสำหรับการกำหนดค่านี้เป็นการทดลองและไม่มีความเข้ากันได้แบบย้อนหลัง

ความเข้ากันได้ของ API

ผู้ใช้สามารถใช้การกำหนดปริมาณกับ API ต่อไปนี้:

  • การสร้างโมเดล: keras ที่มีเฉพาะโมเดล Sequential และ Functional เท่านั้น
  • เวอร์ชัน TensorFlow: TF 2.x สำหรับ tf-nightly
    • ไม่รองรับ tf.compat.v1 พร้อมแพ็คเกจ TF 2.X
  • โหมดการดำเนินการ TensorFlow: การดำเนินการที่กระตือรือร้น

อยู่ในแผนงานของเราในการเพิ่มการสนับสนุนในด้านต่อไปนี้:

  • การสร้างโมเดล: ชี้แจงว่าโมเดลคลาสย่อยจำกัดการไม่สนับสนุนอย่างไร
  • การฝึกอบรมแบบกระจาย: tf.distribute

เมทริกซ์สนับสนุนทั่วไป

การสนับสนุนมีอยู่ในด้านต่อไปนี้:

  • การครอบคลุมโมเดล: โมเดลที่ใช้ เลเยอร์ที่อนุญาต , BatchNormalization เมื่อเป็นไปตามเลเยอร์ Conv2D และ DepthwiseConv2D และในบางกรณี Concat
  • การเร่งความเร็วด้วยฮาร์ดแวร์: ค่าเริ่มต้น API ของเราเข้ากันได้กับการเร่งความเร็วบนแบ็กเอนด์ EdgeTPU, NNAPI และ TFLite และอื่นๆ ดูคำเตือนในแผนงาน
  • ปรับใช้ด้วยการหาปริมาณ: ขณะนี้รองรับเฉพาะการหาปริมาณต่อแกนสำหรับเลเยอร์แบบหมุนวน ไม่ใช่การหาปริมาณต่อเทนเซอร์

อยู่ในแผนงานของเราในการเพิ่มการสนับสนุนในด้านต่อไปนี้:

  • ความครอบคลุมของโมเดล: ขยายเพื่อรวม RNN/LSTM และการสนับสนุน Concat ทั่วไป
  • การเร่งด้วยฮาร์ดแวร์: ตรวจสอบให้แน่ใจว่าตัวแปลง TFLite สามารถสร้างโมเดลจำนวนเต็มได้ ดู ปัญหานี้ สำหรับรายละเอียด
  • ทดลองใช้กรณีการใช้งานเชิงปริมาณ:
    • ทดลองกับอัลกอริธึมการหาปริมาณที่ครอบคลุมเลเยอร์ Keras หรือต้องมีขั้นตอนการฝึก
    • ทำให้ API เสถียร

ผลลัพธ์

การจำแนกภาพด้วยเครื่องมือ

แบบอย่าง ความแม่นยำอันดับ 1 แบบไม่เชิงปริมาณ ความแม่นยำเชิงปริมาณ 8 บิต
โมบายเน็ตV1 224 71.03% 71.06%
รีเน็ต v1 50 76.3% 76.1%
โมบายเน็ตV2 224 70.77% 70.01%

โมเดลดังกล่าวได้รับการทดสอบบน Imagenet และประเมินทั้งใน TensorFlow และ TFLite

การจำแนกภาพสำหรับเทคนิค

แบบอย่าง ความแม่นยำอันดับ 1 แบบไม่เชิงปริมาณ ความแม่นยำเชิงปริมาณ 8 บิต
Nasnet-มือถือ 74% 73%
รีเน็ต-v2 50 75.6% 75%

โมเดลดังกล่าวได้รับการทดสอบบน Imagenet และประเมินทั้งใน TensorFlow และ TFLite

ตัวอย่าง

นอกเหนือจาก ตัวอย่างการฝึกอบรมที่ตระหนักเรื่องปริมาณแล้ว โปรดดูตัวอย่างต่อไปนี้:

  • แบบจำลอง CNN ในงานการจำแนกตัวเลขที่เขียนด้วยลายมือของ MNIST พร้อมการหาปริมาณ: รหัส

สำหรับความเป็นมาของสิ่งที่คล้ายกัน โปรดดู บทความ เรื่อง Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference paper บทความนี้จะแนะนำแนวคิดบางประการที่เครื่องมือนี้ใช้ การใช้งานไม่เหมือนกันทุกประการ และมีแนวคิดเพิ่มเติมที่ใช้ในเครื่องมือนี้ (เช่น การหาปริมาณต่อแกน)