当前位置: 首页 > news >正文

答建设网站常州网站推广方法

答建设网站,常州网站推广方法,网站首页二级下拉框怎么做,网页设计教程前言#xff1a;我发现除了安装环境需要耗费大量时间以外#xff0c;对于训练前的准备工作也要琢磨一段时间#xff0c;所以本篇主要讲一下训练前需要准备的工作#xff08;主要是XML格式换为txt#xff0c;以及划分数据集验证集#xff0c;和训练参数的设置#xff09;…前言我发现除了安装环境需要耗费大量时间以外对于训练前的准备工作也要琢磨一段时间所以本篇主要讲一下训练前需要准备的工作主要是XML格式换为txt以及划分数据集验证集和训练参数的设置我在这里都总结一下留给下次训练的我查看以及广大网友参考。默认一些基础的环境例如CUDA.pytorch.torchvision.opencv已经搭建好以及安装完requirements2024.8.6 YOLOv5 XML格式换为txt以及划分数据集验证集 1.首先需要准备好图片(需要训练的图片)和标签(通过labelimg打完标签)按照以下目录存放                                           格式如下(需要自己完整地创造出以下目录方便后续进行) |——VOCdevkit ||——images         ——train  (空)              ——val    (空) ||——labels         ——train  (空)         ——val    (空) ||——VOC2007         ——Annotations  (放置自己的标签XML文件)         ——JPEGImages   (放置自己的训练图片)         ——label  (空)   2.然后在yolov5-5.0目录下位置不重要创建xml转YOLO.py 复制粘贴代码↓ 代码如下 没有安装包就pip Install一下 import xml.etree.ElementTree as ET import pickle import os from os import listdir, getcwd from os.path import joindef convert(size, box):x_center (box[0] box[1]) / 2.0y_center (box[2] box[3]) / 2.0x x_center / size[0]y y_center / size[1]w (box[1] - box[0]) / size[0]h (box[3] - box[2]) / size[1]return (x, y, w, h)def convert_annotation(xml_files_path, save_txt_files_path, classes):xml_files os.listdir(xml_files_path)print(xml_files)for xml_name in xml_files:print(xml_name)xml_file os.path.join(xml_files_path, xml_name)out_txt_path os.path.join(save_txt_files_path, xml_name.split(.)[0] .txt)out_txt_f open(out_txt_path, w)tree ET.parse(xml_file)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):difficult obj.find(difficult).textcls obj.find(name).textif cls not in classes or int(difficult) 1:continuecls_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))# b(xmin, xmax, ymin, ymax)print(w, h, b)bb convert((w, h), b)out_txt_f.write(str(cls_id) .join([str(a) for a in bb]) \n)if __name__ __main__:# 需要转换的类别需要一一对应 替换为自己的类别classes1 [red, green,blue,bottle] # 2、voc格式的xml标签文件路径 替换为自己的标签文件文件xmlAnnotations所在绝对路径xml_files1 rD:\yolov5\yolov5-5.0\yolov5-5.0\VOCdevkit\VOC2007\Annotations# 3、转化为yolo格式的txt标签文件存储路径 替换为自己想要储存txt标签文件的路径 label save_txt_files1 rD:\yolov5\yolov5-5.0\yolov5-5.0\VOCdevkit\VOC2007\labelconvert_annotation(xml_files1, save_txt_files1, classes1) 注修改一下classes1    xml_files1    save_txt_files1 替换为自己的路径 运行过后会得到自己的txt文件 3.然后把JPEGImages 里的图片和刚刚转换好的label里的文件分别复制到 images/train || labels/train这两个地方 4.然后在yolov5-5.0目录下位置不重要创建划分数据集和验证集.py  复制粘贴代码↓ import os, random, shutildef moveimg(fileDir, tarDir):pathDir os.listdir(fileDir) # 取图片的原始路径filenumber len(pathDir)rate 0.1 # 自定义抽取图片的比例比方说100张抽10张那就是0.1picknumber int(filenumber * rate) # 按照rate比例从文件夹中取一定数量图片sample random.sample(pathDir, picknumber) # 随机选取picknumber数量的样本图片print(sample)for name in sample:shutil.move(fileDir name, tarDir \\ name)returndef movelabel(file_list, file_label_train, file_label_val):for i in file_list:if i.endswith(.jpg):# filename file_label_train \\ i[:-4] .xml # 可以改成xml文件将’.txt‘改成.xml就可以了filename file_label_train \\ i[:-4] .txt # 可以改成xml文件将’.txt‘改成.xml就可以了if os.path.exists(filename):shutil.move(filename, file_label_val)print(i 处理成功)if __name__ __main__:fileDir rD:\yolov5\yolov5-5.0\yolov5-5.0\VOCdevkit\images\train \\ # 源图片文件夹路径tarDir rD:\yolov5\yolov5-5.0\yolov5-5.0\VOCdevkit\images\val # 图片移动到新的文件夹路径moveimg(fileDir, tarDir)file_list os.listdir(tarDir)file_label_train rD:\yolov5\yolov5-5.0\yolov5-5.0\VOCdevkit\labels\train # 源图片标签路径file_label_val rD:\yolov5\yolov5-5.0\yolov5-5.0\VOCdevkit\labels\val # 标签# 移动到新的文件路径movelabel(file_list, file_label_train, file_label_val) 注修改一下 fileDir    ——\VOCdevkit\images\train           images\train 所在的绝对路径 tarDir    ——\VOCdevkit\images\val               (images\val 所在的绝对路径) file_label_train    ——\VOCdevkit\labels\train      labels\train 所在的绝对路径 file_label_val      ——\VOCdevkit\labels\val         labels\val 所在的绝对路径 运行代码即可得到训练集和验证集 训练参数设置 1.在data文件夹下创建xxx.yaml 可以复制随便一个yaml文件然后改个名字我的为GKS.yaml和内容 内容如下具体看注释 # PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC/ # Train command: python train.py --data voc.yaml # Default dataset location is next to /yolov5: # /parent_folder # /VOC # /yolov5# download command/URL (optional) #download: bash data/scripts/get_voc.sh# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/] train: D:\yolov5\yolov5-5.0\yolov5-5.0\VOCdevkit\images\train # 存放自己的训练集 val: D:\yolov5\yolov5-5.0\yolov5-5.0\VOCdevkit\images\val # 存放自己的验证集# number of classes nc: 4 #自己的标签分类个数 在这里我的是四个 ↓# class names names: [ red,green,blue,bottle ] #标签分类名字 最好按照固定的顺序 然后进入如下目录 复制yolov5s.yaml(根据自己所需模型大小选择)   改名为xxx.yaml这里我的为yolov5_GKS.yaml 其他都不动修改ncxxx修改为你的标签分类数量我的是4 至此基本内容已经准备好了 然后进入 train.py 改一下这几个路径对应上面自己定义的yaml文件夹即可 parser.add_argument(--weights, typestr, defaultD:\yolov5\yolov5-master\weights\yolov5s.pt, helpinitial weights path) #权重文件需要自己下载 parser.add_argument(--cfg, typestr, defaultD:\yolov5\yolov5-master\models\yolov5_GKS.yaml, helpmodel.yaml path) #在models下的yaml文件 parser.add_argument(--data, typestr, defaultD:\yolov5\yolov5-master\data\GKS.yaml, helpdataset.yaml path)          #在data下的yaml文件 其他参数可以看网上的自定义 至此可以开始训练了 YOLOv8 相比于YOLOv5 YOLOv8配置更简单一些 XML格式换为txt以及划分数据集验证集 1.首先在yolov8目录下新建文件data D:\yolov8\data 2.在data下创建images文件夹用于存放 D:\yolov8\data\images (把训练图片放在这里面) 3.在data下创建Annotations文件夹用于存放打标签xml文件 D:\yolov8\data\Annotations (把训练xml文件放在这里面) 4.在data下创建labels文件夹用于存放YOLO格式txt文件 D:\yolov8\data\labels (暂时为空) 整体结构如下 2.在data下创建1.XML转TXT格式.py 文件  复制黏贴以下代码进行XML格式转化为TXT格式      具体细节看注释 import xml.etree.ElementTree as ET import os, cv2 import numpy as np from os import listdir from os.path import joinclasses [red,green,blue,bottle] #修改自己的训练分类def convert(size, box):dw 1. / (size[0])dh 1. / (size[1])x (box[0] box[1]) / 2.0 - 1y (box[2] box[3]) / 2.0 - 1w box[1] - box[0]h box[3] - box[2]x x * dww w * dwy y * dhh h * dhreturn (x, y, w, h)def convert_annotation(xmlpath, xmlname):with open(xmlpath, r, encodingutf-8) as in_file:txtname xmlname[:-4] .txttxtfile os.path.join(txtpath, txtname)tree ET.parse(in_file)root tree.getroot()filename root.find(filename)img cv2.imdecode(np.fromfile({}/{}.{}.format(imgpath, xmlname[:-4], postfix), np.uint8), cv2.IMREAD_COLOR)h, w img.shape[:2]res []for obj in root.iter(object):cls obj.find(name).textif cls not in classes:classes.append(cls)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)res.append(str(cls_id) .join([str(a) for a in bb]))if len(res) ! 0:with open(txtfile, w) as f:f.write(\n.join(res))if __name__ __main__:postfix jpgimgpath D:\yolov8\data\images #修改为自己images的绝对路径xmlpath D:\yolov8\data\Annotations #修改为自己Annotations的绝对路径txtpath D:\yolov8\data\labels #修改为自己要储存的txt文件的绝对路径if not os.path.exists(txtpath):os.makedirs(txtpath, exist_okTrue)list os.listdir(xmlpath)error_file_list []for i in range(0, len(list)):try:path os.path.join(xmlpath, list[i])if (.xml in path) or (.XML in path):convert_annotation(path, list[i])print(ffile {list[i]} convert success.)else:print(ffile {list[i]} is not xml format.)except Exception as e:print(ffile {list[i]} convert error.)print(ferror message:\n{e})error_file_list.append(list[i])print(fthis file convert failure\n{error_file_list})print(fDataset Classes:{classes})运行完后会发现labels文件夹下会多出txt文件这就代表成功了 2.在data下创建2.划分测试训练验证集.py 文件 复制黏贴以下代码进行训练集测试集验证集的划分 # codinggb2312 import os import random import shutil# 原数据集目录 root_dir D:\yolov8\data #改为data文件夹的绝对路径 # 划分比例 train_ratio 0.7 valid_ratio 0.2 test_ratio 0.1# 设置随机种子 random.seed(42)# 拆分后数据集目录 split_dir D:\yolov8\data #改为data文件夹的绝对路径 跟上面是同一个路径 os.makedirs(os.path.join(split_dir, train, images), exist_okTrue) os.makedirs(os.path.join(split_dir, train, labels), exist_okTrue) os.makedirs(os.path.join(split_dir, valid, images), exist_okTrue) os.makedirs(os.path.join(split_dir, valid, labels), exist_okTrue) os.makedirs(os.path.join(split_dir, test, images), exist_okTrue) os.makedirs(os.path.join(split_dir, test, labels), exist_okTrue)# 获取图片文件列表 image_files os.listdir(os.path.join(root_dir, images)) label_files os.listdir(os.path.join(root_dir, labels))# 随机打乱文件列表 combined_files list(zip(image_files, label_files)) random.shuffle(combined_files) image_files_shuffled, label_files_shuffled zip(*combined_files)# 根据比例计算划分的边界索引 train_bound int(train_ratio * len(image_files_shuffled)) valid_bound int((train_ratio valid_ratio) * len(image_files_shuffled))# 定义移动函数 def move_files(src_image_dir, src_label_dir, dest_image_dir, dest_label_dir, files):for image_file, label_file in files:src_image_path os.path.join(src_image_dir, image_file)src_label_path os.path.join(src_label_dir, label_file)dest_image_path os.path.join(dest_image_dir, image_file)dest_label_path os.path.join(dest_label_dir, label_file)shutil.copyfile(src_image_path, dest_image_path)shutil.copyfile(src_label_path, dest_label_path)# 移动文件到划分后的目录 move_files(os.path.join(root_dir, images), os.path.join(root_dir, labels),os.path.join(split_dir, train, images), os.path.join(split_dir, train, labels),combined_files[:train_bound])move_files(os.path.join(root_dir, images), os.path.join(root_dir, labels),os.path.join(split_dir, valid, images), os.path.join(split_dir, valid, labels),combined_files[train_bound:valid_bound])move_files(os.path.join(root_dir, images), os.path.join(root_dir, labels),os.path.join(split_dir, test, images), os.path.join(split_dir, test, labels),combined_files[valid_bound:])执行完后即可得到此次训练所需要的训练集、测试集、验证集了 目录如下 训练参数设置 跟YOLOv5一样本次我们需要准备两个yaml文件如图所示 一个是xxx.yaml 我的叫data.yaml训练集验证集测试集路径文件 可以首先复制黏贴任意一个xxx.yaml文件到data目录下然后删除所有内容再直接复制以下代码  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] train: D:\yolov8\data\train # 改为自己的训练集的绝对路径 val: D:\yolov8\data\valid # 改为自己的验证集的绝对路径 test: D:\yolov8\data\test # 改为自己的测试集的绝对路径nc: 4 #改为训练类别个数# Classes names: [red,green,blue,bottle] #改为自己的训练类别名字 注意看注释 一个是xxx.yaml (我的叫yolov8n.yaml)训练集验证集测试集路径文件如下图所示 可以复制这个路径下的文件可选择自己的模型我选的是yolov8.yaml到data目录下改为自己想要的名字然后只需要修改ncxxx为自己训练类别个数即可 然后我们还需要从官网上下载一个yolov8n.pt 文件到data目录下 官方网址如下 https://github.com/ultralytics/ultralytics?tabreadme-ov-filehttps://github.com/ultralytics/ultralytics?tabreadme-ov-file点YOLOv8n 下载权重文件放到data目录下 至此我们的文件目录应该长这样 然后如果我们要训练直接在终端执行如下代码 yolo taskdetect modetrain modelD:\yolov8\data\yolov8n.yaml dataD:\yolov8\data\data.yaml epochs300 workers5 device0其中model yolov8n.yaml的绝对路径 data data.yaml的绝对路径 epochs为训练轮数 device 0代表使用GPU训练 如果没有可以去掉device 0 至此就已经可以开始训练了 附上摄像头检测代码 import cv2 from ultralytics import YOLO# 模型加载权重 model YOLO(rxxx\weights\best.pt) #训练出最好的权重绝对路径 # 视频路径 cap cv2.VideoCapture(0) # 对视频中检测到目标画框标出来 while cap.isOpened():# Read a frame from the videosuccess, frame cap.read()if success:# Run YOLOv8 inference on the frameresults model(frame,conf0.7)# Visualize the results on the frameannotated_frame results[0].plot()# Display the annotated framecv2.imshow(YOLOv8 Inference, annotated_frame)# Break the loop if q is pressedif cv2.waitKey(1) 0xFF ord(q):breakelse:# Break the loop if the end of the video is reachedbreak# Release the video capture object and close the display window cap.release() cv2.destroyAllWindows()如有不懂希望可以在评论区多多交流谢谢
http://www.dnsts.com.cn/news/4305.html

相关文章:

  • 网站设计 网站开发 优化网站建设怎么找客源?
  • 企业邮箱注册需要什么材料googleseo服务
  • wordpress网站如何清理js龙江人社使用方法
  • 网站开发项目计划烟台网站开发制作
  • 龙湖什么网站做宣传增城做网站公司
  • 广西住房及城乡建设厅网站买域名送网站
  • 怎样建网站联系方式移动端网站如何做开放式配
  • wordpress电影站数据下载wordpress增加下载文件
  • 网站开发项目总结范文秀屿网站建设
  • 里水网站开发中国做w7的网站
  • 聊城东昌府区建设路小学网站课程网站建设情况
  • 涿州建设局网站安徽网站推广
  • 网站做的最好的本机iis发布网站后台管理
  • 做薪酬调查的网站网站建设情况汇报
  • 站酷logo设计做很多网站
  • 非模板网站网站建设期末考试
  • 嘉定个人网站建设Wordpress卡片主题
  • 哪些网站可以做免费答题平面设计报价明细表
  • 烟台网站建设 熊掌号小游戏网站
  • 山东网站建设是什么网页设计实训内容步骤记录
  • 宝塔服务器搭建网站教程wordpress列表显示全文
  • 企业网站的设计与开发东莞网站设计建设
  • 上海网站建设 网页做网页无法上传wordpress
  • 保山网站建设海南做网站的公司哪家好
  • 手机网站免费优化php网站外包
  • 网站转化率低保山网站建设哪家好
  • 岳阳网站项目建设报道布料市场做哪个网站好
  • 如何设计公众号需要优化的地方
  • 手机网站自助建站系统南昌企业做网站
  • 电子公司网站设计卖产品的网站怎么做