Caffe(10) 實現YOLOv1目標檢測

2021-08-28 02:15:22 字數 3231 閱讀 9430

yolov1核心思想:從r-cnn到fast r-cnn一直採用的思路是proposal+分類(proposal提供位置資訊。分類提供類別資訊),精度高,但速度不行。

yolov1更為直接一點,直接在輸出層回歸bounding box的位置和其所屬類別,整張圖作為網路的輸入,把object detection的問題轉換成乙個regression問題。

演算法原理

1、一副圖分為77=49的網格

2、每個格仔**:2個框(每個有1個置信度和x、y、w、h4個位置資訊)和1個類別資訊,每個格仔有classes+num(1+4)=13個引數(以3類別的目標檢測來說)。

3、那麼一張圖**:7713=637個引數,77*2=98個框

置信度定義

1、當回歸出來的box中有物體中心時,pr(object)=1,confidence=iou

2、當回歸出來的box中無物體中心時,pr(object)=0,confidence=0

注:這也意味著網路已經為我們**出到底哪些位置上存在目標。

yolov1存在的缺陷

1、yolov1對相互靠的很近的物體(挨在一起,且物體中心都落在同一網格),還有很小的群體,檢測效果不好,因為乙個網格中只**2個框,並且只有1個類別。

2、測試影象中,當同一類物體出現不常見的寬高比和其它情況時,泛化能力偏弱。

3、由於損失函式本身的問題,定位誤差是影響檢測效果的主要原因,對於小目標的處理上還有待加強。

lmdb + 標籤 hdf5

hdf5不支援的預處理,lmdb支援

name: "yolov1_gesture_recognition"

layer

data_param

transform_param

}layer

hdf5_data_param

}

1.轉為lmdb
img_9852.jpg 0

在將轉換為lmdb時,必須給定標籤,但這個標籤我們不使用,後面要用hdf5格式的標籤,所以全部指定為0。

轉換時,需要resize為448*448。指令碼會根據清單txt檔案呼叫caffe介面轉換生成lmdb格式檔案。

2.資料box標註資訊的格式轉換

yolo需要的標註資訊為:x y w h

x,y代表所**出來的box的中心點,且是相對於單個網格,而不是整個

w,h是相對於整個

我們的標註資訊為:x1 y1 x2 y2 # 通過標註工具標註的到的voc格式資料就是這樣的排布

使用指令碼create_caffeyolo_lmdb_and_hdf5.py,完成voc到yolo-hdf5格式的轉換。

具體計算方式

center_x = (x1 + x2) / (2 * im_w)

center_y = (y1 + y2) / (2 * im_h)

# 但是實際上,我們需要的是相對於網格的歸一化,需要再處理

center_x即為佔整個邊長的比例,當前分成了11份,center_x * 11即為所佔網格,取小數部分記為佔當前網格的比例。

x = center_x * 11 - int(center_x * 11)

y = center_y * 11 - int(center_y * 11)

(2)求出標註框的w、h相對於的歸一化

w = (x2 - x1) / im_w

h = (y2 - y1) / im_h

(3)定位當前是哪乙個網格

詳見鏈結

caffe(11)–yolov1的detection層實現

leaky啟用函式是relu的變體,**實現可參考caffe中relu層的實現。

在caffe中的新增方法與2種新增detect_layer相同。

在準備好訓練及測試資料,caffe新增新層並編譯通過後,準備模型訓練相關檔案。

在caffe根目錄下examples中新建yolov1_gesture資料夾,並將前面專備好的兩個lmdb資料夾和hdf5資料夾複製過來。

yolov1_gesture_train_val.prototxt# 模型結構檔案

yolov1_gesture_solver.prototxt# 超引數配置檔案

train_yolov1_gesture.sh# 訓練指令碼

其中yolov1_hdf5_trainyolov1_hdf5_train資料夾中儲存了兩個檔案:

yolov1_train_label.txt中寫的是.h5檔案的絕對路徑,在prototxt檔案中需要些txt的路徑,而不是直接給.h檔案的路徑。

caffe根目錄下執行命令:

./examples/yolov1_gesture/train_yolov1_gesture.sh
指令碼內容如下

YOLOv1解讀筆記

當前最好系統相比,yolo目標區域定位誤差更大,但是背景 的假陽性優於當前最好的方法.注1 bounding box是怎麼來的呢?其實是在檢測每個grid cell時,若檢測到目標,則會將其標出來 圖中的紅色框 這就是bounding box。注2 設定多個anchor boxes幹嘛呢?是這樣的,...

YOLOv1學習筆記

大部分內容 補充 核心思想 rcnn系列核心思想是proposal 建議區域 分類 yolo系列核心思想是直接在輸出層回歸bounding box位置和bounding box的所屬類別 大致流程 resize resize成448 448,分割成7 7網格的cell cnn提取特徵和 卷積負責提取...

02 手動實現yolov1

後續改進 yolov1 流程圖 假設輸入影象 1,3,448,448 backbone net 1,2048,7,7 1,b 1 4 c,7,7 則有 s 7,取b 2,以pascal voc資料為例有20個類別,則c 20 1,b 1 4 c,7,7 1,30,7,7 這30列的具體意義,如下圖所...