跑yolov3的时候,出现这种路径错误(但是我检查很多次了,路径没有问题),而且每次报的错误位置一直在变换,到现在也没有解决。
检查下TensorFlow的配置有没有问题,数据集到底路径对不对也只有你自己看得到
不知道你这个问题是否已经解决, 如果还没有解决的话:首先,上大神凯源代码:https://github.com/YunYang1994/tensorflow-yolov3,该代码讲述是大神用voc数据训练时使用的全部代码,所以你的训练自己的数据有些代码用不到。
下面是整个步骤,纯属个人理解,有不同意见欢迎提出。
一.首先将大神的代码克隆下来 :与本篇博客结合使用,更美味
$ git clone https://github.com/YunYang1994/tensorflow-yolov3.git
如果是识别常规物体,使用大神的part 2 的quick start 就好了,而如果是自己的数据集特别的物品,请参看下面的讲解:
1.制作自己的训练图像数据集,工具labelimg,在网上可以搜到官方安装和使用教程,这里不做赘述,python3使用者推荐安装方法:
pip install labelimg
在终端输入 labelimg 启动软件
2.图像标记后数据格式xml,将xml数据提取data.txt,格式为:
Xxx/xxx.jpg 48,240,195,371,11 8,12,352,498,14 #注意逗号和空格的位置
#image path x_min,ymin,x_max,y_max,class_id x_min,y_min
数据提取代码参考如下:
#将images里的数据保存标准格式
import xml.etree.ElementTree as ET # 给包xml.etree.ElementTree 定义一个 ET 别名 操作XML文件的包
import pickle # pickle 模块 将某个对象所对应位置的数据抓取下来,转换成文本流,然后将文本流存入到文件中。
import os # os 模块 提供了非常丰富的方法用来处理文件和目录。
from os import listdir, getcwd # 从os包中引入 listdir, getcwd 类
from os.path import join,isfile # 从 os包中的path类中引入 join 方法
#类名
classes=['xxx','xxx','xxxx']
def convert_annotation(image_id):
filename='/相对路径/'+str(image_id)+'.xml'
#判断是否存在,
if (isfile(filename)!=True):
return False
in_file = open('./相对路径/%s.xml' % (image_id), encoding='UTF-8')
#out_file = open('labels/%s.txt' % (image_id), 'w', encoding='UTF-8') 如果是采用yolo形式标记,会是txt文件
"""
‘w’打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
"""
# 从xml文件中获取图片标注的宽与高
tree = ET.parse(in_file)
root = tree.getroot()
size = root.find('size')
w = int(size.find('width').text)
h = int(size.find('height').text)
string=' '
for obj in root.iter('object'):
# difficult = obj.find('difficult').text
cls = obj.find('name').text#类别
# if cls not in classes or int(difficult) == 1:
if cls not in classes:
continue
cls_id = classes.index(cls)
xmlbox = obj.find('bndbox')
b = (xmlbox.find('xmin').text)+','+(xmlbox.find('ymin').text)+','+ (xmlbox.find('xmax').text)+','+ (xmlbox.find('ymax').text)+','
#bb = convert((w, h), b)
#out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
string=string+b+str(cls_id)+' '
return string
#将信息写入data.txt文件
out_file = open('./相对路径/data.txt', 'w', encoding='UTF-8')
rootpath='./相对路径/image/'
for file in os.listdir('./相对路径/image/'):#('./VOC/JPEGImages/'): 训练图像的文件
path=rootpath+file
image_id=str(file.split('.j')[0])
image_file=convert_annotation(image_id)
if image_file==False:
continue
filepath=path+image_file
print(filepath)
out_file.write(filepath+ '\n')
out_file.close()
Image path 推荐使用相对于train.py的相对路径
定义自己的类名文件:Class.nams:
Person
car
…
这里已将将数据提取为data.txt的形式,就不用大神训练VOC数据的代码 voc_annotation.py
将data.txt按一定比例分为trian.txt和test.txt,拿来训练网络和测试效果。
3.编辑./core/config.py 中的配置项
_C.YOLO.CLASSES =”./data/classes/class.names”
_C.TRAIN.ANNOT_PATH=”./data/dataset/train.txt”
_C.TEST.ANNOT_PATH=”./data/dataset/test.txt”
按照大神的两种训练方式都可以训练方式,推荐迁移学习方式训练,最后迭代50遍训练结束,保留误差最小的权重文件ckpt。
到这里大家都比较疑惑代码中的convert_weight.py用不了,其实这个代码不用使用。大家刚把代码拷贝下来时应该注意源代码中不存在.ckpt文件,所以这个代码的作用是将模型中的yolov3.weight文件转成.ckpt文件!!
所以下面一步应该是直接用代码freeze_graph.py将ckpt文件转为pb文件,被调用识别图片中物体。
转化前将freeze_graph.py中的pb.file改为自己想要的模型文件名,ckpt_file改为要转换的训练出来的ckpt文件。
现在大功告成,开心的使用源代码提供的image_demo和vedio_demo代码识别图像和视频中的物体吧。(使用前根据自己的数据集修改代码中num_classes中的数量)
报错都是同一行,所以还是数据集路径找不到的问题,每次报错的路径在换应该是因为训练集的图片顺序shuffle随机打乱过了,可以尝试一下路径里的\都换成/,或者就把数据集路径搬到工程目录下,通过下面这种方式读取也可以:
看着还是你的文件路径的问题啊,你看这个地方:
每一次解答都是一次用心理解的过程,期望对你有所帮助。
参考结合AI智能库,如有帮助,恭请采纳。
大致思路:
答:你检查了路径没有问题,那是否排查了如下和路径相关的疑点:
1、路径中存在特殊字符或空格
2、路径长度或名称限制
3、文件权限问题
如果上述排查后还是存在问题,还可做最后努力:尝试更新程序或使用其他版本,并重新运行程序。【程序版本可能与指定的文件不兼容,导致路径错误。】
在跑yolov3的过程中,有时候会出现路径错误的情况,即程序执行到某一步时,会提示文件或路径不存在,导致程序无法继续执行。这种情况可能出现在训练、测试或部署等不同的应用场景中。下面我们来详细探讨一下这种情况的解决方法。
出现路径错误的情况往往是因为输入的路径不正确,这可能是因为文件名或文件夹名拼写错误,或者路径不存在等原因导致的。因此,我们需要仔细检查输入的路径是否正确。可以通过打印路径或者在文件管理器中查看路径的方式来检查。
如果输入的路径正确,但是文件还是无法读取,那么可能是因为文件权限不够。在Linux系统中,每个文件夹和文件都有自己的权限设置,分为读取权限、写入权限和执行权限。如果文件的权限设置不正确,那么程序就无法访问该文件。因此,我们需要检查文件权限是否足够,或者使用chmod命令修改文件权限。
有时候,程序无法读取文件的原因是因为文件格式不正确。例如,你需要读取一个图片文件,但是文件实际上是一个视频文件,那么程序就无法正确读取该文件。因此,我们需要仔细检查文件格式是否正确。
在有些情况下,路径错误的问题并不是由于文件路径本身的问题,而是由于代码逻辑的问题。例如,你可能在代码中使用了错误的变量名或函数名,导致程序无法正确找到文件。因此,我们需要仔细检查代码中的变量名和函数名是否正确。
有时候,输入的相对路径可能不被程序解释为预期的路径,从而导致路径错误。为了避免这种情况,我们可以使用绝对路径来代替相对路径。绝对路径可以完全确定文件的位置,从而避免了路径解释错误的问题。
总之,出现路径错误的情况往往是由于文件路径不正确、文件权限不够、文件格式不对、代码逻辑有误等原因导致的。解决这些问题的关键是仔细检查并排除一一项原因,逐步缩小错误的范围,最终找到正确的解决方法。
在运行YoloV3时,可能会遇到路径错误的情况,即在运行脚本时,出现一些路径相关的错误信息。这些错误可能是由于文件路径设置不正确或文件夹缺失等原因引起的。此时,您需要检查路径是否正确,并确定文件和文件夹的位置是否正确。 如果您已经确认了路径和文件位置的正确性,但是仍然遇到了路径错误的问题,那么您可以考虑以下几个方面来解决该问题。
在某些情况下,文件权限可能会导致路径错误。确保您有足够的权限访问文件和文件夹。可以在终端中使用“ls -la”命令查看文件权限并更改权限。
使用绝对路径可以避免相对路径错误,因为它可以直接指向文件的位置。可以使用“pwd”命令获取当前目录的绝对路径。
例如,如果您的文件在/home/user目录中,则可以使用以下命令设置文件路径:
/home/user/folder/file-name
文件编码也可能会导致路径错误。在某些情况下,文件可能不是UTF-8编码。使用文本编辑器打开文件,然后将编码更改为UTF-8。这可能会解决路径错误的问题。
在某些情况下,文件格式可能不正确。检查文件的格式是否正确。您可以使用命令“file filename”检查文件格式。
在使用YoloV3之前,确保您使用的是正确的版本。如果您正在使用旧版本,则可能会出现与路径相关的错误。
在某些情况下,环境变量可能会影响路径。检查环境变量是否正确设置并修改需要更改的项。可以使用“echo $env_variable”命令显示环境变量的值。
总结
在运行YoloV3时遇到路径错误的问题,可以采取上述一些方法来解决该问题。如果以上方法都无法解决路径错误问题,可以尝试重新安装软件或与开发人员联系,获取更多帮助。
代码中的相对路径问题:请确保你的代码中所有涉及文件路径的地方都使用了绝对路径或者正确的相对路径。相对路径有时会引发问题,特别是当代码执行的位置发生变化时。
文件缺失或权限问题:确保你的所有相关文件都存在并且对于运行的用户有足够的权限。文件缺失或权限问题可能导致程序无法找到文件,从而引发路径错误。
外部依赖:Yolov3可能依赖一些外部文件或库,请确保这些依赖已经正确安装和配置。缺失或错误配置的依赖可能导致路径错误。
脚本或配置问题:如果你在运行Yolov3时使用了脚本或配置文件,请仔细检查这些文件的内容,确保路径配置正确。
为了解决这个问题,你可以尝试以下方法:
使用绝对路径:尽量使用绝对路径而不是相对路径,这样可以避免路径发生变化时引发的问题。
手动检查路径:手动检查代码中所有涉及路径的地方,并确保路径都是正确的。
重新安装依赖:如果Yolov3依赖一些外部文件或库,请重新安装这些依赖并确保配置正确。
查看错误日志:查看错误日志,找到报错的具体位置和错误信息,从中找到线索解决问题。
参考newbing
当在运行 YOLOv3 时出现路径错误,并且错误位置在不断变化,即使路径已经检查过没有问题,可能有以下几个原因:
文件或目录权限:请确保您对相关文件和目录有适当的读取和执行权限。检查文件和目录的权限设置,确保您具有正确的访问权限。
文件损坏或缺失:检查相关文件是否完整且未损坏。尤其是检查权重文件和模型文件是否正确且完整,如果文件损坏或缺失,可能会导致错误。
依赖项问题:确保您的系统上安装了所需的依赖项。YOLOv3 可能需要依赖于其他库或软件包,例如 OpenCV、NumPy 等。请确保这些依赖项已正确安装,并且与您的代码和系统兼容。
版本兼容性:检查您使用的 YOLO 版本和依赖项的兼容性。某些版本的 YOLO 可能需要特定的依赖项版本才能正常工作。请查阅相关文档或官方指南,以了解您正在使用的版本所需要的正确依赖项版本。
输入数据问题:检查您的输入数据是否正确。确保输入数据符合模型的要求,如图像尺寸、格式等。有时,错误位置的变化可能与输入数据的不一致有关。
环境配置问题:确保您的环境设置正确。例如,检查您的环境变量、路径设置等是否正确配置。
如果以上方法仍未解决问题,请尝试在开发环境中进行调试,逐步检查代码和数据,以确定错误的具体原因。如果需要进一步帮助,请提供更多详细信息,如代码片段、具体错误提示等,以便更好地理解问题并给出准确的解决方案。