初学JetsonTX2之部署YOLO

  本人准备使用YOLO进行人脸检测,硬件设备为Jetson TX2。查阅YOLO官网,要部署YOLO,首先要安装CUDACUDNNOPENCV,然后部署Darknet,最后部署YOLO

本文参考:
https://pjreddie.com/darknet/yolo/

https://pjreddie.com/darknet/install/

https://zhuanlan.zhihu.com/p/35630431

准备工作:

1. 安装CUDACUDNNOPENCV,由于笔者使用的设备TX2在刷机之后,自带CUDA9.0OPENCV3.3.1,并且已经装过CUDNN,可直接开始安装Darknet;若没有CUDNN,可参看:https://blog.csdn.net/dhaduce/article/details/80155121

2. 了解YOLOYOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。简单的说,就是一个字快。详细说明可参看官网:https://pjreddie.com/darknet/yolo/;还有论文:https://arxiv.org/abs/1506.02640

部署过程:

1. 部署darknet

git clone https://github.com/pjreddie/darknet.git

cd darknet

sudo gedit Makefile

修改Makefile

GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=0

ARCH= -gencode arch=compute_53,code=[sm_53,compute_53] \
      -gencode arch=compute_62,code=[sm_62,compute_62]
#      -gencode arch=compute_20,code=[sm_20,sm_21] \ This one is deprecated?
# This is what I use, uncomment if you know your arch and want to specify
# ARCH= -gencode arch=compute_52,code=compute_52
make -j4

部署成功会出现如下信息:

mkdir -p obj
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
.....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast -lm....

2. 部署YOLOv3

wget https://pjreddie.com/media/files/yolov3.weights //下载已经训练好的YOLO文件

3. 测试yolov3

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.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%

如安装了opencv会弹出图像:

 

data文件里有好多测试图片

4. data文件里有一些测试图片,可以替换测试命令中的data/dog.jpgdata/eagle.jpg

data/person.jpg
data/horses.jpg
data/scream.jpg
data/giraffe.jpg
data/kite.jpg

也可以下载jpg格式的图片进行测试

5. 调整阈值

YOLO默认的阈值为.25 可以在测试语句最后面添加 -thresh <阈值> 从而修改阈值

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh .1

使用摄像头进行实时检测

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights

笔者在进行测试时,出现如下错误:

libv4l2: error setting pixformat: Invalid argument
libv4l2: error setting pixformat: Invalid argument
libv4l2: error setting pixformat: Invalid argument
libv4l2: error setting pixformat: Invalid argument
VIDEOIO ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
Couldn't connect to webcam.

OPENCV默认采用0号摄像头,TX20号摄像头是板子上自带的板上摄像头,而我们的usb摄像头是1号,故笔者使用如下代码,解决了问题:

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -c 1//使用1号摄像头

如果上述方法不能解决问题,可以尝试如下操作:

首先检查是否安装了v4l1compat.so

dpkg -S v4l1compat.so

若没有安装,则安装;若找到该文件,则跳过安装,进行下一步

apt-cache search libv4l
sudo apt-get install libv4l-ruby1.8

然后添加环境变量

export LD_PRELOAD=/usr/lib/aarch64-linux-gnueabihf/libv4l/v4l1compat.so
export LD_PRELOAD=/usr/lib/aarch64-linux-gnueabihf/libv4l/v4l2convert.so
sudo ldconfig

猜你喜欢

转载自blog.csdn.net/dhaduce/article/details/80379792