在docker容器中部署yolov5(基于ncnn神经网络推理框架)


前言

使用Docker部署NCNN推理框架神经网络能够简化环境配置、提供环境隔离和一致性、实现可移植性、提高资源利用率并具备良好的可扩展性。这些好处可以加速开发和部署过程,提升系统的可靠性和稳定性。
简化环境配置:NCNN是一个基于C++的轻量级神经网络推理框架,具有高效、快速和低内存占用等特点。使用Docker可以将NCNN及其依赖项打包成一个独立的容器,避免了手动安装和配置各种依赖项的繁琐过程,减少了环境配置的难度。

环境隔离和一致性:Docker提供隔离的容器环境,每个容器都拥有独立的文件系统和运行环境。通过Docker部署NCNN神经网络模型时,可以确保每个容器中的运行环境一致,避免了不同系统或环境带来的兼容性问题,确保了结果的一致性。

可移植性:Docker容器可以在不同的平台和环境中运行,无论是本地开发环境、云服务器还是边缘设备,都能够保持一致的运行方式和结果。这样就可以方便地将开发环境中训练好的NCNN神经网络模型快速部署到生产环境中。

资源利用率高:使用Docker部署NCNN神经网络模型可以有效利用计算资源。Docker容器可以在宿主机上共享资源,多个容器可以并行运行,提高整体的计算效率,节省硬件资源的开销。

一、docker的安装与配置

在安装 Docker 之前,首先确保您的系统已更新至最新版本。打开终端,并以管理员身份执行以下命令:

sudo apt update
sudo apt upgrade

在终端中执行以下命令来安装 Docker:

sudo apt install docker.io

启动 Docker 服务:安装完成后,执行以下命令来启动 Docker 服务并将其设置为开机自启动:

sudo systemctl start docker
sudo systemctl enable docker

执行以下命令来验证 Docker 是否正确安装并能正常工作:

docker --version

二、yolov5模型训练以及转换

1、训练

训练哪都有文章详细说明,这里就不详细介绍了,重要的是导出模型文件,给下一步进行转换层ncnn。输入下面代码把pt文件导出层onnx文件格式。

 python models/export.py --weights ./weights/yolov5s.pt --img 640 --batch 1

2、转换

然后利用下面的完整 把onnx模型导出层ncnn模型
模型转换网站

三、NCNN部署

1、NCNN 环境配置

ncnn环境搭建

# 准备基础环境
sudo apt install build-essential libopencv-dev cmake

# 编译安装protobuf依赖库
git clone https://github.com/protocolbuffers/protobuf.git  # 安装源文件
cd protobuf
git submodule update --init --recursive  # clone子模块的依赖
./autogen.sh  # 执行自动生成的shell脚本
./configure  # 配置文件shell脚本
make  # 编译
make install  # 编译安装
sudo ldconfig  # 刷新

编译安装好后,可以查看下 protobuf 的版本
在这里插入图片描述
编译ncnn

git clone https://github.com/Tencent/ncnn.git
cd ncnn
mkdir build
cd build
cmake ..
make
make install

2、部署

首先,改动param里面的 reshape和permute;第二,在cpp文件的detect_yolov5函数里改load_bin load_param里你的bin和param文件名; 第三,改动detect_yolov5函数里面对应permute的三个参数跟着博客改;第四,改draw_objects里面你的classname

1、修改param

开eopt.param,将所有Reshape修改为0=-1,此步是为了能够动态输入

在这里插入图片描述

修改draw_objects分类数以及detect_yolov5 参数

这是由于未修改cpp中ex.extract()和permute保持一致,打开模型训练的yaml文件。在这里插入图片描述
根据anchors修改cpp内容,需要保持一致。在这里插入图片描述
在这里插入图片描述
打开eopt.param,根据permute修改cpp文件在这里插入图片描述
在这里插入图片描述

修改CMakeLists.txt在这里插入图片描述

build生成

以及build文件夹下面的exmaple找到可执行文件拖去与parma文件放在一起

四、编写dockerfile文件

基于的基础镜像是ubuntu:18.04

1、opencv安装

https://blog.csdn.net/wss794/article/details/124850094

五、镜像制作与推送至阿里云

1、容器制作成镜像

这段Dockerfile是一个用于构建容器的配置文件,主要用于在Ubuntu 18.04上设置基本环境和安装OpenCV和ncnn。以下是每个步骤的解释:

FROM ubuntu:18.04

指定使用Ubuntu 18.04作为基础镜像。

WORKDIR /app
COPY . /app

将当前目录下的所有文件复制到容器的/app目录中。

RUN apt-get update
RUN apt-get install sudo g++ cmake make wget unzip vim -y

更新软件包列表并安装一些基本的开发工具、工具和依赖项。

RUN sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev -y && \
    sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev -y && \
    sudo apt install libpng-dev libopenexr-dev libtiff-dev libwebp-dev -y && \
    wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip && \
    unzip opencv.zip && \
    mv opencv-master opencv

安装构建OpenCV所需的依赖项和下载OpenCV源代码。

RUN cd opencv && \
    mkdir build && \
    cd build && \
    sudo cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D WITH_FFMPEG=ON .. && \
    sudo make -j8 && \
    sudo make install

opencv目录中创建一个build目录,进入该目录并使用CMake配置、编译和安装OpenCV。

RUN cd /app/ncnn/build && \
    rm -rf ./* && \
    cmake .. && \
    make && \
    cd examples/ && \
    cp yolov5_lite_mask /app/mask_s/ && \
    cd /app/mask_s/

/app/ncnn/build目录下进行编译ncnn,并将编译生成的yolov5_lite_mask二进制文件复制到/app/mask_s/目录下。

#    RUN apt-get install libopencv-dev -y
#    RUN g++ main.cpp -o main $(pkg-config opencv --cflags --libs)
CMD ["./app/mask_s/a"]

这部分被注释掉的代码是给出了运行容器时的一些示例命令,你可以根据需要取消注释并进行修改。不过,当前的CMD命令是运行/app/mask_s/a二进制文件。

这个Dockerfile提供了搭建基本环境和编译安装OpenCV、ncnn的步骤,可以根据需要进行进一步修改和扩展。

2、镜像推送到远端阿里云

1.登陆阿里云

2.找到容器镜像服务

3.创建命名空间
在这里插入图片描述
4.点击进去,案件文档说明执在这里插入图片描述
6 push 后就可以在镜像版本查看到在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值