尝试 运行 暗网检测时无法打开文件 yolov3_custom_last.weights
Couldn't open file yolov3_custom_last.weights when trying to run darknet detection
我一直在尝试使用 YOLO (v3) 来实现和训练带有 OpenImage
数据集的 Tank 对象检测。
我试图从 this tutorial 获得帮助,我的代码看起来很像。
我也在使用 Google Colab 和 Google Drive 服务。
通过我的程序一切顺利。但是当我 运行 darknet
训练检测时,我在最后一步遇到了错误。
!./darknet detector train "data/obj.data" cfg/yolov3_custom.cfg "darknet53.conv.74" -dont_show
100 次迭代后,当它试图将进度保存到我在 obj.data
文件中指定的备份文件夹中时,我收到以下错误:
Saving weights to /content/drive/My\Drive/YOLOv3/backup/yolov3_custom_last.weights
Couldn't open file: /content/drive/My\Drive/YOLOv3/backup/yolov3_custom_last.weights
起初,我以为我用错了地址;所以,我尝试使用 ls 命令检查地址
!ls /content/drive/My\Drive/YOLOv3/backup/
结果是一个空文件夹(但是,这不是错误,这意味着我写的地址正确并且可以在我的 google 驱动器中访问)。
以下是 data.object 文件的内容:
classes = 1
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = /content/drive/My\ Drive/YOLOv3/backup
我还对配置文件进行了必要的更改,所以我认为问题不在于此。但只是为了确保这里是我在 yolov3.cfg
文件中所做的更改:
- 首先,我们将注释第 3 行和第 4 行(批处理、细分)以取消设置测试模式
- 我们将取消注释第 6 行和第 7 行(批处理,细分)以设置为训练模式
- 我们将
max_batches
值更改为 2000 * number_of_classes(如果有一个 class 像我们的情况,设置为 4000)
- 我们将类似步长元组的值更改为 max_baches 值的 80%、90%。在这种情况下,它将是 3200、3600。
- 对于所有 YOLO层和它们之前的卷积层,将
classes
值更改为classes的数量,在本例中为1,并更改根据以下公式计算 filters
的值(在本例中为 18)
转换层过滤器值的公式: (number_of_classes + 5)*3
我搜索错误,在Github上找到了this issue。
但是,我尝试了下面推荐的方法,问题还是一样:
- 删除并重新创建
backup
文件夹
- 试图在
.cfg
文件夹中的 yolo.data
文件中添加 backup = backup
行,但 cfg 文件夹中没有这样的文件。
- 正在备份文件夹中创建一个空
yolov3_custom_last.weights
本期提到的其他解决方案是关于当您在 PC 上使用 运行 YOLO 而不是 google Colab 时。
另外,这里是我的文件夹 YOLOv3 的树结构,它存储在我的 Google Drive My Drive(主文件夹)中。
YOLOv3
darknet53.conv.74
obj.data
obj.names
Tank.zip
yolov3.weights
yolov3_custom.cfg
yolov3_custom1.cfg.txt
所以,我有点卡住了,我不知道有什么可以解决这个问题。我会很感激一些帮助。
我在 Windows 10 上遇到了同样的错误,我想我已经解决了。我所要做的就是将我的“weights”文件夹(里面有我的yolov3.weights)移动到离我的“x64”文件夹中的.exe文件更近的地方。之后,错误不再出现,应用程序能够正常预测测试图像。
我已经解决了使用 ln
命令更改本地驱动器地址的问题。
问题不在于我的代码,而在于 yolov3 开发人员在目录地址中处理 space
的方式!显然,正如我在他们的文档中所想的那样,他们没有很好地处理目录中的 space 。
所以我创建了一个虚拟地址,它不像我的云端硬盘那样有 space。
P.S:如您所知,My Drive 文件夹已经存在于您的 google 驱动器中,因此您实际上无法重命名它。
这是您可以用来实现此目的的代码:
!ln -s /content/drive/My\ Drive/ /mydrive
我一直在尝试使用 YOLO (v3) 来实现和训练带有 OpenImage
数据集的 Tank 对象检测。
我试图从 this tutorial 获得帮助,我的代码看起来很像。
我也在使用 Google Colab 和 Google Drive 服务。
通过我的程序一切顺利。但是当我 运行 darknet
训练检测时,我在最后一步遇到了错误。
!./darknet detector train "data/obj.data" cfg/yolov3_custom.cfg "darknet53.conv.74" -dont_show
100 次迭代后,当它试图将进度保存到我在 obj.data
文件中指定的备份文件夹中时,我收到以下错误:
Saving weights to /content/drive/My\Drive/YOLOv3/backup/yolov3_custom_last.weights
Couldn't open file: /content/drive/My\Drive/YOLOv3/backup/yolov3_custom_last.weights
起初,我以为我用错了地址;所以,我尝试使用 ls 命令检查地址
!ls /content/drive/My\Drive/YOLOv3/backup/
结果是一个空文件夹(但是,这不是错误,这意味着我写的地址正确并且可以在我的 google 驱动器中访问)。
以下是 data.object 文件的内容:
classes = 1
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = /content/drive/My\ Drive/YOLOv3/backup
我还对配置文件进行了必要的更改,所以我认为问题不在于此。但只是为了确保这里是我在 yolov3.cfg
文件中所做的更改:
- 首先,我们将注释第 3 行和第 4 行(批处理、细分)以取消设置测试模式
- 我们将取消注释第 6 行和第 7 行(批处理,细分)以设置为训练模式
- 我们将
max_batches
值更改为 2000 * number_of_classes(如果有一个 class 像我们的情况,设置为 4000) - 我们将类似步长元组的值更改为 max_baches 值的 80%、90%。在这种情况下,它将是 3200、3600。
- 对于所有 YOLO层和它们之前的卷积层,将
classes
值更改为classes的数量,在本例中为1,并更改根据以下公式计算filters
的值(在本例中为 18)
转换层过滤器值的公式: (number_of_classes + 5)*3
我搜索错误,在Github上找到了this issue。 但是,我尝试了下面推荐的方法,问题还是一样:
- 删除并重新创建
backup
文件夹 - 试图在
.cfg
文件夹中的yolo.data
文件中添加backup = backup
行,但 cfg 文件夹中没有这样的文件。 - 正在备份文件夹中创建一个空
yolov3_custom_last.weights
本期提到的其他解决方案是关于当您在 PC 上使用 运行 YOLO 而不是 google Colab 时。 另外,这里是我的文件夹 YOLOv3 的树结构,它存储在我的 Google Drive My Drive(主文件夹)中。
YOLOv3
darknet53.conv.74
obj.data
obj.names
Tank.zip
yolov3.weights
yolov3_custom.cfg
yolov3_custom1.cfg.txt
所以,我有点卡住了,我不知道有什么可以解决这个问题。我会很感激一些帮助。
我在 Windows 10 上遇到了同样的错误,我想我已经解决了。我所要做的就是将我的“weights”文件夹(里面有我的yolov3.weights)移动到离我的“x64”文件夹中的.exe文件更近的地方。之后,错误不再出现,应用程序能够正常预测测试图像。
我已经解决了使用 ln
命令更改本地驱动器地址的问题。
问题不在于我的代码,而在于 yolov3 开发人员在目录地址中处理 space
的方式!显然,正如我在他们的文档中所想的那样,他们没有很好地处理目录中的 space 。
所以我创建了一个虚拟地址,它不像我的云端硬盘那样有 space。
P.S:如您所知,My Drive 文件夹已经存在于您的 google 驱动器中,因此您实际上无法重命名它。
这是您可以用来实现此目的的代码:
!ln -s /content/drive/My\ Drive/ /mydrive