【问题标题】:Calculating processing time of a deep learning model计算深度学习模型的处理时间
【发布时间】:2022-04-12 17:28:57
【问题描述】:

我的模型处理视频,我想计算它处理帧的速度(以每秒帧数为单位)或处理 1 帧的时间。

我创建了一个函数来获取预测,它以原始帧作为输入,进行所有预处理,并返回分类。预处理步骤之一是从视频中采样帧,基本上,它将进入深度学习模型的帧数减少了 1/5。如果不进行所有预处理,模型将无法按预期执行。

所以我的问题是,我是否也应该考虑预处理时间?而且,最重要的是,这个处理时间是针对所有帧还是仅针对模型实际看到的帧?

示例代码结构如下:

start = time.time()
prediction = main(data)
end = time.time
print("Time for 1 frame=",(end-start)/n_frames) # lets say n_frames = 50

main 函数内部:

preprocessed = preprocess(data) # resizing, sampling down from 50 to 10 frames
prediction = model.predict(preprocessed)
return prediction

示例:输入为 50 帧,预处理和预测所需的总时间为 1 秒。 (注意模型只看到 10 个预处理帧) 因此,1 帧的处理时间为 1/50 秒。 如果是 1/10 秒,因为模型只能处理 10 帧,其他的只是在预处理中被跳过。我应该把开始时间和结束时间框架放在哪里?

哪种方式是标准方式还是正确方式?

【问题讨论】:

    标签: python performance machine-learning deep-learning


    【解决方案1】:

    没有标准的方法,这取决于您将结果究竟用于什么。

    如果您只想展示深度学习模型所用的时间,请不要包含预处理步骤。

    如果您想对端到端流程进行计时,请包括整个管道。

    一个更好的解决方案是profile 你是代码。这将让您详细了解代码的每个部分需要多长时间,这样您就不必选择其他部分了。

    在您的情况下,由于您想根据帧数来计算时间,所以我不在乎您的模型看到多少帧或管道的任何工作。作为用户,我关心的只是如果我放入 X 帧,需要多长时间。所以以 50 帧/秒的速度运行。

    【讨论】:

    • 感谢您的回答。其实我正在写一篇关于它的文章,想将它的计算时间与其他现有模型进行比较,那样的话人们更关心的只是模型,那么只包括模型的处理速度会更好吗?跨度>