博客專欄

        EEPW首頁 > 博客 > DSP 的 CV 算子調用

        DSP 的 CV 算子調用

        發(fā)布人:地平線開發(fā)者 時間:2024-12-05 來源:工程師 發(fā)布文章
        01 前言


        DSP 是 征程 5 上的數(shù)字信號處理器,專用于處理視覺、圖像等信息。在 OE 包的 ddk/samples/vdsp_rpc_sample 路徑下,提供了 DSP 使用示例,包括 nn 和 CV 兩部分。


        nn 示例涵蓋了深度學習模型的相關算子,包括量化、反量化、Softmax 和雷達點云預處理;CV 示例展示了如何調用地平線基于 DSP 封裝的圖像處理算子,目前已支持 25 個,并且仍在持續(xù)擴充當中。



        在正式閱讀前,希望您已經(jīng)對 DSP 的軟硬件特點、編程思路和板端運行方法有基本的了解,關于這方面的內容可以閱讀原文跳轉社區(qū)搜索文章《DSP 開發(fā)快速上手》。



        02 CV 算子支持列表


        截止 J5 OE v1.1.62,DSP 已經(jīng)支持了 25 個 CV 算子:


        圖片


        CV 算子相關的數(shù)據(jù)類型、數(shù)據(jù)結構、配置參數(shù)、圖片約束等信息,可以查看 征程 5 工具鏈手冊的《DSP 運行時 API 手冊》。我們正在持續(xù)擴充 DSP 支持的 CV 算子數(shù)量,同時也在讓已有的 CV 算子能支持更多的輸入數(shù)據(jù)類型。



        03 CV 示例文件介紹


        OE 包的 ddk/samples/vdsp_rpc_sample 目錄包含了大量的 CV 示例,文件結構如下:


        +---vdsp_rpc_sample
        │── arm                                          # arm側
        │   ├── cv
        │   │   ├── build_arm.sh                         # arm側構建腳本
        │   │   ├── CMakeLists.txt
        │   │   ├── main.cc                              # main函數(shù)
        │   │   └── src                                  # cv算子示例源文件目錄
        │   └── nn
        ├── dsp
        │   ├── build_dsp.sh                             # dsp側構建腳本
        │   ├── CMakeLists.txt
        │   ├── src                                      # dsp算子實現(xiàn)目錄
        │   └── main.cc                                  # 編譯dsp鏡像的源碼
        ├── script
        │   ├── cv
        │   │   ├── run_cv_test.sh                       # 運行示例腳本
        │   │   ├── bin                                  # 可執(zhí)行程序目錄
        │   │   └── data                                 # 圖像目錄
        │   ├── nn
        │   ├── image
        │   └── lib
        ├── deps
        └── README.md


        • arm:arm 側示例,封裝了常用 api,主要負責發(fā)起 RPC 調用,接收 dsp 處理結果。


          • cv:cv 示例,包含了圖片處理的 cv 算子示例。

          • nn:nn 示例,包含 quantize 和 dequantize api,自定義算子 softmax 以及 pointpillar 前處理。

        • dsp:dsp 側示例,實現(xiàn)了 dsp 算子功能,主要負責接收 arm 側發(fā)來的任務,完成 softmax 等算子的計算,將結果發(fā)送給 arm。


          • src:包含 quantize 和 dequantize api,以及自定義算子 softmax 以及 pointpillar 前處理的 dsp 側實現(xiàn)。

        • script:示例的生成文件及腳本目錄。


          • cv:包含 cv 示例的可執(zhí)行文件、輸入數(shù)據(jù)及執(zhí)行腳本。

          • nn:包含 nn 示例的可執(zhí)行文件、輸入數(shù)據(jù)、模型及執(zhí)行腳本。

          • image: DSP 鏡像目錄。

          • lib: 可執(zhí)行程序的依賴庫目錄。

        • deps:所有示例的依賴文件目錄。


          • aarch64:arm 側的依賴目錄。

          • vdsp:dsp 側的依賴目錄。


        +---arm/cv
           ├── CMakeLists.txt
           ├── build_arm.sh
           ├── main.cc
           └── src
               ├── common.h
               ├── img_util.cc
               ├── img_util.h
               ├── test_bilateral_filter.cc
               ├── test_box_filter.cc
               ├── test_canny.cc
               ├── test_corner_harris.cc
               ├── test_cvt_color.cc
               ├── test_dilate.cc
               ├── test_equalize_hist.cc
               ├── test_erode.cc
               ├── test_filter2D.cc
               ├── test_flip.cc
               ├── test_gaussian_blur.cc
               ├── test_integral.cc
               ├── test_median_blur.cc
               ├── test_pyr_down.cc
               ├── test_pyr_up.cc
               ├── test_remap.cc
               ├── test_resize.cc
               ├── test_roi_resize.cc
               ├── test_rotate.cc
               ├── test_sep_filter2D.cc
               ├── test_sobel.cc
               ├── test_threshold.cc
               ├── test_transpose.cc
               ├── test_warp_affine.cc
               └── test_warp_perspective.cc


        在 arm/cv/src 文件夾內,包含了當前的 25 個 CV 算子在 ARM 側調用的示例,這些示例以 test_開頭,其余的 common.h、img_util.cc、img_util.h 是示例運行的必備組件。


        CV 文件夾的 main.cc 集成了調用 25 個 CV 算子的完整功能,CMakeLists.txt 是編譯必備的配置文件,執(zhí)行 build_arm.sh 后,即可編譯出可上板運行的可執(zhí)行文件即相關依賴,這些生成的文件會自動存放進 script 目錄中。我們已提供了編譯好的上述文件,無需用戶重復編譯。


        ├── deps
        |   ├── aarch64
        |   └── vdsp  
        └── dsp
           ├── CMakeLists.txt
           ├── build_dsp.sh
           ├── main.cc
           └── src


        CV 算子的 DSP 實現(xiàn)源碼是非開源的,地平線封裝成了 .a 文件以庫的形式提供,存放在 deps/vdsp 相關目錄下。dsp 目錄下的 src 文件夾只包含 NN 算子的實現(xiàn)源碼。main.cc 主要用于注冊編寫的 DSP 算子,CMakeLists.txt 是編譯必備的配置文件,執(zhí)行 build_dsp.sh 后,即可編譯出可以在板端配置的 vdsp0 和 vdsp1 鏡像,這兩個鏡像文件還會自動存放進 script/image 目錄中。我們提供了已經(jīng)編譯好的鏡像文件,無需用戶重復編譯。



        04 CV 算子使用說明


        由于 ARM 側和 DSP 側所有需要編譯的文件都已經(jīng)包括在了 OE 包當中,因此用戶可以跳過編譯這一步,直接將 script 文件夾復制到 征程 5 開發(fā)板上的可寫路徑下,如/userdata 目錄。


        此時我們可以編寫一個 deploy.sh 腳本并執(zhí)行,用于在 征程 5 開發(fā)板上部署 DSP 鏡像:

        echo stop > /sys/class/remoteproc/remoteproc1/state
        echo stop > /sys/class/remoteproc/remoteproc2/state
        echo -n "/userdata/script/image" > /sys/module/firmware_class/parameters/path
        echo vdsp0 > /sys/class/remoteproc/remoteproc1/firmware
        echo vdsp1 > /sys/class/remoteproc/remoteproc2/firmware
        echo start > /sys/class/remoteproc/remoteproc1/state
        echo start > /sys/class/remoteproc/remoteproc2/state


        之后執(zhí)行以下命令,給予 dsp_relay_server 和 test_cv 文件可執(zhí)行權限:

        chmod 777 /userdata/script/lib/dsp_relay_server
        chmod 777 /userdata/script/cv/bin/test_cv


        最后進入 script/cv 文件夾,執(zhí)行以下命令即可運行全部 25 個 CV 算子示例:

        sh run_cv_test.sh


        用戶也可以通過追加參數(shù)的形式指定需要執(zhí)行的算子,如:

        sh run_cv_test.sh roiResize


        可以通過在腳本中追加參數(shù) help 來顯示所有可執(zhí)行算子。


        以 roiResize 為例,該算子的執(zhí)行結果如下圖所示:


        圖片


        此時,在/userdata/script/cv/目錄下會生成一個 output 文件夾,保存了圖像處理結果,roiResize 算子的輸出文件名為 roi_resize_output.480x380.yuv,原始輸入圖像為/userdata/script/cv/data/500x480.lena.yuv。


        我們可以使用 YUV 可視化工具 YUView 查看圖片的處理效果,該工具的下載地址為:https://github.com/IENT/YUView/releases


        原始數(shù)據(jù)和處理結果的可視化效果圖如下所示:


        圖片


        圖片


        關于 RoiResize 算子的執(zhí)行過程分析,以及詳細的 ARM 側調用代碼解讀,可以參考社區(qū)文章《在 J5 上使用 DSP 進行 RoiResize》。


        *博客內容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。




        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 南康市| 工布江达县| 大埔区| 巧家县| 昌江| 锦屏县| 准格尔旗| 拉萨市| 饶河县| 黄石市| 和田市| 磴口县| 新绛县| 克山县| 铜山县| 昆山市| 鄂伦春自治旗| 万载县| 新巴尔虎左旗| 青冈县| 大埔区| 钟山县| 平原县| 如东县| 文化| 富顺县| 五常市| 新平| 兴文县| 绥化市| 独山县| 临泉县| 屏边| 鞍山市| 醴陵市| 海南省| 哈密市| 庆安县| 乐清市| 姜堰市| 昆山市|