图像读取裁剪与人脸识别

图像读取

Image read ⇒ \Rightarrow torchvision.datasets

from torchvision import datasets
dataset = datasets.ImageFolder(data_dir, transform=transforms.Resize((512, 512)))

在这里插入图片描述

Return value illustration

  1. dataset[0][0]是PIL.Image objects,这利用IPython.display输出image,
from IPython import display
dataset = datasets.ImageFolder(data_dir, transform=transforms.Resize((512, 512)))
print(dataset)
print(len(dataset))
print(dataset.samples)
print(dataset[0][0])
print(dataset[0][1])
display.display(dataset[0][0])
print(dataset.samples[0][0])
print(dataset.samples[0][1])
dataset.samples = [
    (p, p.replace(data_dir, data_dir + '_cropped'))
        for p, _ in dataset.samples
]
print(dataset.samples[0][0])
print(dataset.samples[0][1])
        
loader = DataLoader(
    dataset,
    num_workers=workers,
    batch_size=batch_size,
    collate_fn=training.collate_pil
)

for i, (x, y) in enumerate(loader):
    mtcnn(x, save_path=y)
    print('\r第 {} 批,共 {} 批'.format(i + 1, len(loader)), end='')
    
# Remove mtcnn to reduce GPU memory usage
del mtcnn

help(datasets.ImageFolder)

在这里插入图片描述
返回的dataset类有如下函数:

  1. dataset[0][0]=PIL.Image,[1]=tag
  2. dataset.sample[0][0]
  3. len(dataset)

之后DataLoader加载数据集

loader = DataLoader(…)返回的DataLoader是什么,如何使用

`DataLoader`返回的是一个迭代器,用于从给定的`dataset`中按照指定的`batch_size`以及其他参数,生成批次的数据。
每个批次数据是一个元组,其中包含了输入样本和对应的标签。

在给定的代码中,`DataLoader`会使用`dataset`作为数据源,设置`num_workers`参数表示同时使用多少个子进程来加载数据,设置`batch_size`参数
表示每个批次的样本数量。`collate_fn`参数是一个用来自定义如何将样本列表组合成一个批次的函数。

通过使用`DataLoader`,可以方便地对大规模数据集进行批次加载,以进行训练或推理操作。
使用`DataLoader`的好处是可以自动进行数据并行处理,提高数据加载的效率。
for i, (x, y) in enumerate(loader):

是常用的 图像/样本 使用方式,x是图像batch列表,
在这里插入图片描述
x是图像,y是路径,好繁琐

图像裁剪

MTCNN 说明

facenet_pytorch.MTCNN是一个用于人脸检测和对齐的Python库。它使用了三个级联的神经网络来完成这个任务,分别是P-Net、R-Net和O-Net。

在MTCNN中,有三个阈值需要设置,分别是人脸检测的阈值、人脸对齐的阈值和人脸裁剪的阈值。

人脸检测的阈值(detection_threshold):用于确定是否存在人脸的阈值,默认值为0.6。当检测到的人脸置信度大于该阈值时,认为存在人脸。

人脸对齐的阈值(landmarks_threshold):用于确定是否成功对齐人脸的阈值,默认值为0.7。当对齐后的人脸关键点置信度大于该阈值时,认为对齐成功。

人脸裁剪的阈值(min_face_size):用于确定最小人脸尺寸的阈值,默认值为20。当检测到的人脸尺寸小于该阈值时,将被忽略。

这些阈值可以根据具体应用场景进行调整,以达到更好的检测和对齐效果。
from facenet_pytorch import MTCNN
mtcnn = MTCNN(
    image_size=160, margin=0, min_face_size=20,
    thresholds=[0.6, 0.7, 0.7], factor=0.709, post_process=True,
    device=device
)
facenet_pytorch.MTCNN是一个用于人脸检测和对齐的模型,它有以下几个参数:

min_face_size:最小人脸尺寸。默认值为20,表示检测到的人脸的最小边长为20个像素。

thresholds:阈值列表。默认值为[0.6, 0.7, 0.7],表示在三个不同的阈值下进行人脸检测和对齐。

factor:图像金字塔的缩放因子。默认值为0.709,用于生成不同尺度的图像。

post_process:是否进行后处理。默认值为True,表示进行后处理以去除重叠的人脸框。

device:设备类型。默认值为"cuda:0",表示使用GPU进行计算。如果没有可用的GPU,则可以设置为"cpu"。

keep_all:是否保留所有检测到的人脸框。默认值为False,表示只保留最大的人脸框。

select_largest:是否选择最大的人脸框。默认值为False,表示选择所有检测到的人脸框。

prewhiten:是否对图像进行预白化处理。默认值为True,表示对图像进行预处理以提高模型性能。

Cropping out 人脸框

用mtcnn对x裁剪,放入地址=y,

for i, (x, y) in enumerate(loader):
    mtcnn(x, save_path=y)
    display.display(display.Image(y[0]))
    print('\r第 {} 批,共 {} 批'.format(i + 1, len(loader)), end='')

IPython中输出如下:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-列表LinkedList

一,链表的简单的认识. 数组,栈,队列是线性数据结构,但都算不上是动态数据结构,底层都是依托静态数组,但是链表是确实真正意义上的动态数组. 为什么要学习链表? 1,链表时最简单的动态数据结构 2,掌握链表有助于学习更复杂的数据结构,例如,二叉树,trie. 3,学习链表有助于更深入…

LeetCode 1038.从二叉搜索树到更大和树

给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下, 二叉搜索树 满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左…

js逆向-2

#md5加密,某宝案例演示。 #免责声明:本文仅供学习使用,请勿用于其他违法行为(╥ω╥)

软件性能测试和功能测试有何联系和区别?第三方软件检测机构简析

软件性能测试和功能测试是软件开发过程中非常重要的两个环节。从根本上说,它们都是为了保证软件质量和可靠性,但它们的目标和方法却有所不同。 软件性能测试是评估软件在特定负载下的性能表现,包括响应时间、吞吐量、并发能力等指标。它通过…

MySQL 学习记录 2

原文:https://blog.iyatt.com/?p13818 13 存储引擎 查看一下前面创建的一张表的创建语句,当时并没有显式指定引擎,MySQL 自动指定的 InnoDB,即默认引擎是这个。 创建表的时候要显式指定引擎可以参考这个语句 查看当前 MySQL …

如何正确使用Postman变量?又该如何灵活设置变量?

引言 Postman变量可以帮助你快速生成测试数据、模拟不同的场景和环境。 但是,如何正确使用Postman变量?又该如何灵活设置变量?这些问题不用担心,接着往下看吧! 理解变量 为什么要使用变量? 如果在多个…

探索Java11新世界:JDK 11新特性详解

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

设计模式篇---观察者模式

文章目录 概念结构实例总结 概念 观察者模式:定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其他相关依赖对象都得到通知并被自动更新。 观察者模式是使用频率较高的一个模式,它建立了对象与对象之间的依赖…

一文读懂列表解析、字典解析、集合解析

一、所谓解析/解析式,也称为推导/推导式,对应英语单词为comprehension,是Python的一种独有特性。解析就是从一个数据序列构建另一个新的数据序列的结构体,其本质是使用一个可迭代对象,按一定规则通过表达式、函数等运算…

Git的基本操作和原理

目录 写在前面的话 为什么要有Git(git初识)? Git安装(Centos为例) Git基本操作 创建Git本地仓库 Git配置 认识工作区、暂存区、版本库 概念认识 添加文件 查看.git文件 修改文件 版本回退 撤销修改 情况一:…

[数据集][目标检测]游泳者溺水数据集VOC+YOLO格式2类别895张

数据集制作单位:未来自主研究中心(FIRC) 数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):895 标注数量(xml文件个数)&#xff1a…

博途PLC PID仿真(单容水箱液位高度控制含变积分变增益测试)

单容水箱和双荣水箱的微分方程和数值求解,可以参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/131139432https://rxxw-control.blog.csdn.net/article/details/131139432这篇博客我们利用欧拉求解器在PLC里完成单容水箱的数学建模。PLC也可以和MATL…

SpringBoot Admin 详解

SpringBoot Admin 详解 一、Actuator 详解1.Actuator原生端点1.1 监控检查端点:health1.2 应用信息端点:info1.3 http调用记录端点:httptrace1.4 堆栈信息端点:heapdump1.5 线程信息端点:threaddump1.6 获取全量Bean的…

基于SSM的萌宠宜家商城系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的萌宠宜家商城系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring …

【黑马程序员】3、TypeScript常用类型_黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程

课程地址:【黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程】 https://www.bilibili.com/video/BV14Z4y1u7pi/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 3、TypeScript常用类型 3.1 类型注解 …

【51单片机】想学会串口通信,你需要知道这些(串口通信实验前置知识)(13)

前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

Qt Android sdk配置报错解决

使用的jdk8总是失败,报错command tools run以及platform sdk等问题。后来主要是设置jdk版本为17,就配置生效了。Android sdk路径可以选用Android Studio自带的,但是也要在Qt中点击“设置SDK”按钮做必要的下载更新等。 编译器这里会自动检测到…

【黑马程序员】2、TypeScript介绍_黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程

课程地址:【黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程】 https://www.bilibili.com/video/BV14Z4y1u7pi/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 2、TypeScript初体验 2.1 安装编译TS的工…

探究全链路压力测试的含义与重要性

全链路压力测试是指对整个应用系统的各个环节或组件进行压力测试,以模拟实际生产环境中的用户负载和流量,评估系统在高负载条件下的性能表现。 1. 全链路压力测试的含义 全链路压力测试涉及系统的所有组件和环节,包括前端用户界面、应用服务器…

算法沉淀——动态规划之路径问题(leetcode真题剖析)

算法沉淀——动态规划之路径问题 01.不同路径02.不同路径 II03.珠宝的最高价值04.下降路径最小和05.最小路径和06.地下城游戏 01.不同路径 题目链接:https://leetcode.cn/problems/unique-paths/ 一个机器人位于一个 m x n 网格的左上角 (起始点在下图…
最新文章