This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SK-TDA4VM: How to modify the object detection model?

Part Number: SK-TDA4VM

Tool/software:

Hi TI,

We need to merge the IPC with the object detection model. Whenever an object is detected, a message should be sent to the MCU1_0 through IPC. 

How to merge the code?

How do we build and run the code?

  • Hi,

    May I know the SDK that you are currently using to run the object detection model?

    Are what is the command you are executing for the same?

    Regards,

    Nikhil

  • Hi,

    I am using ti-processor-sdk-linux-edgeai-j721e-evm-09_02_00_05 and ti-processor-sdk-rtos-j721e-evm-09_02_00_05 for vision apps.

    I have build the default vision apps demos.

    Object detection command:

    root@tda4vm-sk:/opt/vision_apps# ./vx_app_tidl_od.out --cfg app_od.cfg

    While running the above command, it prints the following log, indicating "IPC: Init ... Done" 

    Could you clarify what this means? Does it imply that the IPC is already initialized?

    log file:

    APP: Init ... !!!
    MEM: Init ... !!!
    MEM: Initialized DMA HEAP (fd=5) !!!
    MEM: Init ... Done !!!
    IPC: Init ... !!!
    IPC: Init ... Done !!!
    REMOTE_SERVICE: Init ... !!!
    REMOTE_SERVICE: Init ... Done !!!
        37.384091 s: GTC Frequency = 200 MHz
    APP: Init ... Done !!!
        37.387181 s:  VX_ZONE_INIT:Enabled
        37.387191 s:  VX_ZONE_ERROR:Enabled
        37.387196 s:  VX_ZONE_WARNING:Enabled
        37.389705 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-0 
        37.389791 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-1 
        37.389865 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-2 
        37.389930 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-3 
        37.389939 s:  VX_ZONE_INIT:[tivxInitLocal:136] Initialization Done !!!
        37.394664 s:  VX_ZONE_INIT:[tivxHostInitLocal:101] Initialization Done for HOST !!!
    Default param set! 
    Parsed user params! 
    Updated user params! 
    Scaler Init Done! 
    TIDL Init Done! 
    Pre Proc Update Done! 
    Pre Proc Init Done! 
    Draw detections Update Done! 
    Draw Detections Init Done! 
    Img Mosaic Init Done! 
    Display Init Done! 
    App Init Done! 
    App Create Graph Done! 
    App Verify Graph Done!
    App Send MSC Command Done!
    App Verify Graph Done! 
    Running frame 500
    App Reading Input Done!
    App Process Graph Done!
    app_tidl_od: Frame ID 500 of 510 ... Done.
    Running frame 501
    App Reading Input Done!
    App Writing Outputs Start...
    App Writing Outputs Done!
    App Reading Input Done!
    App Process Graph Done!
    app_tidl_od: Frame ID 501 of 510 ... Done.
    Running frame 502
    App Writing Outputs Start...
    App Writing Outputs Done!
    App Reading Input Done!
    App Process Graph Done!
    app_tidl_od: Frame ID 502 of 510 ... Done.
    Running frame 503
    App Writing Outputs Start...
    App Writing Outputs Done!
    App Reading Input Done!
    App Process Graph Done!
    app_tidl_od: Frame ID 503 of 510 ... Done.
    Running frame 504
    App Writing Outputs Start...
    App Writing Outputs Done!
    App Reading Input Done!
    App Process Graph Done!
    app_tidl_od: Frame ID 504 of 510 ... Done.
    Running frame 505
    App Writing Outputs Start...
    App Writing Outputs Done!
    App Reading Input Done!
    App Process Graph Done!
    app_tidl_od: Frame ID 505 of 510 ... Done.
    Running frame 506
    App Writing Outputs Start...
    App Writing Outputs Done!
    App Reading Input Done!
    App Process Graph Done!
    app_tidl_od: Frame ID 506 of 510 ... Done.
    Running frame 507
    App Writing Outputs Start...
    App Writing Outputs Done!
    App Reading Input Done!
    App Process Graph Done!
    app_tidl_od: Frame ID 507 of 510 ... Done.
    Running frame 508
    App Writing Outputs Start...
    App Writing Outputs Done!
    App Reading Input Done!
    App Process Graph Done!
    app_tidl_od: Frame ID 508 of 510 ... Done.
    Running frame 509
    App Writing Outputs Start...
    App Writing Outputs Done!
    App Reading Input Done!
    App Process Graph Done!
    app_tidl_od: Frame ID 509 of 510 ... Done.
    app_tidl_od: Iteration 0 of 1 ... Done.
    App Run Graph Done! 
    App Delete Graph Done! 
    Input image release Done! 
    Scaler deinit Done! 
    Pre-Proc deinit Done! 
    TIDL deinit Done! 
    Draw detections deinit Done! 
    Mosaic deinit Done! 
    Display deinit Done! 
    TIDL unload Done! 
    ImgProc unload Done! 
    VideoIO unload Done! 
    HWA unload Done! 
    Context released! 
    App De-init Done! 
        39.544425 s:  VX_ZONE_INIT:[tivxHostDeInitLocal:115] De-Initialization Done for HOST !!!
        39.548818 s:  VX_ZONE_INIT:[tivxDeInitLocal:204] De-Initialization Done !!!
    APP: Deinit ... !!!
    REMOTE_SERVICE: Deinit ... !!!
    REMOTE_SERVICE: Deinit ... Done !!!
    IPC: Deinit ... !!!
    IPC: DeInit ... Done !!!
    MEM: Deinit ... !!!
    DDR_SHARED_MEM: Alloc's: 27 alloc's of 26620922 bytes 
    DDR_SHARED_MEM: Free's : 27 free's  of 26620922 bytes 
    DDR_SHARED_MEM: Open's : 0 allocs  of 0 bytes 
    MEM: Deinit ... Done !!!
    APP: Deinit ... Done !!!

  • Hi,

    By default, MCU1_0 is not enabled in vision_apps. You can see the file vision_apps/platform/j721e/rtos/common/app_cfg.h, the macro ENABLE_IPC_MCU1_0 which is currently disabled. You would have to enable this and then in  sdk_builder/vision_apps_build_flags.mak change BUILD_CPU_MCU1_0?=yes

    With this you can enable IPC on MCU1_0 in vision_apps.

    To confirm if MCU1_0 is enabled, you can run ./vision_apps_init.sh and get the logs from [MCU1_0] core 

    Only after this you would be able to send the IPC to MCU1_0 core from A72

    Regards,

    Nikhil

  • Hi,

    I need to understand the image data flow between the A72, C66x, C71x, and R5F cores.

    I have referred to object detection in the following links:

        Vision apps - https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/09_02_00_05/exports/docs/vision_apps/docs/user_guide/group_apps_dl_demos_app_tidl_od_cam.html

        Edge AI - https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-sk-tda4vm/09_02_00/exports/edgeai-docs/common/edgeai_dataflows.html

    We need to monitor whether each core receives the image buffer or not.

    Do these cores use IPC, DMA, or something else for image data transfer?

  • Hi, 

    The datapath is as mentioned in the above vision_apps demo link you have shared. 

    The memory for the data is allocated by A72 running an HLOS and in the graph, the data goes from one node to another (i.e  one core to another)

    So here, the memory is allocated in a shared memory region by A72, and the memory address of this buffer is passed to each node running on a particular core using IPC framework.

    You can see the process callback of everynode to check the memory address received which corresponds to the data information.

    Regards,

    Nikhil