公司网站怎么申请怎么注册,wordpress 5,网站开发需要哪些工程师,wordpress建站教程视频文章目录 1. 说明2. 准备工作2.1 脚本2.2 依赖2.3 数据2.4 目录结构 3. 镜像3.1 脚本3.2 编译3.3 镜像 4. 运行4.1 vscode远程 1. 说明
这里以将onnx模型转换为rknn模型为例进行说明。这个python脚本依赖的库非常多且非常大#xff0c;并且需要一些额外的系统库依赖才能正常使… 文章目录 1. 说明2. 准备工作2.1 脚本2.2 依赖2.3 数据2.4 目录结构 3. 镜像3.1 脚本3.2 编译3.3 镜像 4. 运行4.1 vscode远程 1. 说明
这里以将onnx模型转换为rknn模型为例进行说明。这个python脚本依赖的库非常多且非常大并且需要一些额外的系统库依赖才能正常使用。
教程将以如何进行镜像拉取、脚本制作、编译脚本配置、容器打包保存和容器运行进行说明。
注意这必须在Linux下按照教程操作Windows的没有验证
2. 准备工作
首先我们需要准备一个conda环境准备rknn模型转换需要的python依赖
conda create -n rknn python3.8
conda activate rknn
pip install rknn-toolkit2然后创建一个目录开始我们的工程准备。
2.1 脚本
创建目录如onnx2rknn然后进入目录中我们写一个python脚本命名为convert.py
import argparse
from pathlib import Path
from rknn.api import RKNNdef parse_opt():parser argparse.ArgumentParser(descriptionConvert ONNX model to RKNN format)parser.add_argument(--src,typestr,defaultbest.onnx,helpPath to the ONNX model file (default: best.onnx)parser.add_argument(--plat,typestr,choices[rk3562, rk3566, rk3568, rk3588, rk3576,rk1808, rv1109, rv1126],defaultrk3588,helpTarget platform for the RKNN model)parser.add_argument(--type,typestr,choices[i8, u8, fp],defaulti8,helpData type for the model (default: fp))parser.add_argument(--dst,typestr,defaultbest.rknn,helpOutput path for the RKNN model (default: best.rknn))return parser.parse_args()def get_dataset_path():img_dir Path(./images)if not img_dir.exists():raise FileNotFoundError(fImage directory {img_dir} does not exist.)dataset_file ./datasets.txtimg_extensions [.jpg, .jpeg, .png]img_paths []for img_path in img_dir.glob(*):if img_path.suffix.lower() in img_extensions:img_name img_path.nameimg_paths.append(f./images/{img_name})if not img_paths:raise ValueError(fNo valid images found in {img_dir}.)with open(dataset_file, w) as f:for img in img_paths:f.write(f{img}\n)print(fDataset file created at: {dataset_file})return dataset_fileif __name__ __main__:print(---------- parse arguments ----------)opt parse_opt()print(---------- prepare datasets ----------)try:dataset_path get_dataset_path()except Exception as e:print(fError preparing dataset: {e})exit(1)print(---------- rknn ----------)rknn RKNN()rknn.config(mean_values[[0, 0, 0]],std_values[[255, 255, 255]],target_platformopt.plat)ret rknn.load_onnx(modelopt.src)if ret ! 0:print(Load model failed!)exit(ret)if opt.type i8:do_quant Trueelif opt.type u8:do_quant Truerknn.config(quantization_methoddynamic)else:do_quant Falseret rknn.build(do_quantizationdo_quant, datasetdataset_path)if ret ! 0:print(Build model failed!)exit(ret)ret rknn.export_rknn(opt.dst)if ret ! 0:print(Export rknn model failed!)exit(ret)# Releaserknn.release()print(fRKNN model exported to: {opt.dst})print(---------- done ----------)2.2 依赖
然后我们需要进行处理在目录下打开终端
conda activate rknn
pip freeze requirements.txt
pip download -r requirements.txt -d ./dependencies这样就可以得到所有以来的whl包了。
2.3 数据
在目录下我们创建一个images文件夹然后随便放一些可以用来进行模型量化验证的图片。
2.4 目录结构
按照如上处理之后我们的目录结构是这个样子的
./onnx2rknn/
├── convert.py
├── dependencies
├── images
└── requirements.txt3. 镜像
直接制作镜像有难度而且无法掌控大小所以我们需要一个初始镜像。由于我们使用到的rknn-toolkit2推荐使用python3.8并且我们前面创建的conda环境也是用的python3.8所以我们最好找一个对应的初始镜像。由于我们的conda环境中的python是3.8.20所以这里我们使用
docker pull python:3.8.20-slim拉取了初始镜像之后我们就可以开始自己的镜像制作了。
3.1 脚本
要制作一个我们自己的docker镜像就需要写一个Dockerfile所以我们在目录下新建一个文件名为Dockerfile目录结构如下
./onnx2rknn/
├── convert.py
├── dependencies
├── Dockerfile
├── images
└── requirements.txtDockerfile中增加如下内容
# 使用官方Python基础镜像
# 推荐slim镜像减小体积
FROM python:3.8.20-slim# ARG HTTP_PROXY
# ARG HTTPS_PROXY# 安装依赖
RUN apt-get update \apt-get install -y --no-install-recommends libgl1 libglib2.0-0 \apt-get clean \rm -rf /var/lib/apt/lists/*# 设置工作目录
WORKDIR /app# 复制python依赖并安装
COPY requirements.txt ./
COPY dependencies ./dependencies/
RUN pip install --no-cache-dir --no-index --find-links./dependencies -r requirements.txt rm -rf ./dependencies# 复制项目代码
COPY convert.py .
COPY images ./images/# 设置启动命令
# CMD [python, convert.py]
# 能够保证镜像启动之后不退出这样才能方便进行vscode连接
CMD [/bin/bash, -c, tail -f /dev/null]这些就可以实现自动在镜像中安装需要的依赖和安装刚才准备好的python依赖包然后将我们的python脚本和images文件夹拷贝进去。
3.2 编译
脚本写好了那么就可以进行docker打包也就是使用Dockerfile进行编译。在目录下打开终端
docker build -t onnx2rknn:1.0.0 .
# docker build --build-arg HTTP_PROXYhttp://10.1.41.43:7890 --build-arg HTTPS_PROXYhttp://10.1.41.43:7890 -t onnx2rknn:1.0.0 .3.3 镜像
编译完成之后我们可以使用命令查看我们的镜像了
captainubuntu2404:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
onnx2rknn 1.0.0 0d5d2f9c2a23 47 minutes ago 6.51GB
ubuntu 24.04 bf16bdcff9c9 2 weeks ago 78.1MB
hello-world latest 74cc54e27dc4 4 months ago 10.1kB
python 3.8.20-slim b5f62925bd0f 9 months ago 125MB
然后注意到这里的onnx2rknn镜像已经显示了。
那么这个时候我们如果要在其他机器上进行部署则可以通过命令保存镜像
docker save -o onnx2rknn-1.0.0.tar.gz onnx2rknn:1.0.0 然后我们可以在目录下得到onnx2rknn-1.0.0.tar.gz的镜像安装包就可以在其他机器上进行部署了。由于rknn-toolkit2依赖的东西非常多且大所以这个镜像体积也比较离谱……
在其他机器上进行部署可以使用命令
docker load -i onnx2rknn-1.0.0.tar.gz4. 运行
刚刚编译的机器上可以直接运行也可以通过命令部署之后在其他机器上运行运行的命令
docker run onnx2rknn:1.0.0然后会发现终端啥输出也没有这就正常了……
4.1 vscode远程
如果你想用docker命令来进入容器的shell环境也可以只不过命令很麻烦我也不想折腾如果有兴趣请自行google一下。这里介绍如何使用vscode进入到容器中进行开发。
首先打开vscode安装两个插件 安装这两个插件之后你就可以通过vscode看到运行中的容器了然后我们通过这里进入容器 直接点击这个箭头就可以进入容器了然后一定要打开/app文件夹这个目录才是你刚才将脚本拷贝进来的目录可以看到 然后就可以看到这里的脚本了。我们拖一个best.onnx进来 然后打开终端直接执行命令
python convert.py
然后就可以看到正常运行了最后目录下得到了best.rknn然后将其拖出来就可以正常使用了……