ช่วยปกป้อง Great Barrier Reef กับ TensorFlow บน Kaggle เข้าร่วมท้าทาย

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

ดูแลโดย TensorFlow Model Optimization

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

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

ภาพรวม

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

ปรับใช้ด้วย quantization

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

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

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

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

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

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

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

  • การสร้างแบบจำลอง: tf.keras มีเฉพาะรุ่นตามลำดับและแบบใช้งานได้
  • เวอร์ชัน TensorFlow: TF 2.x สำหรับ tf-nightly
  • โหมดการดำเนินการ TensorFlow: การดำเนินการอย่างกระตือรือร้น

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

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

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

การสนับสนุนมีให้บริการในพื้นที่ต่อไปนี้:

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

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

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

ผล

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

รุ่น ความแม่นยำระดับ Top-1 แบบไม่ระบุปริมาณ ความแม่นยำเชิงปริมาณ 8 บิต
MobilenetV1 224 71.03% 71.06%
Resnet v1 50 76.3% 76.1%
MobilenetV2 224 70.77% 70.01%

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

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

รุ่น ความแม่นยำระดับ Top-1 แบบไม่ระบุปริมาณ ความแม่นยำเชิงปริมาณ 8 บิต
Nasnet-Mobile 74% 73%
Resnet-v2 50 75.6% 75%

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

ตัวอย่าง

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

  • โมเดล CNN ในงานจัดประเภทตัวเลขที่เขียนด้วยลายมือของ MNIST พร้อมการหาปริมาณ: code

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