diff --git a/README.md b/README.md index 5bfe3a22..b4193fcf 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,10 @@ ![](https://img.shields.io/static/v1?label=pytorch&message=1.4&color=) [![](https://img.shields.io/static/v1?label=license&message=Apache2&color=green)](./License.txt) +-Add own xml to yolov4 train.txt. + +-match the coco evaluate shape requirement. + A minimal PyTorch implementation of YOLOv4. - Paper Yolo v4: https://arxiv.org/abs/2004.10934 - Source code:https://github.com/AlexeyAB/darknet diff --git a/dataset.py b/dataset.py index b46259a4..e8a02940 100644 --- a/dataset.py +++ b/dataset.py @@ -423,6 +423,7 @@ def get_image_id(filename:str) -> int: >>> no = f"{int(no):04d}" >>> return int(lv+no) """ + # raise NotImplementedError("Create your own 'get_image_id' function") # lv, no = os.path.splitext(os.path.basename(filename))[0].split("_") # lv = lv.replace("level", "") @@ -437,6 +438,7 @@ def get_image_id(filename:str) -> int: return id + if __name__ == "__main__": from cfg import Cfg import matplotlib.pyplot as plt diff --git a/xml2yolov4.py b/xml2yolov4.py new file mode 100644 index 00000000..1b9a2c60 --- /dev/null +++ b/xml2yolov4.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Aug 26 15:05:40 2020 + +@author: Liu qi +""" + + +from xml.dom.minidom import parse +import xml.dom.minidom +import os +import shutil + +def get_file_path(file_path): + ''' + :param filename:修改后路径 + :param file_path: 图片所在label文件夹目录 + :param h,w: 图片的长宽 + :return:图片的路径列表 + ''' + img_paths = [] + img_names = os.listdir(file_path) + for img_name in img_names: + img_path = os.path.join(file_path, img_name) + img_paths.append(img_path) + return img_paths +def mkdir_if_not_exist(path): + if not os.path.exists(os.path.join(*path)): + os.makedirs(os.path.join(*path)) + return os.path.join(*path) +path = r'D:\bonc\DPcase\yolov4_yolov5\nonmotor\new_data_1_label' +mkdir_if_not_exist(['./images/train/']) +xml_paths = get_file_path(path) + +label_dict = {"bicycle":0, + "express_bicycle":1, + "express_tricycle":2, + "tricycle":3, + "electric_bicycle":4,} +f = open('train_1.txt','w+') + +for xml_path in xml_paths: + domTree = parse(xml_path) + rootNode = domTree.documentElement + #img_name + filename = rootNode.getElementsByTagName("filename") + img_name = filename[0].childNodes[0].data + #move image + #shutil.copy('D:/bonc/DPcase/non-motor vehicle/new_data_1/'+img_name,'../data/'+img_name) + + rm = True + xmlobjects = rootNode.getElementsByTagName("object") + for xmlobject in xmlobjects: + obname = xmlobject.getElementsByTagName("name") + label_name = obname[0].childNodes[0].data + if label_name in label_dict: + if rm: + f.write('\n') + f.write('../nonmotor/images/train/'+img_name) + rm =False + label = label_dict[label_name] + + obbox = xmlobject.getElementsByTagName("bndbox") + + obxmin = obbox[0].getElementsByTagName("xmin") + xmin = obxmin[0].childNodes[0].data + + obymin = obbox[0].getElementsByTagName("ymin") + ymin = obymin[0].childNodes[0].data + + obxmax = obbox[0].getElementsByTagName("xmax") + xmax = obxmax[0].childNodes[0].data + + obymax = obbox[0].getElementsByTagName("ymax") + ymax = obymax[0].childNodes[0].data + + + bbox_info=" %d,%d,%d,%d,%d" % (int(xmin), int(ymin), int(xmax), int(ymax), label) + f.write(bbox_info) +f.close() \ No newline at end of file