求解答:跑detr模型出现了“keyerror:'r' ”的问题,出问题的代码段在哪里??而且还有一个问题是:运行了VOC转JSON之后,.json文件中的filename还发生了变化?
首先阐述第二个问题的具体情况:
在我运行了VOC转JSON的代码后,.json文件中的文件名filename与.xml不一致,具体的表现为:
.json:
.xml:
就是最后的_600变成了_256,我不知道为啥会减掉4
具体代码如下,检查了也没切片操作啊,为啥(?)
def get(root, name):
vars = root.findall(name)
return vars
def get_and_check(root, name, length):
vars = root.findall(name)
if len(vars) == 0:
raise NotImplementedError('Can not find %s in %s.' % (name, root.tag))
if length > 0 and len(vars) != length:
raise NotImplementedError('The size of %s is supposed to be %d, but is %d.' % (name, length, len(vars)))
if length == 1:
vars = vars[0]
return vars
def get_filename_as_int(filename):
try:
filename = os.path.splitext(filename)[0]
return filename
except:
raise NotImplementedError('Filename %s is supposed to be an integer.' % (filename))
# xml_list为xml文件存放的txt文件名 xml_dir为真实xml的存放路径 json_file为存放的json路径
def convert(xml_list, xml_dir, json_file):
list_fp = open(xml_list, 'r')
json_dict = {"images": [], "type": "instances", "annotations": [],
"categories": []}
categories = PRE_DEFINE_CATEGORIES
bnd_id = START_BOUNDING_BOX_ID
for line in list_fp:
line = line.strip()
line = line + ".xml"
print("Processing %s" % (line))
xml_f = os.path.join(xml_dir, line)
tree = ET.parse(xml_f)
root = tree.getroot()
path = get(root, 'path')
if len(path) == 1:
filename = os.path.basename(path[0].text)
elif len(path) == 0:
filename = get_and_check(root, 'filename', 1).text
else:
raise NotImplementedError('%d paths found in %s' % (len(path), line))
## The filename must be a number
image_id = get_filename_as_int(filename)
size = get_and_check(root, 'size', 1)
width = int(get_and_check(size, 'width', 1).text)
height = int(get_and_check(size, 'height', 1).text)
image = {'file_name': filename, 'height': height, 'width': width,
'id': image_id}
json_dict['images'].append(image)
出现keyerror'r'的错误报告如下,这个错也不知道从何纠起
Traceback (most recent call last):
File "C:\Githouse\detr-main\detr-main\main.py", line 247, in <module>
main(args)
File "C:\Githouse\detr-main\detr-main\main.py", line 195, in main
train_stats = train_one_epoch(
File "C:\Githouse\detr-main\detr-main\engine.py", line 28, in train_one_epoch
for samples, targets in metric_logger.log_every(data_loader, print_freq, header):
File "C:\Githouse\detr-main\detr-main\util\misc.py", line 223, in log_every
for obj in iterable:
File "C:\Users\15022\anaconda3\envs\detr\lib\site-packages\torch\utils\data\dataloader.py", line 630, in __next__
data = self._next_data()
File "C:\Users\15022\anaconda3\envs\detr\lib\site-packages\torch\utils\data\dataloader.py", line 1344, in _next_data
return self._process_data(data)
File "C:\Users\15022\anaconda3\envs\detr\lib\site-packages\torch\utils\data\dataloader.py", line 1370, in _process_data
data.reraise()
File "C:\Users\15022\anaconda3\envs\detr\lib\site-packages\torch\_utils.py", line 706, in reraise
raise exception
KeyError: Caught KeyError in DataLoader worker process 0.
Original Traceback (most recent call last):
File "C:\Users\15022\anaconda3\envs\detr\lib\site-packages\torch\utils\data\_utils\worker.py", line 309, in _worker_loop
data = fetcher.fetch(index) # type: ignore[possibly-undefined]
File "C:\Users\15022\anaconda3\envs\detr\lib\site-packages\torch\utils\data\_utils\fetch.py", line 52, in fetch
data = [self.dataset[idx] for idx in possibly_batched_index]
File "C:\Users\15022\anaconda3\envs\detr\lib\site-packages\torch\utils\data\_utils\fetch.py", line 52, in <listcomp>
data = [self.dataset[idx] for idx in possibly_batched_index]
File "C:\Githouse\detr-main\detr-main\datasets\coco.py", line 27, in __getitem__
img, target = super(CocoDetection, self).__getitem__(idx)
File "C:\Users\15022\anaconda3\envs\detr\lib\site-packages\torchvision\datasets\coco.py", line 53, in __getitem__
image = self._load_image(id)
File "C:\Users\15022\anaconda3\envs\detr\lib\site-packages\torchvision\datasets\coco.py", line 41, in _load_image
path = self.coco.loadImgs(id)[0]["file_name"]
File "C:\Users\15022\anaconda3\envs\detr\lib\site-packages\pycocotools\coco.py", line 227, in loadImgs
return [self.imgs[id] for id in ids]
File "C:\Users\15022\anaconda3\envs\detr\lib\site-packages\pycocotools\coco.py", line 227, in <listcomp>
return [self.imgs[id] for id in ids]
KeyError: 'r'
ai出来说是主要是这个 File "C:\Githouse\detr-main\detr-main\datasets\coco.py", line 27, in getitem ?
打印出来的idx确实有'r',可是不知道哪来的?究竟怎么溯源找到错误源头?