NCNN学习系列零:NCNN介绍及闲言碎语
作者:互联网
开源摘星计划(WeOpen Star) 是由腾源会 2022 年推出的全新项目,旨在为开源人提供成长激励,为开源项目提供成长支持,助力开发者更好地了解开源,更快地跨越鸿沟,参与到开源的具体贡献与实践中。
不管你是开源萌新,还是希望更深度参与开源贡献的老兵,跟随“开源摘星计划”开启你的开源之旅,从一篇学习笔记、到一段代码的提交,不断挖掘自己的潜能,最终成长为开源社区的“闪亮之星”。
我们将同你一起,探索更多的可能性!
项目地址: WeOpen-Star
前言:
虽然有志于提升深度学习方面的知识储备,但是毕竟才疏学浅,很多学习都是寻寻觅觅流于表面。今天写个PCA,明天又在PyTorch上跑个MINTS,又或者是抱着“西瓜书”挑灯夜读,自以为入坑机器学习,殊不知,早就把大号时光浪费在浅表的工作上,还洋洋得意自己似有进步。
与师兄座谈,经师兄提点,才知道,与其临渊羡鱼,不如退而结网的道理。痛定思痛,寻求改变之法,脚踏实地,方能仰望天空。恰好工作上多接触NCNN,又趁着腾讯开源摘星计划的浪潮。一边求索,一边记录,扎扎实实走一趟NCNN的设计和实现道路,一来工作与深度学习深入结合,二来以馈读者,三来若能力尚且一观,能为NCNN 添砖加瓦,岂不美哉。
编写这系列文章,沿着两条路线走,前n章节,自底向上,从内存结构聊到 operation 优化策略,后n+1章节,自顶向下,讨论新模型如何被forward 解构成基本操作单元集合;
这系列文章除去理论介绍部分,尽量保持源代码与测试代码完备。项目主要使用Cmake 构建C++的测试程序,由于NCNN本身贴近硬件优化实现,所以整体语言属性偏重classic C,以确保所有代码在不同硬件平台上的普适性;使用gtest作为测试用框架,会慢一些,但是确保每部分的源代码和测试干净。
安装NCNN 及开发环境
-
预设环境
系统环境为VirualBox 装载的Ubuntu 18.04, 使用gcc 7.5.0 作为开发环境,另外安装Cmake + git+ vs-code 。完成以下操作(不会百度都有):
- 安装Cmake,修改bashrc 使得Cmake生效,传递文件进Ubuntu,可以参考VirualBox 如何设置共享文件夹;
- 安装git,配置git config, 配置git ssh key, 测试git ssh key 能够正确连接到Github (必选);
- 安装vs-code,vs-code插件安装C++相关编译插件,如果插件下载时间过长,可从插件市场直接下载对应插件,使用install from visx 来安装;
-
NCNN安装
以下摘录自ncnn wiki:how-to-build
# 先在github 上 fork ncnn 到你的仓库,假设你叫做user # 进入你准备放ncnn 的目录 git clone git@github.com:user/ncnn.git sudo apt install build-essential git cmake libprotobuf-dev protobuf-compiler libopencv-dev # 与ncnn wiki略有不同,本文不涉及未成熟vulkan cd ncnn && mkdir -p build cd build && cmake -DCMAKE_BUILD_TYPE=Release -DNCNN_VULKAN=OFF -DNCNN_BUILD_EXAMPLES=ON .. make -j$(nproc) && make install
以上安装正确,将会在build目录下生成install目录,包含bin/ include/ lib/ 。即可通过这些调用ncnn基础结构;CMakeLists.txt中加上:
set(ncnn_DIR /home/user/} # 你自己的ncnn目录 set(ncnn_DIRS ${ncnn_DIR}/ncnn/build/install) set(ncnn_INCLUDE_DIRS ${ncnn_DIRS}/include) set(ncnn_LIBS ${ncnn_DIRS}/lib) ... include_directories( ${ncnn_INCLUDE_DIRS} } add_library( libncnn STATIC IMPORTED ) set_target_properties( libncnn PROPERTIES IMPORTED_LOCATION ${ncnn_DIRS}/lib/libncnn.a ) target_link_libraries(${PROJECT_NAME} libncnn gtest gtest_main pthread OpenMP::OpenMP_CXX )
这样就可以以静态库的形式调用ncnn 了,前期我们熟悉了解ncnn的基础结构,和测试operation就可以以此为基础;
-
Gtest测试框架使用
Googletest是针对C++程序的测试框架,本系列文章中主要用来对容器进行验证,当然你也可以选择其他测试框架;
使用Googletest是非常简单的,只需要在代码中增加以下代码:
# 使用vckpg # set(GTest_DIR "E:/src/vcpkg/installed/x86-windows/share/GTest") # find_package(GTest CONFIG REQUIRED) include(FetchContent) FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip ) # # For Windows: Prevent overriding the parent project's compiler/linker settings set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest)
如果Cmake过程中下载速度较慢,可以单独下载URL所属的压缩包,放在同一目录下,也可以使用apt-install 的方法安装gtest;
对于后文中需要测试SSE加速,ARM NEON加速,指令集强相关于对应的环境,到时候我们会重新构建针对环境下的NCNN。
标签:git,系列,闲言碎语,开源,set,NCNN,install,ncnn 来源: https://www.cnblogs.com/Moonjou/p/16471048.html