树莓派4B上ncnn转换出来的模型调用时总是崩溃(Segment Fault)的原因

在树莓派4B上编译并运行ncnn时遇到SegmentFault错误,通过gdb调试发现崩溃发生在convolution_3x3.h的卷积层。问题出在使用了32位系统而非64位。解决方案是在编译ncnn时添加-DCMAKE_TOOLCHAIN_FILE=../toolchains/pi3.toolchain.cmake选项,确保编译适配32位系统。重新编译ncnn和转换模型后,问题得到解决。

最近拿到一个树莓派4B的板子做实验,在上面编译出ncnn后,将模型转换出bin和param文件后调用时总是因为Segment Fault崩溃,编译了个debug版的ncnn后用gdb查一下,发现总是崩溃在convolution_3x3.h里:

#0  0x000dccb0 in ncnn::_ZN4ncnnL14conv3x3s1_neonERKNS_3MatERS0_S2_S2_RKNS_6OptionE._omp_fn.13(void) () at /root/ncnn/src/layer/arm/convolution_3x3.h:423
#1  0xb6eabc64 in ?? () from /usr/lib/arm-linux-gnueabihf/libgomp.so.1

崩溃处的代码是:

sum0 += r0[0] * k0[0];

r0是当前layer的输入特征数据,k0是卷积核数据,表面看不出有何问题,后来从头检查了一下,发现板子烧写的是32位的系统(armv7l),不是64位(aarch64)的,所以编译ncnn时注意加上

     -DCMAKE_TOOLCHAIN_FILE=../toolchains/pi3.toolchain.cmake

这个选项,否则转换出来的模型每次调用时都崩溃,加上这个选项后重新编译ncnn,然后再使用onnx2ncn转换出的模型就可以正常使用了。

<think>好的,用户想在树莓派4B上安装ncnn框架。我需要根据提供的引用资料来整理步骤。首先,检查引用内容,看看有没有安装ncnn的具体步骤。引用2提到在64树莓派上安装ncnn,并且需要先安装OpenCV。引用5说编译很快,问题不多。另外,引用3提醒不要用pip或apt安装OpenCV,必须确保是64位版本。用户可能需要先安装OpenCV,参考引用2中的博客链接。然后,安装ncnn需要从源码编译,步骤可能包括克隆仓库、创建build目录、cmake配置、编译和安装。还要注意安装依赖项,比如protobuf。可能还需要配置环境变量或者将编译后的库文件复制到合适的位置。最后,测试安装是否成功,比如运行示例程序。需要把这些步骤整理清楚,用中文分点说明,确保用户能一步步操作。同要提醒用户安装依赖,避免常见错误,比如使用错误的OpenCV安装方式。</think>### 如何在树莓派4B上安装ncnn框架 #### 步骤1:安装64位系统及依赖库 确保树莓派4B已刷入**64位操作系统**(如Raspberry Pi OS 64-bit)。安装编译所需的依赖库: ```bash sudo apt update sudo apt install build-essential cmake git libprotobuf-dev protobuf-compiler ``` 注意:若之前通过`apt`或`pip`安装过OpenCV,建议先卸载以避免版本冲突[^3]。 --- #### 步骤2:安装64位OpenCV **必须从源码编译64位OpenCV**以确保性能。参考以下流程: ```bash # 参考博客《00-在64树莓派上安装OpenCV》[^2] git clone https://github.com/opencv/opencv.git cd opencv mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j4 # 根据CPU核心数调整线程数 sudo make install ``` 编译间约1小以上,完成后验证: ```bash python3 -c "import cv2; print(cv2.__version__)" ``` --- #### 步骤3:编译安装ncnn框架 1. **克隆ncnn仓库**: ```bash git clone https://github.com/Tencent/ncnn.git cd ncnn git submodule update --init ``` 2. **编译配置**: ```bash mkdir build && cd build cmake -D NCNN_VULKAN=OFF -D CMAKE_BUILD_TYPE=RELEASE .. ``` 若需启用GPU加速(需Vulkan支持),添加`-D NCNN_VULKAN=ON`,但树莓派4B默认未集成Vulkan驱动。 3. **编译与安装**: ```bash make -j4 # 多线程加速编译 sudo make install ``` 编译完成后,库文件默认安装在`/usr/local/lib`,头文件在`/usr/local/include/ncnn`[^5]。 --- #### 步骤4:验证安装 运行示例程序测试: ```bash cd <ncnn-root-dir>/build/example ./mobilenetV2-yolov3 # 具体示例名称根据版本可能不同 ``` 若输出模型推理结果,则安装成功[^4]。 --- #### 常见问题 - **OpenCV版本冲突**:确保未使用`apt`或`pip`安装的OpenCV,仅保留源码编译版本[^3]。 - **内存不足**:编译建议关闭其他程序,或使用交换分区(swap)。 - **依赖缺失**:若报错提示缺少库,通过`apt install`补充对应依赖。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arnold-FY-Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值