初步研究Pose_300W_LP datasets.py

news2024/10/7 14:27:18

mat文件参数解读

Color_para:颜色参数,用于描述图像的颜色属性,比如图像的亮度、对比度等信息。
亮度属性、对比度属性、饱和度属性(颜色越鲜艳)、色调属性(色调越偏向蓝色)、色温属性(色温越高,色彩偏白)、色调偏移属性(颜色的相对变化程度)、标志位或者缩放因子

Exp_para:表情参数,用于描述人脸的表情状态,比如微笑、皱眉等。

Illum_para:光照参数,用于描述图像中的光照情况,比如光照强度、光照方向等。

Pose_Para:姿态参数,用于描述人脸的姿态,包括头部的旋转、倾斜等。

Pt2d:关键点参数,即关键点坐标,用于描述人脸上的关键点位置,比如眼睛、鼻子、嘴巴等。

roi:感兴趣区域参数,用于描述图像中感兴趣的区域,通常用矩形框来表示。

Shape_para:形状参数,用于描述人脸的形状特征,比如脸部的轮廓、轮廓曲线等。

Tex_para:纹理参数,用于描述人脸的纹理特征,比如肤色、皱纹等。

专有名词

Binned labels:离散化的标签,用于分类任务,通过将连续值映射到预定义的区间中获得。
bins = np.array(range(-99, 102, 3))

这里定义了一个从 -99 到 102 的数组,步长为 3,表示将范围 [-99, 102) 分成宽度为 3 的区间。
映射到离散区间:

binned_pose = np.digitize([yaw, pitch, roll], bins) - 1

np.digitize 函数用于将 yaw、pitch 和 roll 的连续值映射到上述定义的区间中。

  • 1 的操作是为了将结果的索引从0开始。
    示例:
    假设 yaw = 10, pitch = -15, roll = 45,通过分箱后的结果 binned_pose 可能是 [36, 28, 48]。这里 36 表示 yaw 落在区间 [9, 12),28 表示 pitch 落在区间 [-18, -15),48 表示 roll 落在区间 [45, 48)。

用途:
这种离散化处理通常用于分类任务,因为分类模型需要离散的标签。比如在人脸姿态估计中,模型可以被训练来预测某个姿态角度落在哪个区间。

Continuous Labels

Continuous labels 指的是原始的连续数值标签,在你的代码中是指 yaw、pitch 和 roll 以度为单位的实际角度值。

具体操作:
获取连续标签:

cont_labels = torch.FloatTensor([yaw, pitch, roll])

这里 cont_labels 是一个包含 yaw、pitch 和 roll 的浮点数张量(Tensor)。
示例:
假设 yaw = 10, pitch = -15, roll = 45,则 cont_labels 的结果是 torch.FloatTensor([10, -15, 45])。

用途:
连续标签通常用于回归任务,因为回归模型需要预测的是连续数值。比如在姿态估计任务中,如果需要精确预测头部的角度,就需要使用连续标签进行训练和评估。

总结
Binned Labels:离散化的标签,用于分类任务,通过将连续值映射到预定义的区间中获得。
Continuous Labels:连续的原始标签,用于回归任务,直接使用原始的连续数值。
在你的代码中,最终返回了 img、labels(binned labels)、cont_labels(continuous labels)和 self.X_train[index]:

return img, labels, cont_labels, self.X_train[index]

这意味着模型可以同时使用离散化的标签进行分类训练,并且还可以使用连续的标签进行精确预测。

datasets所需要的300W_LP的Matlab文件中的所需要的元素有Pose_para与pt2d

pt2d = utils.get_pt2d_from_mat(mat_path)

在这里插入图片描述
在这里插入图片描述

pose = utils.get_ypr_from_mat(mat_path)

在这里插入图片描述

在这里插入图片描述

初步研究Pose_300W_LP datasets.py

1、打开图像:

使用PIL.Image库打开图像文件,并将其转换为指定的图像模式。
2、获取标注数据:

通过标注文件路径获取2D点坐标和姿势信息。
3、裁剪图像:

松散地裁剪脸部区域,计算裁剪边界时加入随机性以增强数据的多样性。
4、姿势角度转换:

将姿势信息从弧度转换为角度。
5、随机图像增强:

随机翻转图像以增加训练数据的多样性。
随机模糊图像以模拟图像模糊效果。
姿势值分箱:

将姿势角度进行分箱处理,以便进行分类任务。
在这里插入图片描述

返回结果:

返回处理后的图像、分箱后的标签、连续的姿势标签以及图像文件名。
在这里插入图片描述

问题1 k值怎么取

以下几点解释了为什么选择这个范围的k值是有道理的:

增强数据多样性:

在图像数据处理中,特别是在人脸检测和姿态估计任务中,增加数据的多样性可以有效提高模型的泛化能力。通过随机调整裁剪边界,可以生成各种不同的训练样本,帮助模型更好地适应不同的场景和条件。
适度随机扩展:

选择0.2到0.4的范围可以确保裁剪边界的扩展适度。太小的范围可能导致扩展不明显,无法显著增加数据多样性;而太大的范围可能导致裁剪区域包含过多背景信息,甚至丢失关键的脸部特征。
平衡背景和主体:

扩展裁剪边界时,适度的k值可以在包含足够背景信息的同时,仍然保持脸部作为主体。这有助于模型在学习时能够识别脸部特征和背景特征之间的关系,而不会被过多的背景信息干扰。
防止过拟合:

通过引入随机性,模型可以在训练过程中看到更广泛的输入变化,这有助于减少过拟合。在实际应用中,测试数据的分布可能与训练数据有所不同,通过这种随机裁剪可以使模型更具鲁棒性。
实验验证:

选择0.2到0.4的范围可能是基于实验验证得出的经验值。在实际操作中,数据科学家和工程师们通常会通过一系列实验来确定最优的参数范围,以达到最佳的模型性能。
综上所述,k值在0.2到0.4之间的选择是一种折中的方案,既能有效增加训练数据的多样性,又能保持裁剪后图像的有效性,从而有助于提高模型的性能和鲁棒性。

def __getitem__(self, index):
    # 打开图像文件
    img = Image.open(os.path.join(self.data_dir, self.X_train[index] + self.img_ext))
    img = img.convert(self.image_mode)
    
    # 获取标注文件路径
    mat_path = os.path.join(self.data_dir, self.y_train[index] + self.annot_ext)

    # 松散地裁剪脸部区域
    pt2d = utils.get_pt2d_from_mat(mat_path)
    x_min = min(pt2d[0,:])
    y_min = min(pt2d[1,:])
    x_max = max(pt2d[0,:])
    y_max = max(pt2d[1,:])

    # k = 0.20.40 之间的随机值
    k = np.random.random_sample() * 0.2 + 0.2
    x_min -= 0.6 * k * abs(x_max - x_min)
    y_min -= 2 * k * abs(y_max - y_min)
    x_max += 0.6 * k * abs(x_max - x_min)
    y_max += 0.6 * k * abs(y_max - y_min)
    img = img.crop((int(x_min), int(y_min), int(x_max), int(y_max)))

    # 获取以弧度表示的姿势
    pose = utils.get_ypr_from_mat(mat_path)
    # 转换为角度
    pitch = pose[0] * 180 / np.pi
    yaw = pose[1] * 180 / np.pi
    roll = pose[2] * 180 / np.pi

    # 随机翻转图像
    rnd = np.random.random_sample()
    if rnd < 0.5:
        yaw = -yaw
        roll = -roll
        img = img.transpose(Image.FLIP_LEFT_RIGHT)

    # 随机模糊图像
    rnd = np.random.random_sample()
    if rnd < 0.05:
        img = img.filter(ImageFilter.BLUR)

    # 将值分箱
    bins = np.array(range(-99, 102, 3))
    binned_pose = np.digitize([yaw, pitch, roll], bins) - 1

    # 获取目标张量
    labels = binned_pose
    cont_labels = torch.FloatTensor([yaw, pitch, roll])

    # 应用变换
    if self.transform is not None:
        img = self.transform(img)

    return img, labels, cont_labels, self.X_train[index]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

结构体(自定义类型)

1.结构体 结构体这种自定义的数据类型&#xff0c;让程序员可以自己创造适合的类型 结构是一些值的集合&#xff0c;这些值称为成员变量&#xff0c;结构的每个成员可以是不同类型的变量&#xff0c;可以是标量&#xff0c;数组&#xff0c;指针甚至是其他结构体 1.1.1 结构…

六西格玛培训:企业逆袭的秘密武器!——张驰咨询

为了提升企业的运营效率、产品质量和客户满意度&#xff0c;六西格玛培训成为了一个不可或缺的环节。以下是企业成功实施六西格玛培训的关键步骤&#xff1a; 一、清晰设定培训目标 首先&#xff0c;企业应明确六西格玛培训的具体目标&#xff0c;如提升产品质量、降低成本、…

武汉城投城更公司与竹云科技签署战略协议,携手构建智慧城市新未来!

2024年5月16日&#xff0c;武汉城投城更公司与深圳竹云科技股份有限公司&#xff08;以下简称“竹云”&#xff09;签订战略合作协议&#xff0c;双方将深入推进产业项目合作。 签约现场&#xff0c;双方围绕产业项目合作方向、路径和内容等进行了全面深入交流。城投城更公司党…

Windows和Linux系统部署Docker(2)

目录 一、Linux系统部署docker 前置环境&#xff1a; 1.安装需要的软件包&#xff0c; yum-util 提供yum-config-manager功能 2.添加阿里云 docker-ce 仓库 3.安装docker软件包 4.启动 docker并设置开机自启 5.查看版本&#xff1a; 二、windows系统部署docker 1.查看…

如何用unittest帮你快速生成自动化测试报告?

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一直以来很多使用 pythonunittest 做自动化测试的的小伙伴都在想&#xff0c;unittest 这个官方库…

MFC工控项目实例之一主菜单制作

1、本项目用在WIN10下安装的vc6.0兼容版实现。创建项目名为SEAL_PRESSURE的MFC对话框。在项目res文件下添加相关256色ico格式图片。 2、项目名称&#xff1a;密封压力试验机 主菜单名称&#xff1a; 系统参数 SYS_DATA 系统测试 SYS_TEST 选择型号 TYP_CHOICE 开始试验 TES_STA…

Tasker+SendSilentMail实现钉钉自动打卡

Tasker 允许用户根据自定义的“配置文件”(Profiles)&#xff0c;在特定的“背景”(Contexts)下&#xff0c;执行指定的“任务”(Tasks)。以下是关于Tasker的详细介绍&#xff1a; 强大的自定义能力&#xff1a;用户可以根据自己的需求&#xff0c;创建各种配置文件和任务&…

vwmare虚拟机我已复制和我已移动的区别

问题 此虚拟机可能已被移动或复制。 为了配置特定的管理和网络功能&#xff0c;WMware Workstation需要知道是否已移动或复制了此虚拟机。 如果您不知道&#xff0c;请回答“我已复制该虚拟机(P)” 我已复制 意味着复制出了一个完全相同的副本。 这两个副本可以运行在一台物理…

Linux 服务器配置 SSH 服务登录失败处理

任务目标 配置 Linux 服务器ssh远程登录失败处理机制&#xff0c;防止黑客爆破服务器密码 操作步骤 备份原配置文件 $ sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.bak $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak安装 pam_tally2 统计登陆失败次数 # 对于Debia…

CyberDAO M级共识交流会·西安站圆满落幕:共筑Web3美好未来

CyberDAO M级共识交流会于2024年5月28日在西安隆重举行&#xff0c;这是一场CyberDAO精英汇聚的盛会&#xff0c;以同心共筑&#xff0c;志在必达为主题口号与DAO精英携手并进&#xff0c;共筑CyberDAO美好宏图。CyberDAO的使命是降低WEB3的门槛&#xff0c;帮助用户轻松抓住行…

每日一题《leetcode--117.填充每个结点的下一个右侧结点指针||》

https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/ 这道题与我之前发布的题目116是一样的解题过程&#xff0c;只是本题所给的数组大小与116不同&#xff0c;这是需要注意的。 116题目链接&#xff1a; http://t.csdnimg.cn/3Ub02 struct Node* c…

中断向量码

中断请求引脚 INTR-可屏蔽中断请求信号输入引脚 NMI-不可屏蔽中断请求信号输入引脚 #INTA-可屏蔽中断请求信号应答引脚 IF-中断允许标志位 TF-陷阱标志位 中断向量表 由中断向量码确定中断源的类型 存储结构 中断向量地址 中断程序入口地址 示例 中断类型 内存中结构 5个…

2024-05-29 服务器开发-c++线程池与task-思考

摘要: 无论是什么系统&#xff0c;线程池和task都是给上层所提供的基础的功能单元。本文记录一些核心的设计思想。 线程池要面对的场景: 调用下层接口时&#xff0c;被IO阻塞&#xff0c;导致整个服务无法对外提供服务更上层调用本模块接口时&#xff0c;是需要做到同步&#…

为师妹写的《Java并发编程之线程池十八问》被表扬啦!

写在开头 之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为《Java并发编程之线程池十八问》,今天聊天时受了学妹的夸赞,心里很开心,毕竟自己整理的东西对别人起到了一点帮助,记录一下! Java并发编程之线程池十八问 经过…

月赚2万佣金的AI数字人,已成为新型带货神器,完整制作教程分享

大家好&#xff0c;我是设计师阿威 今天和大家分享一下用AI绘画制作数字人带货的副业创收教程&#xff0c;目前数字人类型的账号在短视频平台上&#xff0c;数字人带货能力非常强&#xff01; 今天我会分享4个爆款数字人账号案例&#xff0c;深度讲解目前数字人的最新玩法。 …

十大排序算法【1】---冒泡排序、快速排序、选择排序、插入排序、希尔排序

动画演示 各种算法&#xff1a;https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 6种常见排序算法&#xff1a;https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html 1、冒泡排序 //1、冒泡排序Bubble Sort: 比较前后相邻的数据&#xff0c…

SQL刷题笔记day6——转战LeetCode

1 第二高的薪水 ​ 我的代码&#xff1a; SELECT Salary SecondHighestSalary FROM Employee ORDER BY Salary DESC LIMIT 1, 1 我的代码不满足示例2的情况&#xff1a;如果没有第 2 高的薪资&#xff0c;即表里可能只有一条记录&#xff0c;这个解答会被评测为 Wrong Answ…

K8s集群之 存储卷 PV PVC

默写 1 如何将pod创建在指定的Node节点上 node亲和、pod亲和、pod反亲和: 调度策略 匹配标签 操作符 nodeAffinity 主机 In,NotIn,Exists,DoesNotExist&#xff0c;Gt&#xff0c;Lt podAffinity …

从零开始学Vue3--根据目录结构自动生成路由

我们在测试或者小项目中经常遇到一个问题&#xff0c;就是加一个页面&#xff0c;就要在router.js中加一个路由&#xff0c;相当的麻烦&#xff0c;有没有办法可以根据目录结构自动生成路由呢&#xff1f; 想要自动生成路由&#xff0c;最重要的是能够获取指定目录下vue的路径…

调试记录-U盘枚举失败之LPM影响

现象 板子接部分U盘出现枚举失败&#xff0c;看log像是硬件信号问题&#xff0c;如&#xff1a; [ 29.186464] usb usb3-port1: Cannot enable. Maybe the USB cable is bad? [ 30.079624] usb usb3-port1: Cannot enable. Maybe the USB cable is bad? [ 30.080200]…