ImageFormat

想請問模型轉換成.nef後,預設都是使用int8,這時使用KP_IMAGE_FORMAT_RGB565把圖片轉換成16bits格式,模型會正確預測嗎?

在kneron_plus範例中,依照範例轉換顏色(KP_IMAGE_FORMAT_RGB565),設定格式(KP_IMAGE_FORMAT_RGB565),模型預測都會非常奇怪,改成灰階,並使用KP_IMAGE_FORMAT_RGB565格式後結果才會正常。

若是轉換.nef時設定model_in_bitwidth_mode為int16,又會出現下列錯誤

 Error raised in function: generic_image_inference_receive. Error code: 202. Description: ApiReturnCode.KP_FW_NCPU_INPROC_FAILED_202

Comments

  • 您好,

    Int16模型的錯誤,是因為16-bit模型目前不支持hardware image pre-process,所以需要您自行做前處理 (請參考kl630_demo_generic_data_inference.c)。

    關於模型預測需要先改成灰階再使用KP_IMAGE_FORMAT_RGB565的問題,可以請您提供NEF模型,normalization設定,和以下的模型資訊嗎? 您可以使用generic_command.c來檢查:

    -input shape

    -input format

    -radix

    -scale

    謝謝您!

  • 感謝您的回覆,我昨天的問題描述有點過度簡短

    我目前是先參考Toolchain Docker Manual 把模型轉換成.nef後,再參考 SDK/apps/vmf_nnm/solution/solution_host_stream 內容在KL630上使用模型。

    在docker中測試nef結果時,對圖片僅需要resize, normalize(/255),再依照教學把處理後的圖片送入 ktc.kneron_inference,就可以得到模型推論特徵,經過後處理,結果也都符合預期。

    但把nef放到630,使用solution_host_stream內容時發現,其中 VMF_NNM_INFERENCE_APP_CONFIG_T 的 image_format 如果設定 KP_IMAGE_FORMAT_RGB565 格式,後處理的結果不正常,但如果設定為 KP_IMAGE_FORMAT_RAW8 ,結果就會和docker模擬差不多,根據kp_struct.h內容,當時認為這是因為nef都是使用int8格式,不支援16bits的RGB565。

    在昨天使用 kneron_plus/pyhon/example/KL630DemoGenericImageInference.py 範例時也遇到同樣問題,把圖片轉換成bgr565加上設定kp.ImageFormat.KP_IMAGE_FORMAT_RGB565模型可正常運作,但結果與docker模擬預期不同。把圖片轉成灰階加上設定KP_IMAGE_FORMAT_RAW8後結果才與docker模擬相近。

    附件是 KL630DemoGenericImageInference.py 中,model_nef_descriptor.models[0]資訊。

    另外想請問,VMF_NNM_INFERENCE_APP_CONFIG_T 中 image_format 設定 KP_IMAGE_FORMAT_RAW8 是代表圖片會被處理為灰階嗎?

    麻煩您了,謝謝

  • 您好,

    謝謝您提供更多資訊。如果連KL630DemoGenericImageInference.py也會出問題的話,我們可以先解決這個問題,然後再去應用到KL630 solution_host_stream上。

    KL630DemoGenericImageInference.py裡面的kp.GenericInputNodeImage,可以設定normalization,default為KP_NORMALIZE_KNERON:

    您可以嘗試使用其他的normalization mode (e.g. KP_NORMALIZE_CUSTOMIZED_DIV2),請參照文檔: kp value - Document Center

    另外,請問一下您的KL630的輸入影像是否有另外做處理呢? (除了KL630DemoGenericImageInference.py本身的code之外)

    還有,可以請您提供NEF模型,在Toolchain轉換模型用的Python script,和KL630DemoGenericImageInference.py嗎? 我們想要先確認是否有使用正確的normalization mode。感謝!

  • 您好

    在KL630 solution_host_stream上只要設定 VMF_NNM_INFERENCE_APP_CONFIG_T 中 image_format 為 KP_IMAGE_FORMAT_RAW8,模型預測結果就正常,但不知道這是不是代表傳入的影像已被轉換成灰階而喪失色彩資訊?

    使用 KL630DemoGenericImageInference.py 時,影像處理如果沒有任何更改,模型幾乎沒有偵測能力,剛剛嘗試不同Normalize方法結果也一樣。

    如果改成 cv2.cvtColor(src=img, code=cv2.COLOR_RGB2GRAY) + image_format=kp.ImageFormat.KP_IMAGE_FORMAT_RAW8,

    或是 cv2.cvtColor(src=img, code=cv2.COLOR_BGR2RGBA) + image_format=kp.ImageFormat.KP_IMAGE_FORMAT_RGBA8888

    模型推論的結果會恢復正常。

    謝謝

  • 您好,

    不是的,image_format的設定是用來告訴硬體輸入影像的色彩空間,並不會去轉換影像

    1. 可以請您測試一下這個KL630DemoGenericImageInferenceTesting.py,切換true/false的flag來測試看看並提供一下結果與生成的RGB/gray binary file嗎?

    2. 可以請您提供GenericCommand.py的system information嗎? 我們想要確認版本資訊

    3 也可以請您提供: Toolchain版本,Toolchain conversion script,和KL630DemoGenericInference.py來讓我們進一步確認嗎? 您也可以把檔案打包起來,寄給maria.chen@kneron.us。謝謝!

  • 您好

    剛剛發現我在 cv2.cvtColor(np_img, cv2.COLOR_BGR2BGR565) 之後使用了錯誤的 resize,

    更換resize的算法或是把resize移到cvtColor之前,搭配 KP_NORMALIZE_CUSTOMIZED_DIV2 後,KL630DemoGenericImageInference.py 模型預測能力有恢復正常了,謝謝。

  • 相同模型在使用 solution_host_stream 時,VMF_NNM_IMG_PRE_PROC_T 設定 KP_IMAGE_FORMAT_RGB565 + KP_NORMALIZE_CUSTOMIZED_DIV2 偵測能力還是有異常,使用 KP_IMAGE_FORMAT_RAW8+KP_NORMALIZE_KNERON 才有預測能力,不知道這部分您是否有什麼頭緒?

    另外想請問 KP_NORMALIZE_CUSTOMIZED_DIV2 有詳細的說明嗎? 在document center 搜尋似乎只能看到 refer to the toolchain manual 。

    麻煩您了,謝謝。

  • 您好,

    這是因為host_stream和companion_user_ex (Kneron PLUS)的inputs不一樣,host_stream的input是從sensor來的。host_stream 中預設串流進來的影像格式為 yuv40p,須要設定為 KP_IMAGE_FORMAT_YUV420,而設定為 KP_IMAGE_FORMAT_RAW8 能運行是因為hardware只取了灰階影像所需要資料大小進行 decode。

    關於KP_NORMALIZE_CUSTOMIZED_DIV2,請參照這個文檔: Hardware Image Preprocessing - Document Center

  • 您好

    感謝您的回覆,這幫助我釐清了許多先前在測試過程中遇到的疑問。

    再次感謝!

Sign In or Register to comment.