TensorFlow - 对象检测模块,尝试使用 protoc 时出现错误

Posted

技术标签:

【中文标题】TensorFlow - 对象检测模块,尝试使用 protoc 时出现错误【英文标题】:TensorFlow - object detection module, error appear when trying to use protoc 【发布时间】:2018-01-24 07:04:27 【问题描述】:

protoc 有问题,该行在 Windows 中不起作用。

我知道了errors

使用这条线

protoc --proto_path=./object_detection/protos --python_out=c:\testmomo ./object_detection/protos/anchor_generator.proto

我收到此错误

object_detection/protos/grid_anchor_generator.proto: File not found.
object_detection/protos/ssd_anchor_generator.proto: File not found.
anchor_generator.proto: Import "object_detection/protos/grid_anchor_generator.proto" was not found or had errors.
anchor_generator.proto: Import "object_detection/protos/ssd_anchor_generator.proto" was not found or had errors.
anchor_generator.proto:12:5: "GridAnchorGenerator" is not defined.
anchor_generator.proto:13:5: "SsdAnchorGenerator" is not defined.

有什么问题??

【问题讨论】:

我也有同样的问题 错误继续。问题出在官方仓库github.com/tensorflow/models 和/或与python 导入相关 【参考方案1】:

我尝试了不同的方法,并找出了问题所在。

确保你这样做:

# From models/
protoc object_detection/protos/*.proto --python_out=.

而我试图这样做:

# from object_detection/
protoc protos/*.proto --python_out=.

这给了我和你一样的错误。

检查您是否在正确的位置(目录)。

【讨论】:

谢谢。这行得通。但是,我认为它来自更新后的 repo 中的 tensorflow/models/research/。【参考方案2】:

首先请注意 protoc 缓冲区非常笨拙,无法正确捕获所有文件,您有两个选项可以手动编译所有 29 个文件或按照以下步骤操作。

    将protoc exe文件复制到所有proto文件所在的文件夹,即 "models-master\models-master\research\object_detection\protos"

    接下来使用 notepad++ 打开文件夹“models-master\research\object_detection\protos”中的所有文件。

    按 ctrl+f 并删除所有文件中的“object_detection/protos/” (如果您是手动操作,请记住 protoc 按字母顺序开始,所以从文件“anchor_generator.proto”开始)。

例如替换:-

import "object_detection/protos/grid_anchor_generator.proto";
import "object_detection/protos/ssd_anchor_generator.proto";
import "object_detection/protos/multiscale_anchor_generator.proto";

用这个:-

import "grid_anchor_generator.proto";
import "ssd_anchor_generator.proto";
import "multiscale_anchor_generator.proto";

4.现在在同一目录中打开 Cmd 即 "\models master\research\object_detection\protos" 类型:- protoc *.proto --python_out=。 请注意,您将在文件夹中获得新的 .py 文件,并且执行上述文件时不会出错。

5.输出:-

注意:- 确保打开所有文件并尝试使用第 4 步的输出找到丢失的文件。

【讨论】:

【参考方案3】:

好像没有文件:object_detection/protos/grid_anchor_generator.proto 和 ssd_ancho_generator.proto

您是否只是克隆了模型存储库或修改了某些内容?

【讨论】:

【参考方案4】:

在 object_detection protos 文件夹中给出了导入行

import "object_detection/protos/grid_anchor_generator.proto";

改成

import "research/object_detection/protos/grid_anchor_generator.proto";

【讨论】:

你没有提到你说的是哪个文件?【参考方案5】:

简单地说,为它们中的每一个运行 protocbuf。

protoc object_detection/protos/grid_anchor_generator.proto --python_out=。

【讨论】:

这实际上是解决方案。不知道为什么你运行protoc research/object_detection/protos/*.proto --python_out=.的时候会漏掉这3个文件,但是你可以一一编译没有问题。

以上是关于TensorFlow - 对象检测模块,尝试使用 protoc 时出现错误的主要内容,如果未能解决你的问题,请参考以下文章

在自己的数据集上训练 TensorFlow 对象检测

我如何使用 tensorflow 对象检测来仅检测人员?

AttributeError:模块“tensorflow”没有属性“app”

如何在 Tensorflow 对象检测 api 中评估预训练模型

TensorFlow 对象检测 API 中未检测到任何内容

Tensorflow 对象检测 API - 当我尝试运行 model_builder_test.py 时出现 ImportError