ML Community Day คือวันที่ 9 พฤศจิกายน! ร่วมกับเราสำหรับการปรับปรุงจาก TensorFlow, JAX และอื่น ๆ เรียนรู้เพิ่มเติม

รวมเครื่องตรวจจับวัตถุ

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

ใช้งานห้องสมุด ObjectDetector API ในการปรับใช้เครื่องตรวจจับวัตถุของคุณเองหรือคนที่เข้ามาใน pretrained ปพลิเคชันมือถือของคุณ

คุณสมบัติหลักของ ObjectDetector API

  • ป้อนข้อมูลการประมวลผลภาพ รวมทั้งการหมุน การปรับขนาด และการแปลงพื้นที่สี

  • ป้ายกำกับสถานที่แผนที่

  • เกณฑ์คะแนนเพื่อกรองผลลัพธ์

  • ผลการตรวจจับ Top-k

  • ติดป้ายกำกับรายการที่อนุญาตและรายการที่ไม่อนุญาต

รุ่นเครื่องตรวจจับวัตถุที่รองรับ

รุ่นต่อไปนี้จะรับประกันได้ว่าจะเข้ากันได้กับ ObjectDetector API

เรียกใช้การอนุมานใน Java

ดู วัตถุการตรวจสอบตรวจสอบการอ้างอิง สำหรับตัวอย่างของวิธีการใช้ ObjectDetector ใน Android app

ขั้นตอนที่ 1: นำเข้าการพึ่งพา Gradle และการตั้งค่าอื่นๆ

คัดลอก .tflite ไฟล์รูปแบบไปยังไดเรกทอรีสินทรัพย์ของโมดูล Android รุ่นที่จะวิ่ง ระบุว่าไฟล์ไม่ควรถูกบีบอัดและเพิ่มห้องสมุด TensorFlow Lite โมดูลของ build.gradle ไฟล์:

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.2.0'
}

ขั้นตอนที่ 2: การใช้โมเดล

// Initialization
ObjectDetectorOptions options = ObjectDetectorOptions.builder().setMaxResults(1).build();
ObjectDetector objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Detection> results = objectDetector.detect(image);

ดู รหัสแหล่งที่มาและ Javadoc สำหรับตัวเลือกเพิ่มเติมในการกำหนดค่า ObjectDetector

เรียกใช้การอนุมานใน C++

// Initialization
ObjectDetectorOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<ObjectDetector> object_detector = ObjectDetector::CreateFromOptions(options).value();

// Run inference
const DetectionResult result = object_detector->Detect(*frame_buffer).value();

ดู รหัสที่มา สำหรับตัวเลือกเพิ่มเติมในการกำหนดค่า ObjectDetector

ตัวอย่างผลลัพธ์

นี่คือตัวอย่างของผลการตรวจสอบของ SSD MobileNet v1 จาก TensorFlow Hub

สุนัข

Results:
 Detection #0 (red):
  Box: (x: 355, y: 133, w: 190, h: 206)
  Top-1 class:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1 (green):
  Box: (x: 103, y: 15, w: 138, h: 369)
  Top-1 class:
   index       : 17
   score       : 0.73047
   class name  : dog

เรนเดอร์กล่องขอบเขตบนอิมเมจอินพุต:

เอาต์พุตการตรวจจับ

ลองใช้ง่าย เครื่องมือ CLI สาธิต ObjectDetector กับตัวเองและรูปแบบการทดสอบข้อมูลของคุณ

ข้อกำหนดความเข้ากันได้ของรุ่น

ObjectDetector API คาดว่ารูปแบบการ TFLite กับบังคับ TFLite รุ่นเมตาดาต้า ดูตัวอย่างของการสร้างเมตาสำหรับเครื่องตรวจจับวัตถุที่ใช้ เขียน API TensorFlow Lite เมตาดาต้า

โมเดลเครื่องตรวจจับวัตถุที่เข้ากันได้ควรเป็นไปตามข้อกำหนดต่อไปนี้:

  • อินพุตภาพเทนเซอร์: (kTfLiteUInt8/kTfLiteFloat32)

    • ภาพข้อมูลขนาด [batch x height x width x channels]
    • อนุมานชุดไม่ได้รับการสนับสนุน ( batch จะต้อง 1)
    • เพียงปัจจัยการผลิต RGB ได้รับการสนับสนุน ( channels จะต้อง 3)
    • ถ้าประเภทเป็น kTfLiteFloat32 จำเป็นต้องแนบ NormalizationOptions กับข้อมูลเมตาเพื่อทำให้อินพุตเป็นมาตรฐาน
  • เอาท์พุทเทนเซอร์จะต้องเป็น 4 เอาท์พุทของ DetectionPostProcess สหกรณ์เช่น:

    • ตำแหน่งเทนเซอร์ (kTfLiteFloat32)

      • เมตริกซ์ขนาด [1 x num_results x 4] อาร์เรย์ภายในที่เป็นตัวแทนของกล่องวิ่งในรูปแบบ [ด้านบนซ้ายขวาด้านล่าง]

      • BoundingBoxProperties จะต้องแนบมากับเมตาและต้องระบุ type=BOUNDARIES และ `coordinate_type = RATIO

    • คลาสเทนเซอร์ (kTfLiteFloat32)

      • เมตริกซ์ขนาด [1 x num_results] ค่าที่เป็นตัวแทนของดัชนีจำนวนเต็มของชั้นเรียนแต่ละคน

      • สามารถแนบแผนที่ป้ายกำกับที่ไม่บังคับ (แต่แนะนำ) เป็น AssociatedFile-s ที่มีประเภท TENSOR_VALUE_LABELS โดยมีหนึ่งป้ายกำกับต่อบรรทัด ดู ไฟล์ตัวอย่างฉลาก ครั้งแรก AssociatedFile ดังกล่าว (ถ้ามี) จะใช้ในการเติม class_name ฟิลด์ของผล display_name ฟิลด์เต็มไปจาก AssociatedFile (ถ้ามี) ซึ่งเป็นสถานที่เกิดเหตุตรงกับ display_names_locale เขตของ ObjectDetectorOptions ใช้ในเวลาสร้าง ( "th" โดยค่าเริ่มต้นคือภาษาอังกฤษ) ถ้าไม่มีของเหล่านี้มีอยู่เพียง index ข้อมูลของผลที่จะได้รับการเติมเต็ม

    • คะแนนเทนเซอร์ (kTfLiteFloat32)

      • เมตริกซ์ขนาด [1 x num_results] มูลค่าคิดเป็นคะแนนของวัตถุที่ตรวจพบในแต่ละ
    • จำนวนเทนเซอร์การตรวจจับ (kTfLiteFloat32)

      • NUM_RESULTS จำนวนเต็มเป็นเมตริกซ์ที่มีขนาด [1]