【Yolov8标注数据集】
Yolov8自动标注数据集教程
1 前言
使用Yolov8自动标注自己的数据集,大致步骤:
(1)首先,先手动标注
一部分数据集,进行模型训练,得到初步的检测模型
;
(2)然后,使用初步的检测模型实现自动数据集标注。具体而言,将需要自动标注的数据集
,通过预测predict
的方式,生成labels
,并使用标注工具
对labels
进行微调
。
接下来,将详细介绍Yolov8自动标注数据集的具体步骤。
2.1 手动标注数据集
标注工具
推荐两种,分别为在线标注网站MakeSense
{MakeSense具体标注教程}和离线软件labelImg
{ labelImg具体标注教程}。
不过,在进行手动标注数据集之前,还需要批量将视频转为图像序列,具体代码如下:
# 导入所需要的库
import cv2
import os
import numpy as np
datasets_path = ["/home/y/Code/.../1/04_20200423_100708_5f.mp4",
"/home/y/Code/.../1/04_20200423_101346_5f.mp4",
"/home/y/Code/.../1/04_20200423_102826_4f.mp4" ]
# 保存图像序列的文件夹
root_image_path = r"/home/y/Code/test/dataset/"
# 定义保存图片函数
# image:要保存的图片名字
# addr;图片地址与相片名字的前部分
# num: 相片,名字的后缀。int 类型
def save_image(image, addr, num):
address = addr + str(num) + '.jpg'
cv2.imwrite(address, image)
def get_video_to_img(source_video_path, target_image_path):
# 读取视频文件 视频文件路径
videoCapture = cv2.VideoCapture(source_video_path)
# 通过摄像头的方式
# videoCapture=cv2.VideoCapture(1)
# 读帧
success, frame = videoCapture.read()
i = 0
timeF = 120
j = 0
while success:
i = i + 1
if (i % timeF == 0):
j = j + 1
save_image(frame, target_image_path, j) #视频截成图片存放的位置
print('save image:', i)
success, frame = videoCapture.read()
def run_video_to_image():
for source_video_path in datasets_path:
target_image_path = root_image_path + "/" + source_video_path.split("/")[-1].split(".")[-2]+"/"
if not os.path.exists(target_image_path):
os.makedirs(target_image_path)
get_video_to_img(source_video_path, target_image_path)
run_video_to_image()
2.2 划分数据集
import os, random, shutil
def moveimg(fileDir, tarDir):
pathDir = os.listdir(fileDir) # 取图片的原始路径
filenumber = len(pathDir)
rate = 0.2 # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
picknumber = int(filenumber * rate) # 按照rate比例从文件夹中取一定数量图片
sample = random.sample(pathDir, picknumber) # 随机选取picknumber数量的样本图片
print(sample)
for name in sample:
shutil.move(fileDir + name, tarDir + "/" + name)
return
def 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 = r"/home/y/Code/datasets/train/images/BulletHole4/" # 源图片文件夹路径
tarDir = r'/home/y/Code/datasets/val/images/BulletHole4' # 图片移动到新的文件夹路径
file_label_train = r"/home/y/Code/datasets/train/labels/BulletHole4/" # 源图片标签路径
file_label_val = r"/home/y/Code/datasets/val/labels/BulletHole4" # 标签移动到新的文件夹路径
# 移动图片到指定文件夹下
moveimg(fileDir, tarDir)
file_list = os.listdir(tarDir)
# 移动标签到指定文件夹下
movelabel(file_list, file_label_train, file_label_val)
最终生成的数据集结构如下:
2.3 Yolov8环境配置
2.3.1 Yolov8下载
下载命令:
第一种(推荐,方便项目管理):
git clone https://github.com/ultralytics/ultralytics
cd ultralytics
pip install -e .
第二种:
pip install ultralytics
或者
python -m pip install ultralytics
注:
Yolov8下载地址:https://github.com/ultralytics/ultralytics/tree/main
模型下载地址:https://docs.ultralytics.com/tasks/detect/
Model | size (pixels) | mAPval 50-95 | Speed CPU ONNX (ms) | Speed A100 TensorRT (ms) | params (M) | FLOPs (B) |
---|---|---|---|---|---|---|
YOLOv8n | 640 | 37.3 | 80.4 | 0.99 | 3.2 | 8.7 |
YOLOv8s | 640 | 44.9 | 128.4 | 1.20 | 11.2 | 28.6 |
YOLOv8m | 640 | 50.2 | 234.7 | 1.83 | 25.9 | 78.9 |
YOLOv8l | 640 | 52.9 | 375.2 | 2.39 | 43.7 | 165.2 |
YOLOv8x | 640 | 53.9 | 479.1 | 3.53 | 68.2 | 257.8 |
tensorRT的下载链接:https://developer.nvidia.com/login
2.3.2 Yolov8环境配置
conda create -n yolo_tracking python=3.8
conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=10.2 -c pytorch
conda install loguru
python -m pip install opencv-python
python -m pip install gdown
conda install scipy
python -m pip install --upgrade charset-normalizer
conda install -c conda-forge lap
python -m pip install psutil
python -m pip install pandas
python -m pip install seaborn
python -m pip install tqdm
python -m pip install requests
python -m pip install PyYAML
python -m pip install Pillow
# onnxruntime下载
pip install onnxruntime -i https://pypi.douban.com/simple/
注:在配置环境过程中,如遇到 pip安装问题,可查看pip安装问题常见解决办法
2.4 Yolov8模型训练,得到初步的检测模型
2.4.1 训练方式
yolo task=detect mode=train model=/home/y/Code/yolo_tracking/weights/yolov8x.pt data=datasets/my_dataset.yaml epochs=300 batch=4 device='0,1'
或者
yolo task=detect mode=train model=yolov8x.yaml data=datasets/my_dataset.yaml epochs=300 batch=4 device='0,1'
2.4.2 训练过程中遇到的问题
(1) wandb登录问题
可直接将wandb删除,执行命令如下:
python -m pip uninstall wandb
3 使用初步的检测模型实现自动数据集标注
3.1 使用初步的检测模型生成labels
3.1.1 修改default.yaml的参数配置,以保存由模型预测得到的labels的.txt文件
在使用初步的检测模型生成labels之前,需要修改default.yaml
文件,使得预测的结果能够以.txt
的形式保存。
在终端输入 yolo cfg
找到default.yaml的位置,并将save_txt的false改为true
具体命令如下:
# 找到default.yaml的位置
yolo cfg
# 打开 default.yaml文件
sudo gedit /home/y/anaconda3/envs/yolo_tracking/lib/python3.8/site-packages/ultralytics/cfg/default.yaml
# 将save_txt的值修改为True
案例:
找到default.yaml的位置 ,我的default.yaml文件的路径为:
‘/home/y/anaconda3/envs/yolo_tracking/lib/python3.8/site-packages/ultralytics/cfg/default.yaml’
打开default.yaml文件,将save_txt的值修改为True,并ctrl+s进行保存
3.1.2 预测待自动标注的数据集
yolo predict model=runs/detect/train8/weights/best.pt source=/home/y/Code/test/test_dataset
3.2 微调labels
最后使用标注工具进行微调,这里我们使用的是labelImg,加载images和labels进行微调。
labelImg的具体安装步骤和使用方法,已在labelImg具体标注教程介绍,此处不再赘述。
更多推荐
所有评论(0)