地平线x3平台环境配置

资料获取:https://developer.horizon.ai/resource (需要注册登录)
命令参考: https://developer.horizon.ai/devManua/cn/common_doc_cn/xj3_board_command.html (查看温度,设置ip,设置频率等等)
算法部署参考: https://developer.horizon.ai/devManua/cn/source_doc/x3_ddk_user_guide.html

基于ubuntu的环境搭建

  1. 准备docker环境(如果不想使用docker 可以跳过) (我是因为自己系统环境太乱了 于是在容器里面配置环境,另外地平线提供的镜像太大了,所以也没有用地平线提供的镜像)
  • 运行容器
docker build . -t ubuntu:18.04 # 通过dockerfile 构建容器
docker run --restart=always -p 2349:22 -d -i -t  -v /home:/home  ubuntu:18.04 /bin/bash # 运行容器 
docker exec -it 2343ca7fd571 /bin/bash # 进入容器
  • 配置环境
cd /home/cc/data/cc/work/horizon_sdk
tar zxvf horizon_xj3_open_explorer_v1.8.5_20211224.tar.gz # 解压开发工具包
cd horizon_xj3_open_explorer_v1.8.5_20211224/ddk/tools/ && tar -xvf gcc_linaro_6.5.0_2018.12_x86_64_aarch64_linux_gnu.tar.xz # 解压编译工具链
sed -i '$a\export PATH=/home/cc/data/cc/work/horizon_sdk/horizon_xj3_open_explorer_v1.8.5_20211224/ddk/tools/gcc-linaro-6.5.0-2018.12-x86_64_aarch64-linux-gnu/bin:$PATH' ~/.bashrc # 将交叉编译工具链加入到环境变量中
cd /home/cc/data/cc/work/horizon_sdk/horizon_xj3_open_explorer_v1.8.5_20211224/ddk/package/host
mkdir ~/.pip && vi ~/.pip/pip.conf # 给pip 换源
python3 /home/cc/data/cc/docker_file/horizon/get-pip.py # 升级pip
cp ai_toolchain/*.whl . #准备好 依赖包
chmod +x install_ai_toolchain.sh && ./install_ai_toolchain.sh
sed -i '$a\export PATH=$HOME/.local/bin:$PATH' ~/.bashrc && source ~/.bashrc # 给模型转换工具链加入环境变量
sed -i '$a\export LC_ALL=C.UTF-8' ~/.bashrc && sed -i '$a\export LANG=C.UTF-8' ~/.bashrc && source ~/.bashrc
hb_mapper checker --model-type onnx --march bernoulli2 --model last_s.onnx # 检查模型
hb_mapper makertbin --config yolov5.yaml --model-type onnx # 模型转换

hb_mapper 使用参考: /home/cc/data/cc/work/horizon_sdk/horizon_xj3_open_explorer_v1.8.5_20211224/doc/ddk_doc/navigation/ai_toolchain/docs_cn/horizon_ai_toolchain_user_guide/chapter_3_model_conversion.html

模型转换: /home/cc/data/cc/work/horizon_sdk/horizon_xj3_open_explorer_v1.8.5_20211224/doc/ddk_doc/navigation/ai_toolchain/docs_cn/hb_mapper_sample_doc/index.html

dnn sdk: /home/cc/data/cc/work/horizon_sdk/horizon_xj3_open_explorer_v1.8.5_20211224/doc/ddk_doc/navigation/ai_toolchain/docs_cn/bpu_sdk_api_doc/index.html

附件

  • dockerfile如下:
FROM ubuntu:18.04
# 基础镜像

RUN  sed -i 's/archive.ubuntu.com/mirrors.bfsu.edu.cn/g' /etc/apt/sources.list \
 && sed -i 's/security.ubuntu.com/mirrors.bfsu.edu.cn/g' /etc/apt/sources.list
# 换源

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
 && echo 'Asia/Shanghai' >/etc/timezone
 # 设置时区

RUN apt update \
 && apt install -y wget build-essential gcc g++ gdb make vim openssh-server python3-pip libprotobuf-dev protobuf-compiler libffi-dev python-qt4 locales \
 && rm -rf /var/lib/apt/lists/*
 # 安装依赖 

RUN sed -ri 's/^#PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config && \
 sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config && sed -i '$a\sshd: ALL' /etc/hosts.allow
 # 设置 ssh 使能 root用户登录,以及允许任何ip登录

RUN service ssh start 
# 重启 ssh 服务

RUN sed -i '$a\export PATH=/home/cc/data/cc/software/cmake-3.16.0-rc1-Linux-x86_64/bin:$PATH' ~/.bashrc 
# 配置 cmake环境变量
  • pip.conf 文件如下
[global]
index-url = http://mirrors.aliyun.com/pypi/simple
[install]
trusted-host = mirrors.aliyun.com
  • 模型转换配置文件 yolov5.yaml
# 模型转化相关的参数
model_parameters:
  # Caffe浮点网络数据模型文件
  caffe_model: ''
  # Caffe网络描述文件
  prototxt: ''
  # Onnx 浮点用户模型文件
  onnx_model: 'last_s.onnx'
  # onnx_model: 'last_conv.onnx'
  # 转换的目标AI芯片架构
  march: 'bernoulli2'
  # 指定模型转换过程中是否输出各层的中间结果,如果为True,则输出所有层的中间输出结果,
  layer_out_dump: False
  # 用于设置上板模型输出的layout, 支持NHWC和NCHW, 输入None则使用模型默认格式
  output_layout: None
  # 日志文件的输出控制参数,
  # debug输出模型转换的详细信息
  # info只输出关键信息
  # warn输出警告和错误级别以上的信息
  log_level: 'debug'
  # 模型转换输出的结果的存放目录
  working_dir: 'model_output'
  # 模型转换输出的用于上板执行的模型文件的名称前缀
  output_model_file_prefix: 'yolov5s'


# 模型输入相关参数, 若输入多个节点, 则应使用';'进行分隔, 使用默认缺省设置则写None
input_parameters:
  # (可不填) 模型输入的节点名称, 此名称应与模型文件中的名称一致, 否则会报错, 不填则会使用模型文件中的节点名称
  input_name: 'input'
  # 网络实际执行时,输入给网络的数据格式,包括 nv12/rgbp/bgrp/yuv444_128/gray/featuremap,
  # 如果输入的数据为yuv444_128, 模型训练用的是bgrp,则hb_mapper将自动插入YUV到BGRP(NCHW)转化操作
  input_type_rt: 'bgr'
  input_layout_rt: 'NHWC'
  # 网络训练时输入的数据格式,可选的值为rgbp/bgrp/gray/featuremap/yuv444_128
  input_layout_train: 'NCHW'
  input_type_train: 'bgr'
  # 网络输入的预处理方法,主要有以下几种:
  # no_preprocess 不做任何操作
  # mean_file 减去从通道均值文件(mean_file)得到的均值
  # data_scale 对图像像素乘以data_scale系数
  # mean_file_and_scale 减去通道均值后再乘以scale系数
  norm_type: data_scale
  # 原始浮点模型的输入数据尺寸
  # input_shape: '1x3x224x384'
  # 预处理方法的图像减去的均值, 如果是通道均值,value之间必须用空格分隔
  # mean_value: '103.94 116.78 123.68'
  # 图像预处理缩放比例,该数值应为浮点数
  scale_value: 0.003921569

calibration_parameters:
  # 模型量化的参考图像的存放目录,图片格式支持Jpeg、Bmp等格式,输入的图片
  # 应该是使用的典型场景,一般是从测试集中选择20~50张图片,另外输入
  # 的图片要覆盖典型场景,不要是偏僻场景,如过曝光、饱和、模糊、纯黑、纯白等图片
  # 若有多个输入节点, 则应使用';'进行分隔
  cal_data_dir: './imgs'

  # 如果输入的图片文件尺寸和模型训练的尺寸不一致时,并且preprocess_on为true,
  # 则将采用默认预处理方法(opencv resize),
  # 将输入图片缩放或者裁减到指定尺寸,否则,需要用户提前把图片处理为训练时的尺寸
  preprocess_on: True
  # 模型量化的算法类型,支持kl、max
  calibration_type: 'kl'
  # 模型的量化校准方法设置为promoter,mapper会根据calibration的数据对模型进行微调从而提高精度,

# 编译器相关参数
compiler_parameters:
  # 编译策略,支持bandwidth和latency两种优化模式;
  # bandwidth以优化ddr的访问带宽为目标;
  # latency以优化推理时间为目标
  compile_mode: 'latency'
  # 设置debug为True将打开编译器的debug模式,能够输出性能仿真的相关信息,如帧率、ddr带宽占用等
  debug: True
  # 编译模型指定核数,不指定默认编译单核模型, 若编译双核模型,将下边注释打开即可
  core_num: 1
  # 优化等级可选范围为O0~O3
  # O0不做任何优化, 编译速度最快,优化程度最低,
  # O1-O3随着优化等级提高,预期编译后的模型的执行速度会更快,但是所需编译时间也会变长。
  # 推荐用O2做最快验证
  optimize_level: 'O3'
posted @ 2022-02-10 17:31  cc96  阅读(623)  评论(0编辑  收藏  举报