NCNN框架在嵌入式设备上的交叉编译实战:以Jetson Nano为例

《腾讯NCNN框架的模型转换x86/君正MIPS嵌入式编译及量化推理》详细教程 上面我们编译的时候打开了-DNCNN_BUILD_EXAMPLES=ON,所以这里就用编译好的例子试一下,由于squeezenet提供了权重文件,所以直接测这个。如果我们直接从onnx转换到ncnn的模型经常会出现不兼容不能完全转换的情况,所以我们这边直接使用pnnx来进行模型转换。可以看到linear层的推理结果输出了,选最大的一个index就是分类结果,至此,x86上全部的推理工作就做好了。这边的param就是模型的结构描述文件,bin是模型的具体权重。编译好的ncnn(看第一步) 阅读详情

NCNN框架在嵌入式设备上的交叉编译实战:以Jetson Nano为例

在边缘计算和嵌入式AI应用日益普及的今天,将深度学习模型高效部署到资源受限的设备上,是许多开发者面临的核心挑战。NVIDIA Jetson Nano作为一款性能与功耗平衡出色的嵌入式开发板,凭借其ARM架构的CPU和集成的GPU,成为了众多AI项目的首选平台。然而,直接在Jetson Nano上编译复杂的深度学习推理框架,如腾讯开源的NCNN,往往会遇到编译耗时过长、内存不足等问题。这时,交叉编译技术便成为了提升开发效率、实现快速迭代的关键手段。

交叉编译的本质是在一台性能更强的宿主机(通常是x86_64架构的PC)上,为目标设备(如ARM架构的Jetson Nano)生成可执行程序。这个过程不仅节省了目标设备宝贵的计算资源,还能利用宿主机更快的CPU和更大的内存,显著缩短编译时间。对于NCNN这样依赖OpenCV、Protobuf等多个库的框架,在宿主机上一次性配置好交叉编译环境,后续的模型部署和测试将变得异常顺畅。本文将带你从零开始,一步步构建一个针对Jetson Nano的NCNN交叉编译环境,涵盖工具链配置、依赖库编译、框架优化选项设置,直至最终的部署与性能验证。无论你是正在为嵌入式设备寻找轻量级推理方案的工程师,还是希望将AI模型落地到实际硬件的爱好者,这篇实战指南都将提供清晰的路径和可复现的操作细节。

1. 交叉编译环境搭建:宿主机与目标设备准备

进行交叉编译的第一步,是明确并准备好宿主机和目标设备两端的环境。宿主机我们选择一台运行Ubuntu 22.04 LTS的x86_64电脑,它拥有完整的开发工具链和充足的磁盘空间。目标设备则是Jetson Nano,它运行着基于ARM架构的Ubuntu系统。两者之间需要通过网络(SSH)保持连接,以便传输编译好的库文件和测试程序。

在宿主机上,我们首先需要安装基础的编译工具和CMake。虽然许多教程会建议安装build-essential,但对于交叉编译,我们更关注于获取目标架构的特定工具链。NVIDIA为Jetson系列提供了名为L4T (Linux for Tegra) 的BSP(板级支持包),其中包含了针对其ARM处理器的交叉编译工具链。最直接的方式是从NVIDIA开发者网站下载与你的Jetson Nano系统版本对应的L4T工具链。例如,对于JetPack 4.6版本,对应的L4T版本是R32.6.1。

# 假设你已经下载了名为gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz的工具链
# 将其解压到/opt目录下
sudo tar -xJf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz -C /opt

接下来,需要将工具链的二进制文件路径添加到系统的PATH环境变量中,并设置相关的环境变量,以便后续的CMake能够识别。

# 编辑你的shell配置文件,例如 ~/.bashrc
echo 'export PATH=/opt/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin:$PATH' >> ~/.bashrc
echo 'export CROSS_COMPILE=aarch64-linux-gnu-' >> ~/.bashrc
echo 'export CC=aarch64-linux-gnu-gcc' >> ~/.bashrc
echo 'export CXX=aarch64-linux-gnu-g++' >> ~/.bashrc
source ~/.bashrc

完成上述步骤后,你可以在终端输入aarch64-linux-gnu-gcc --version来验证工具链是否安装成功。同时,别忘了在宿主机上安装CMake的较新版本(至少3.10以上),因为NCNN的构建脚本会用到一些较新的特性。

注意:不同版本的JetPack对应的L4T工具链可能不同,务必确保宿主机工具链的Glibc版本不高于目标设备系统的Glibc版本,否则编译出的程序可能在目标设备上无法运行。一个简单的检查方法是分别在宿主机(查看工具链中的libc.so)和目标设备(运行ldd --version)上查看Glibc版本。

另一方面,目标设备Jetson Nano也需要进行一些基础准备。首先,确保系统已更新,并安装一些运行时可能需要的库。通过SSH连接到Jetson Nano,执行以下命令:

sudo apt update
sudo apt upgrade -y
# 安装一些基础库,例如OpenCV的运行库(如果打算使用OpenCV后端)、Vulkan驱动等
sudo apt install -y libopencv-dev libvulkan1 mesa-vulkan-drivers

为了后续性能测试方便,建议在Jetson Nano上安装一些性能监控工具,如tegrastats(通常已预装)、htop等。至此,交叉编译的舞台已经搭好,接下来我们将进入具体的依赖库编译环节。

2. 依赖库的交叉编译:Protobuf与OpenCV

NCNN框架的正常运行依赖于几个关键的第三方库,其中最主要的是Protocol Buffers (Protobuf) 和OpenCV。Protobuf用于解析模型文件(如ONNX格式),而OpenCV则为NCNN的示例程序提供了图像加载和显示功能。我们需要在宿主机上,使用交叉编译工具链,为ARM架构的Jetson Nano编译这些库。

2.1 交叉编译Protobuf

Protobuf的交叉编译相对直接。首先从GitHub仓库下载稳定版本的源码(例如3.20.3),解压后进入目录。由于我们需要交叉编译,不能直接使用默认的./configure脚本,而是要通过CMake来配置。

# 下载并解压protobuf源码
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.20.3/protobuf-cpp-3.20.3.tar.gz
tar -xzf protobuf-cpp-3.20.3.tar.gz
cd protobuf-3.20.3

创建一个用于交叉编译的构建目录,并使用CMake进行配置。关键的CMake选项是指定交叉编译工具链文件,但这里我们更直接地通过定义CMAKE_C_COMPILER和CMAKE_CXX_COMPILER来指定编译器。

mkdir build-aarch64 && cd build-aarch64
cmake .. \
    -DCMAKE_SYSTEM_NAME=Linux \
    -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
    -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
    -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
    -DCMAKE_INSTALL_PREFIX=/path/to/your/cross/install/dir/protobuf \
    -DBUILD_SHARED_LIBS=OFF \
    -Dprotobuf_BUILD_TESTS=OFF

这里有几个要点:

  • CMAKE_SYSTEM_NAME和CMAKE_SYSTEM_PROCESSOR告知CMake我们正在为Linux ARM64系统编译。
  • CMAKE_C_COMPILER和CMAKE_CXX_COMPILER直接指向我们之前安装的交叉编译器。
  • CMAKE_INSTALL_PREFIX指定了编译产物的安装路径。建议设置一个独立的目录(如~/jetson_nano_sysroot),用于集中存放所有交叉编译好的库,方便管理。
  • BUILD_SHARED_LIBS=OFF选择编译静态库。在嵌入式环境中,使用静态库可以避免目标设备上动态库依赖的麻烦,但会增大最终可执行文件的体积。你可以根据需求选择。

配置完成后,进行编译和安装:

make -j$(nproc)
make install

编译完成后,检查安装目录下的lib文件夹,应该能看到libprotobuf.a等静态库文件,以及include文件夹中的头文件。

2.2 交叉编译OpenCV

OpenCV的交叉编译过程比Protobuf稍复杂,因为它包含更多的模块和可选的依赖(如GTK、FFmpeg等)。为了简化,我们只编译核心模块,并禁用一些在嵌入式设备上可能不需要的功能(如GUI相关的highgui模块,除非你确定需要)。

首先,下载OpenCV源码(例如4.8.0版本)及其扩展模块opencv_contrib(如果需要额外的算法模块)。

git clone --branch 4.8.0 https://github.com/opencv/opencv.git
git clone --branch 4.8.0 https://github.com/opencv/opencv_contrib.git

创建构建目录并进入。OpenCV的CMake配置提供了专门用于交叉编译的工具链文件模板,但我们可以手动指定编译器。一个更重要的步骤是指定目标系统的根文件系统(sysroot)。虽然对于Jetson Nano,很多基础库(如libc)与宿主机工具链兼容,但指定sysroot可以让CMake更准确地找到目标系统的头文件和库。我们可以从Jetson Nano上复制一份根文件系统到宿主机,或者直接使用工具链自带的sysroot(如果工具链包内包含)。

假设我们有一个sysroot目录位于/opt/sysroot-jetson,CMake命令如下:

cd opencv
mkdir build-aarch64 && cd build-aarch64
cmake .. \
    -DCMAKE_SYSTEM_NAME=Linux \
    -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
    -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
    -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
    -DCMAKE_INSTALL_PREFIX=/path/to/your/cross/install/dir/opencv \
    -DCMAKE_PREFIX_PATH=/path/to/your/cross/install/dir/protobuf \ # 如果OpenCV需要protobuf(如DNN模块)
    -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
    -DBUILD_opencv_world=OFF \
    -DBUILD_SHARED_LIBS=OFF \
    -DBUILD_TESTS=OFF \
    -DBUILD_PERF_TESTS=OFF \
    -DBUILD_EXAMPLES=OFF \
    -DWITH_GTK=OFF \
    -DWITH_GTK_2_X=OFF \
    -DWITH_WEBP=OFF \
    -DWITH_JPEG=ON \
    -DWITH_PNG=ON \
    -DWITH_TIFF=OFF \
    -DENABLE_NEON=ON \ # 启用ARM NEON指令集优化
    -DENABLE_VFPV3=ON \
    -DCPU_BASELINE=NEON \
    -DBUILD_LIST=core,imgproc,imgcodecs,dnn \ # 只编译必要的模块
    -DCMAKE_FIND_ROOT_PATH=/opt/sysroot-jetson \
    -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
    -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
    -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
    -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY

这个配置做了大量精简,只保留了核心、图像处理、图像编解码和DNN模块,并关闭了测试和示例以加快编译。ENABLE_NEON和CPU_BASELINE的设置为ARM架构启用了关键的SIMD指令优化,这对性能至关重要。

提示:如果编译过程中遇到关于protobuf的错误(例如Protobuf_LIBRARY未找到),这通常是因为CMake在sysroot或默认路径中找不到我们刚刚编译的protobuf库。确保CMAKE_PREFIX_PATH正确指向了protobuf的安装目录,并且该目录下有lib/cmake/protobuf或类似的CMake配置文件。

配置成功后,同样使用make -j$(nproc)和make install进行编译和安装。OpenCV的编译耗时较长,请耐心等待。完成后,你的交叉编译库目录中应该就有了OpenCV的库和头文件。

3. NCNN框架的交叉编译与优化选项配置

当Protobuf和OpenCV这两个主要依赖就绪后,我们就可以开始交叉编译NCNN本身了。NCNN的CMake构建系统对交叉编译支持良好,提供了清晰的工具链文件示例。我们的目标是编译一个针对Jetson Nano优化、并尽可能启用其硬件特性(如GPU加速)的版本。

首先,克隆NCNN的官方仓库并更新子模块:

git clone https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init

NCNN源码的toolchains目录下已经包含了许多预定义的工具链文件,例如aarch64-linux-gnu.toolchain.cmake。我们可以直接使用它,或者基于它进行修改。查看该文件内容,会发现它已经设置了交叉编译器、目标系统等基本变量。我们创建一个构建目录,并使用这个工具链文件。

mkdir build-aarch64 && cd build-aarch64
cmake .. \
    -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake \
    -DCMAKE_INSTALL_PREFIX=/path/to/your/cross/install/dir/ncnn \
    -DCMAKE_BUILD_TYPE=Release \
    -DNCNN_BUILD_EXAMPLES=ON \
    -DNCNN_BUILD_TOOLS=ON \
    -DNCNN_VULKAN=ON \
    -DNCNN_SYSTEM_GLSLANG=OFF \
    -DVulkan_INCLUDE_DIR=/path/to/vulkan/headers \
    -DVulkan_LIBRARY=/path/to/vulkan/lib \
    -DProtobuf_INCLUDE_DIR=/path/to/your/cross/install/dir/protobuf/include \
    -DProtobuf_LIBRARIES=/path/to/your/cross/install/dir/protobuf/lib/libprotobuf.a \
    -DOpenCV_DIR=/path/to/your/cross/install/dir/opencv/lib/cmake/opencv4

让我们逐一解析这些关键选项:

  • CMAKE_TOOLCHAIN_FILE:这是交叉编译的“钥匙”,它告诉CMake所有关于目标平台、编译器、链接器的信息。
  • CMAKE_BUILD_TYPE=Release:启用编译器优化,生成性能最优的版本。
  • NCNN_BUILD_EXAMPLES和NCNN_BUILD_TOOLS:建议开启。示例程序(如nanodet、squeezenet)是验证编译是否成功的最佳方式;工具(如ncnnoptimize、模型转换工具)在后续模型部署中非常有用。
  • NCNN_VULKAN=ON:这是为Jetson Nano启用GPU加速的关键。Jetson Nano的GPU支持Vulkan API,开启此选项可以让NCNN利用GPU进行神经网络算子的计算,极大提升推理速度。
  • NCNN_SYSTEM_GLSLANG=OFF:GLSLang是Vulkan着色器编译器。由于我们是在交叉编译,通常选择让NCNN使用其内置的(bundled)GLSLang,避免再去交叉编译这个复杂的依赖。
  • Vulkan_INCLUDE_DIR和Vulkan_LIBRARY:需要指定Vulkan SDK的头文件和库路径。对于Jetson Nano,Vulkan驱动和头文件通常已经安装在目标系统上。但交叉编译时,我们需要在宿主机上有对应的ARM架构的Vulkan开发包。一个可行的方法是从Jetson Nano上复制/usr/include/vulkan和/usr/lib/aarch64-linux-gnu/libvulkan.so等文件到宿主机的sysroot中,然后在此处指向sysroot中的路径。
  • Protobuf_INCLUDE_DIR和Protobuf_LIBRARIES:指向我们之前交叉编译好的Protobuf。
  • OpenCV_DIR:指向交叉编译好的OpenCV的CMake配置目录,这样NCNN的CMake就能找到OpenCV。

配置过程中可能会遇到各种错误,最常见的是找不到Vulkan或Protobuf。请仔细检查路径是否正确,以及对应的库文件是否是为ARM架构编译的。配置成功后,运行编译:

make -j$(nproc)
make install

编译完成后,在安装目录(/path/to/your/cross/install/dir/ncnn)下,你会看到bin、lib、include等文件夹。其中lib文件夹里的libncnn.a(静态库)或libncnn.so(动态库)就是我们最终需要的核心文件。

为了验证编译出的库是否真的是ARM架构,可以使用file命令检查:

file /path/to/your/cross/install/dir/ncnn/lib/libncnn.a
# 输出应包含“ELF 64-bit LSB relocatable, ARM aarch64”字样

4. 部署、测试与性能验证

编译产出物需要被部署到Jetson Nano上才能运行。我们将编译好的NCNN库、工具、示例程序,以及其依赖的OpenCV和Protobuf库(如果使用动态链接)一起打包,传输到Jetson Nano。

一个简单的部署方式是,在宿主机上将整个安装目录打包,然后通过SCP传输到Jetson Nano:

# 在宿主机上
tar -czf ncnn_jetson.tar.gz -C /path/to/your/cross/install/dir .
scp ncnn_jetson.tar.gz username@jetson-nano-ip:/home/username/

在Jetson Nano上解压,并设置环境变量,让系统能够找到这些库:

# 在Jetson Nano上
tar -xzf ncnn_jetson.tar.gz
export LD_LIBRARY_PATH=/home/username/ncnn_jetson/lib:$LD_LIBRARY_PATH
export PATH=/home/username/ncnn_jetson/bin:$PATH

现在,可以运行NCNN自带的示例程序进行测试。我们以经典的图像分类模型SqueezeNet为例:

cd /home/username/ncnn_jetson
# 确保有测试图片和模型文件,可以从ncnn源码的examples目录获取
cp -r /path/to/ncnn-source/examples/* .
./squeezenet test-image.jpg

如果一切顺利,你将看到终端输出图像分类的top-5类别及置信度。这证明NCNN库、模型和依赖库都正常工作。

接下来是激动人心的性能测试环节。我们需要对比CPU推理和启用Vulkan的GPU推理之间的性能差异。NCNN的benchncnn工具是进行基准测试的利器。但首先,我们需要为Jetson Nano交叉编译这个工具(在之前的步骤中,如果开启了NCNN_BUILD_BENCHMARK,它应该已经被编译了)。将其传输到Jetson Nano并运行:

./benchncnn [循环次数] [线程数] [是否使用GPU] [模型列表]

例如,测试MobileNetV2在4线程CPU和GPU上的性能:

# CPU测试(4线程)
./benchncnn 20 4 0 mobilenetv2
# GPU测试(Vulkan)
./benchncnn 20 4 1 mobilenetv2

测试结果会输出每层网络的平均耗时、总耗时、以及整体帧率(FPS)。根据我的实测,在Jetson Nano上,对于合适的模型,启用Vulkan后推理速度可以有数倍甚至一个数量级的提升。当然,具体提升幅度取决于模型结构和算子对GPU的友好程度。

除了基准测试,在实际应用中还需要关注内存占用和功耗。使用tegrastats工具可以监控Jetson Nano的CPU/GPU/内存使用率以及功耗情况。在运行你的AI应用时,观察这些指标,确保它们在设备的设计约束之内。

最后,将你的应用与NCNN库链接。如果你使用CMake管理项目,可以编写如下的CMakeLists.txt,它需要正确找到我们部署在Jetson Nano上的NCNN和OpenCV。

cmake_minimum_required(VERSION 3.10)
project(my_ncnn_app)

set(CMAKE_CXX_STANDARD 11)

# 设置NCNN和OpenCV的路径
set(ncnn_DIR "/home/username/ncnn_jetson/lib/cmake/ncnn")
set(OpenCV_DIR "/home/username/ncnn_jetson/lib/cmake/opencv4")

find_package(ncnn REQUIRED)
find_package(OpenCV REQUIRED)

add_executable(my_app main.cpp)
target_link_libraries(my_app ncnn ${OpenCV_LIBS})

在开发过程中,你可能会遇到一些陷阱。例如,模型转换问题(确保使用正确的ncnnoptimize工具处理你的模型)、内存对齐问题(ARM架构对内存访问有对齐要求,NCNN已内部处理)、或者多线程性能调优(通过set_cpu_powersave、set_omp_num_threads等API调整)。多查阅NCNN的GitHub Wiki和Issues,社区通常已经有了解决方案。

NCNN在arm linux平台上交叉编译 NCNN是腾迅公司为手机开发的高性能神经网络前向计算框架。不使用GPU,跨平台好,小巧,占资源少,在嵌入式领域有着广泛的应用,我开发ADAS车门预警用到了NCNN 阅读详情

相关推荐

NCNN在Jetson Nano上的YOLO目标检测部署实战

神经网络推理框架是边缘计算中的核心技术,通过优化计算图和内存管理实现高效推理。NCNN作为腾讯开源的轻量级推理框架,采用层融合和内存池等技术,显著提升了ARM架构设备的推理性能。在Jetson Nano等边缘设备上,结合CUDA加速和模型量化技术,可以实现接近实时的目标检测。本文以YOLOv5模型为例,详细介绍了从模型转换、编译优化到部署落地的完整流程,特别针对内存受限场景提供了多种优化方案,最终在Jetson Nano上实现了15FPS的稳定检测性能。

weixin_34075268的博客 356

rv1109/rv1126平台ncnn在linux上的交叉编译

然后返回ncnn目录,输入命令。

gggi520的博客 817

Linux嵌入式AI部署实战:从模型优化到边缘设备推理全流程

边缘计算与嵌入式AI是当前物联网和智能设备领域的关键技术方向,其核心原理在于将AI模型的推理能力从云端下沉至资源受限的终端设备。这项技术的核心价值在于实现低延迟、高隐私的本地实时智能处理,无需依赖网络,显著降低了带宽成本和云端依赖。在应用场景上,它广泛适用于智能家居、工业视觉质检、安防监控以及各类需要离线运行的嵌入式系统。要实现这一目标,关键在于模型轻量化与框架适配。以TensorFlow Lite和ONNX Runtime为代表的轻量级推理框架,通过模型量化、剪枝等技术,大幅压缩了模型体积与计算量,使其能

weixin_33912638的博客 581

学习笔记|如何移植NCNN

今天,让我们一同跟随共创社团队的步伐,揭秘他们如何进行NCNN的交叉编译,并在ELF 1开发板上演绎实践,以此验证模型推理性能。通过这次实践,共创社不仅展示了NCNN在嵌入式设备上的灵活性与强大性能,还向我们揭示了深度学习嵌入式技术落地的无限可能,更激励着每一位嵌入式探索者:无论面对何种挑战,只要勇于探索、精于实践,便能在嵌入式技术的海洋中乘风破浪,开辟出一片属于自己的天地。1、从GitHub下载NCNN源码:https://github.com/Tencent/ncnn。

ElfBoard的博客 481

边缘AI部署实战:从模型评估到STM32、Docker落地全解析

人工智能模型从云端训练到边缘设备部署,面临着模型压缩、推理加速和资源受限等核心挑战。其技术原理涉及模型量化、剪枝、知识蒸馏等优化方法,以及TensorFlow Lite、ONNX Runtime等推理框架的适配。这些技术的价值在于打通AI落地的“最后一公里”,使智能算法能在嵌入式设备、物联网终端等边缘场景中实时、高效、低功耗地运行。无论是STM32微控制器上的轻量级模型部署,还是通过Docker容器化在边缘服务器(如飞牛NAS)上灵活集成AI服务,都离不开一套涵盖模型评估、优化与硬件适配的系统工程方法。本文

weixin_33895695的博客 427

开源离线中文语音识别实战:从FunASR、Whisper到嵌入式部署全解析

语音识别(ASR)作为人工智能的核心技术之一,其核心原理是将声音信号转化为对应的文本信息。这一过程通常涉及声学模型、语言模型和解码器协同工作,通过深度学习技术从海量数据中学习声音与文字之间的映射关系。其技术价值在于实现了人机交互的自然化与智能化,极大地提升了信息录入与处理的效率。在应用场景上,离线语音识别因其具备隐私安全、低延迟和成本可控的优势,在智能家居、工业质检、嵌入式设备及边缘计算等领域需求迫切。本文聚焦于开源离线中文ASR的工程实践,深入剖析了以**FunASR流式模型**和**Whisper**为

weixin_30838873的博客 395

在jetson nano上部署ncnn

NCNN 是由腾讯AI Lab开发的深度学习框架,专注于为移动设备和嵌入式设备提供高效的推理解决方案。其名称为表明了其对自然计算的灵感,并且它确实在设计时考虑了模仿生物神经网络的特点。NCNN的设计目标是在资源受限的设备上运行,因此它被设计成轻量级、高效率的框架。它通过一系列优化策略,如模型量化、层融合和多线程等技术,提高了推理速度和效率。此外,NCNN支持多种硬件平台,包括CPU和NPU等,使得它可以灵活地在不同的设备上部署和运行。作为一个开源项目,NCNN。

m0_56541319的博客 666

基于Ultralytics YOLO26的智能机器人视觉系统全流程开发实战

想象一下,你正在开发一个智能机器人,它的核心任务是“看懂”周围的世界并做出反应。比如,一个能自动识别并抓取麻将牌的机器人。这个想法听起来很酷,但当你真正动手时,会发现从“想法”到“落地”之间横亘着一条巨大的鸿沟:你需要收集数据、标注、训练模型、优化性能,最后还要把模型塞进机器人的“大脑”(通常是计算资源有限的嵌入式设备或工控机)里稳定运行。每一步都充满了技术细节和潜在的“坑”。 这就是为什么今天我们要深入聊聊 Ultralytics YOLO ,尤其是其最新的 YOLO26 。它不仅仅是一个目标检测算法,更

shirlly 560

PP-DocLayoutV3在嵌入式Linux上的轻量化部署探索

本文介绍了如何在星图GPU平台上自动化部署PP-DocLayoutV3镜像,实现文档版面分析模型的轻量化应用。该平台简化了部署流程,用户可快速搭建环境,将模型应用于智能会议平板等边缘设备,实现离线状态下对白板手写笔记和打印文档的实时、结构化识别,满足即时性与隐私保护需求。

weixin_42515392的博客 140

离线中文语音识别实战:从工具选型到嵌入式部署全指南

语音识别(ASR)作为人工智能的关键技术,其核心原理是将音频信号转化为文本。随着对数据隐私和实时性要求的提升,离线部署成为重要趋势,它能在本地设备上完成识别,无需网络连接,保障了数据安全并降低了延迟。这项技术的价值在于为智能家居、工业物联网、移动应用等场景提供了可靠、自主可控的语音交互基础。本文聚焦于离线中文语音识别的工程实践,深入剖析了如何在资源受限的嵌入式设备(如树莓派)上进行部署,并对比了Whisper.cpp、PaddleSpeech等主流工具在模型量化与推理优化方面的特点,为开发者提供从选型到落地

weixin_30546189的博客 420

微视觉计算实战:从模型压缩到边缘部署的完整指南

计算机视觉技术正经历从云端到边缘的范式转移,其核心在于如何在资源受限的终端设备上实现高效感知。这一转变由模型小型化、硬件加速器发展及对数据隐私、实时性需求的增长共同驱动。通过剪枝、量化、知识蒸馏等模型压缩技术,结合TensorFlow Lite、TVM等专用推理框架,开发者能够在微算力、微功耗、微体积的严格约束下部署视觉AI模型。这些技术广泛应用于智能家居、工业检测、安防监控等场景,实现了在嵌入式设备和移动终端上的实时视觉分析,推动了人工智能在边缘计算领域的落地与创新。

cumo3681的博客 396

YOLO12模型在嵌入式Linux系统上的部署指南

本文介绍了如何在星图GPU平台上自动化部署YOLO12 实时目标检测模型 V1.0镜像,并快速应用于嵌入式设备的目标检测场景。通过该平台,用户可以便捷地获取并运行此优化后的镜像,实现如智能安防监控、工业质检等实时视觉识别任务,显著降低部署门槛。

weixin_29155599的博客 141

C++人脸识别SDK架构深度解析:从模块设计到性能优化实践

人脸识别作为计算机视觉的核心技术,其底层依赖于深度学习模型对图像特征的提取与比对。其工作原理通常遵循检测、对齐、识别(特征提取)的经典流程,通过卷积神经网络将人脸图像转换为高维特征向量,并利用余弦相似度进行身份判别。这项技术的核心价值在于为身份验证、智能安防、人机交互等场景提供了非接触式、高精度的解决方案。在实际工程部署中,尤其是在资源受限的嵌入式环境或对实时性要求高的服务器端,SDK的架构设计与性能优化至关重要。一个优秀的C++人脸识别库,如InspireFace,会采用模块化分层设计,通过硬件抽象层支持

weixin_30336061的博客 319

RetinaFace在C语言中的接口开发:嵌入式系统集成

本文介绍了如何在星图GPU平台上一键自动化部署RetinaFace人脸检测关键点模型镜像,并实现嵌入式系统中的人脸识别应用。该方案通过优化模型转换和C语言接口开发,可在智能门禁、安防监控等场景中快速集成高精度人脸检测功能,提升边缘设备的AI处理能力。

weixin_31869917的博客 308

ncnn编译so文件方案

提交给大家顺便赚几个积分。最近积分用的太多了。。。。

ncnn在arm-linux平台的编译1

在原代码基础上修改部分代码1. 增加 arm-gcc.toolchain.cmake 文件set(CMAKE_C_COMPILER "/usr/bin/arm-

DAMOYOLO-S在嵌入式Linux系统的移植与优化实战

本文介绍了如何在星图GPU平台上自动化部署DAMOYOLO-高性能通用检测模型-S镜像,并将其应用于嵌入式AI场景。该平台简化了部署流程,用户可快速在边缘设备上实现高效的目标检测功能,典型应用如安防监控中的实时物体识别与追踪。

weixin_42462474的博客 93

手把手教你用STM32标准库写一个能OTA升级的Bootloader(附完整代码)

本文详细介绍了如何使用STM32标准库开发支持OTA无线升级的Bootloader系统,包括Flash分区规划、Bootloader核心实现、无线升级流程及安全校验机制。通过实战代码示例,帮助开发者快速掌握STM32固件升级技术,提升物联网设备的远程维护能力。

weixin_30181209的博客 265

AIGlasses_for_navigation 模型剪枝与量化实战:C语言底层优化入门

本文介绍了在星图GPU平台上自动化部署AIGlasses_for_navigation镜像的实践,该镜像专注于模型轻量化技术。通过剪枝与量化优化,可将导航模型高效部署于边缘设备,实现实时、低功耗的AI导航应用,为嵌入式场景提供解决方案。

weixin_36483050的博客 22

从编解码芯片看Tesla T4的隐藏实力:双NVDEC如何实现70路1080P解码?

本文深入剖析了英伟达Tesla T4显卡的隐藏实力,重点解读其独特的双NVDEC硬件解码器设计如何突破性能瓶颈。通过分析Turing架构、对比HEVC/H.264解码差异,并结合驱动与SDK优化,揭示了实现高达70路1080P视频流并发解码的原理与实战配置,为云游戏、直播转码等高并发场景提供高效解决方案。

weixin_29209801的博客 492

实干派!网易易盾增强版滑块验证码,全方位讲解识别思路(含源码)

该验证码是异形滑块验证码中的一种,缺口旋转+偏移的处理需要你有很好的图像处理知识,能很好的处理透明通道,同时,该验证码需要你能很好的处理缺口和背景之间匹配的关系,该验证码的处理难点就是两个缺口之间如何找到正确的,两个检测框都有很强的相似度,且加上背景图的干扰,在图像处理和有优化上难度大大增加。

码王吴彦祖的博客 2016
上一篇: Spring7云原生升级指南:从Jakarta EE 11整合到GraalVM本地镜像优化
下一篇: 从农田监测到城市规划:不同场景下遥感影像预处理的关键步骤选择指南
linux6sysadmin
博客等级 码龄4年 59粉丝 1615原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值