4.6 KiB
4.6 KiB
Darknet模型转换示例
本文档以 yolov4_tiny 为例,介绍如何使用 Netrans 对 Darknet 模型进行转换。
Netrans 支持 Darknet官网列出 darknet 模型
安装Netrans
- 先确定您的 Netrans 下载目录,使用以下命令将 Netrans 加入系统配置文件。记得使用您真实的 Netrans下载目录 替换下行命令中的文字。
export NETRANS_PATH=Netrans下载目录/bin
- 安装 netrans_py
cd netrans_py
pip3 install -e .
数据准备
转换 Darknet 模型时,模型工程目录应包含以下文件:
- .cfg 文件:网络结构配置文件
- .weights 文件:训练权重文件
- .dataset.txt:数据路径配置文件
我们的示例 已经完成数据准备,可以使用下面命令进入目录执行。
cd netrans/
cd examples/darknet
此时目录如下:
yolov4_tiny/
├── 0.jpg # 校准数据
├── dataset.txt # 指定数据地址的文件
├── yolov4_tiny.cfg # 网络结构配置文件
└── yolov4_tiny.weights # 预训练权重文件
使用 nertans_cli 命令行工具
使用 netrans_cli 之前,请先使用以下命令将 命令行脚本 拷贝至当前目录。
cp ../../netrans_cli/*sh ./
此时目录如下:
darknet/
├── export.sh
├── gen_inputmeta.sh
├── import_model.sh
├── infer.sh
├── quantize.sh
└── yolov4_tiny
├── 0.jpg
├── dataset.txt
├── yolov4_tiny.cfg
└── yolov4_tiny.weights
模型导入
./import_model.sh yolov4_tiny
该步骤会生成 .json 结尾的网络结构文件和 .data 结尾的权重数据文件。
此时 yolov4_tiny 的目录结构如下:
yolov4_tiny/
├── 0.jpg
├── dataset.txt
├── yolov4_tiny.cfg
├── yolov4_tiny.data
├── yolov4_tiny.json
└── yolov4_tiny.weights
配置文件生成
数据在推理前一般会经过预处理,为了确保模型可以正确的输入数据,需要生产对应的配置文件。
./gen_inputmeta.sh yolov4_tiny
此时 yolov4_tiny 的目录结构如下:
yolov4_tiny/
├── 0.jpg
├── dataset.txt
├── yolov4_tiny.cfg
├── yolov4_tiny.data
├── yolov4_tiny_inputmeta.yml
├── yolov4_tiny.json
└── yolov4_tiny.weights
模型量化
为了优化模型的推理效率,加快模型的推理速度,我们使用下行命令对模型进行量化处理。 量化模型需要两个参数,目录(模型)名字和量化类型。量化类型包括:float,int16, int8 和 uint8。
./quantize.sh yolov4_tiny uint8
此时 yolov4_tiny 的目录结构如下:
yolov4_tiny/
├── 0.jpg
├── dataset.txt
├── yolov4_tiny_asymmetric_affine.quantize
├── yolov4_tiny.cfg
├── yolov4_tiny.data
├── yolov4_tiny_inputmeta.yml
├── yolov4_tiny.json
└── yolov4_tiny.weights
模型导出
最后我们使用 export.sh 将模型导出到nbg格式并生成应用程序工程。量化模型需要两个参数,目录(模型)名字和量化类型。量化类型包括:float,int16, int8 和 uint8。量化类型应于 quantize.sh 使用的一致。
./export.sh yolov4_tiny uint8
此时 yolov4_tiny 的目录结构如下:
yolov4_tiny/
├── 0.jpg
├── dataset.txt
├── inputs_outputs.txt
├── yolov4_tiny_asymmetric_affine.quantize
├── yolov4_tiny.data
├── yolov4_tiny_inputmeta.yml
├── yolov4_tiny.json
├── yolov4_tiny.weights
└── wksp
└── asymmetric_affine
├── BUILD
├── dump_core_graph.json
├── graph.json
├── yolov4_tinyasymmetricaffine.2012.vcxproj
├── yolov4_tiny_asymmetric_affine.export.data
├── yolov4_tinyasymmetricaffine.vcxproj
├── main.c
├── makefile.linux
├── network_binary.nb
├── vnn_global.h
├── vnn_yolov4_tinyasymmetricaffine.c
├── vnn_yolov4_tinyasymmetricaffine.h
├── vnn_post_process.c
├── vnn_post_process.h
├── vnn_pre_process.c
└── vnn_pre_process.h
使用 netrans_py python api
本文档提供基于 python api 实现的python脚本,请先使用以下命令将 api脚本 拷贝至当前目录。
准备示例脚本
cp ../../netrans_py/example.py ./
运行示例脚本
python3 example.py yolov4_tiny -q uint8