初步研究Pose_300W_LP datasets.py

2024-05-30 15:12

本文主要是介绍初步研究Pose_300W_LP datasets.py,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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.2x_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.piyaw = pose[1] * 180 / np.piroll = pose[2] * 180 / np.pi# 随机翻转图像rnd = np.random.random_sample()if rnd < 0.5:yaw = -yawroll = -rollimg = 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_posecont_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]

这篇关于初步研究Pose_300W_LP datasets.py的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016427

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。

开题报告中的研究方法设计:AI能帮你做什么?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 大家都准备开题报告了吗?研究方法部分是不是已经让你头疼到抓狂? 别急,这可是大多数人都会遇到的难题!尤其是研究方法设计这一块,选定性还是定量,怎么搞才能符合老师的要求? 每次到这儿,头脑一片空白。 好消息是,现在AI工具火得一塌糊涂,比如ChatGPT,居然能帮你在研究方法这块儿上出点主意。是不

研究人员在RSA大会上演示利用恶意JPEG图片入侵企业内网

安全研究人员Marcus Murray在正在旧金山举行的RSA大会上公布了一种利用恶意JPEG图片入侵企业网络内部Windows服务器的新方法。  攻击流程及漏洞分析 最近,安全专家兼渗透测试员Marcus Murray发现了一种利用恶意JPEG图片来攻击Windows服务器的新方法,利用该方法还可以在目标网络中进行特权提升。几天前,在旧金山举行的RSA大会上,该Marcus现场展示了攻击流程,

初步学习Android的感想

之前在学习java语言的时候就经常听说过Android这门语言,那时候感觉Android有些神秘感,再加上Android是用来开发移动设备的一门语言,所以一直对Android抱有一种兴奋的心情。 在我开始接触 Android之后,感觉超好玩,因为可以在自己的手机设备上开发一些我喜欢的小应用,再想想之前说学习Android应该会很难,但是如果你真的接触了,而且有JAVA的功底,我想学习Androi

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立

LibSVM学习(六)——easy.py和grid.py的使用

我们在“LibSVM学习(一)”中,讲到libSVM有一个tools文件夹,里面包含有四个python文件,是用来对参数优选的。其中,常用到的是easy.py和grid.py两个文件。其实,网上也有相应的说明,但很不系统,下面结合本人的经验,对使用方法做个说明。        这两个文件都要用python(可以在http://www.python.org上下载到,需要安装)和绘图工具gnup

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i