使用 TensorFlow 進行對象檢測

識別和檢測圖像或視頻中的對象是計算機視覺中的一項關鍵任務。它在各種應用中都至關重要,從自動駕駛汽車和監控系統到增強現實和醫學成像。TensorFlow 是一個 Google 開源機器學習框架,為開發和部署對象檢測模型提供了一系列強大的工具。

    在本文中,我們將介紹使用 TensorFlow 進行對象識別的基礎知識。TensorFlow 提供了一個靈活高效的框架來滿足您的需求,無論您是在從事計算機視覺研究項目,還是在設計需要實時對象識別功能的應用。讓我們深入了解利用 TensorFlow 開發對象檢測并充分發揮這項尖端技術的潛力的細節。

    什么是對象檢測?

    對象檢測是一項計算機視覺任務,涉及識別和定位圖像或視頻中的多個對象。目標不僅是對圖像中的內容進行分類,而且還要精確勾勒和精確定位每個對象的位置。

    對象檢測中的關鍵概念:

    • 邊界框
      對象檢測涉及在檢測到的對象周圍繪制邊界框。定界框是包圍對象的矩形,由其坐標定義,通常為 (x_min, y_min) 表示左上角,(x_max, y_max) 表示右下角。
      ?
    • 對象本地化
      • 定位是確定對象在圖像中的位置的過程。它涉及預測封裝對象的邊界框的坐標。
    • 類預測
      • 對象檢測不僅可以定位對象,還可以將它們分為不同的類別(例如,人、汽車、狗)。每個對象都分配有一個類標簽,提供有關對象的信息。
    • 模型架構
      • 許多架構用于對象檢測,例如 SSD (Single Shot Multibox Detector)、Faster R-CNN (基于區域的卷積神經網絡) 和 YOLO (You Only Look Once)。這些模型在平衡速度和準確性的方法上有所不同。

    使用 TensorFlow 進行對象檢測

    設置 TensorFlow

    首先 使用 pip 安裝 TensorFlow:

    !pip install tensorflow
    ?
    ?

    確保您具有必要的依賴項,如果您有兼容的 GPU,請考慮安裝支持 GPU 的 TensorFlow 以加快訓練速度。

    選擇預訓練模型

    TensorFlow 在 COCO (Common Objects in Context) 等大型數據集上提供預訓練模型。這些模型是遷移學習的起點。常見型號包括 Faster R-CNN、SSD(Single Shot Multibox Detector)和 YOLO(You Only Look Once)。在本教程中,我們將使用 ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8 模型。

    了解 ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8 Model

    • SSD(單發多框檢測器):SSD 是一種流行的對象檢測算法,以其速度和準確性而聞名。它旨在一次性檢測不同比例和縱橫比的對象。
    • MobileNetV2:MobileNetV2 是一種針對移動和邊緣設備優化的輕量級神經網絡架構。它在效率和性能之間取得了平衡,使其成為實時應用程序的理想選擇。
    • 640x640:這表示模型預期的輸入圖像大小。較大的輸入大小通常會產生更準確的結果,但需要更多的計算資源。這些模型的大小也比在較大圖像(如 1024x1024)上訓練的模型小。此外,推理時間更短。
      • 示例:centernet_hg104_1024x1024_coco17_tpu-32 是 1.33 GB 的模型
      • 而 ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8 為 19 MB
      • efficientdet_d1_coco17_tpu-32 為 50 MB(適用于 640x640 圖像)
      • Google Colab 中這三種的推理時間約為 42 秒、0 秒和 4 秒。您可以清楚地看到大小如何影響模型的推理時間
    • COCO (Common Objects in Context) 數據集:COCO 數據集是用于對象檢測、分割和字幕的大型數據集。它包含各種對象類別,廣泛用于訓練和評估計算機視覺模型。
    • TPU-8(張量處理單元 - 8):TensorFlow 的 TPU 是專為機器學習工作負載設計的自定義硬件加速器。“8” 是指內核的數量,表示增強的并行處理能力。

    現在我們已經有了所需的一切,讓我們從代碼開始:

    第 1 步:導入庫

    首先,讓我們導入 TensorFlow、NumPy、OpenCV、Pillow 和 Matplotlib 的必要庫。

    ?

    import tensorflow as tf
    import numpy as np
    import cv2
    from PIL import Image
    from matplotlib import pyplot as plt
    from random import randint
    

    第 2 步:下載、提取和加載預訓練模型

    現在,使用 TensorFlow 的 SavedModel 格式加載預訓練模型。


    !wget http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8.tar.gz
    !tar -xzvf ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8.tar.gz
    
    model = tf.saved_model.load("ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8/saved_model")
    

    第 3 步:加載和預處理圖像

    在此步驟中,加載圖像,將其轉換為 NumPy 數組,并對其進行預處理以輸入到模型,因為模型不能直接處理圖像,因此我們首先將其轉換為張量。


    image = Image.open("detect.jpg")
    image_np = np.array(image)
    input_tensor = tf.convert_to_tensor(np.expand_dims(image_np, 0), dtype=tf.uint8)
    image
    

    輸出:

    以下內容為付費內容,請購買后觀看

    App下載
    技術鄰APP
    工程師必備
    • 項目客服
    • 培訓客服
    • 平臺客服

    TOP

    1