我正在按照this教程使用我的对象检测模型使用 tensorflow serving
. 我正在使用tensorflow object detection来生成模型 . 我使用this exporter(使用python脚本生成的冻结模型 works )创建了一个冻结模型 .
冻结的图形目录具有以下内容( variables
目录中没有任何内容)
variables / saved_model.pb
现在,当我尝试使用以下命令提供服务时,
tensorflow_model_server --port=9000 --model_name=ssd --model_base_path=/serving/ssd_frozen/
它总是告诉我
... tensorflow_serving / model_servers / server_core.cc:421](重新)添加模型:ssd 2017-08-07 10:22:43.892834:W tensorflow_serving / sources / storage_path / file_system_storage_path_source.cc:262]没有可维护的版本在基本路径下找到的ssd / serving / ssd_frozen / 2017-08-07 10:22:44.892901:W tensorflow_serving / sources / storage_path / file_system_storage_path_source.cc:262]在基本路径/ serving / ssd_frozen /下找不到可服务ssd的版本 . .
2 回答
我有同样的问题,原因是因为对象检测api在导出检测模型时不会分配模型的版本 . 但是,tensorflow服务要求您指定检测模型的版本号,以便您可以选择要提供的不同版本的模型 . 在您的情况下,您应将检测模型(.pb文件和变量文件夹)放在文件夹:/ serving / ssd_frozen / 1 /下 . 通过这种方式,您可以将模型分配给版本1,并且tensorflow服务将自动加载此版本,因为您只有一个版本 . 默认情况下,tensorflow服务将自动提供最新版本(即最大数量的版本) .
注意,在创建1 /文件夹之后,仍需要将model_base_path设置为--model_base_path = / serving / ssd_frozen / .
对于新版本的tf服务,如您所知,它不再支持SessionBundle导出的模型格式,而是现在SavedModelBuilder .
我想最好从旧的模型格式恢复会话,然后通过SavedModelBuilder导出它 . 您可以使用它指示模型的版本 .
您可以在服务示例中找到上面代码的主要部分 . 最后,它将以可以提供的格式生成SavedModel .