TensorFlow - 目标检测模块,在尝试使用 protoc 时出现错误

9

我在Windows系统中遇到了使用protoc的问题,这行代码不能工作。

我收到了以下错误信息

使用以下代码:

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.

什么是问题?

我有同样的问题。 - Július Marko
错误仍然存在。问题出在官方存储库 https://github.com/tensorflow/models 或者与 Python 导入相关。 - JRichardsz
5个回答

16
我尝试了不同的方法,找到了问题所在。
确保你按照这种方式来做:
# From models/research
protoc object_detection/protos/*.proto --python_out=.

而我试图这样做:
# from object_detection/
protoc protos/*.proto --python_out=.

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

检查一下你是否在正确的位置(目录)。


3
谢谢。这个有效。不过,我认为它来自更新的 tensorflow/models/research/ 仓库。 - rakidedigama

5
首先需要注意的是,Protoc缓冲区相当愚蠢,并且不能正确捕获所有文件,您有两个选项:手动编译所有29个文件或按照以下步骤操作。
  1. 将protoc exe文件复制到所有proto文件所在的文件夹中,即"models-master\models-master\research\object_detection\protos" keep protoc.exe and the *.protoc file in same folder

  2. 接下来,使用Notepad++打开文件夹"models-master\research\object_detection\protos"中的所有文件。

  3. 按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.输出结果:-enter image description here

注意:请确保打开所有文件并尝试使用步骤4的输出来查找缺失的文件。


0

简单来说,对于每个文件都运行 protocbuf。

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


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

0

似乎没有文件:object_detection/protos/grid_anchor_generator.proto和ssd_anchor_generator.proto

你只是克隆了模型存储库还是修改了什么东西?


0
在 object_detection protos 文件夹中,给出了导入行。
import "object_detection/protos/grid_anchor_generator.proto";

将其更改为

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

你没有提到你在谈论哪个文件? - Azim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接