一、个人电脑或服务器安装Vitis-AI docker镜像
- 确保已经安装了docker环境,并安装docker镜像
docker pull xilinx/vitis-ai-cpu:latest
- 下载Vitis-AI仓库
git clone --recurse-submodules https://github.com/Xilinx/Vitis-AI
cd Vitis-AI
- 启动Vitis-AI docker镜像
./docker_run.sh xilinx/vitis-ai-cpu:latest
二、darknet模型转为caffe模型
以下二 三 四步操作都在Vitis-AI docker镜像中完成
- 激活conda环境
conda activate vitis-ai-caffe
- 使用工具进行转换
python /opt/vitis_ai/conda/envs/vitis-ai-caffe/bin/convert.py /path/to/yolov3-voc.cfg /path/to/yolov3-voc.weights /path/to/yolov3.prototxt /path/to/yolov3.caffemodel #prototxt和caffemodel为生成的文件
三、caffe模型量化
- 修改生成的
yolov3.prototxt
文件,将文件头部修改为如下
name: "Darkent2Caffe"
#input: "data"
#input_dim: 1
#input_dim: 3
#input_dim: 416
#input_dim: 416
layer {
name: "data"
type: "ImageData"
top: "data"
top: "label"
include {
phase: TRAIN
}
image_data_param {
root_folder: "/workspace/quImg/"
source: "/workspace/q.txt"
batch_size: 1
shuffle: false
}
transform_param {
mirror: false
yolo_width: 416
yolo_height: 416
}
}
其中root_folder
是图片的文件夹,source
中的q.txt
中是具体图片的名字。
q.txt
中内容如下:
64_01_20210428111258426_1-7265.jpg 0
64_01_20210429011105543_19-6710.jpg 1
64_01_20210429011105543_23-3593.jpg 1
64_01_20210427115650449_3-2244.jpg 0
64_01_20210429011105543_20-4260.jpg 1
该步骤解释:量化时要准备多张训练时的样本图片,这些样本图片对量化后的检测准确率有很大提升。(一类200张)
- 使用vai_q_caffe进行量化
vai_q_caffe quantize -model yolov3.prototxt -keep_fixed_neuron -calib_iter 20 -weights yolov3.caffemodel -output_dir yolov3_quantized/ -method 1
编译成功之后,在yolov3_quantized
文件夹下有四个文件:
- deploy.caffemodel
- deploy.prototxt 前两个都是后续编译需要的模型,无法被caffe所读取
- quantize_train_test.caffemodel
- quantize_train_test.prototxt 这两个文件是量化过后的caffe模型,可以用作测试和迁移训练
四、模型编译
将caffemodel转换为DPU可以运行的模型
ARCH=/opt/vitis_ai/compiler/arch/DPUCZDX8G/ZCU104/arch.json; #不同开发板设置不同json
vai_c_caffe --prototxt yolov3_quantized/deploy.prototxt --caffemodel yolov3_quantized/deploy.caffemodel --arch ${ARCH} --output_dir yolov3_compiled/ --net_name dpu_yolov3_voc --options "{'mode':'normal','save_kernel':''}";
运行完成后,可以在yolov3_compiled
文件夹下生成dpu_yolov3_voc.xmodel
,拷贝到zcu104开发板即可。