该项目尝试利用rknn-toolkit2提供的工具链,在x86-64
的电脑端将.pt
格式的权重文件转换为rknn
格式,以便于在Rockchip
相关NPU上进行部署。该项目所使用的车牌识别代码使用pytorch
进行编写。
-
models/
,plate_recognition/
以及utils/
文件夹,是项目辅助函数以及相关模型代码的存放目录。model/
文件夹为仿照yolov5
目标检测,改写的车牌检测部分代码。plate_recognition/
文件夹为车牌识别部分代码,依赖于前述的车牌检测。utils/
文件夹下为辅助函数。其中post_process.py
中提供了一些后处理所需要的函数。
-
fonts/
以及imgs/
中为所需的资源目录。fonts/
提供了最终标注车牌所需要的字体文件。imgs/
提供了一些照片信息以供测试。
-
weights/
下存放有plate_detect.pt
以及plate_rec_color.pth
权重文件。plate_detect.pt
为车牌检测网络的权重文件,参考了yolov5。plate_rec_color.pth
为车牌识别网络的权重文件,主要针对前一阶段检测出的车牌区域进行识别,获取车牌信息。- 本项目便是尝试将
plate_detect.pt
转换为rknn
格式进行部署。
-
checks/
中check_preds.py
主要是获得onnx
推理结果与rknn
推理结果的余弦相似度。 -
figure/
中为README.md
文件所需要的资源文件。 -
结果存放目录
preds/
以及results/
未给出,可以在执行代码前在当前路径下新建。
-
在正确安装rknn-toolkit2之后,便可以通过
python3 run_simulate.py
命令相关任务。-
应当注意
QUANTIZE_ON
参数值,以确定RKNN
模型是fp16
数据格式或者是asymmetric-int8
格式。 -
在
inference
部分,给出了对比.pt
,.onnx
以及.rknn
推理结果的代码,可根据需要进行注释或取消注释。 -
如果
export_rknn()
未被注释,则会将构建的RKNN
模型导出并保存于.rknn
文件之中。.rknn
文件路径可以通过函数的输入参数指定。 -
如果
accuracy_analysis()
未被注释,则会对量化结果进行分析,并将结果快照信息输出于snapshot/
文件中。
-
-
如果想将
plate_detect.pt
转换成plate_detect.onnx
文件,可以通过执行python3 export.py --weights ./weights/plate-detect.pt
命令完成转换。转换的结果保存于weights/
下。 -
如果想获得推理结果的余弦相似度,可以执行
python3 checks/check_preds.py
-
运行环境
- PC端:WSL on Windows 10 (Linux发行版为
Ubuntu 22.04
) - rknn所需要的python环境:参见rknn-toolkit2相关文件说明。
- PC端:WSL on Windows 10 (Linux发行版为
-
执行
rknn
转换代码,并进行仿真器推理。
- 识别结果展示 (原图,pytorch,onnx以及rknn)