第一次打卡
第一次打卡
3.1目標檢測
3.1.1 什麼是目標檢測
目標檢測是計算機視覺中的一個重要任務,近年來傳統目標檢測方法已經難以滿足人們對目標檢測效果的要求,隨著深度學習在計算機視覺任務上取得的巨大進展,目前基於深度學習的目標檢測演算法已經成為主流。
相比較於基於深度學習的影像分類任務,目標檢測任務更具難度。
具體區別如圖3-1所示。
影像分類:只需要判斷輸入的影像中是否包含感興趣物體。
目標檢測:需要在識別出圖片中目標類別的基礎上,還要精確定位到目標的具體位置,並用外接矩形框標出。
圖3-1 分類和目標檢測任務示意圖 |
---|
3.1.2目標檢測的思路
自2012年Alex Krizhevsky憑藉Alex在ImageNet影像分類挑戰賽中拿下冠軍之後,深度學習在影像識別尤其是影像分類領域開始大放異彩,大眾的視野也重新回到深度神經網路中。緊接著,不斷有更深更復雜的網路出現,一再重新整理ImageNet影像分類比賽的記錄。
大家發現,通過合理的構造,神經網路可以用來預測各種各樣的實際問題。於是人們開始了基於CNN的目標檢測研究, 但是隨著進一步的探索大家發現,似乎CNN並不善於直接預測座標資訊。並且一幅影像中可能出現的物體個數也是不定的,模型如何構建也比較棘手。
因此,人們就想,如果知道了圖中某個位置存在物體,再將對應的區域性區域送入到分類網路中去進行判別,那我不就可以知道影像中每個物體的位置和類別了嗎?
但是,怎麼樣才能知道每個物體的位置呢?顯然我們是沒辦法知道的,但是我們可以去猜啊!所謂猜,其實就是通過滑窗的方式,羅列圖中各種可能的區域,一個個去試,分別送入到分類網路進行分類得到其類別,同時我們會對當前的邊界框進行微調,這樣對於影像中每個區域都能得到(class,x1,y1,x2,y2)五個屬性,彙總後最終就得到了圖中物體的類別和座標資訊。
總結一下我們的這種方案思路:先確立眾多候選框,再對候選框進行分類和微調。
觀察下圖2-1,更形象的理解下這種思想:
圖3-2 從分類角度去看目標檢測 |
---|
圖3-2展示了一個通過遍歷各個區域,然後逐個分類去完成目標檢測任務的過程示例。在待識別圖上預設一個框,然後逐畫素遍歷,就能得到大量候選框(這裡僅為示意圖,圖上只展示了3個框用於說明問題,具體數量由影像大小和預設框大小決定),每個框送入到分類網路分類都有一個得分(代表當前框中有一個船的置信度),那麼得分最高的就代表識別的最準確的框,其位置就是最終要檢測的目標的位置。
以上就是最初的基於深度學習的目標檢測問題解決思路,RCNN,YOLO,SSD等眾多經典網路模型都是沿著這個思路優化發展的。
本文會基於以上思路,帶領大家從0開始一步步搭建一個目標檢測模型,並完成模型的訓練測試及評價!
3.1.3
任何影像任務的訓練資料都要包括兩項,圖片和真實標籤資訊,通常叫做GT。
影像分類中,標籤資訊是類別。目標檢測的標籤資訊除了類別label以外,需要同時包含目標的位置資訊,也就是目標的外接矩形框bounding box。
用來表達bbox的格式通常有兩種,(x1, y1, x2, y2) 和 (c_x, c_y, w, h) ,如圖3-3所示:
圖3-3 目標框定義方式 |
---|
之所以使用兩種不同的目標框資訊表達格式,是因為兩種格式會分別在後續不同場景下更加便於計算。
兩種格式互相轉換的實現在utils.py中,程式碼也非常簡單:
def xy_to_cxcy(xy):
"""
Convert bounding boxes from boundary coordinates (x_min, y_min, x_max, y_max) to center-size coordinates (c_x, c_y, w, h).
:param xy: bounding boxes in boundary coordinates, a tensor of size (n_boxes, 4)
:return: bounding boxes in center-size coordinates, a tensor of size (n_boxes, 4)
"""
return torch.cat([(xy[:, 2:] + xy[:, :2]) / 2, # c_x, c_y
xy[:, 2:] - xy[:, :2]], 1) # w, h
def cxcy_to_xy(cxcy):
"""
Convert bounding boxes from center-size coordinates (c_x, c_y, w, h) to boundary coordinates (x_min, y_min, x_max, y_max).
:param cxcy: bounding boxes in center-size coordinates, a tensor of size (n_boxes, 4)
:return: bounding boxes in boundary coordinates, a tensor of size (n_boxes, 4)
"""
return torch.cat([cxcy[:, :2] - (cxcy[:, 2:] / 2), # x_min, y_min
cxcy[:, :2] + (cxcy[:, 2:] / 2)], 1) # x_max, y_max
相關文章
- 來自小白的第一次C語言打卡C語言
- 打卡打卡
- 打卡~
- 每日打卡
- 打卡7
- 打卡5
- 踩點打卡
- [打卡]7.7日
- 字串打卡[1]字串
- 20240412打卡
- 20240513打卡
- 20240423打卡
- 20240328打卡
- 20240527打卡
- 20240517打卡
- 20240518打卡
- 3.8打卡
- 20240506打卡
- 20240410打卡
- 20240403打卡
- 20240509打卡
- 5.7打卡
- 20240507打卡
- 20240402打卡
- 20240429打卡
- 20240325打卡
- 20240326打卡
- 3.18打卡
- 3.14打卡
- 每日學習打卡
- Leetcode每日打卡----20200927LeetCode
- 20241112打卡
- 20241115打卡
- 20241016打卡
- 20241017打卡
- 20241018打卡
- 20241118打卡
- 20241104打卡