Post-processing for 3D feature Map

我使用的 KL520 的dongle

想要了解 3d feature map是是怎透過post processing產生的

並比較 python上的output 與 KL520 dongle的output 浮點數的結果

我用keras建構以下的簡單model,output feature map 為 1*3*4*4 (channel first)

我使用11張自己設定的 100*100的jpg圖來compile NEF檔案,再faAnalyserCompiler過程中,遇到以下warning

不過似乎沒有太大問題,最後有產生nef檔案。

我觀察 example/post_processing_ex.c 中的 post_imgnet_classification函數

知道post_processing是透過POSTPROC_OUT_NODE_ADDR() 來得到 image_p 的指標 src_p

然後以下就看不太懂了,433~437 行似乎是在做一些對齊的動作,計算shift,接著再用src_p來取得浮點數的資資料

不知道我理解是否有錯?

然後我不太懂以下程式碼,尤其是w_bytes_to_skip,為何這樣shift就能取channel的資料呢??

最主要的問題就是 src_p 是如何存放feature map 的float資料的,(C/H/W)是怎樣放的

我要怎樣才可以把src_p這個很麻煩的指標,轉成比較好理解的3d array 每個element都是float,

這樣可以方便與python 比較結果,能確定model轉換後沒錯誤,也可以比較float feature map 的差異,來判斷model compile 後是否有太多的精度損失

Comments

  • Hello,

    在KL520上,若是使用DME的API來做推論,所拿到的結果格式將會如下,可參考章節7.2中Post Process的介紹http://doc.kneron.com/docs/#520_1.5.0.0/getting_start/#7-run-model-binaries-in-dme-mode

    total_out_number + (c/h/w/radix/scale) + (c/h/w/radix/scale) + ... + fp_data + fp_data + ...

    其中,total_out_number表示你的模型最終會有幾組output,在你的模型中只會有一組 (average_pooling2d_8_o0),接著依照output的數量,每組output會有一組資訊來描述該組output的channel, height, weight, radix, scale,你說看到的POSTPROC_OUT_XXX()其實都是在dme拿到結果後先將值填入,方便後面透過marco取值,填入的部分可以參考範例 kl520_isi_async_bypass_pre_post_host_yolo.cpp

    後面才是接著第一組第一組feature map的資料,但會以定點(fixed point)的方式表示,定點轉換浮點的公式如下

    float_value = do_div_scale_2( (float) fixed_value, fScale )

    fScale的計算方式如下,需透過前述的radix與scale來計算

            div = 1 << radix

            fScale = 1 / (div * scale);


    函式內容可參考 postprocess_ex.c中的do_div_scale_2()

    另外,因為硬體架構的緣故,在取值的時候有兩個部分要特別注意

    1. 輸出排列為 h, c, w,與一般常見排列不同
    2. width會align到16


    也就是說,即便你的output c, w, h是3x4x4,在KL520上輸出的結果會變成 c, h, w = 3x4x16,這部分要自己重新排列成想要的格式

  • edited September 2021

    非常感謝您的回覆,我已經搞清楚src_p的格式了

    我用以下的程式片段來將解析 3d feature map,再這裡分享給其他需要的人

    float 解析完之後,存在 res_float_array 這個 float *


  • 感謝分享!

    在接下來新版SDK的release中,我們也會提供相關格式的輸出直接供大家使用

The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.