赞
踩
目录
4、yolov8 cpp文件inference.cpp代码:
工程链接:https://github.com/ultralytics/ultralytics
训练时需要用到,下载的网址较慢:
如果模型下载不了,加QQ:187100248.
链接: https://pan.baidu.com/s/1YfMxRPGk8LF75a4cbgYxGg 提取码: rd7b
类别为23类,分别为:
red_light | green_light | yellow_light | off_light | part_ry_light | part_rg_light |
part_yg_light | ryg_light | countdown_off_light | countdown_on_light | shade_light | zero |
one | two | three | four | five | six |
seven | eight | nine | brokeNumber | brokenLight |
标注工具地址:AI标注工具Labelme和LabelImage Labelme和LabelImage集成工具_labelimage与labelme-CSDN博客
1)、Ubuntu18.04;
2)、Cuda11.7 + CUDNN8.0.6;
3)、opencv4.5.5;
4)、PyTorch1.8.1-GPU;
5)、python3.9
1)、需要把上面标定的数据集中的.xml文件转换为.txt,转换代码为:
- import os
- import shutil
- import xml.etree.ElementTree as ET
- from xml.etree.ElementTree import Element, SubElement
- from PIL import Image
- import cv2
-
- classes = ['red_light', 'green_light', 'yellow_light', 'off_light', 'part_ry_light', 'part_rg_light', 'part_yg_light', 'ryg_light',
- 'countdown_off_light', 'countdown_on_light','shade_light','zero','one','two','three','four','five','six','seven',
- 'eight','nine','brokeNumber','brokenLight']
-
- class Xml_make(object):
- def __init__(self):
- super().__init__()
-
- def __indent(self, elem, level=0):
- i = "\n" + level * "\t"
- if len(elem):
- if not elem.text or not elem.text.strip():
- elem.text = i + "\t"
- if not elem.tail or not elem.tail.strip():
- elem.tail = i
- for elem in elem:
- self.__indent(elem, level + 1)
- if not elem.tail or not elem.tail.strip():
- elem.tail = i
- else:
- if level and (not elem.tail or not elem.tail.strip()):
- elem.tail = i
-
- def _imageinfo(self, list_top):
- annotation_root = ET.Element('annotation')
- annotation_root.set('verified', 'no')
- tree = ET.ElementTree(annotation_root)
- '''
- 0:xml_savepath 1:folder,2:filename,3:path
- 4:checked,5:width,6:height,7:depth
- '''
- folder_element = ET.Element('folder')
- folder_element.text = list_top[1]
- annotation_root.append(folder_element)
-
- filename_element = ET.Element('filename')
- filename_element.text = list_top[2]
- annotation_root.append(filename_element)
-
- path_element = ET.Element('path')
- path_element.text = list_top[3]
- annotation_root.append(path_element)
-
- # checked_element = ET.Element('checked')
- # checked_element.text = list_top[4]
- # annotation_root.append(checked_element)
-
- source_element = ET.Element('source')
- database_element = SubElement(source_element, 'database')
- database_element.text = 'Unknown'
- annotation_root.append(source_element)
-
- size_element = ET.Element('size')
- width_element = SubElement(size_element, 'width')
- width_element.text = str(list_top[5])
- height_element = SubElement(size_element, 'height')
- height_element.text = str(list_top[6])
- depth_element = SubElement(size_element, 'depth')
- depth_element.text = str(list_top[7])
- annotation_root.append(size_element)
-
- segmented_person_element = ET.Element('segmented')
- segmented_person_element.text = '0'
- annotation_root.append(segmented_person_element)
-
- return tree, annotation_root
-
- def _bndbox(self, annotation_root, list_bndbox):
- for i in range(0, len(list_bndbox), 9):
- object_element = ET.Element('object')
- name_element = SubElement(object_element, 'name')
- name_element.text = list_bndbox[i]
-
- # flag_element = SubElement(object_element, 'flag')
- # flag_element.text = list_bndbox[i + 1]
-
- pose_element = SubElement(object_element, 'pose')
- pose_element.text = list_bndbox[i + 2]
-
- truncated_element = SubElement(object_element, 'truncated')
- truncated_element.text = list_bndbox[i + 3]
-
- difficult_element = SubElement(object_element, 'difficult')
- difficult_element.text = list_bndbox[i + 4]
-
- bndbox_element = SubElement(object_element, 'bndbox')
- xmin_element = SubElement(bndbox_element, 'xmin')
- xmin_element.text = str(list_bndbox[i + 5])
-
- ymin_element = SubElement(bndbox_element, 'ymin')
- ymin_element.text = str(list_bndbox[i + 6])
-
- xmax_element = SubElement(bndbox_element, 'xmax')
- xmax_element.text = str(list_bndbox[i + 7])
-
- ymax_element = SubElement(bndbox_element, 'ymax')
- ymax_element.text = str(list_bndbox[i + 8])
-
- annotation_root.append(object_element)
-
- return annotation_root
-
- def txt_to_xml(self, list_top, list_bndbox):
- tree, annotation_root = self._imageinfo(list_top)
- annotation_root = self._bndbox(annotation_root, list_bndbox)
- self.__indent(annotation_root)
- tree.write(list_top[0], encoding='utf-8', xml_declaration=True)
-
- def txt_2_xml(source_path, xml_save_dir, jpg_save_dir,txt_dir):
-
- COUNT = 0
- for folder_path_tuple, folder_name_list, file_name_list in os.walk(source_path):
- for file_name in file_name_list:
- file_suffix = os.path.splitext(file_name)[-1]
- if file_suffix != '.jpg':
- continue
- list_top = []
- list_bndbox = []
- path = os.path.join(folder_path_tuple, file_name)
- xml_save_path = os.path.join(xml_save_dir, file_name.replace(file_suffix, '.xml'))
- txt_path = os.path.join(txt_dir, file_name.replace(file_suffix, '.txt'))
- filename = file_name#os.path.splitext(file_name)[0]
- checked = 'NO'
- #print(file_name)
- im = Image.open(path)
- im_w = im.size[0]
- im_h = im.size[1]
-
- shutil.copy(path, jpg_save_dir)
-
-
- if im_w*im_h > 34434015:
- print(file_name)
- if im_w < 100:
- print(file_name)
-
- width = str(im_w)
- height = str(im_h)
- depth = '3'
- flag = 'rectangle'
- pose = 'Unspecified'
- truncated = '0'
- difficult = '0'
- list_top.extend([xml_save_path, folder_path_tuple, filename, path, checked, width, height, depth])
- for line in open(txt_path, 'r'):
- line = line.strip()
- info = line.split(' ')
- name = classes[int(info[0])]
- x_cen = float(info[1]) * im_w
- y_cen = float(info[2]) * im_h
- w = float(info[3]) * im_w
- h = float(info[4]) * im_h
- xmin = int(x_cen - w / 2) - 1
- ymin = int(y_cen - h / 2) - 1
- xmax = int(x_cen + w / 2) + 3
- ymax = int(y_cen + h / 2) + 3
-
- if xmin < 0:
- xmin = 0
- if ymin < 0:
- ymin = 0
-
- if xmax > im_w - 1:
- xmax = im_w - 1
- if ymax > im_h - 1:
- ymax = im_h - 1
-
- if w > 5 and h > 5:
- list_bndbox.extend([name, flag, pose, truncated, difficult,str(xmin), str(ymin), str(xmax), str(ymax)])
-
- if xmin < 0 or xmax > im_w - 1 or ymin < 0 or ymax > im_h - 1:
- print(xml_save_path)
-
- Xml_make().txt_to_xml(list_top, list_bndbox)
- COUNT += 1
- #print(COUNT, xml_save_path)
-
- if __name__ == "__main__":
-
- out_xml_path = "/home/TL_TrainData/" # .xml输出文件存放地址
- out_jpg_path = "/home/TL_TrainData/" # .jpg输出文件存放地址
- txt_path = "/home/Data/TrafficLight/trainData" # yolov3标注.txt和图片文件夹
- images_path = "/home/TrafficLight/trainData" # image文件存放地址
- txt_2_xml(images_path, out_xml_path, out_jpg_path, txt_path)
2)、训练样本数据构造,需要把分成images和labels,images下面放入图片,labels下面放入.txt文件:
1)、首先安装训练包:
pip install ultralytics
2)、修改训练数据参数coco128_light.yaml文件,这个是自己修改的。
- # Ultralytics YOLO 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/587951推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。