【数据集介绍】

数据集中有很多增强图片,也有很多视频连续截取图片请查看图片预览

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)

图片数量(jpg文件个数):7295

标注数量(xml文件个数):7295

标注数量(txt文件个数):7295

标注类别数:34

所在仓库:firc-dataset

标注类别名称(注意yolo格式类别顺序不和这个对应,而以labels文件夹classes.txt为准):["Lack_social_skill","Stimming","aligning_objects","avoid_eye_contact","awkward_posture","clapping","closing_eyes","continuous_moving","exaggerated_expression","face_rubbing","finger_biting","finger_flapping","finger_smelling","finger_tapping","hand_flapping","hand_leading","head_banging","holding_objects","jumping","lack_of_awareness","lack_of_response","moving_hand_upforth","normal","repetitive_action","rocking","rubbing_eyes","rubbing_hands","rubbing_nose","rubbing_objects","smelling","spinning","tapping_head","weird_expression","weird_laugh"]

finger_flapping-手指拍打

finger_biting-啃手指

clapping-拍手

rubbing_eyes-揉眼睛

smelling-嗅闻

rubbing_nose-揉鼻子

finger_smelling-嗅闻手指

face_rubbing-揉脸

closing_eyes-闭眼

normal-正常状态

lack_of_response-反应迟钝

moving_hand_upforth-手来回移动

holding_objects-握持物品

avoid_eye_contact-避免眼神接触

exaggerated_expression-夸张的表情

weird_expression-奇怪的表情

awkward_posture-别扭的姿势

lack_of_awareness-缺乏意识

Lack_social_skill-缺乏社交技能

jumping-跳跃

head_banging-撞头

continuous_moving-持续移动

spinning-旋转

repetitive_action-重复动作

weird_laugh-奇怪的笑声

Stimming-自我刺激行为

aligning_objects-排列物品

hand_leading-用手引导

rubbing_hands-搓手

tapping_head-轻拍头部

rubbing_objects-摩擦物品

finger_tapping-轻敲手指

rocking-摇晃

每个类别标注的框数:

Lack_social_skill 框数 = 213

Stimming 框数 = 217

aligning_objects 框数 = 179

avoid_eye_contact 框数 = 230

awkward_posture 框数 = 254

clapping 框数 = 111

closing_eyes 框数 = 145

continuous_moving 框数 = 215

exaggerated_expression 框数 = 263

face_rubbing 框数 = 237

finger_biting 框数 = 233

finger_flapping 框数 = 234

finger_smelling 框数 = 180

finger_tapping 框数 = 234

hand_flapping 框数 = 286

hand_leading 框数 = 213

head_banging 框数 = 231

holding_objects 框数 = 334

jumping 框数 = 224

lack_of_awareness 框数 = 221

lack_of_response 框数 = 170

moving_hand_upforth 框数 = 270

normal 框数 = 277

repetitive_action 框数 = 231

rocking 框数 = 237

rubbing_eyes 框数 = 72

rubbing_hands 框数 = 244

rubbing_nose 框数 = 207

rubbing_objects 框数 = 104

smelling 框数 = 253

spinning 框数 = 245

tapping_head 框数 = 232

weird_expression 框数 = 230

weird_laugh 框数 = 226

总框数:7452

使用标注工具:labelImg

标注规则:对类别进行画矩形框

重要说明:暂无

图片分辨率:640x640

特别声明:本数据集不对训练的模型或者权重文件精度作任何保证

图片预览:

标注例子:

【训练步骤】

这里以yolo11训练为例。首先我们获取数据集压缩包7z格式或者zip格式后解压到一个非中文或者有空格路径下面。比如解压到C:\Users\Administrator\Downloads目录,下面都是以这个目录演示训练流程。

然后我们在数据集data文件夹下面新建一个脚本split.py写入下面代码:

import os
import shutil
import randomclass VOCDataSplit(object):def __init__(self):passdef split(self, image_dir, label_dir, save_dir, trainval_radio=0.9, train_radio=0.9, copy_it=True,need_test_dataset=False, shuffle_file=True):train_images_dir = os.path.join(save_dir, 'train', 'images')train_labels_dir = os.path.join(save_dir, 'train', 'labels')val_images_dir = os.path.join(save_dir, 'val', 'images')val_labels_dir = os.path.join(save_dir, 'val', 'labels')test_images_dir = os.path.join(save_dir, 'test', 'images')test_labels_dir = os.path.join(save_dir, 'test', 'labels')os.makedirs(train_images_dir, exist_ok=True)os.makedirs(train_labels_dir, exist_ok=True)os.makedirs(val_images_dir, exist_ok=True)os.makedirs(val_labels_dir, exist_ok=True)if need_test_dataset:os.makedirs(test_images_dir, exist_ok=True)os.makedirs(test_labels_dir, exist_ok=True)files = []for file in os.listdir(image_dir):if file.endswith('.jpg'):files.append(file)total_count = len(files)print('find {} images'.format(total_count))if shuffle_file:random.shuffle(files)if need_test_dataset:test_count = int(total_count * (1 - trainval_radio))train_count = int((total_count - test_count) * train_radio)val_count = total_count - test_count - train_countelse:train_count = int(total_count * train_radio)val_count = total_count - train_counttest_count = 0print('train={},val={},test={}'.format(train_count, val_count, test_count))train_files = files[:train_count]val_files = files[train_count:train_count + val_count]test_files = files[train_count + val_count:]print('start copy or move train files...')for file in train_files:if copy_it:shutil.copy(os.path.join(image_dir, file), os.path.join(train_images_dir, file))label_file = os.path.join(label_dir, file[:-3] + 'txt')if os.path.exists(label_file):shutil.copy(label_file, os.path.join(train_labels_dir, file[:-3] + 'txt'))else:shutil.move(os.path.join(image_dir, file), os.path.join(train_images_dir, file))label_file = os.path.join(label_dir, file[:-3] + 'txt')if os.path.exists(label_file):shutil.move(label_file, os.path.join(train_labels_dir, file[:-3] + 'txt'))print('start copy or move val files...')for file in val_files:if copy_it:shutil.copy(os.path.join(image_dir, file), os.path.join(val_images_dir, file))label_file = os.path.join(label_dir, file[:-3] + 'txt')if os.path.exists(label_file):shutil.copy(label_file, os.path.join(val_labels_dir, file[:-3] + 'txt'))else:shutil.move(os.path.join(image_dir, file), os.path.join(val_images_dir, file))label_file = os.path.join(label_dir, file[:-3] + 'txt')if os.path.exists(label_file):shutil.move(label_file, os.path.join(val_labels_dir, file[:-3] + 'txt'))if need_test_dataset and test_count > 0:print('start copy or move test files...')for file in test_files:if copy_it:shutil.copy(os.path.join(image_dir, file), os.path.join(test_images_dir, file))label_file = os.path.join(label_dir, file[:-3] + 'txt')if os.path.exists(label_file):shutil.copy(label_file, os.path.join(test_labels_dir, file[:-3] + 'txt'))else:shutil.move(os.path.join(image_dir, file), os.path.join(test_images_dir, file))label_file = os.path.join(label_dir, file[:-3] + 'txt')if os.path.exists(label_file):shutil.move(label_file, os.path.join(test_labels_dir, file[:-3] + 'txt'))class_file=os.path.join(label_dir, 'classes.txt')if os.path.exists(class_file):class_names=[]with open(class_file, 'r') as f:class_names=f.read().rstrip('\n').split('\n')nc = len(class_names)content='train: '+train_images_dir+'\n'content += 'val: '+val_images_dir+'\n'if need_test_dataset:content += 'test: '+test_images_dir+'\n'content += 'nc: '+str(nc)+'\n'content += 'names:\n'content += "\n".join([f"  {i}: {name}" for i, name in enumerate(class_names)])with open(os.path.join(save_dir,'coco128.yaml'), 'w') as f:f.write(content)print('all done!')
if __name__ == '__main__':images_dir=r'C:\Users\Administrator\Downloads\data\JPEGImages'labels_dir=r'C:\Users\Administrator\Downloads\data\labels'save_dir=r'C:\Users\Administrator\Downloads\dataset'vs = VOCDataSplit()vs.split(images_dir,labels_dir,save_dir,trainval_radio=0.9, train_radio=0.9, copy_it=True,shuffle_file=True,need_test_dataset=False)

 注意 images_dir,labels_dir,save_dir根据自己实际情况进行调整。这个split.py脚本功能就是将JPEGImages和labels文件进行自动随机分割成标准yolo训练目录格式。脚本放在data文件夹下面即可:

然后运行脚本:

然后在C:\Users\Administrator\Downloads看到有个dataset文件夹生成 

至此标准训练格式完成了。打开coco128.yaml看到下面类似格式:

train: C:\Users\Administrator\Downloads\dataset\train\images
val: C:\Users\Administrator\Downloads\dataset\val\images
nc: 34
names:0: Lack_social_skill1: Stimming2: aligning_objects3: avoid_eye_contact4: awkward_posture5: clapping6: closing_eyes7: continuous_moving8: exaggerated_expression9: face_rubbing10: finger_biting11: finger_flapping12: finger_smelling13: finger_tapping14: hand_flapping15: hand_leading16: head_banging17: holding_objects18: jumping19: lack_of_awareness20: lack_of_response21: moving_hand_upforth22: normal23: repetitive_action24: rocking25: rubbing_eyes26: rubbing_hands27: rubbing_nose28: rubbing_objects29: smelling30: spinning31: tapping_head32: weird_expression33: weird_laugh

 这些都不用修改,我们只需要检查一下是不是对的就行。

之后就是开始训练了,注意训练yolov8模型需要自己提前安装好环境。

使用预训练模型开始训练

yolo task=detect mode=train model=yolo11n.pt data=coco128.yaml epochs=100 imgsz=640 batch=8 workers=2

参数说明:

model: 使用的模型类型,如 yolo11s.pt(小模型)、yolo11m.pt(中)、yolo11l.pt(大)
data: 指定数据配置文件
epochs: 训练轮数
imgsz: 输入图像尺寸
batch: 批量大小(根据显存调整)

workers:指定进程数(windows最好设置0或者1或2,linux可以设置8)
训练完成后,最佳权重保存路径为:runs/detect/train/weights/best.pt,如果多次运行命令runs/detect/train2,runs/detect/train3文件夹生成只需要到数字最大文件夹查看就可以找到模型

图片预测:

from ultralytics import YOLO# 加载训练好的模型
model = YOLO('runs/detect/train/weights/best.pt')# 图像预测
results = model('path_to_your_image.jpg')

视频或摄像头预测

results = model('path_to_video.mp4')  # 视频
#results = model(0)  # 摄像头

 验证集评估

yolo task=detect mode=val model=runs/detect/train/weights/best.pt data=data.yaml

输出指标图像,一般在模型训练后生成,文件位置在runs/detect/train/results.png:

上面训练结果图片常用评估参数介绍

【常用评估参数介绍】

在目标检测任务中,评估模型的性能是至关重要的。你提到的几个术语是评估模型性能的常用指标。下面是对这些术语的详细解释:

  1. Class
    • 这通常指的是模型被设计用来检测的目标类别。例如,一个模型可能被训练来检测车辆、行人或动物等不同类别的对象。
  2. Images
    • 表示验证集中的图片数量。验证集是用来评估模型性能的数据集,与训练集分开,以确保评估结果的公正性。
  3. Instances
    • 在所有图片中目标对象的总数。这包括了所有类别对象的总和,例如,如果验证集包含100张图片,每张图片平均有5个目标对象,则Instances为500。
  4. P(精确度Precision)
    • 精确度是模型预测为正样本的实例中,真正为正样本的比例。计算公式为:Precision = TP / (TP + FP),其中TP表示真正例(True Positives),FP表示假正例(False Positives)。
  5. R(召回率Recall)
    • 召回率是所有真正的正样本中被模型正确预测为正样本的比例。计算公式为:Recall = TP / (TP + FN),其中FN表示假负例(False Negatives)。
  6. mAP50
    • 表示在IoU(交并比)阈值为0.5时的平均精度(mean Average Precision)。IoU是衡量预测框和真实框重叠程度的指标。mAP是一个综合指标,考虑了精确度和召回率,用于评估模型在不同召回率水平上的性能。在IoU=0.5时,如果预测框与真实框的重叠程度达到或超过50%,则认为该预测是正确的。
  7. mAP50-95
    • 表示在IoU从0.5到0.95(间隔0.05)的范围内,模型的平均精度。这是一个更严格的评估标准,要求预测框与真实框的重叠程度更高。在目标检测任务中,更高的IoU阈值意味着模型需要更准确地定位目标对象。mAP50-95的计算考虑了从宽松到严格的多个IoU阈值,因此能够更全面地评估模型的性能。

这些指标共同构成了评估目标检测模型性能的重要框架。通过比较不同模型在这些指标上的表现,可以判断哪个模型在实际应用中可能更有效。

将模型导出为ONNX、TensorRT等格式以用于部署:

yolo export model=runs/detect/train/weights/best.pt format=onnx
支持格式包括:onnx, engine, tflite, pb, torchscript 等。

经过上面训练可以使用模型做进一步部署,比如使用onnx模型在嵌入式部署,使用engine模型在jetson上deepstream部署,使用torchscript模型可以在C++上部署等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917560.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917560.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917560.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim 组件 使用pysocket进行sock连接

vim组件实现 以下是使用 Vim 插件架构实现 Python Socket 客户端的完整方案&#xff0c;支持集成到 Vim 控件并实现双向通信&#xff1a; ~/.vim/plugin/socket_client.vim" 定义全局命令和快捷键 command! -nargs* SocketConnect call s:StartSocketClient(<f-args>…

FFmpeg+javacpp中纯音频播放

FFmpegjavacpp中纯音频播放1. Java Sound播放2、整合音频信息AudioInfo3、添加ExecutorService执行播放FFmpegjavacppjavacv使用 FFmpegjavacpp中FFmpegFrameGrabber FFmpegjavacpp中仿ffplay播放 JavaCV 1.5.12 API JavaCPP Presets for FFmpeg 7.1.1-1.5.12 API1. Java Soun…

洛谷P1036 [NOIP 2002 普及组] 选数

P1036 [NOIP 2002 普及组] 选数 题目描述 已知 nnn 个整数 x1,x2,⋯ ,xnx_1,x_2,\cdots,x_nx1​,x2​,⋯,xn​&#xff0c;以及 111 个整数 kkk&#xff08;k<nk<nk<n&#xff09;。从 nnn 个整数中任选 kkk 个整数相加&#xff0c;可分别得到一系列的和。例如当 n4n…

Linux学习记录(八)文件共享

本文记录在Vmware中启用文件共享时的一些注意事项&#xff1a;1.提前安装vmware-tools&#xff0c;可以通过Vmware的虚拟机菜单栏中拿到文件&#xff0c;然后直接运行vmware-install.pl文件进行安装&#xff1b;也可以通过指令sudo apt-get install open-vm-tools进行安装。推荐…

洛谷 火烧赤壁 差分/贪心

题目背景曹操平定北方以后&#xff0c;公元 208 年&#xff0c;率领大军南下&#xff0c;进攻刘表。他的人马还没有到荆州&#xff0c;刘表已经病死。他的儿子刘琮听到曹军声势浩大&#xff0c;吓破了胆&#xff0c;先派人求降了。孙权任命周瑜为都督&#xff0c;拨给他三万水军…

Linux 用户与组管理全解析

Linux 用户与组管理一、用户和组的基本概念 1. 用户账号类型 超级用户&#xff08;root&#xff09;&#xff1a;默认拥有系统最高权限&#xff08;UID0&#xff09;&#xff0c;仅建议用于系统管理与维护&#xff0c;日常操作应使用普通用户。普通用户&#xff1a;由管理员创建…

开疆智能ModbusTCP转Profient网关连接ER机器人配置案例

本案例时西门子1200PLC通过ModbusTCP转Profinet网关连接埃斯顿机器人的配置案例&#xff0c;网关作为ModbusTCP的客户端连接机器人。配置过程&#xff1a;首先打开机器人通讯手册。查询机器人支持的功能码及默认IP和端口号打开网关配置软件“Gateway Configuration Studio”新建…

Docker换源加速(更换镜像源)详细教程(2025.3最新可用镜像,全网最详细)

文章目录前言可用镜像源汇总换源方法1-临时换源换源方法2-永久换源&#xff08;推荐&#xff09;常见问题及对应解决方案1.换源后&#xff0c;可以成功pull&#xff0c;但是search会出错补充1.如何测试镜像源是否可用2.Docker内的Linux换源教程换源速通版&#xff08;可以直接无…

机器学习【三】SVM

本文系统介绍了支持向量机(SVM)的理论与实践。理论部分首先区分了线性可分与不可分问题&#xff0c;阐述了SVM通过寻找最优超平面实现分类的核心思想&#xff0c;包括支持向量、间隔最大化等关键概念。详细讲解了硬间隔与软间隔SVM的数学原理&#xff0c;以及核函数(线性核、多…

DevOps平台大比拼:Gitee、Jenkins与CircleCI如何选型?

DevOps平台大比拼&#xff1a;Gitee、Jenkins与CircleCI如何选型&#xff1f; 在数字化转型浪潮席卷全球的当下&#xff0c;DevOps已成为企业提升研发效能的关键引擎。面对市场上纷繁复杂的DevOps工具链&#xff0c;如何选择最适合自身业务需求的平台成为技术决策者的重要课题。…

开源医院信息管理系统:基于若依框架的智慧医疗解决方案

引言在数字化浪潮的推动下&#xff0c;医疗行业正加速向信息化、智能化转型。医院信息管理系统&#xff08;HIS&#xff09;作为医疗管理的核心工具&#xff0c;直接影响医院的运营效率和服务质量。近期&#xff0c;一款基于 若依框架 Vue 的开源医院管理系统&#xff08;hosp…

我的世界进阶模组开发教程——附魔(2)

EnchantmentHelper 类详解 EnchantmentHelper 是 Minecraft 中处理物品附魔逻辑的核心工具类,提供附魔的存储、查询、计算和应用等功能。以下是对其字段和方法的逐行详细解释: 关键字段 private static final String TAG_ENCH_ID = "id"; // NBT标签键:附…

深度学习零基础入门(4)-卷积神经网络架构

许久不见~ 本节我们延续上一节的话题来看看卷积神经网络的架构&#xff0c;看看具体的卷积、池化等操作卷积神经网络详解&#xff1a;从基础操作到整体架构 一、卷积操作&#xff1a;特征提取的核心 卷积是卷积神经网络&#xff08;CNN&#xff09;的核心操作&#xff0c;灵感来…

C语言的控制语句

C的控制语句 控制语句是C语言中用于控制程序执行流程的结构。通过控制语句,可以根据条件执行不同的代码块,或者重复执行某些操作,从而实现复杂的逻辑和功能。掌握控制语句是编写有效和高效C程序的关键。 1 条件控制 条件控制语句用于根据某些条件来决定程序的执行路径。C语…

Mac电脑基本功能快捷键

1. 个性化桌面 将喜爱照片添加为桌面墙纸。前往“系统设置”&#xff0c;然后点按边栏中的“墙纸”。点按“添加照片”&#xff0c;然后从文件或“照片”App选取一张照片。 2. 截屏 按下键盘上的Shift &#xfffc; Command ⌘ 5&#xff0c;然后选取捕捉整个屏幕、App窗口或…

微算法科技(NASDAQ: MLGO)开发量子边缘检测算法,为实时图像处理与边缘智能设备提供了新的解决方案

图像边缘检测是计算机视觉的核心任务&#xff0c;传统算法&#xff08;如 Sobel、Canny&#xff09;依赖梯度计算与阈值分割&#xff0c;在处理高分辨率、复杂纹理图像时面临计算效率瓶颈。随着量子计算技术的发展&#xff0c;利用量子态叠加与并行处理特性&#xff0c;微算法科…

断点续传Demo实现

基于我们的DownloadManager.swift代码&#xff0c;让我详细解释断点续传需要实现的核心功能&#xff1a; 断点续传的核心实现要素 1. 后台会话配置 private func setupBackgroundSession() {let config URLSessionConfiguration.background(withIdentifier: "com.test.do…

《Leetcode》-面试题-hot100-子串

题目列表 560. 和为K的子数组 中等难度 leetcode链接 239 滑动窗口最大值 困难难度 leetcode链接 76 最小覆盖子串 困难难度 leetcode链接 题目 &#xff08;1&#xff09;和为K的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 …

点击弹框以外的区域关闭弹框

在 Vue 3 中&#xff0c;如果你想判断点击的目标是否在弹框内&#xff0c;可以通过以下步骤实现。这里我们将使用 ref 来引用弹框组件&#xff0c;并在点击事件中进行判断。 示例代码 1. 创建弹框子组件 首先&#xff0c;创建一个名为 Modal.vue 的子组件。 <!-- Modal.vue …

00.Vue基础入门【小白级别手把手!】

目录 一、Vue介绍 二、创建Vue项目 nodeJs nvm版本管理 创建Vue项目 VS Code编辑器 三、.Vue文件结构说明 数据渲染 四、Vue项目目录说明 main.ts文件说明 五、Vue官网文档学习 一、Vue介绍 基础介绍 Vue是一个前端Web框架&#xff0c;属于单页应用&#xff08;SPA&am…