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.

[参考译文] TDA4VM:升级到最新的 SDK 后、观察到摄像头帧下降

Guru**** 2546020 points
Other Parts Discussed in Thread: TDA4VM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1544038/tda4vm-camera-frame-drops-are-observed-after-upgrading-to-latest-sdk

器件型号:TDA4VM


工具/软件:

我们正在使用 TDA4VM Jacinto 处理器、并使用app_edgeai.py SDK 中提供的 Python 示例运行物体检测。 最初、我们使用的是 SDK 版本 9.0 、其中基于 USB 的摄像机的物体检测工作正常 30 FPS

最近、我们升级到 SDK 版本 11.0 以支持定制的 YOLOv5 模型。 但是、升级后、我们观察到了显著的变化 帧速率降低 和 FPS 在推理过程中明显下降。

请务必注意 仅进行了更改 之前是 SDK 版本。 我们使用的是 同一块电路板 USB 摄像头 预先训练的模型 Model Zoo 的性能。

您能否帮助我们确定这种绩效回归的原因、并提出任何可能的解决方案建议? 我们希望继续使用最新的 SDK 版本 (11.0) 并继续前进。

谢谢、

Chaitra  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好;

    感谢您问这个问题。

    根据您的输入、似乎存在与 SDK 相关的问题。 假设您使用 RTOS SDK、能否共享您的配置(.ymal 文件)和模型? 如果您无法共享该模型、您可以告诉我们 RTOS 演示的哪个示例与您的应用类似。 我们将尝试复制您所看到的内容。  

    此致

    Wen Li  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    感谢您的答复。

    我从以下链接刷写了 SD 卡映像:
    https://www.ti.com/tool/download/PROCESSOR-SDK-LINUX-SK VDD-TDA4VM/11.00.00.08

    root@tda4vm-sk:/opt/edgeai-gst-apps uname -A
    Linux tda4vm-sk 6.12.17-ti-00773-gcdcaeac783e3-dirty #1 SMP 抢占周四 4 月 3 日 17:42:36 UTC 2025 AArch64 GNU/Linux

    之前我们使用此版本: https://www.ti.com/tool/download/PROCESSOR-SDK-LINUX-SK TDA4VM/09.00.00.08

    我正在使用 model_zoo 中的 TI 默认模型: onr-OD-8220-yolox-s-lite-mmdet-coco-640x640、onR-OD-8200-yolox-nano-lite-mmdet-coco-416x416  

    我正在运行 python 脚本  app_edgeai.py、如下所示:
    root@tda4vm-sk:/opt/edgeai-gst-apps/apps_python python3 app_edgeai.py ./configs/object_detection.yaml

    .yaml 文件位置:

    root@tda4vm-sk:/opt/edgeai-gst-apps/configs/object_detection.yaml

    在 YAML 文件中、我只是将 input0 更改为链接到连接到电路板的 USB 摄像头(AR0231 摄像头传感器)

    资料来源:/dev/video2
    格式:YUY2
    宽度:1920
    高度:1024
    帧速率:30

    我们正在使用默认的模型和示例进行检查、一旦它们正常工作、不会掉落帧、我们将开始使用我们的模型。

    谢谢、
    Chaitra

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好;

    感谢您提供详细信息。 我们将对此进行研究。  

    此致

    Wen Li

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chaitra:  

    您是否可以尝试运行以下流水线:

    • gst-launch-1.0 v4l2src device=/dev/video-usb-cam0! jpegdec! tiovxdlcolorconvert! tiperfoverlay! kmssink sync=false driver-name=tidss max-latestity=5000000 QoS=True Processing-date=15000000 driver-name=tidss connector-id=41 plane-id=32 force-modesetting=True FD=44

    请注意、v4l2src 元素中的设备属性可能需要更改。

    流水线将采用与模型相关的逻辑、因此我们希望能够缩小流水线中瓶颈的位置。 我在我的终端进行了实验、发现我的 Logitech C270 摄像头支持 720p (30FPS)、在 11.0 SDK 中降至 20fps。 但是、在 11.0 SDK 中、支持 1080p 30FPS 的 Logitech C920 摄像头将保持 30FPS。 我不确定为什么我的 C270 下降到 20fps、但问题可能与摄像头驱动程序本身有关。

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Takuma:

    我按照建议执行了以下 GStreamer 命令、但仍可以观察到帧中断。 帧速率不一致 — 它在 20fps、14fps 等值之间波动、有时会下降至 2fps、然后再恢复至 29fps。 它看起来不稳定。

    gst-launch-1.0 v4l2src device=/dev/video2! \
     video/x-raw、format=yuy2、width=1920、height=1024、帧速率=30/1! \
     tiovxdlcolorconvert! \
     tiperfoverlay! \
     kmssink drivers-name=tidss max-latestity=5000000 QoS=True Processing-date=15000000

    以下是我的摄像头配置以供参考:

    v4l2-ctl --device=/dev/video2 --list-formats-ext
    ioctl:VIDIOC_ENUM_FMT
      类型:Video Capture

      [0]:'YUYV'(YUYV 4:2:2)
        大小:分立式 1920x1024
          间隔:离散 0.033s (30.000 fps)
        尺寸:分立式 1920x1204
          间隔:离散 0.011s (90.000 fps)

    谢谢、
    Chaitra



  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chaitra:

    1. 您是否可以将 kmssink 更改为 fakesink 以从管道中取出显示屏、从而进一步缩小问题所在的范围?
    2. 然后按照下面的“解析 GST 跟踪器“说明获取 FPS: https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-sk-tda4vm/11_00_00/exports/edgeai-docs/common/measure_perf.html#parse-gst-tracers 

    作为示例、我在使用现有的 USB Logitech 摄像头时看不到 FPS 出现波动。 因此、您使用的特定摄像头在上游摄像头驱动器中发生了性能回归。 或者、我确实看到您的流水线中使用的 kmssink 属性有一些不同、因此可能是显示端存在一些问题。 上述步骤应缩小摄像头或显示屏侧问题的范围。

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Takuma:

    我用假墨水运行流水线、然后按照以下步骤操作。

    gst_debug_file=/run/trace.log gst_debug_no_color=1 gst_debug=“gst_Tracer:7" gst_tracers"“ gst_tracers" delay“ delay (flags=element)“ gst-launch-1.0 v4l2src device=/dev/video2! video/x-raw、format=yuy2、width=1920、height=1024、帧速率=30/1! tiovxdlcolorconvert! tiperfoverlay! fakesink

    另一个端子:

    parse_gst_tracers.py /run/trace.log

    这些是输出。 我观察到帧率不会波动、但帧率会从 30fps 下降到 20fps。

    ---------------------------------------------------------------------------------------- +
    |元素               延迟   不匹配      帧 fps    
    ---------------------------------------------------------------------------------------- +
    |capsfilter0              0.08.      49.08         20      968.      
    |tiovxdlcolorconvert0      5.25      49.08         20      968.      
    |tiperfoverlay0           2.36      49.02.         20      968.      
    ---------------------------------------------------------------------------------------- +

    ---------------------------------------------------------------------------------------- +
    |元素             延迟   不匹配      帧 fps    
    ---------------------------------------------------------------------------------------- +
    |capsfilter0              0.08.      51.62       19      4613     
    |tiovxdlcolorconvert0      5.25      51.63       19      4612     
    |tiperfoverlay0           2.31.      51.61.       19      4612     
    ---------------------------------------------------------------------------------------- +

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chaitra:

     FPS 的波动似乎来自显示屏。 可能是 kmssink 元素中未定义的一些参数对行为产生了负面影响。

    对于 20FPS、这个上限很可能位于摄像头输入侧。 我不知道为什么它被封顶了。 但对于故障排除、您可以尝试使用 media-ctl、v4l2-ctl 设置一些摄像头配置、并使用 yavta 进行测试。  可在以下位置找到这些函数的示例用法: https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-sk-tda4vm/11_00_00/exports/docs/linux/Foundational_Components driver/Kernel/Camera/CSI2RX.html#driver-architecture Kernel_Drivers

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Takuma:

    我将在显示侧检查它是否可以通过定义一些 kmsink 元素来修复。

    但在摄像机输入端、如果被覆盖、那么它是否应该在所有 SDK 版本中都具有相同的行为? 我们在 9.0 SDK 版本中获得稳定的 30FPS。

    谢谢、

    Chaitra

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chaitra:

    是的、它在所有 SDK 版本中的行为应相同。 我不知道 TI 有任何东西会以 20FPS 限制摄像头输入。 V4L2 框架和摄像头驱动程序都来自上游、因此我怀疑摄像头的上游 Linux 内核驱动程序存在问题。

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chaitra:

    我发现禁用 edgeai-launcher.sh 后、C270 USB 摄像头能够以 30FPS 的速度工作。

    作为一个实验,看看该解决方法是否适用于您的终端,你能:

    1. 重命名 edgeai-launcher.sh。 例如:   MV /etc/init.d/edgeai-launcher.sh /etc/init.d/disable-edgeai-launcher.sh
    2. 重新启动
    3. 停止 Weston 以允许使用 kmssink:  systemctl 停止清空
    4. 运行 camera 命令。 对于 C270、它是: gst-launch-1.0 v4l2src device=/dev/video-usb-cam0! jpegdec! tiovxdlcolorconvert! tiperfoverlay! kmssink sync=false driver-name=tidss max-latestity=5000000 QoS=True Processing-date=15000000 driver-name=tidss connector-id=41 plane-id=32 force-modesetting=True FD=44

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Takuma:

    感谢您的回答。

    我禁用了 edgeai-launcher.sh 并按前面所述进行了测试。 但是、它仍然会让我看到帧跌落。

    ---------------------------------------------------------------------------------------- +
    |元素             延迟时间   超出      帧数 fps 帧   |
    ---------------------------------------------------------------------------------------- +
    |capsfilter0            0.08.      44.73       22      2358 |     
    |tiovxdlcolorconvert0   5.28      44.72       22      2358 |     
    |tiperfoverlay0         2.45.      44.70       22      2358 |     
    ---------------------------------------------------------------------------------------- +

    此外、我使用了另一个具有以下配置的 USB 摄像头(e-con 系统)。

    在这里、对于 30fps 下的 1280x720、我看不到任何跌落。

    但是、对于 1920x1080 且 30fps 时、我会看到相同的问题 (FPS 下降到 20)


    v4l2-ctl --device=/dev/video2 --list-formats-ext
    ioctl:VIDIOC_ENUM_FMT
        类型:Video Capture

        [0]:“UYVY"(“(UYVY 4:2:2)
            尺寸:分立式 1920x1080
                间隔:离散 0.033s (30.000 fps)
                间隔:离散 0.067s (15.000 fps)
            尺寸:分立式 960x540
                间隔:离散 0.017s (58.000 fps)
                间隔:离散 0.033s (30.000 fps)
            大小:离散 1280x720
                间隔:离散 0.022 秒 (45.000 fps)
                间隔:离散 0.033s (30.000 fps)
            尺寸:分立式 640x480
                间隔:离散 0.017s (60.000 fps)
                间隔:离散 0.022 秒 (45.000 fps)

    谢谢、

    Chaitra

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chaitra:

    到目前为止、我无法使用 Logitech 的 C920 摄像头重现帧丢弃问题。 而在我禁用了 edgeai-launcher.sh 并重新启用它(基本上,回到原来的 SD 卡图像)后,我也不再看到问题被重现在 C270 相机以及... 可能是我看到的 C270 上的 20 FPS 是巧合。  

    无论如何、我有两个您可以尝试的实验。

    1.尝试将队列元素添加到流水线中,看看拆分流水线是否有助于:

    • gst-launch-1.0 v4l2src device=/dev/video-usb-cam0! 排队! jpegdec! 排队! tiovxdlcolorconvert! 排队! tiperfoverlay! 排队! kmssink sync=false driver-name=tidss max-latestity=5000000 QoS=True Processing-date=15000000 driver-name=tidss connector-id=41 plane-id=32 force-modesetting=True FD=44

    2.下面将消除与 GStreamer 和流水线的所有依赖项、以测试摄像头捕获是否以所需的分辨率工作:

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Chaitra;

    您是否有机会按照 Takuma 的建议进行这两项实验? 您是否仍对此问题有疑问?

    此致

    Wen Li  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、延迟的响应、我已经尝试了这两个实验、

    1.添加队列元素:没有解决我的问题。 仍然面临同样的问题。

    2.使用 yavta 的第二种方法,我收到了这些日志
    root@tda4vm-sk:/opt/edgeai-gst-apps yavta -c -Fcapture -s 1920x1080 -f UYVY /dev/video2

    Device /dev/video2 已打开。

    usb-xhci-hcd.17.auto-1.3'上的器件 See3CAM_CU22“(驱动程序“uvcvideo")“)支持视频和采集(不含 mplane)。

    视频格式设置:UYVY (59565955) 1920x1080(跨度 3840)字段无缓冲区大小 4147200
    已请求 8 个缓冲区。

    长度:4147200 偏移:0 时间戳类型/源:单声道/SOE

    缓冲区 0/0 映射到地址 0xff93f0b000。

    长度:4147200 偏移:32768 时间戳类型/源:单声道/SOE

    缓冲区 1/0 映射到地址 0xff93b16000。

    长度:4147200 偏移:65536 时间戳类型/源:单声道/SOE

    缓冲区 2/0 映射到地址 0xffff93721000。

    长度:4147200 偏移:98304 时间戳类型/来源:单声道/SOE

    缓冲区 3/0 映射到地址 0xffff9332c000。

    长度:4147200 偏移:131072 时间戳类型/源:单声道/SOE

    缓冲区 4/0 映射到地址 0xff92f37000。

    长度:4147200 偏移:163840 时间戳类型/源:单声道/SOE

    缓冲区 5/0 映射到地址 0xff92b42000。

    长度:4147200 偏移:196608 时间戳类型/源:单声道/SOE

    缓冲区 6/0 映射到地址 0xffff9274d000。

    长度:4147200 偏移:229376 时间戳类型/源:单声道/SOE

    缓冲区 7/0 映射到地址 0xffff92358000。

    0 (0)[-]无 0 4147200 B 474.585251 474.612872 1.477 fps ts 单声道/SOE

    1 (1)[-]无 1 4147200 B 474.618596 474.646202 29.990 fps ts 单声道/SOE

    2 (2)[-]无 2 4147200 B 474.651936 474.679540 29.994 fps ts 单声道/SOE

    3 (3)[-]无 3 4147200 B 474.685278 474.712886 29.992 fps ts 单声道/SOE

    4 (4)[-]无 4 4147200 B 474.718614 474.746221 29.998 fps ts 单声道/SOE

    5 (5)[-]无 5 4147200 B 474.751957 474.779560 29.991 fps ts 单声道/SOE

    6 (6)[-]无 6 4147200 B 474.785296 474.812899 29.995 fps ts 单声道/SOE  

    根据这些日志、似乎没有 gstreamer 依赖项摄像头捕获功能、可以在 30fps 下工作。 此外、我无法确定导致此问题的管道的哪个部分。 如果您有任何其他建议、请告诉我。

    我们还订购了基于 Arducam v3link mipi CSI 的相机套件,以验证这些套件与基于 USB 的相机相比是否能提供良好的效果。

    谢谢、

    Chaitra

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chaitra:

    我们还订购了基于 Arducam v3link mipi CSI 的摄像机套件、以验证这些套件是否比基于 USB 的摄像机效果更好。

    我认为这是最好的下一步。  

    否则,我认为 到目前为止我们尚未在您的系统上测试的一件事是“tiovxdlcolorconvert ! tiperfoverlay!“ 导致延迟的因素。 我不确定摄像头提供的视频格式、因此无法提供特定的流水线进行测试、但颜色转换应可由视频转换等非 TI 元素替代。

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Takuma:

    我能够连接基于 MIPI CSI 的摄像头、并能够以恒定的 30FPS (1920 x 1080) 进行流式传输。

    我假设基于 USB 的摄像头不利用内部 ISP 硬件功能、因此我们会看到这些帧以更高的分辨率下降。

    我们可以继续使用基于 MIPI 的摄像头。 此票证可以关闭。

    谢谢、

    Chaitra