训练SSD时报错IndexError: Too many indices for array:Array is 1-dimensional,but 2 were indexed

训练SSD网络的时候,出现报错:imgboxeslabels = self.transform(imgtarget[:, :4], target[:, 4]) IndexErrortoo many indices for array  

IndexError: Too many indices for array:Array is 1-dimensional,but 2 were indexed 

网上的解决方法有很多:SSD-pytorch 训练过程全记录_如何使ssd-pytorch记录训练的结果-CSDN博客训练ssd300时网络报错_导入ssd300出错_口在天上,数在心中的博客-CSDN博客【精选】SSD-Pytorch训练自己的VOC数据集&遇到的问题及解决办法_为什么制作好voc数据集运行代码,没有生成文件-CSDN博客【精选】SSD-Pytorch训练自己的VOC数据集&遇到的问题及解决办法_为什么制作好voc数据集运行代码,没有生成文件-CSDN博客最后发现是xml文件中有一个空object导致的,可以使用代码检查自己的xml文件或者一个一个打开看:

import argparse
import sys
import cv2
import os
import os.path as osp
import numpy as np

if sys.version_info[0] == 2:
    import xml.etree.cElementTree as ET
else:
    import xml.etree.ElementTree  as ET

parser = argparse.ArgumentParser(
            description='Single Shot MultiBox Detector Training With Pytorch')
train_set = parser.add_mutually_exclusive_group()
parser.add_argument('--root', default='/home/sd4t/why/workplace/ssd.pytorch-master/data/VOCdevkit/VOC2012' , help='Dataset root directory path')
args = parser.parse_args()

CLASSES = [('person')]
annopath = osp.join('%s', 'Annotations', '%s.{}'.format("xml"))
imgpath  = osp.join('%s', 'JPEGImages',  '%s.{}'.format("png"))

def vocChecker(image_id, width, height, keep_difficult = False):
    target   = ET.parse(annopath % image_id).getroot()
    res      = []
    for obj in target.iter('object'):
        difficult = int(obj.find('difficult').text) == 1
        if not keep_difficult and difficult:
            continue
        name = obj.find('name').text.lower().strip()
        bbox = obj.find('bndbox')
        pts    = ['xmin', 'ymin', 'xmax', 'ymax']
        bndbox = []
        for i, pt in enumerate(pts):
            cur_pt = int(bbox.find(pt).text) - 1
            # scale height or width
            cur_pt = float(cur_pt) / width if i % 2 == 0 else float(cur_pt) / height
            bndbox.append(cur_pt)
        label_idx =  dict(zip(CLASSES, range(len(CLASSES))))[name]
        bndbox.append(label_idx)
        res += [bndbox]  # [xmin, ymin, xmax, ymax, label_ind]
        # img_id = target.find('filename').text[:-4]
    try :
        np.array(res)[:,4]
        np.array(res)[:,:4]
    except IndexError:
        print(image_id+" had error index")
    return res  # [[xmin, ymin, xmax, ymax, label_ind], ... ]

if __name__ == '__main__' :
    i = 0
    for name in sorted(os.listdir(osp.join(args.root,'Annotations'))):
    # as we have only one annotations file per image
        i += 1
        img    = cv2.imread(imgpath  % (args.root,name.split('.')[0]))
        height, width, channels = img.shape
        res = vocChecker((args.root, name.split('.')[0]), height, width)
    print("Total of annotations : {}".format(i))
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值