我正在尝试使用 tensorflow c++ api(仅限 CPU)运行 SqueezeDet。我已经冻结了张量流图并从 C++ 加载它。虽然在检测质量方面一切都很好,但性能比 python 慢得多。那可能是什么原因?
简化后,我的代码如下所示:
int main (int argc, const char * argv[])
{
// Initializing graph
tensorflow::GraphDef graph_def;
// Folder in which graph data is located
string graph_file_name = "Model/graph.pb";
// Loading graph
tensorflow::Status graph_loaded_status = ReadBinaryProto(tensorflow::Env::Default(), graph_file_name, &graph_def);
if (!graph_loaded_status.ok())
{
cout << graph_loaded_status.ToString() << endl;
return 1;
}
unique_ptr<tensorflow::Session> session_sqdet(tensorflow::NewSession(tensorflow::SessionOptions()));
tensorflow::Status session_create_status = session_sqdet->Create(graph_def);
if (!session_create_status.ok())
{
cout << "Session create status: fail." << endl;
return 1;
}
while ()
{
/* create & preprocess batch */
session.Run({{ "image_input", input_tensor}, {"keep_prob", prob_tensor}}, {"probability/score", "bbox/trimming/bbox"}, {}, &final_output);
/* do some postprocessing */
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
1) 使用优化标志 - 全部开启,没有警告。
2)使用batching:性能有所提升,但是python和C++的差距还是很大(运行session需要1s vs 2.4s,batch_size = 20)。
任何帮助将不胜感激。
我在这个问题上花了很多时间(大部分是因为我犯了愚蠢的错误),但我终于解决了它。现在我想在这里发布我的经验,因为它可能有用。
因此,我建议遵循面临相同问题的人采取这些步骤(尽管其中一些非常明显):
0) 正确进行分析!确保您使用的工具在多核/GPU/任何设置下都是可靠的。
1) 检查 TensorFlow 和所有相关包是否已在所有优化的情况下构建。
2)优化冻结后的图表。
3) 如果您在训练和推理过程中使用不同的批量大小,请确保您已删除模型中的所有依赖项!请注意,否则您不会收到错误消息,甚至不会出现结果质量更差的性能,而只会出现神秘的速度下降!
| 归档时间: |
|
| 查看次数: |
1428 次 |
| 最近记录: |