网站建设与运营 市场分析,在线代理访问,双减之下托管班合法吗,关于政务网站建设工作情况的总结一、前言介绍
在深度学习领域中#xff0c;标注是一项非常重要的工作#xff0c;因为许多深度学习模型都依赖于有标注的数据进行训练。然而#xff0c;标注数据是一个费时费力的工作#xff0c;因此人们希望有一种方式来对标注过程进行自动化。这就是“半自动标注”的来源…一、前言介绍
在深度学习领域中标注是一项非常重要的工作因为许多深度学习模型都依赖于有标注的数据进行训练。然而标注数据是一个费时费力的工作因此人们希望有一种方式来对标注过程进行自动化。这就是“半自动标注”的来源。半自动标注是一种折中的方式它结合了人类的判断能力和计算机的自动化能力。
在一个半自动标注的系统中步骤如下 1、初始的标注工作通常由人类来做 2、这些被标注的数据被用来训练一个深度学习模型使模型能做出预测并自动标注新的数据。 3、但模型预测出的标注可能会有误所以仍然需要人类进行审核和校正。
二、功能实现
1.数据集拆分
考虑到初始标注的数据集能有效兼顾需要对全部数据集随机拆分这样有助于有助于确保初始的标注数据集能代表整体数据集的特性。 例如如果有1万个数据样本可以使用的一种策略是使用10-20%的数据作为初始标注数据也就是1000-2000个样本。这样可以得到一个相当大的初始标注数据集可以提供足够的信息来训练模型。
import os
import shutil
import random# 指定源文件夹路径
source_folder your_source_folder # 替换为你的源文件夹路径# 指定目标文件夹路径
dest_folders [your_dest_folder1, your_dest_folder2, your_dest_folder3, your_dest_folder4, your_dest_folder5] # 替换为你的目标文件夹路径列表# 如果目标文件夹不存在创建它们
for folder in dest_folders:if not os.path.exists(folder):os.makedirs(folder)# 获取源文件夹中的所有jpg文件
jpg_files [f for f in os.listdir(source_folder) if f.endswith(.jpg)]# 随机打乱jpg文件列表
random.shuffle(jpg_files)# 均分文件到五个文件夹
split_files [jpg_files[i::5] for i in range(5)]# 将文件复制到对应的目标文件夹
for i in range(5):for file in split_files[i]:shutil.copy2(os.path.join(source_folder, file), dest_folders[i])2.标注初始数据集
从第一部分拆分的五个子数据集中选择第一个进行数据集标注。 标注软件labelImg
labelImg 图像文件路径 标注的类别txt文件路径label的文件夹要放classes.txt(存放标注的类别)
3.yolov8训练预测并自动标注新的数据
强调点
要去掉无标签值的image[初始数据集中要删除无label的image免得影响模型的效果(也会将无标签的图片作为训练图片)]
3.1 标注文件的整理
对第二部分标注的初始数据集txt文件和image文件是放在一起删除内容为空的txt文件。再删除无txt文件的image文件
import os# 指定目录
directory /path/to/directorytxt_files [f for f in os.listdir(directory) if f.endswith(.txt)]
jpg_files [f for f in os.listdir(directory) if f.endswith(.jpg)]# 检查文本文件如果文件为空就删除
for filename in txt_files:filepath os.path.join(directory, filename)# 判断文件是否为空if os.path.getsize(filepath) 0:os.remove(filepath)print(f{filename} is empty and has been removed.)txt_files.remove(filename) # 从文本文件列表中移除已删除的文件# 基于存在的文本文件如果对应的jpg文件存在但txt文件不存在则删除jpg文件
for filename in jpg_files:txt_filename filename.replace(.jpg, .txt)if txt_filename not in txt_files: # 在此判断txt文件是否存在jpg_filepath os.path.join(directory, filename)os.remove(jpg_filepath)print(f{filename} has been removed because its corresponding txt file does not exist.)3.2 将原图和标签按照yolo的数据集路径格式进行存放
dataset├─ images│ ├─ test # 存放测试集数据可无│ ├─ train # 存放训练集数据│ └─ val # 存放验证集数据└─ labels├─ test # 存放测试集标签可无├─ train # 存放训练集标签├─ val # 存放验证集标签3.3 训练与预测的代码
from ultralytics import YOLO
# 目标检测
# # 加载模型
model YOLO(yolov8n.pt) # 加载预训练权重
# model YOLO(ultralytics/cfg/models/v8/yolov8n.yaml) # 配置文件# 模型训练
model.train(datayolov8n/data_detect.yaml, epochs100,imgsz 640,batch64) # 训练模型# 预测标签 source是待标注的数据集文件夹
Model.predict(source/home/sta/datasets/images1,save_txtTrue)3.校正预测的label
用labelImg标注软件,微调第二个数据集的label
4.依次处理第二、第三、第四和第五数据集
完成第二个子数据集将第一个和第二个合在一起再重新训练一个新的模型预测第三个子数据集依次处理