使用Docker部署NCNN推理框架神经网络能够简化环境配置、提供环境隔离和一致性、实现可移植性、提高资源利用率并具备良好的可扩展性。这些好处可以加速开发和部署过程,提升系统的可靠性和稳定性。
简化环境配置:NCNN是一个基于C++的轻量级神经网络推理框架,具有高效、快速和低内存占用等特点。使用Docker可以将NCNN及其依赖项打包成一个独立的容器,避免了手动安装和配置各种依赖项的繁琐过程,减少了环境配置的难度。
环境隔离和一致性:Docker提供隔离的容器环境,每个容器都拥有独立的文件系统和运行环境。通过Docker部署NCNN神经网络模型时,可以确保每个容器中的运行环境一致,避免了不同系统或环境带来的兼容性问题,确保了结果的一致性。
可移植性:Docker容器可以在不同的平台和环境中运行,无论是本地开发环境、云服务器还是边缘设备,都能够保持一致的运行方式和结果。这样就可以方便地将开发环境中训练好的NCNN神经网络模型快速部署到生产环境中。
资源利用率高:使用Docker部署NCNN神经网络模型可以有效利用计算资源。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
训练哪都有文章详细说明,这里就不详细介绍了,重要的是导出模型文件,给下一步进行转换层ncnn。输入下面代码把pt文件导出层onnx文件格式。
python models/export.py --weights ./weights/yolov5s.pt --img 640 --batch 1
然后利用下面的完整 把onnx模型导出层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
首先,改动param里面的 reshape和permute;第二,在cpp文件的detect_yolov5函数里改load_bin load_param里你的bin和param文件名; 第三,改动detect_yolov5函数里面对应permute的三个参数跟着博客改;第四,改draw_objects里面你的classname
开eopt.param,将所有Reshape修改为0=-1,此步是为了能够动态输入
这是由于未修改cpp中ex.extract()和permute保持一致,打开模型训练的yaml文件。
根据anchors修改cpp内容,需要保持一致。
打开eopt.param,根据permute修改cpp文件
以及build文件夹下面的exmaple找到可执行文件拖去与parma文件放在一起
基于的基础镜像是ubuntu:18.04
https://blog.csdn.net/wss794/article/details/124850094
这段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的步骤,可以根据需要进行进一步修改和扩展。
1.登陆阿里云
2.找到容器镜像服务