使用google colab训练yolo和ssd的问题

使用google colab训练yolo和ssd的问题

  • 问题描述
  • 解决方法

问题描述

当使用yolo或者ssd训练自己的数据时,利用相应的python程序会生成训练所需要的.txt文件,里面放置的为图片的路径,如

利用下面的程序能够生成训练所需的.txt文件

// An highlighted block
def convert_annotation(year, image_id, list_file):
    in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))
    tree=ET.parse(in_file)
    root = tree.getroot()

    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:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text), int(xmlbox.find('ymax').text))
        list_file.write(" " + ",".join([str(a) for a in b]) + ',' + str(cls_id))

wd = getcwd()

for year, image_set in sets:
    image_ids = open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()
    list_file = open('%s_%s.txt'%(year, image_set), 'w')
    for image_id in image_ids:
        list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg'%(wd, year, image_id))
        convert_annotation(year, image_id, list_file)
        list_file.write('\n')
    list_file.close()

生成的.txt文件
使用google colab训练yolo和ssd的问题_第1张图片

这样看好像并没有什么问题,但是执行训练操作时,会出现:
使用google colab训练yolo和ssd的问题_第2张图片
原因呢,是因为google的网盘名称叫My drive,中间有空格,但是程序在执行过程中并不能将其识别为一个整体,所以导致出现找不到路径的错误。

解决方法

解决方法其实很简单,让生成路径的代码,生成相对路径就好了。

// An highlighted block
def convert_annotation(year, image_id, list_file):
    in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))
    tree=ET.parse(in_file)
    root = tree.getroot()

    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:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text), int(xmlbox.find('ymax').text))
        list_file.write(" " + ",".join([str(a) for a in b]) + ',' + str(cls_id))

wd = getcwd()

for year, image_set in sets:
    image_ids = open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()
    list_file = open('%s_%s.txt'%(year, image_set), 'w')
    for image_id in image_ids:
        list_file.write('./VOCdevkit/VOC%s/JPEGImages/%s.jpg'%(year, image_id))
        convert_annotation(year, image_id, list_file)
        list_file.write('\n')
    list_file.close()

主要修改list_file.write(’%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg’%(wd, year, image_id))为
list_file.write(’./VOCdevkit/VOC%s/JPEGImages/%s.jpg’%(year, image_id)),这样就解决了这个问题。

下面是修改之后生成的.txt文件。
使用google colab训练yolo和ssd的问题_第3张图片

这样再训练就成功了
使用google colab训练yolo和ssd的问题_第4张图片

你可能感兴趣的:(使用google colab训练yolo和ssd的问题)