PyTorch-YOLOv3
                                
                                 PyTorch-YOLOv3 copied to clipboard
                                
                                    PyTorch-YOLOv3 copied to clipboard
                            
                            
                            
                        VOC
I want to ask how to train e on VOC dataset? Whether I need to write my own configuration file?
I think you should convert VOC to YOLO on your own I used the following code to rebuild my everything customer configuration all you need is the images and the annotation path (which is VOC)
import os
from datetime import datetime
from shutil import copy
import xml.etree.ElementTree as ET
from absl import app, flags, logging
FLAGS = flags.FLAGS
flags.DEFINE_string('images', None, 'train images folder')
flags.DEFINE_string('annotation', None, 'train annotation folder')
flags.DEFINE_bool('rebuild', True, 'true if not all images has equivalent annotation files')
flags.DEFINE_bool('VOCtoYOLO', False, 'add a new directory with Yolo annotation from VOC')
flags.DEFINE_string('classes', None, 'classes file location, .names file in root directory')
flags.DEFINE_bool('new_name', True, 'Change images and annotation file name')
flags.mark_flag_as_required('images')  # path to train images………
flags.mark_flag_as_required('annotation')  # path to train annotation
def convert(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = (box[0] + box[1]) / 2.0 - 1
    y = (box[2] + box[3]) / 2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)
def main(argv):
    images = FLAGS.images
    annotation = FLAGS.annotation
    rebuild = FLAGS.rebuild
    VOCtoYOLO = FLAGS.VOCtoYOLO
    # create new directory for validation anyway
    now = datetime.now()
    # create two new folders
    new_dir = 'images-' + now.strftime('%m-%d-%Y-%H-%M-%S')
    os.makedirs(new_dir)
    classes = []
    if FLAGS.classes is not None:
        # copy the classes file it self to the new directory
        copy(FLAGS.classes,
             new_dir)
        # create the classes list
        with open(FLAGS.classes) as f:
            classes = [my_class.strip() for my_class in f]
    if rebuild:
        new_dir_images = new_dir + '/images'
        new_dir_annotation = new_dir + '/annotation'
        yolo_dir = new_dir + '/YOLO_annotation'
        # create two folders in the new images: images and annotation
        os.makedirs(new_dir_images)
        os.makedirs(new_dir_annotation)
        if VOCtoYOLO:
            os.makedirs(yolo_dir)
        counter = 0
        if os.path.exists(annotation):
            # count the number of annotation files
            annotation_count = len([file for file in os.listdir(annotation)])
            train_count = annotation_count - (annotation_count // 3)
            # create train and validation files
            train = open(os.path.join(new_dir, 'train.txt'), 'w')
            validation = open(os.path.join(new_dir, 'validation.txt'), 'w')
            for annotation_file_name in os.listdir(annotation):
                annotation_file = os.path.splitext(annotation_file_name)[0]
                image_file_name = annotation_file + '.JPG'
                # if image exists move both annotation and images to new directory
                if os.path.exists(os.path.join(images, image_file_name)):
                    # copy annotation
                    copy(os.path.join(annotation, annotation_file_name),
                         os.path.join(new_dir_annotation, annotation_file_name))
                    copy(os.path.join(images, image_file_name),
                         os.path.join(new_dir_images, image_file_name))
                    # print('copying ' + annotation_file_name + ' & ' + image_file_name + ' >>> ' + new_dir)
                    counter += 1
                    if counter < train_count:
                        train.write('data/custom/images/' + image_file_name + '\n')
                    else:
                        validation.write('data/custom/images/' + image_file_name + '\n')
                    # if convert VOC to YOLO
                    if VOCtoYOLO and classes:
                        # create the new Yolo file
                        yolo_file = open(os.path.join(yolo_dir, annotation_file) + '.txt', 'w')
                        tree = ET.parse(os.path.join(annotation, annotation_file_name))
                        root = tree.getroot()
                        size = root.find('size')
                        w = int(size.find('width').text)
                        h = int(size.find('height').text)
                        for obj in root.iter('object'):
                            cls = obj.find('name').text
                            cls_id = classes.index(cls)
                            xmlbox = obj.find('bndbox')
                            b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text),
                                 float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))
                            bb = convert((w, h), b)
                            yolo_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
        logging.info('Copied ' + str(counter) + ' Images and Annotation')
if __name__ == '__main__':
    app.run(main)
Do you mean this code converts VOC to COCO? then I can train directly (I just need images with labels)
should convert VOC to YOLO like annotation
<class id> <x> <y> <w> <h>
xml convert to json? Txt needs to be made by myself. right?
should convert VOC to YOLO like annotation
<class id> <x> <y> <w> <h>
hello,have you train voc sussesflu? how about map?
should convert VOC to YOLO like annotation
<class id> <x> <y> <w> <h>hello,have you train voc sussesflu? how about map?
I found a label tool which can make yolo format, so I give up voc
should convert VOC to YOLO like annotation
<class id> <x> <y> <w> <h>hello,have you train voc sussesflu? how about map?
I found a label tool which can make yolo format, so I give up voc
Hello, can you share this tool, I have the same trouble like yours. Thanks.
sorry,I don't use this code finally.It's not difficult to make new annotation from xml format by yourself.Yout can try it!