ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NCNN学习系列零:NCNN介绍及闲言碎语

2022-07-12 18:00:11  阅读:174  来源: 互联网

标签:git 系列 闲言碎语 开源 set NCNN install 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 。完成以下操作(不会百度都有):

    1. 安装Cmake,修改bashrc 使得Cmake生效,传递文件进Ubuntu,可以参考VirualBox 如何设置共享文件夹;
    2. 安装git,配置git config, 配置git ssh key, 测试git ssh key 能够正确连接到Github (必选);
    3. 安装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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有