1. 拉取ubuntu24.04镜像

(base) PS D:\modelzoo\ubuntu24.04_docker>
(base) PS D:\modelzoo\ubuntu24.04_docker>
(base) PS D:\modelzoo\ubuntu24.04_docker>
(base) PS D:\modelzoo\ubuntu24.04_docker> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
(base) PS D:\modelzoo\ubuntu24.04_docker> docker images
                                                                                                    i Info →   U  In Use
IMAGE   ID             DISK USAGE   CONTENT SIZE   EXTRA
(base) PS D:\modelzoo\ubuntu24.04_docker> docker pull ubuntu:24.04
24.04: Pulling from library/ubuntu
b40150c1c271: Pull complete
92842f25412d: Download complete
Digest: sha256:c4a8d5503dfb2a3eb8ab5f807da5bc69a85730fb49b5cfca2330194ebcc41c7b
Status: Downloaded newer image for ubuntu:24.04
docker.io/library/ubuntu:24.04
(base) PS D:\modelzoo\ubuntu24.04_docker> docker images
                                                                                                    i Info →   U  In Use
IMAGE          ID             DISK USAGE   CONTENT SIZE   EXTRA
ubuntu:24.04   c4a8d5503dfb        119MB         31.7MB
(base) PS D:\modelzoo\ubuntu24.04_docker> docker run -it --name ubuntu24.04 -v D:\modelzoo\ubuntu24.04_docker:/mnt/docker_data ubuntu:24.04 /bin/bash
root@176938fbbb43:/# cd /mnt/docker_data/
root@176938fbbb43:/mnt/docker_data# ls

2. 安装相关依赖环境

  1. 创建arm64.list文件,内容如下:
deb [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ noble main restricted universe multiverse
# deb-src [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ noble main main restricted universe multiverse
deb [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ noble-updates main restricted universe multiverse
# deb-src [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ noble-updates main restricted universe multiverse
deb [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ noble-backports main restricted universe multiverse
# deb-src [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ noble-backports main restricted universe multiverse
deb [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ noble-security main restricted universe multiverse
# deb-src [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ noble-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ noble-proposed main restricted universe multiverse
# deb-src [arch=arm64] https://mirrors.ustc.edu.cn/ubuntu-ports/ noble-proposed main restricted universe multiverse
  1. 复制arm64.list文件至当前目录
root@176938fbbb43:/mnt/docker_data# ls
arm64.list
root@176938fbbb43:/mnt/docker_data# cp ./arm64.list /etc/apt/sources.list.d/
root@176938fbbb43:/mnt/docker_data# dpkg --add-architecture arm64
root@176938fbbb43:/mnt/docker_data# dpkg --print-foreign-architectures
arm64
root@176938fbbb43:/mnt/docker_data#
  1. 创建ubuntu.sources文件,内容如下:
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.

## Ubuntu distribution repository
##
## The following settings can be adjusted to configure which packages to use from Ubuntu.
## Mirror your choices (except for URIs and Suites) in the security section below to
## ensure timely security updates.
##
## Types: Append deb-src to enable the fetching of source package.
## URIs: A URL to the repository (you may add multiple URLs)
## Suites: The following additional suites can be configured
##   <name>-updates   - Major bug fix updates produced after the final release of the
##                      distribution.
##   <name>-backports - software from this repository may not have been tested as
##                      extensively as that contained in the main release, although it includes
##                      newer versions of some applications which may provide useful features.
##                      Also, please note that software in backports WILL NOT receive any review
##                      or updates from the Ubuntu security team.
## Components: Aside from main, the following components can be added to the list
##   restricted  - Software that may not be under a free license, or protected by patents.
##   universe    - Community maintained packages. Software in this repository receives maintenance
##                 from volunteers in the Ubuntu community, or a 10 year security maintenance
##                 commitment from Canonical when an Ubuntu Pro subscription is attached.
##   multiverse  - Community maintained of restricted. Software from this repository is
##                 ENTIRELY UNSUPPORTED by the Ubuntu team, and may not be under a free
##                 licence. Please satisfy yourself as to your rights to use the software.
##                 Also, please note that software in multiverse WILL NOT receive any
##                 review or updates from the Ubuntu security team.
##
## See the sources.list(5) manual page for further settings.
Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main universe restricted multiverse
Architectures: amd64,i386
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

## Ubuntu security updates. Aside from URIs and Suites,
## this should mirror your choices in the previous section.
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main universe restricted multiverse
Architectures: amd64,i386
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
  1. 将ubuntu.sources复制至当前目录:
root@176938fbbb43:/mnt/docker_data# ls
arm64.list  ubuntu.sources
root@176938fbbb43:/mnt/docker_data# cp ./ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources
root@176938fbbb43:/mnt/docker_data# apt update
Ign:1 https://mirrors.ustc.edu.cn/ubuntu-ports noble InRelease
Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Get:3 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
Get:4 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Packages [34.2 kB]
Get:5 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Ign:6 https://mirrors.ustc.edu.cn/ubuntu-ports noble-updates InRelease
  1. 安装libdw-dev…
root@176938fbbb43:/mnt/docker_data# apt install -y libdw-dev libdw-dev:arm64
root@176938fbbb43:/mnt/docker_data# dpkg -l | grep libdw
ii  libdw-dev:amd64             0.190-1.1ubuntu0.1           amd64        libdw1t64 development libraries and header files
ii  libdw-dev:arm64             0.190-1.1ubuntu0.1           arm64        libdw1t64 development libraries and header files
ii  libdw1t64:amd64             0.190-1.1ubuntu0.1           amd64        library that provides access to the DWARF debug information
ii  libdw1t64:arm64             0.190-1.1ubuntu0.1           arm64        library that provides access to the DWARF debug information
root@176938fbbb43:/mnt/docker_data#
  1. 安装build-essential…
root@176938fbbb43:/mnt/docker_data# apt install -y build-essential
  1. 安装gcc-14和g+±14…
root@176938fbbb43:/mnt/docker_data# apt install -y gcc-14 g++-14 libstdc++-14-dev
  1. 设置gcc和g++的默认版本为14.2.0
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 100 \
--slave /usr/bin/g++ g++ /usr/bin/g++-14 \
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-14 \
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-14 \
--slave /usr/bin/gcov gcov /usr/bin/gcov-14
  1. 验证gcc版本
root@176938fbbb43:/mnt/docker_data# gcc --version
gcc (Ubuntu 14.2.0-4ubuntu2~24.04.1) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  1. 安装cmake
apt install -y cmake
  1. 安装ninja
apt install -y ninja-build
  1. 安装交叉编译器
apt install -y gcc-14-aarch64-linux-gnu g++-14-aarch64-linux-gnu
  1. 设置交叉编译器的默认版本
update-alternatives --install /usr/bin/aarch64-linux-gnu-gcc aarch64-linux-gnu-gcc /usr/bin/aarch64-linux-gnu-gcc-14 90 \
--slave /usr/bin/aarch64-linux-gnu-g++ aarch64-linux-gnu-g++ /usr/bin/aarch64-linux-gnu-g++-14 \
--slave /usr/bin/aarch64-linux-gnu-gcc-ar aarch64-linux-gnu-gcc-ar /usr/bin/aarch64-linux-gnu-gcc-ar-14 \
--slave /usr/bin/aarch64-linux-gnu-gcc-ranlib aarch64-linux-gnu-gcc-ranlib /usr/bin/aarch64-linux-gnu-gcc-ranlib-14 \
--slave /usr/bin/aarch64-linux-gnu-gcov aarch64-linux-gnu-gcov /usr/bin/aarch64-linux-gnu-gcov-14
  1. 安装交叉编译python3.12
apt install -y libpython3.12-dev:arm64

3. 导出容器镜像

root@176938fbbb43:/mnt/docker_data# exit
exit
(base) PS D:\modelzoo\ubuntu24.04_docker> docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED       STATUS       PORTS     NAMES
176938fbbb43   ubuntu:24.04   "/bin/bash"   3 hours ago   Up 2 hours             ubuntu24.04
(base) PS D:\modelzoo\ubuntu24.04_docker> docker start ubuntu24.04
ubuntu24.04
(base) PS D:\modelzoo\ubuntu24.04_docker> docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED       STATUS       PORTS     NAMES
176938fbbb43   ubuntu:24.04   "/bin/bash"   3 hours ago   Up 2 hours             ubuntu24.04
(base) PS D:\modelzoo\ubuntu24.04_docker> docker export -o D:\modelzoo\ubuntu24.04_docker\ubuntu2404_container.tar ubuntu24.04

4. 加载容器镜像

(base) PS D:\modelzoo\ubuntu24.04_docker> docker import ubuntu2404_container.tar ubuntu24.04:imported
sha256:ccb4b94bde006b794386e9868175b128fc714e277ecbbb9796585696a06a9be1
(base) PS D:\modelzoo\ubuntu24.04_docker> docker images
                                                                                                                                           i Info →   U  In Use
IMAGE                  ID             DISK USAGE   CONTENT SIZE   EXTRA
ubuntu24.04:imported   ccb4b94bde00       1.75GB          483MB
(base) PS D:\modelzoo\ubuntu24.04_docker> docker run -it --name ubuntu2404_container -v D:\modelzoo:/mnt/docker_data ubuntu24.04:imported /bin/bash
root@0f8eba6c86da:/# cd /mnt/docker_data/
root@0f8eba6c86da:/mnt/docker_data#

5. 安装ICraft相关环境

root@0f8eba6c86da:/mnt/docker_data# dpkg -i Icraft_3.37.0_onchip.deb
Selecting previously unselected package icraft:arm64.
(Reading database ... 24480 files and directories currently installed.)
Preparing to unpack Icraft_3.37.0_onchip.deb ...
Unpacking icraft:arm64 (3.37.0) ...
Setting up icraft:arm64 (3.37.0) ...
root@0f8eba6c86da:/mnt/docker_data# dpkg -i IcraftMdzThirdParty.deb
Selecting previously unselected package icraftmdzthirdparty:arm64.
(Reading database ... 24982 files and directories currently installed.)
Preparing to unpack IcraftMdzThirdParty.deb ...
Unpacking icraftmdzthirdparty:arm64 (0.1.1) ...
Setting up icraftmdzthirdparty:arm64 (0.1.1) ...
root@0f8eba6c86da:/mnt/docker_data#

6. 交叉编译runtime app

root@0f8eba6c86da:/mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/build_arm# cmake -DLINUX_AARCH64=ON ..
LINUX_AARCH64 Value: ON
-- The CXX compiler identification is GNU 14.2.0
-- The C compiler identification is GNU 14.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Found OpenCV: /ModelzooDeps/aarch64/Static (found version "4.5.5")
-- Configuring done (0.9s)
-- Generating done (0.0s)
-- Build files have been written to: /mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/build_arm
root@0f8eba6c86da:/mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/build_arm# make -j
[ 50%] Building CXX object CMakeFiles/yolov5s_psin.dir/src/yolov5s_psin.cpp.o
In file included from /mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/./modelzoo_utils/modelzoo_utils.hpp:4,
                 from /mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/src/postprocess_yolov5.hpp:6,
                 from /mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/src/yolov5s_psin.cpp:11:
/mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/./modelzoo_utils/PicPre.hpp: In member function 'virtual std::pair<float, float> PicPre::getResizedRatio()':
/mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/./modelzoo_utils/PicPre.hpp:204:9: note: parameter passing for argument of type 'std::pair<float, float>' when C++17 is enabled changed to match C++14 in GCC 10.1
  204 |         {
      |         ^
In file included from /mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/src/yolov5s_psin.cpp:12:
/mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/./modelzoo_utils/icraft_utils.hpp: In function 'std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> > getJrPath(const std::string&, const std::string&, std::string&)':
/mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/./modelzoo_utils/icraft_utils.hpp:304:1: warning: control reaches end of non-void function [-Wreturn-type]
  304 | }
      | ^
[100%] Linking CXX executable yolov5s_psin
[100%] Built target yolov5s_psin
root@0f8eba6c86da:/mnt/docker_data/yolov5_7.0_WL/yolov5_7.0_icraft/3_deploy/build_arm#

7. 400TAI开发板板载系统安装ICraft和第3方库

root@U:/home/work# dpkg -l | grep icraft
root@U:/home/work# dpkg -i Icraft_3.37.0_onchip.deb
Selecting previously unselected package icraft.
(Reading database ... 79551 files and directories currently installed.)
Preparing to unpack Icraft_3.37.0_onchip.deb ...
Unpacking icraft (3.37.0) ...
Setting up icraft (3.37.0) ...
root@U:/home/work# dpkg -i IcraftMdzThirdParty.deb
Selecting previously unselected package icraftmdzthirdparty.
(Reading database ... 80053 files and directories currently installed.)
Preparing to unpack IcraftMdzThirdParty.deb ...
Unpacking icraftmdzthirdparty (0.1.1) ...
Setting up icraftmdzthirdparty (0.1.1) ...
root@U:/home/work# dpkg -l | grep icraft
ii  icraft                                 3.37.0                                   arm64        This is Icraft for arm64
ii  icraftmdzthirdparty                    0.1.1                                    arm64        This is IcraftMdzThirdParty for arm64
root@U:/home/work#

8. 运行yolov5_psin示例工程

root@U:/home/work/3_deploy/build_arm# chmod 777 *
root@U:/home/work/3_deploy/build_arm#
root@U:/home/work/3_deploy/build_arm#
root@U:/home/work/3_deploy/build_arm# ./yolov5s_psin ../cfg/yolov5s_WL_int8_demo.yaml
[2026-02-08 23:29:03.224] [info] Found model file at:../imodel/WL/int8/yolov5s_WL.json
[2026-02-08 23:29:03.789] [info] NetInfo init done
[02/08/26 23:29:03.901] [I] Device initialization successful, version information:
[02/08/26 23:29:03.901] [I]     device: WOLONG170.FMSHTECH.ZNJSYJS - 20240703
[02/08/26 23:29:03.901] [I]     icore: FMSHZGV3TECH-AID - 24160628
[02/08/26 23:29:03.901] [I] Device Protocol: axi
[02/08/26 23:29:03.901] [I] Device Name: wl170
[02/08/26 23:29:03.901] [I] Device Parameters:
1/1 [=========================] 100%
./logs/is not exist, create new one !

Total_TotalTime: 0 ms, Total_MemcpyTime : 0.06577 ms, Total_HardTime : 7.0471683 ms, Total_OtherTime : 0 ms .
Hardop_TotalTime: 0 ms, Hardop_MemcpyTime: 0 ms,Hardop_HardTime : 3.9019523 ms.
IO_TotalTime: 0 ms, IO_MemcpyTime : 0.06577 ms, IO_HardTime : 3.1452162 ms, IO_OtherTime : 0 ms .
******************************************************
统计分析结果如下(The analysis results are as follows):
数据传入耗时(Data input time consumption):
Time(ms):0.06577     Device:cdma
数据处理耗时(Data process time consumption):
Time(ms):-0.06577     Device:npu
网络主体耗时(Network Backbone time-consuming):
Time(ms):0     Device:npu
cpu算子耗时(CPU operator time consumption):
Time(ms):0     Device:Null
******************************************************
PSIN模式主要用于部署调试、对齐精度等,用户仅需关注以下耗时即可,其余耗时大部分情况可以在实际的数据通路中被优化:
Hardop_HardTime(ms): 3.90195
******************************************************
For details about running time meassage of the network, check the yolov5s_time.txt in path: ./logs/
root@U:/home/work/3_deploy/build_arm#

更多推荐