前言
最近有个项目是用巻积神经网络做目标检测,一般的开发板当然是跑不动的啦,所以买了一台nuc11(猎豹峡谷),厂家直发的系统是windows10,我将其改为ubuntu系统,用docker部署yolov5,然后测试了其性能。
硬件环境:nuc 11(猎豹峡谷)
项目 | Value |
---|---|
处理器 | 11代 intel i7 |
内存 | 8G |
外存 | 128G |
ubuntu的系统安装
nuc 系统的更换已经有博客讲得很详细了,这里搬运一下,我用链接的方法是没问题的。
参考链接: https://blog.csdn.net/m0_50679156/article/details/120881016
系统备份
(备份系统是我个人习惯,以免系统崩了要重来,无此需求的可以跳过此步)
参考链接: https://zhuanlan.zhihu.com/p/51827233
因为ubuntu系统都是以文件的形式存在,所以我们直接打包根目录。系统坏掉以后解压打包的文件,覆盖掉原始文件就行。
tar打包方法:
# 备份前先切换到root用户,避免权限问题
sudo su
# 再切换到/(根目录)
cd /
# 备份系统
tar -cvpzf /media/Disk/myDisk/ubuntu_backup@`date +%Y-%m+%d`.tar.gz --exclude=/proc --exclude=/tmp --exclude=/home --exclude=/lost+found --exclude=/media --exclude=/mnt --exclude=/run /
tar命令参数:
-c: 新建一个备份文档
-v: 显示详细信息
-p: 保存权限,并应用到所有文件
-z: 用gzip压缩备份文档,减小空间
-f: 指定压缩包名称(带路径),只能做最后一个参数
–exclude: 排除指定目录,不进行备份
注意,如果没有把/home或者/boot目录单独分一个区,一定不要加–exclude=/home或–exclude=/boot参数!
文件目录介绍
/proc:一个虚拟文件系统,系统运行的每一个进程都会自动在这个目录下面创建一个进程目录。既然是系统自动创建,也就没必要备份的必要了。
/tmp:一个临时文件夹,系统的一些临时文件会放在这里。
/lost+found:系统发生错误时(比如非法关机),可以在这里找回一些丢失文件。
/media:多媒体挂载点,像u盘、移动硬盘、windons分区等都会自动挂载到这个目录下。
/mnt:临时挂载点,你可以自己挂载一些文件系统到这里。
/run:系统从启动以来产生的一些信息文件。
/home:用户家目录,存放用户个人文件和应用程序。
/boot:和系统启动相关的文件,像grub相关文件都放在这里,这个目录很重要!
为了保险起见,也可以对/home和/boot备份,但是备份频率完全没必要和/分区一样高。比如/分区每周备份一次,那/home和/boot完全可以一个月备份一次,因为这两个分区出问题的概率真的很小,而且变动也不会太频繁。
yolov5的部署
1、docker常用命令
- docker pull imagename(拉取名字为imagename的镜像)
- docker search imagename(查找dockerhub上的镜像)
- docker images(查看所有镜像)
- docker rm imagename(删除镜像)
- docker tag 860c279d2fec runoob/centos:dev(添加新标签)
- docker pull -a(查看所以容器)
- docker ps(查看正在运行的容器)
- docker run -itd -v /share:/share imageID(-it交互式 -d后台运行 -v将主机/share文件夹挂载到docker的根目录/share中,如果没有share文件夹则自动创建 imageID镜像名)
- docker start containerID(启动已停止的容器)
- docker stop containerID(停止容器)
- docker restart containerID(重启容器)
- docker exec -it containerID /bin/bash(-it交互式方式 /bin/bash进入命令行)
- docker rm -f containerID(删除停止的容器)
- docker container prune(删除所有容器)
2、安装docker
这里我直接使用脚本自动安装(太菜了手动安装玩不来)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
如果报错提示没有curl
sudo apt-get install curl
等待docker安装结束就可以,终端键入docker有提示信息代表安装成功
3、docker拉取镜像
牛顿说过:“如果说我看的比别人更远些,那是因为我站在巨人的肩膀上“。
我们直接拉取制作好的镜像,你可以在这个镜像上自行修改。拉取镜像默认你是有docker官网的账号的,没有不能拉取。放一篇注册账号的链接
参考链接: https://blog.csdn.net/debugbugbg/article/details/81865553
接下来我们拉取docker仓库里的镜像,官网有很多版本,我这里是 latest cpu 版
sudo docker pull ultralytics/yolov5:latest-cpu
其他版本的链接
链接: https://hub.docker.com/r/ultralytics/yolov5/tags
键入上面的命令后等待下载完成即可。
换源:如果网速慢受不了可以换源,我使用的是docker的国内镜像源,修改文件就行,阿里的还要注册帐号,嫌麻烦。
参考链接: https://blog.csdn.net/qq_44623314/article/details/121763336
4、docker开启容器
这里需要开启基于我们前面拉取的镜像的容器,然后让代码运行在里面,我们把主机的代码挂在到docker容器中(镜像里面自带有yolov5的代码,我改动了代码,所以需要挂载我自己的代码)
sudo docker images # 查看镜像ID
# 4a758212d5a9
sudo docker run -itd -v /share:/share 4a758212d5a9 # 开启一个容器,挂载主机文件夹share到容器的/share,执行完后此步生成一个容器
# b96858bbec5a
sudo docker exec -it b96858bbec5a /bin/bash # 进入容器
可以看到出现share文件夹,里面就是主机挂载的文件。到此,环境搭建完成,直接运行代码就行。
nuc 11 性能测试
这里主要测试yolov5各个尺寸的模型在猎豹峡谷上的运行速度。
系统:ubuntu18.04,运行环境:docker,直接上表格,表格中n/s/m分别代表模型大小为nano,small,medium
图片尺寸【320,320】下
推理方式 | 推理时间 n/s/m |
---|---|
openvino | 6 / 15 / 35 ms |
onnx | 5.6 / 13 / 37 ms |
pt | 10 / 18 / 43 ms |
图片尺寸【640,640】下
推理方式 | 推理时间 n/s/m |
---|---|
openvino | 20 / 55 / 130 ms |
onnx | 27.5 / 68 / 164 ms |
pt | 26 / 91 / 154 ms |
总结
1、更换了nuc 11的系统为ubuntu
2、安装docker,在docker上搭建代码环境
3、测试了yolov5各尺寸的模型在nuc 11上的性能
引用
https://blog.csdn.net/m0_50679156/article/details/120881016
https://zhuanlan.zhihu.com/p/51827233
https://blog.csdn.net/debugbugbg/article/details/81865553
https://hub.docker.com/r/ultralytics/yolov5/tags
https://blog.csdn.net/qq_44623314/article/details/121763336