📒
Sophon SE3 Quickstart For Beginners
  • Sophon SE3 Quickstart For Beginners
  • SE3 (Sohpon Embedded AI Mini Box. Generation 3)
    • SE3 硬件资源及使用模型
    • SE3 应用场景
    • SE3 规格参数
    • SE3 产品特性
    • SE3 状态指示灯
    • SE3 软件功能
  • SE3 开发环境搭建
    • 设备清单
    • 开发环境搭建示图
    • SE3上电
    • 系统信息查看
    • 设备驱动加载
  • SE3 SDK(BMNNSDK2)
    • 术语说明
    • BMNNSDK版本特性
    • BMNNSDK工作流程
  • SE3实例演示
    • 算法移植概述
    • 启动开发环境Sophon docker
    • c/c++开发者
    • python开发者
    • 图形解码接口
    • 视频解码接口
  • SE3 系统升级
    • SE3 系统升级
  • 前置学习
    • linux基本知识
    • 机器学习及神经网络
    • python基本知识
    • Docker基本知识
Powered by GitBook
On this page

Was this helpful?

  1. SE3实例演示

python开发者

Sophon也封装了python API以便python开发者快速上手

  • 安装Sophon python3 library

** 安装sophon python库 **
SplitModel# pip3 install --user python3/x86/sophon-1.1.3-py3-none-any.whl
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Processing ./python3/x86/sophon-1.1.3-py3-none-any.whl
Installing collected packages: sophon
Successfully installed sophon-1.1.3
  • 下载yolov3模型

** Sophon将下载转换模型封装成Sophon utils python库 **
# cd SplitModel/bin/x86
# ./get_bmodel -h
usage: get_bmodel [-h] [--save_path SAVE_PATH] arg
Download test data, or download and convert models.
positional arguments:
  arg                   Options: model_name, 'model_list', 'test_data', 'all'
optional arguments:
  -h, --help            show this help message and exit
  --save_path SAVE_PATH
                        Save sophon test model and test data.
** 下载Yolov3测试数据和模型,编译模型测试精度 **
./get_bmodel test_data --save_path ${run_yolov3_caffe}/tmp
./get_bmodel yolov3 --save_path ${run_yolov3_caffe}/tmp
  • 使用Sophon complier编译模型

** get_bmodel 中调用bmnetc 转换caffe-yolov3模型 **
** 开发者也可以使用Sophon提供的python bmnetc API编译模型 **
bmnetc.compile(
model = "/path/to/prototxt", ## Necessary
weight = "/path/to/caffemodel", ## Necessary
outdir = "xxx", ## Necessary
target = "BM1682", ## Necessary
shapes = [[x,x,x,x], [x,x,x]], ## optional, default use shape in prototxt
net_name = "name", ## optional, default use the network name in prototxt
opt = 2, ## optional, if not set, default equal to 2
dyn = False, ## optional, if not set, default equal to False
cmp = True, ## optional, if not set, default equal to True
enable_profile = False ## optional, default equal to False
)
** 示例 **
# cat convert_bmodel.py
import bmnetc

bmnetc.compile(
  model = "./tmp/models/yolov3/yolov3.prototxt",
  weight = "./tmp/models/yolov3/yolov3.caffemodel",
  outdir = "./out/yolov3",
  target = "BM1682",
  shapes = [[1, 3, 416, 416]],
  net_name = "yolov3",
  opt = 2,
  dyn = False,
  cmp = True, 
  enable_profile = False
  ) 
# python3 convert_bmodel.py
 ............................................................
 src/subnets/bmcompiler_subnet.cpp clear 43

============================================================
*** Store bmodel of BMCompiler...
===========================================================
# ls out/yolov3
# compilation.bmodel  input_ref_data.dat  output_ref_data.dat
  • 加载Sophon bmodel

...
import sophon.sail as sail
...
net = sail.Engine(bmodel, len(bmodel), "0", sail.IOMode.SYSIO))
  • 数据预处理

...
import cv2
# open image file 
img = cv2.imread(input_path)
# resize image 
resized_image = cv2.resize(image, (new_w, new_h))
# canvas
canvas = np.full((net_w, net_h, 3), 127.5)
canvas[(net_h - new_h) // 2:(net_h - new_h) // 2 + new_h,\ 
    (net_w - new_w) // 2:(net_w - new_w) // 2 + new_w, :]\ 
    = resized_image 
# (hwc to chw, scale: 1/255)...
canvas[:, :, ::-1].transpose([2, 0, 1]) / 255.0
  • 执行Sophon Model推理

# do inference
output = net.process (graph_name, input_tensors)
  • 数据后处理

# postProcess 
# 根据指标进行预测, 参考 
# examples/SplitModel/samples/python/run_yolov3_caffe/run_yolov3.py 
bboxes, classes, probs = yolov3_postprocess(output, img, detected_size,\ 
        num_classes, threshold,\ 
        all_anchors, nms_threshold);
  • 实例演示

$ cd bmnnsdk2-bm1682_v1.1.4
$ ./docker_run_bmnnsdk.sh 
# cd scripts 
# ./intall_lib.sh nntc
# source envsetup_cmodel.sh
# cd /workspace/examples/SplitModel ** 安装sophon python库 ** 
# pip3 install --user python3/x86/sophon-1.1.3-py3-none-any.whl 
** 生成bmodel ** 
# cd samples/python/run_yolov3_caffe/ 
# ./test_yolov3_caffe.sh
** 将yolov3 python脚本拷贝到soc单板进行测试 ** 
**"YOUR_SOC_IP"字符串替换为实际的soc单板ip地址**
# scp -r /workspace/examples/SplitModel/samples/\
        python/run_yolov3_caffe linaro@YOUR_SOC_IP:~/
# exit
$ ssh linaro@YOUR_SOC_IP
** 安装 SE3 driver **
$ sudo /system/data/chdriver.sh
$ cd run_yolov3_caffe
$ python3.5 run_yolov3.py \ 
    --ir_path ./tmp/models/yolov3_ir/compilation.bmodel \
    --input_path ./tmp/data/det_coco.jpg
** 执行结果 ** 
bmcpu init: skip cpu_user_defined
open usercpu.so, init user_cpu_init
################################################################################
id:0 bbox:[96, 178, 251, 418] cls_idx: 16 prob:0.9986375570297241
id:1 bbox:[124, 88, 445, 347] cls_idx: 1 prob:0.9923182129859924
id:2 bbox:[373, 68, 538, 133] cls_idx: 7 prob:0.8461064696311951
################################################################################
Previousc/c++开发者Next图形解码接口

Last updated 5 years ago

Was this helpful?