树莓派上编译的方法(应该适用于所有的arm-linux设备)
Created by: JulyJohn
NOTE: Provide a method for compiling in arm-linux device. 我的机器是树莓派3b+,按照如下方法成功在目标机器上编译并得到运行。对于其它的arm-linux设备应该也都可行。仅供大家参考。 ================编译方法************************** 1.修改 https://github.com/PaddlePaddle/paddle-mobile/blob/63f7167851e70290a8c924d3666530b1de93a934/CMakeLists.txt#L5 为:
option(USE_OPENMP "openmp support" ON)
set(CMAKE_CXX_FLAGS "-std=c++14 -mfpu=neon -O3 -s ${CMAKE_CXX_FLAGS}")
3.如果想修改默认网络,可以修改下列代码中的default。 https://github.com/PaddlePaddle/paddle-mobile/blob/63f7167851e70290a8c924d3666530b1de93a934/CMakeLists.txt#L142 例如我想修改成googlenet:
set(NET "googlenet" CACHE STRING "select net type")
可选项有:
"default" "googlenet" "mobilenet" "yolo" "squeezenet" "FPGAnets"
4.按如下操作编译
mkdir build
cd build
cmake ..
make -j4
5.将编译生成的.so文件拷到/usr/lib下
sudo cp build/libpaddle-mobile.so /usr/lib
ldconfig
6.测试 需要先下载models,并解压到工程根目录中的test目录下
wget http://mms-graph.bj.bcebos.com/paddle-mobile%2FmodelsAndImages.zip
之后进入test目录下的build文件夹,可以看到很多形如test_*的可执行文件,尝试运行一个mobilenet:
./test_mobilenet
大概耗时250ms。
=====================华丽的分割线****************************************
目前已经发现的问题:
- 运行./test-batchnorm-op会报如下错误:
DEBUG [file: test_batchnorm_op.cpp] [line: 117] : op -> run()
DEBUG [file: operator.cpp] [line: 65] : batch_norm input- X= dims: 1 256 38 38
0.671156 0.99052 0.231855 0.759785 0.0814431 0.906881 0.608392 0.747109 0.953585 0.976047 0.512203 0.490695 0.978436 0.389438 0.283938 0.68275 0.585255 0.605909 0.680033 0.0608108 0.685035
DEBUG [file: operator.cpp] [line: 70] : batch_norm output- Y= dims: 1 256 38 38
0.216983 1.37029 -0.130622 0.688914 0.0498221 1.15432 0.98134 0.0508528 1.0472 0.991275 0.355184 0.0783572 0.622399 0.129167 0.0307608 0.482117 0.532668 0.0352078 1.44677 0.0812567 0.194354
DEBUG [file: test_batchnorm_op.cpp] [line: 166] : (0.671156 - 0.55254)/((0.259094 + 0.00001)^0.5)* 0.397557 + 0.124341 =
DEBUG [file: test_batchnorm_op.cpp] [line: 169] : 0.216983
DEBUG [file: test_batchnorm_op.cpp] [line: 171] : input_ptr 0 : 0.671156
DEBUG [file: test_batchnorm_op.cpp] [line: 172] : output_ptr 0 : 0.216983
*** Error in `./test-batchnorm-op': double free or corruption (!prev): 0x00176230 ***
Aborted
- 运行
./test_mobilenet
会出现结果全为Nan的情况,提示“如果结果Nan请查看: test/images/g_test_image_1x3x224x224_banana 是否存在?”,但实际上我已经将models和images放到了test文件夹下
欢迎补充bug并@可爱的开发者大佬们。