最近導師讓跑一下yolo算法,給了我一個jetson TX2 的闆子。
内部環境: ubuntu16 + cuda-9.0 ,然後其他的都是原來學長留下來的,是以因為不懂,走了很多坑。
下面說一下 進行 YOLO 算法從 測試的過程:
1、dartnet 的架構配置(GPU)
為了好管理,我是自己在主目錄下建立了一個名字為 yolo 的檔案。然後在yolo 檔案裡打開終端:
git clone https://github.com/pjreddie/darknet.git
用于下載下傳dartnet 的架構,完成後會在 yolo 檔案夾中生成一個 dartnet 檔案夾,然後 cd 進去:
然後在 dartnet 檔案夾中找到 Makefile 檔案,使用 gedit 打開 修改如下:
GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=1
NVCC=/usr/local/cuda-9.0/bin/nvcc
ifeq ($(GPU), 1)
COMMON+= -DGPU -I/usr/local/cuda-9.0/include/
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda-9.0/lib64 -lcuda -lcudart -lcublas -lcurand
一定要主要檔案路徑,特别是 NVCC 那裡,我就是因為這裡路徑搞錯了,走了好多歪路。
完成後,在dartnet 為終端中進行
make
編譯
如果出現 image_opencv.cpp 的 檔案出的一個函數 image mat_to_image(Mat m) 中的
IplImage ipl = m
; 出現問題。這是由于 opencv 的版本為問題導緻的,
IplImage
與
mat
類型的轉換需要改成:
在進行
make
如果 dartnet 檔案中出現了 名為dartnet的執行檔案,就算編譯完成了。
下面就是下載下傳權重:
wegt https://pjreddie.com/media/file/yolov3-ting.weights
wegt https://pjreddie.com/media/file/yolov3.weights
下兩個的原因是,其中一個權重可能會在運作時出現自動 killed 的情況出現,比如我就是在使用yolov3.weights 時出現了自動 killed 退出的狀态(一般是記憶體問題),但是在使用 yolov3-ting.weights 時就是運作成功了。還有就是在使用 wegt 時會出現問題(無法解析主機位址),解決方法是:
sudo gedit /etc/reslove.conf
添加:
nameserver 8.8.8.8
nameserver 8.8.4.4
儲存退出,在繼續使用wget。
完成後,将 yolov3-ting.weights 與 yolov3.weights 都放到 dartnet 的檔案目錄下,然後執行:
./dartnet detect cfg/yolov3-ting.cfg yolov3-ting.weights data/dog.jpg
如果前面 opencv = 1 則會有圖像出來,如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjYTMfhHLlN3XnxCM38FdsYkRGZkRG9lcvx2bjxCMy8VZ6l2csUHbHRWeGdFVzZVbiZHbHRVQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL3UjYihTO5YWM3MDOjlTN5cTYzQTMkRjMyI2MiBTO3Q2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)