git clone https://github.com/pjreddie/darknet
wget https://pjreddie.com/media/files/yolov3.weights
#需要网载的东西
cd darknet
sudo vim Makefile
GPU=1
CUDNN=1
NVCC=/usr/local/cuda-10.0/bin/nvcc
ifeq ($(GPU), 1)
#只修改这个下面的
COMMON+= -DGPU -I/usr/local/cuda-10.0/include/
LDFLAGS+= -L/usr/local/cuda-10.0/lib64 -lcuda -lcudart -lcublas -lcurand
之后按照博客对~/.bashrc文件添加了路径
export PATH="/usr/local/cuda-10.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH"
再回到原本的文件夹下make。make完成后,将下载好的权重文件放在darknet文件夹下,执行命令
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
#可执行文件 功能 文件夹下的cfg配置 权重文件 文件夹下的测试图片
##上述文字对应上述代码各片段的作用
使用yolov3.cfg跑代码仅在第四回程序就被杀死,内存占用过大。选用了yolov3-tiny.cfg和yolov3-tiny.weights同样可以执行上面的测试代码,执行效果如下:
因为yolov3-tiny效果其实并不太好,有其他效果很差的识别图。
下面给出yolov3-tiny的效果对比图,这些图也反映了我放弃yolov3-tiny的原因:
因此打算选用yolov4。其权重下载地址在https://drive.google.com/open?id=1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT。
不过其darknet模型yolov3不在一个git库中,从网上重新下载之后
cd darknet-master
sudo vim Makefile
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
OPENMP=1
LIBSO=1
#之后同上将一些含有cuda的改成cuda-10.0
make
同样,下载权重后,再运行
./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg
结果发现,yolov4也不能幸免,在133个进程后被杀死。还是内存不够的原因,因此采用接下来的方法。
根据其他博主的做法,创建一个swapfile。Jetson Nano只有4GB内存,不足以编译dlib。为了解决这个问题,我们将设置一个swapfile,通过调用磁盘的虚拟内存,它允许我们将磁盘空间用作额外的RAM。
运行以下命令
git clone https://github.com/JetsonHacksNano/installSwapfile
cd installSwapfile
./installSwapfile.sh
然后看到结果如下:
重启之后,再次挑战yolov4。(看这样子感觉训练没办法在Jetson nano上做了,还要在自己电脑上跑训练了,又要匹配环境⊙﹏⊙∥)再次运行结果如下:
看到这里就感慨之前yolov3-tiny的效果图了。。不能比。
同时,使用了磁盘充当内存后我也回去试了试yolov3,首先第一感觉是慢,在其12层被卡死时我选择了放弃,板子已经过热,重启之后依旧卡死(有yolov4了之后就不用再搞yolov3了,v4真香)。
安装以下内容:
sudo add-apt-repository universe
sudo add-apt-repository multiverse
sudo apt-get update
sudo apt-get install gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev
之后,修改之前Makefile的配置,将里面的OPENCV设为1,之后再make,否则下述代码运行不成功。
./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights "nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, format=NV12, framerate=30/1 ! nvvidconv flip-method=2 ! video/x-raw, width=1280, height=720, format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink"
效果图如下(摄像头清晰度过低):
最后,因网速下载过慢之类的,若有需权重文件、一些git库的,可私信联系,我整理一下放在网盘里发链接出来。