1. 程式人生 > 其它 >pytorch深度學習-機器視覺-目標檢測和邊界框簡介

pytorch深度學習-機器視覺-目標檢測和邊界框簡介

技術標籤:DeepLearning學習計算機視覺深度學習

機器視覺之目標檢測和邊界框簡介

在影象分類任務裡,我們假設影象裡只有一個主體目標,並關注如何識別該目標的類別。然而,很多時候影象裡有多個我們感興趣的目標,我們不僅想知道它們的類別,還想得到它們在影象中的具體位置。在計算機視覺裡,我們將這類任務稱為目標檢測(object detection)或物體檢測。

目標檢測在多個領域中被廣泛使用。例如,在無人駕駛裡,我們需要通過識別拍攝到的視訊影象裡的車輛、行人、道路和障礙的位置來規劃行進線路。機器人也常通過該任務來檢測感興趣的目標。安防領域則需要檢測異常目標,如歹徒或者炸彈。

在接下來的幾節裡,我們將介紹目標檢測裡的多個深度學習模型。在此之前,讓我們來了解目標位置這個概念。先匯入實驗所需的包或模組。

%matplotlib inline
from PIL import Image
from matplotlib import pyplot as plt

下面載入本節將使用的示例影象。可以看到影象左邊是一隻狗,右邊是一隻貓。它們是這張影象裡的兩個主要目標。

邊界框

在目標檢測裡,我們通常使用邊界框(bounding box)來描述目標位置。邊界框是一個矩形框,可以由矩形左上角的 x x x y y y軸座標與右下角的 x x x y y y軸座標確定。我們根據上面的圖的座標資訊來定義圖中狗和貓的邊界框。圖中的座標原點在影象的左上角,原點往右和往下分別為 x x x軸和 y y y軸的正方向。

# bbox是bounding box的縮寫
dog_bbox, cat_bbox = [60, 45, 378, 516], [400, 112, 655, 493]

我們可以在圖中將邊界框畫出來,以檢查其是否準確。畫之前,我們定義一個輔助函式bbox_to_rect。它將邊界框表示成matplotlib的邊界框格式。

def bbox_to_rect(bbox, color): 
    # 將邊界框(左上x, 左上y, 右下x, 右下y)格式轉換成matplotlib格式:
    # ((左上x, 左上y), 寬, 高)
    return plt.Rectangle(
        xy=
(bbox[0], bbox[1]), width=bbox[2]-bbox[0], height=bbox[3]-bbox[1], fill=False, edgecolor=color, linewidth=2)

我們將邊界框載入在影象上,可以看到目標的主要輪廓基本在框內。

fig = plt.imshow(img)
fig.axes.add_patch(bbox_to_rect(dog_bbox, 'blue'))
fig.axes.add_patch(bbox_to_rect(cat_bbox, 'red'));

在目標檢測裡不僅需要找出影象裡面所有感興趣的目標,而且要知道它們的位置。位置一般由矩形邊界框來表示。