1. 程式人生 > >YOLO演算法之YAD2K配置教程

YOLO演算法之YAD2K配置教程

YOLO演算法之YAD2K配置教程

**總結:遇到缺少檔案的問題,通常是因為庫之間的版本更新問題,解決辦法通常是閱讀錯誤原因,修改原始碼(增刪改缺失的函式/屬性)。
配置yad2k是個坑,一定要注意版本相容問題!!!**
注:在使用預訓練的YOLOv2模型時,一定要注意變數的形狀

YOLO演算法
YOLO是一種高準確性、實時的目標檢測演算法。核心思想是取物件的中點,將物件分配給包含中點的格子。優點是神經網路可以輸出精確的邊界框。只要網格取得夠精細,那麼多個物件的中點落在同一個格子的概率就會很小。
優點:
(1) 顯式地精確輸出邊界框座標,邊界框可以具有任意寬高比,不會受到滑動視窗分類器的步長限制。
(2) 單次卷積實現,有大量可以共享的計算步驟,因此演算法效率很高,執行速度非常快,可以達到實時識別。
(3)目標檢測(非極大值抑制)和分類(藉助於anchor box)可以在一個模型中實現

缺點:
需要大量的訓練樣本,計算量巨大,因此常常在預訓練的模型上進行微調。

演算法細節:
(1) only look once指的是,只需要對圖片執行一次前向傳播,就能預測。通過非極大值抑制,YOLO演算法對每個物件只檢測一次,輸出識別到的物件及其邊界框。
(2) non-max suppression 確保演算法對每個物件只檢測一次。如果同時檢測多個物件,那麼就對每個輸出類別分別執行non-max suppression。
(3) anchor box 是為了處理兩個物件出現在同一個格子的情況,實際上這種情況很少發生。人們一般手動指定 anchor box的形狀和個數(~5-10個)。後期的YOLO演算法採取更高階的方法———k-means對不同物件進行聚類,來自動選擇anchor box。

YOLO需要在一大堆已經標記號邊界框的大型資料集上訓練,因此訓練時間非常長。這裡用的是一個預訓練的YOLO模型,從YOLO官網下載的 YOLO v2。
在學習吳恩達老師的深度學習-車輛檢測的課程中遇到了yolo.h5 load失敗的問題,需要手動下載權重和配置,然後用 yad2k 手動將模型轉換為 yolo.h5。
YOLO模型轉換成 yolo.h5 的方式有兩種:[https://www.jianshu.com/p/3e77cefeb49b]
(1) 利用pjreddie的Darknet框架:“Darknet is an open source neural network framework written in C and CUDA. It is fast, easy to install, and supports CPU and GPU computation.” [

https://github.com/pjreddie/darknet]
(2) 利用Allan Zelener 基於TensorFlow和Keras編寫的 yad2k檔案。這個檔案實現的是 YOLOv2,即 YOLO9000。
本文使用第二種方式,因為懶得搭建新的框架。

YAD2K: Yet Another Darknet 2 Keras
YAD2K author: Allan Zelener
You only look once, but you reimplement neural nets over and over again.
YAD2K is a 90% Keras/10% Tensorflow implementation of YOLO_v2.
Original paper: YOLO9000: Better, Faster, Stronger by Joseph Redmond and Ali Farhadi.

YAD2K搭建過程
具體操作如下:
1. prepare the environment:先下載好 numpy、h5py、pillow,配置好 tensorflow 和 keras。因為YAD2K是基於 tensorflow 和 keras的 YOLO_v2實現。
pip install numpy h5py pillow
pip install tensorflow-gpu # CPU-only: conda install -c conda-forge tensorflow
pip install keras # Possibly older release: conda install keras
2. 開啟Anaconda prompt download yad2k.git by https://github.com/allanzelener/YAD2K 在目標資料夾空白處,右鍵選擇 “Git Bash Here”,開啟 Bash 命令列,然後輸入以下指令: git clone https://github.com/allanzelener/yad2k.git
3. 下載cfg檔案 在 darknet 的 github[https://github.com/pjreddie/darknet ]下載darknet程式碼,獲得cfg檔案
然後將 darknet/cfg/yolov2.cfg 複製到目錄yad2k下
4. 在YOLO官網下載YOLOv2的 weights 檔案: https://pjreddie.com/darknet/yolov2/ 。其實已經有 YOLOv3,但是v3轉換有問題,所以這裡用了v2。將weight檔案拷貝到目錄yad2k下。
5. 轉換檔案遇到檔案缺失問題:
AttributeError: module ‘tensorflow.python.ops.nn’ has no attribute ‘leaky_relu’

這裡寫圖片描述

這裡寫圖片描述

6.暴力解決tf缺少LeakyReLU的問題 (https://blog.csdn.net/qq_35978947/article/details/79908091)
這裡寫圖片描述

7.最後安裝成功

這裡寫圖片描述

**總結:遇到缺少檔案的問題,通常是因為庫之間的版本更新問題,解決辦法通常是閱讀錯誤原因,修改原始碼(增刪改缺失的函式/屬性)。
配置yad2k是個坑,一定要注意版本相容問題!!!**

注:在使用預訓練的YOLOv2模型時,一定要注意變數的形狀,例如:

由於求出的 yolo_outputs 的形狀與 yolo_eval 方法中要求的 yolo_outputs 不一致,因此需要將 yolo_outputs 轉換成合適的形狀,再傳入 yolo_eval 方法中。

這裡寫圖片描述