Skip to main content

数据集标注

数据集标注1、数据集采集1.1、提取图像1.2、数据集路径2、Label Studio使用2.1、Label Studio安装2.2、Label Studio启动2.2.1、共享文件夹权限2.2.2、启动Label Studio2.2.3、访问Label Studio宿主机同局域网首次使用3、数据集标注3.1、创建工程3.2、工程名称3.3、导入训练集3.4、标签设置3.5、数据集标注3.6、导出数据集3.7、数据集目录框架3.8、数据集配置文件参考资料

对于识别特定的物体或提高物体的识别准确率,用户需要自己进行模型的训练,数据集的采集和标注是不可缺少的一部分。

1、数据集采集

说明:特定场合的识别,用户可以使用摄像头录制一下物体各个角度的视频,然后截取视频中的图片作为训练集

1.1、提取图像

提供一个简单的示例:每隔15帧从视频中提取一帧图像作为数据集

​ x import cv2 import os ​ # Path to the input video file video_file = '/home/jetson/ultralytics/ultralytics/data/yahboom_data/orange_video/orange.mkv' ​ # Path to the output folder to save the frames output_folder = '/home/jetson/ultralytics/ultralytics/data/yahboom_data/orange_pic' ​ # Check if the output folder exists, if not, create it if not os . path . exists ( output_folder ): os . makedirs ( output_folder ) ​ # Open the video file using OpenCV cap = cv2 . VideoCapture ( video_file ) ​ # Get the total number of frames in the video total_frames = int ( cap . get ( cv2 . CAP_PROP_FRAME_COUNT )) ​ # Get the frames per second (fps) of the video fps = cap . get ( cv2 . CAP_PROP_FPS ) ​ # Frame counter to keep track of the current frame number frame_number = 0 ​ # Define the interval for extracting frames (every 15th frame) frame_interval = 15 ​ # Initialize a new counter for saved frames (starting from 1) saved_frame_number = 1 ​ while True : ret , frame = cap . read () # If the frame is not successfully read, exit the loop if not ret : break ​ # Save every 15th frame if frame_number % frame_interval == 0 : # Format the frame number starting from 1 (e.g., 1.png, 2.png) image_name = f'{saved_frame_number}.png' image_path = os . path . join ( output_folder , image_name ) ​ # Save the current frame as a PNG image cv2 . imwrite ( image_path , frame ) print ( f'Saving frame {frame_number}/{total_frames} as {image_name}' ) ​ # Increment the saved frame counter saved_frame_number += 1 ​ # Increment the frame counter for the video frame_number += 1 ​ # Release the video capture object cap . release () ​ # Print message when processing is complete print ( "Video processing complete! Every 15th frame saved as an image!" )

1.2、数据集路径

示例视频:/home/jetson/ultralytics/ultralytics/data/yahboom_data/orange_video/

示例图像:/home/jetson/ultralytics/ultralytics/data/yahboom_data/orange_pic/

2、Label Studio使用

Label Studio是一个开源的数据标注平台,用于数据标注和标注任务的管理,支持各种类型的数据输入和标注格式。

2.1、Label Studio安装

xxxxxxxxxx docker pull heartexlabs/label-studio:latest

image-20260310192718109

如果国内网络无法访问heartexlabs,请使用如下方法使用Label Studio

安装:pip install label-studio -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

启动:label-studio start

2.2、Label Studio启动

2.2.1、共享文件夹权限

将提前准备好的数据集共享到Label Studio对应的文件夹:

xxxxxxxxxx sudo chmod 777 -R /home/pi/ultralytics26/data/

2.2.2、启动Label Studio

xxxxxxxxxx sudo docker run -it -p 8080:8080 -v /home/pi/ultralytics/ultralytics/data:/label-studio/data heartexlabs/label-studio:latest label-studio --log-level DEBUG

image-20260310193348301

2.2.3、访问Label Studio

宿主机

pi Orin系列开发板访问方式,首次进入需要自己输入用户名和密码

xxxxxxxxxx http://localhost:8080/

image-20241231172119675

同局域网

同一局域网下的设备可以根据主板IP:8080进行访问

xxxxxxxxxx http://主板IP:8080/ # 例如:http://192.168.2.99:8080/

image-20241231172358672

首次使用

首次使用需要自己注册和登录账号,出厂设置账号信息(账号信息是虚假的):

xxxxxxxxxx 账号:yahboom@163.com 密码:yahboom@163.com

image-20241231173648480

image-20241231173626233

注册完成后后,网址会自动登录:

image-20241231173724692

3、数据集标注

演示的数据集在主板上,所以在主板访问Label Studio。

3.1、创建工程

image-20250102101422924

3.2、工程名称

工程名称可自己随意命名,根据自己的训练集来命名:

image-20250102101957666

3.3、导入训练集

手动将提前准备的数据集导入:一次不能导入过多图片,建议每次选择50-100张,然后多次导入

image-20250102102239968

3.4、标签设置

我们演示的是识别橙子,所以选择”物体检测“

image-20250102102330629

删除内置标签:

image-20250102110751207

添加新的标签:

image-20250102110916438

3.5、数据集标注

点击标注所有任务:

image-20250102111059058

标注步骤:先点击标签“Orange”再使用鼠标框选图片中对应的橙子,完成后点击提交进入下一张标注

image-20250102111243857

若框选的物体不是完成的橙子,可以点击款选的方框,重新调整各个边的位置:

image-20250102112923490

3.6、导出数据集

选择YOLO格式进行导出,浏览器会自动下载一个压缩包

image-20250102121400695

image-20250102121600423

3.7、数据集目录框架

使用Label Studio导出的压缩包对应的目录框架:

xxxxxxxxxx . ├── images ├── labels ├── classes.txt └── notes.json

我们需要将Label Studio导出images、labels分成train(训练集)和val(验证集),两者比例大概8:2:train和val里面的图片和标签都需要名称一一对应。

xxxxxxxxxx . ├── classes.txt ├── notes.json ├── train │ ├── images │ └── labels └── val ├── images └── labels

3.8、数据集配置文件

包含训练集和验证集的路径,以及类别的数量和名称。

xxxxxxxxxx path: /home/jetson/ultralytics/ultralytics/data/yahboom_data/orange_data/ train: train/images val: val/images ​ nc: 1 ​ # Classes names: 0: Orange

image-20260310193811273

参考资料

https://github.com/HumanSignal/label-studio