赞
踩
使用Yolov8自动标注自己的数据集,大致步骤:
(1)首先,先手动标注
一部分数据集,进行模型训练,得到初步的检测模型
;
(2)然后,使用初步的检测模型实现自动数据集标注。具体而言,将需要自动标注的数据集
,通过预测predict
的方式,生成labels
,并使用标注工具
对labels
进行微调
。
接下来,将详细介绍Yolov8自动标注数据集的具体步骤。
标注工具
推荐两种,分别为在线标注网站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()
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)
最终生成的数据集结构如下:
下载命令:
第一种(推荐,方便项目管理):
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
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安装问题常见解决办法
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'
(1) wandb登录问题
可直接将wandb删除,执行命令如下:
python -m pip uninstall wandb
在使用初步的检测模型生成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进行保存
yolo predict model=runs/detect/train8/weights/best.pt source=/home/y/Code/test/test_dataset
最后使用标注工具进行微调,这里我们使用的是labelImg,加载images和labels进行微调。
labelImg的具体安装步骤和使用方法,已在labelImg具体标注教程介绍,此处不再赘述。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。