1. 程式人生 > >滴,技術貼~~~基於keras的yolov3的應用(非訓練篇)

滴,技術貼~~~基於keras的yolov3的應用(非訓練篇)

我覺得最最最重要的是一定不要偷懶!

一定要用python3,一定要用python3,一定要用python3。

一定要基於python3,這是我的親身體驗,淚的教訓~~~基於python2.7跑基於keras的yolo3,到input image filename ,一直報錯,百度了各種錯誤,都沒解決,到現在也不知道該如何解決。這個問題卡了3小時,然後我就換成python3運行了,根本沒出錯,奧,我的天,兩分鐘的事兒,非要用3小時來明白。還偷懶麼~~~哭泣

1  基於darknet

這個實現起來比較容易,但是測試圖片時速度比較慢,可能我電腦配置不行,然後大概一張圖片30s的樣子。

這個博主寫的特別好,直接甩連結。基於darknet的yolov3安裝  這個跑到2.2.2都沒出錯。

終端命令

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
或者
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg

放一張我實現的圖片~

 2.基於keras的yolo3網路

yoloV3主頁:https://pjreddie.com/darknet/yolo/

keras-yolo3程式碼:

https://github.com/qqwweee/keras-yolo3

1 安裝tensorflow,安裝keras。(詳細步驟百度吧,不推薦偷懶安裝法)

偷懶安裝法不可取。

安裝我就直接 在終端

sudo pip3 tensorflow

sudo pip3 keras
//有速度比較快的安裝命令,在我的另一篇博文中有提到。

這裡是用了源的,把命令列的最後 opencv-python 分別換成 tensorflow和keras就行。

2 下載權重引數,官網下載引數

或者直接在終端輸入

wget https://pjreddie.com/media/files/yolov3.weights

3 下載keras-yolov3

4 將第二步下載好的權重引數yolov3.weights放入到第三步下載的keras-yolov包中。

5 將.weights轉換為.h5檔案,輸入命令

python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

在model_data資料夾中得到yolo.h5。

6.這樣就可以對自己的圖片 或視訊進行測試啦。

圖片測試,需要將yolo_video裡的第50行,把Faulse改成True。

輸入命令

python yolo_video.py

ps 帶python的命令得再.py檔案所在路徑中進行,找到檔案所在位置,右擊,open in the terminal。

因為在終端裡預設是用的python2.7,所以,出錯了。

然後,在輸入時應該加上'   ',也就是'timg.jpeg' 這個問題解決了,但是會一直出另一個錯,不知道怎麼解決。

ValueError: height and width must be > 0(這個錯誤沒有百度到答案,花費了3小時,請各位道友繞坑而行,如果解決了,麻煩告訴我一下)

正確方式:然後我就在pycharm裡,執行yolo_video.py。把編譯器換成了python3。成功!

在這裡注意的是,輸入時只需要輸入   timg.jpeg   就行,不用加'  '。

得到圖片效果:(測試這張圖片運行了4.29s)

這個圖片好搞笑,明明是四隻狗狗,愣是給識別出來了3只鳥。哈哈哈。

這個圖片效果還不錯~~~美滋滋~~~

視訊:(ps這個視訊我只是把方法放上了,還沒有試錯,因為opencv加視訊也容易因為格式問題什麼的出錯,手邊沒有.avi格式視訊,等我試成功,我會再編輯)

就把第50行,True改成False,預設就是False。

在終端執行命令:(或者直接在yolo_video.py 把視訊預設路經改成自己視訊路經,用pycharm python3 執行)

python yolo_video.py [video_path] [output_path(optional)]

錯誤總結:(在python2.7遇到的,也羅列一下,這裡是解決了的問題)

1  問題如圖:

解決辦法:在最上方加入  

from _future_ import print_function

2 問題如圖:unicode argument expected ,got 'str'

解決辦法:

在游標所在處把StringIo 換成 BytesIo

不要問我為什麼,我也不知道~~~