open-mmlab / mmdetection

OpenMMLab Detection Toolbox and Benchmark
https://mmdetection.readthedocs.io
Apache License 2.0
29.71k stars 9.48k forks source link

摄像头demo的运行速度(fps) #7196

Closed kankanzheli closed 1 year ago

kankanzheli commented 2 years ago

大家好,我在测试集上运行实例分割(采用mask-rcnn)时检测得到的fps为15 但是在我运行webcam_demo.py时(稍加修改,下面会介绍)会不断弹出窗口展示结果。大致判断在摄像头上展示结果为2fps.运行的非常的慢。有什么方法能够加速在摄像头上运行的速度吗?

修改部分为使用gazebo内的kinect摄像头。大致操作为接收摄像头的图像信息。然后转换为bgr8的矩阵。最后直接使用model的相关函数对bgr8的矩阵进行检测处理。 同时也在zed摄像头上工作。zed摄像头工作时采用多线程。对彩色图像的bgr8矩阵传输给webcam_demo的main函数然后进行检测处理。

在这两个摄像头上运行的都十分的慢。一秒只展示两帧图像。这是为什么?能够加速吗?

sam1226 commented 2 years ago

hi, 我碰到一个问题:把ZED相机采集的图像直接放到inference_detector进行处理的时候,把cuda的错误;单独加载本地的图片的时候推理正常。能帮忙指点一下嘛? while running: start_time = time.time()

相机启动捕获图像

    err_code = cap.grab(runtime)
    #判断相机是否完成图像的成功捕获
    if err_code != sl.ERROR_CODE.SUCCESS:
        break
    cap.retrieve_image(left, sl.VIEW.LEFT, resolution=res)
    cap.retrieve_image(depth_img, sl.VIEW.DEPTH, resolution=res)
    cap.retrieve_measure(depth, sl.MEASURE.DEPTH, resolution=res)
    cap.retrieve_measure(ptcloud, sl.MEASURE.XYZ, resolution=res)
    #颜色空间转换
    img = cv2.cvtColor(left.get_data(), cv2.COLOR_RGBA2RGB)
    #img1 = cv2.cvtColor(left.get_data(), cv2.COLOR_RGBA2BGR)
    img_path = 'D:/CloudDisk/OneDrive - nuaa.edu.cn/15_code/03_Python_Code/00_PytorchLearning/10_Detection/TestPic/ZED_Pic.png'
    #img1_path = 'D:/CloudDisk/OneDrive - nuaa.edu.cn/15_code/03_Python_Code/00_PytorchLearning/10_Detection/TestPic/ZED_Pic1.png'
    cv2.imwrite(img_path, img)
    #cv2.imwrite(img1_path,img1)
    # 推理演示图像
    result = inference_detector(model, img_path)
    # show the results
    show_result_pyplot(model, img_path, result)
    print(" Time: {:.2f} s".format(time.time() - start_time))
kankanzheli commented 2 years ago

额,这样是不行的。你可以参考他们在zed-tensorflow中如何使用摄像头。注意zed摄像头要在深度学习中使用必须采用多线程手段运行。通过global来传输图像的numpy矩阵。

额,我的问题有谁能回答一下吗?我在这两种摄像头上有过使用。难道在一般的网络摄像头上获取结果的速度很快吗?

sam1226 commented 2 years ago

谢谢!我觉得你的问题可以调用电脑自带的摄像机跑跑看。

sam1226 commented 2 years ago

额,这样是不行的。你可以参考他们在zed-tensorflow中如何使用摄像头。注意zed摄像头要在深度学习中使用必须采用多线程手段运行。通过global来传输图像的numpy矩阵。

额,我的问题有谁能回答一下吗?我在这两种摄像头上有过使用。难道在一般的网络摄像头上获取结果的速度很快吗?

你可以参考一下ZED 自带的pytorch里面的识别人体,测量距离的案例。但是这个也是跟你选用的硬件平台有关系的。

kankanzheli commented 2 years ago

额,我向他们咨询过。他们给出的建议就是在其他深度学习平台运行时需要采用zed-tensorflow的方法

kankanzheli commented 2 years ago

而且正如我所说,我在两种摄像头上都工作过。但运行速度都比较低。而在测试集上测试fps时显示它的处理速度还是比较快的。

kankanzheli commented 2 years ago

难道是因为我采用了多线程的手段获取图像的numpy矩阵才导致速度慢?多线程居然会导致速度下降?

sam1226 commented 2 years ago

难道是因为我采用了多线程的手段获取图像的numpy矩阵才导致速度慢?多线程居然会导致速度下降?

你用的什么硬件平台?

kankanzheli commented 2 years ago

我使用的显卡为rtx3070.内存32GB.

AronLin commented 2 years ago

你可能指的是画图函数比较慢?它确实很慢o(╥﹏╥)o

sam1226 commented 2 years ago

谢谢!我觉得你的问题可以调用电脑自带的摄像机跑跑看。

谢谢,按照你说的我加了多线程跑通了。 你的问题应该是python的问题,python的多线程是假的,它的翻译器只有一个。

lijoe123 commented 2 years ago

@kankanzheli 您好,我最近在用gazebo做仿真,我想请假一下怎样调用mmdetection 怎样调用gazebo的摄像头? 谢谢您