芯查查logo
  • 数据服务
    1. 新产品
    2. 物料选型
    3. 查替代
    4. 丝印反查
    5. 查品牌
    6. PCN/PDN
    7. 查方案
    8. 查代理
    9. 数据合作
  • SaaS/方案
      SaaS产品
    1. 供应链波动监控
    2. 半导体产业链地图
    3. BOM管理
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
  • 开通会员
温柔的接触器Moly
精华 # VisionFive 2 机器视觉入门 1: 环境准备

前言

久闻VisionFive 2的大名,心向往之但是一直没有机会上手,这次有机会评测,感谢ICEasy给予的宝贵机会。闲话少叙,
VisionFive 2和树莓派,飞腾派外观相似,配置差异见下表,唯一不同的是VisionFive 2使用的是RV64处理器,与基于ARM
指令集的树莓派,飞腾派有较大的差别。
作为全球首款集成3D GPU的高性能量产RISC-V 单板,VisionFive 2搭载StarFive JH7110 64bit RV64GC处理器,最大频率1.5GHz,
这款处理器最大的亮点在于首次在RV64处理器上搭载了IMG BXE-4-32 MC1 GPU (@600MHz),支持OpenCL 3.0,OpenGL ES 3.2和Vulkan 1.2,
可以为计算机视觉、深度学习、图形渲染等应用提供充足的算力支持。
本系列文章将围绕VisionFive 2的机器视觉能力展开,和大家一起学习相关的技术,力有不逮之处,还请多多交流指教。
visionfive2.jpg

树莓派 飞腾派 VisionFive 2
SOC核心 Broadcom BCM2711@1.5GHz,4 Cores, ARM Cortex-A72 飞腾CPU@1.8GHz, 4 Cores, FTC-664(兼容ARM-V8) 惊鸿-7110 RISC-V 四核64位RV64GC@1.5GHz
RAM 2GB/ 4GB/8GB 4GB 2GB/4GB/8GB
网络 单网口/双频WIFI 双网口/双频WIFI 2 x RJ45网口
多媒体 双micros-HDMI 标准HDMI,MINI-PCIE拓展 HDMI, PCIe-2.0
外围设备 USB2.0 x 2, USB3.0 x 2 USB2.0 x 2, USB3.0 x 2 USB 3.0 x 4
电源 Type-C 5V 3A 12V-3A Type-C 5V 3A
操作系统 Raspibian(基于Debian) 飞腾(基于Debian) Debian

1. 环境准备

VisionFive 2支持多种操作系统,例如OpenWRT,Fedora,Ubuntu, Debian等,在这里本文选用官方提供的Debian12作为主开发系统。
下载系统镜像,将镜像烧录至SD卡,插卡,上电开机。

检查系统版本

$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux bookworm/sid"
NAME="Debian GNU/Linux"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
BUILD_ID=24
BUILD_DATE=T2024-05-06

检查cpu核心

$ lscpu
Architecture:          riscv64
  Byte Order:          Little Endian
CPU(s):                4
  On-line CPU(s) list: 0-3

1.1 下载交叉编译器

交叉编译器的版本视板子运行的系统为准,一般而言,如果使用官方提供的Debian12,GCC版本为12.2,GLIBCXX最高支持版本3.4.30

$ strings /lib/riscv64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29
GLIBCXX_3.4.30
GLIBCXX_DEBUG_MESSAGE_LENGTH

由于GCC版本与支持的GLIBCXX版本有关,
因此需要的下载GCC交叉编译器版本 < 12.2,在此首先从RISCV-GNU-toolchain页面
下载riscv64-glibc-ubuntu-20.04-llvm-nightly-2023.09.26-nightly.tar.gz

1.2 配置工具链

解压工具链

$ tar -xzvf riscv64-glibc-ubuntu-20.04-llvm-nightly-2023.09.26-nightly.tar.gz

将bin添加到环境变量中

$ export PATH=$PATH:${YOUR_PATH}/riscv/bin

查看交叉编译器版本

$ riscv64-unknown-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=riscv64-unknown-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/home/allwinner/Documents/riscv/bin/../libexec/gcc/riscv64-unknown-linux-gnu/12.2.0/lto-wrapper
Target: riscv64-unknown-linux-gnu
Configured with: /home/runner/work/riscv-gnu-toolchain/riscv-gnu-toolchain/gcc/configure --target=riscv64-unknown-linux-gnu --prefix=/opt/riscv --with-sysroot=/opt/riscv/sysroot --with-pkgversion= --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap --src=.././gcc --disable-multilib --with-abi=lp64d --with-arch=rv64gc --with-tune=rocket --with-isa-spec=20191213 'CFLAGS_FOR_TARGET=-O2    -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-O2    -mcmodel=medlow'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 12.2.0 ()

交叉编译器已安装完成。

2. 交叉编译 OpenCV

OpenCV:Open Source Computer Vision Library,是一个使用Apache License 2.0开源许可证的计算机视觉库。虽然官方已经提供了OpenCV-deb安装包,然而由于
版本较低,并缺少cmake配置文件,使用开发不便,在这里本文重新使用交叉工具链编译新版本的OpenCV-4.10。

  1. 设置编译器
$ export PATH=$PATH:${YOUR_PATH}/riscv/bin
$ export CC=riscv64-unknown-linux-gnu-gcc
$ export CXX=riscv64-unknown-linux-gnu-g++
  1. 获取opencv源码
$ git clone --depth=1 https://gitcode.net/mirrors/opencv/opencv.git
  1. 配置并编译
    OpenCV组件众多,然后在实际使用中我们并不会都使用,因此为了加快编译速度,取消一些组件的编译,最终的配置如下
$ cmake -Bbuild -S. \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_java=OFF \
-D BUILD_opencv_gapi=OFF \
-D BUILD_opencv_objc=OFF \
-D BUILD_opencv_js=OFF \
-D BUILD_opencv_ts=OFF \
-D BUILD_opencv_dnn=OFF \
-D BUILD_opencv_calib3d=OFF \
-D BUILD_opencv_objdetect=OFF \
-D BUILD_opencv_stitching=OFF \
-D BUILD_opencv_ml=ON \
-D BUILD_opencv_world=OFF \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=OFF \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF\
-DCMAKE_BUILD_TYPE=Release

编译安装

$ cmake --build build
$ sudo cmake --install build

将install/bin目录的opencv_version,传输到板子,运行验证,成功的话,opencv_version将在控制台打印opencv版本

$ chmod +x opencv_version
$ opencv_version
4.10.0

3. 交叉编译 MNN

MNN是阿里巴巴开发的一款速度超快的轻量级深度学习框架,支持OpenCL,Vulkan加速,可以充分发挥VisionFive 2
搭载的高性能GPU的实力。

3.1 下载MNN

使用git将MNN代码块复制到本地

$ git clone --recursive https://github.com/alibaba/MNN.git

3.2 交叉编译MNN

  1. 设置编译器
$ export PATH=$PATH:${YOUR_PATH}/riscv/bin
$ export CC=riscv64-unknown-linux-gnu-gcc
$ export CXX=riscv64-unknown-linux-gnu-g++
  1. 编译配置
    由于VisionFive 2支持OPENCL以及VULKAN,我们将MNN的OPENCL以及VULKAN支持打开。
$ cmake -Bbuild -S. \
-DMNN_SEP_BUILD=OFF \
-DMNN_BUILD_TOOLS=ON \
-DCMAKE_BUILD_TYPE=Release \
-DMNN_BUILD_SHARED_LIBS=OFF \
-DMNN_OPENCL=ON \
-DMNN_VULKAN=ON \
-DMNN_BUILD_TEST=ON\
-DMNN_BUILD_BENCHMARK=ON

-- Use Threadpool, forbid openmp
-- >>>>>>>>>>>>>
-- MNN BUILD INFO:
--      System: Linux
--      Processor: riscv64
--      Version: 2.9.3
--      Metal: OFF
--      OpenCL: ON
--      OpenGL: OFF
--      Vulkan: ON
--      ARM82: OFF
--      oneDNN: OFF
--      TensorRT: OFF
--      CoreML: OFF
--      NNAPI: OFF
--      CUDA: OFF
--      OpenMP: OFF
--      BF16: OFF
--      ThreadPool: ON
--      Hidden: TRUE
--      Build Path: /home/VisionFive/MNN-2.9.0/build
--      CUDA PROFILE: OFF
-- WIN_USE_ASM:
-- Configuring done (0.1s)
-- Generating done (0.2s)
  1. 编译
$ cmake --build build

将build目录的*.out,传输到板子,运行验证

$ chmod +x run_test.out
$ sudo ./run_test.out

MNN_test.png

验证mnn推理性能

$ chmod +x benchmark.out
$ sudo ./benchmark.out ${MODEL_PATH} 10

MNN_bench.png

MNN_vulkan.png

4. 小结

本文对VisionFive2的OpenCV以及MNN的编译移植做了初步的介绍,在接下来的文章中,将开始介绍一些深度学习模型在VisionFive2的使用。

工程附件
MNN_riscv64_OpenCL_Vulkan.rar
版块: 赛昉科技
2024/09/11 21:16
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
最新帖子
萤火工场GD32VW553-IOT测评+蓝牙串口透传树莓派pico 2测评 - 初体验【工程师经验】+ 飞线【开源】zvs142857 2.1A,3A快充 充电宝迷你UC3842 开关电源优化全解析:攻克常见难题,提升性能
热门版块
查看更多
电子元器件
汽车电子工程师论坛
工业电子专区
新手入门指南
单片机/MCU论坛
PCB设计
开源项目
电子DIY
飞腾
维修技术

183

收藏

分享

微信扫码
分享给好友

评论