linux下运行yolo,Ubuntu下CPU/GPU模式YOLOv3代码运行
YOLO是近幾年物體檢測主要算法之一,2018年已發展到YOLOv3,是目前速度最快的物體檢測算法,詳細內容可查看YOLO主頁。YOLO的主要優勢在于基于純C語言編寫的DarkNet,可查看DarkNet主頁,不需要其他依賴庫,跨平臺能力強,運行速度快,這里是下載地址。有趣的是里邊有好幾個LICENSE文件,其中LICENSE.fuck的內容是這樣的:
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
You just DO WHAT THE FUCK YOU WANT TO. 短短幾行字出現了三次“FUCK”,還出現在標題中。這是我第一次見到這樣的LICENSE文檔,估計是往github上推送時忘了刪除吧。
下面是我運行YOLOv3代碼的過程。
我的運行環境為:
Ubuntu16.04LTS
CUDA9.0
cuDNN7.0.5
AMD Ryzen 1600
NVIDIA??GTX1070
一. 使用CPU運行
這個比較簡單,在Ubuntu下載、編譯、運行非常方便,按照YOLO主頁給的提示執行就可以看到結果。
1. 下載
git clone https://github.com/pjreddie/darknet
2. 編譯
cd darknet
make
執行完命令可以看到生成了可執行文件darknet和庫文件libdarknet.a和libdarknet.so。在Ubuntu下使用makefile文件進行編譯非常方便,執行一個命即可,比在Windows安裝cygwin和GUI的CMake,使用CMake在界面方式編譯要簡單得多。
3. 下載預訓練的權重文件
wget https://pjreddie.com/media/files/yolov3.weights
在Ubuntu中下載速度很慢,要幾個小時。我打開了另一臺裝Windows的電腦,用下載神器迅雷幾分鐘就下完了,感謝國內下載完這個文件還開著電腦和迅雷的小伙伴們。然后將該文件拷貝至Ubuntu電腦上darknet目錄下。
4. 運行檢測器
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
這里的“./darknet”表示當前目錄下的darknet,這點與Windows的命令行不同。運行完可看到下面的結果,并在darknet目錄下生成了檢測結果的jpg文件。
layer? ???filters? ? size? ?? ?? ?? ???input? ?? ?? ?? ?? ? output
0 conv? ???32??3 x 3 / 1? ?416 x 416 x? ?3? ?->? ?416 x 416 x??32??0.299 BFLOPs
1 conv? ???64??3 x 3 / 2? ?416 x 416 x??32? ?->? ?208 x 208 x??64??1.595 BFLOPs
.......
105 conv? ? 255??1 x 1 / 1? ? 52 x??52 x 256? ?->? ? 52 x??52 x 255??0.353 BFLOPs
106 detection
truth_thresh: Using default '1.000000'
Loading weights from yolov3.weights...Done!
data/dog.jpg: Predicted in 0.029329 seconds.
dog: 99%
truck: 93%
bicycle: 99% 這幾步在我的電腦上執行順利,沒有出現問題。
二. 使用GPU運行
四個步驟相同,區別在于要修改Makefile文件。而且電腦要提前裝好CUDA和cuDNN,可參看
環境配置(近期實測)——Ubuntu16.04+CUDA9.0+tensorflow-gpu填坑記。 Makefile文件修改如下:
將
GPU=0
CUDNN=0
NVCC=nvcc
改為
GPU=1
CUDNN=1
NVCC=/usr/local/cuda-9.0/bin/nvcc #即改為本機CUDA安裝地址
修改完執行make提示:
include/darknet.h:16:23: fatal error: cudnn.h: 沒有那個文件或目錄
compilation terminated.
Makefile:89: recipe for target 'obj/gemm.o' failed
make: *** [obj/gemm.o] Error 1 是因為缺乏頭文件cudnn.h,需要將其復制。由于需要管理員權限,我使用命令復制。
進入所在目錄~/下載/cuda/include(下載CUDA的默認位置,可能會有不同),運行:
sudo cp cudnn.h /usr/include
然后再darknet目錄下執行make,提示
/usr/bin/ld: 找不到 -lcudnn
collect2: error: ld returned 1 exit status
Makefile:83: recipe for target 'libdarknet.so' failed
make: *** [libdarknet.so] Error 1 這是因為缺少庫文件libcudnn.so,我使用命令復制。進入所在目錄~/下載/cuda/lib64(下載CUDA的默認位置,可能會有不同),打開終端,運行
sudo cp libcudnn.so /usr/local/cuda-9.0/lib64
再在darknet目錄下執行make命令,可以看到,已生成可執行程序darkenet和庫libdarknet.o和libdarknet.so。剩余過程同上,最后也可以生成有方框標記概率的jpg文件。
總結
以上是生活随笔為你收集整理的linux下运行yolo,Ubuntu下CPU/GPU模式YOLOv3代码运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阶级固化是什么意思
- 下一篇: linux搭建Django环境,Linu