图像读取
Image read ⇒ \Rightarrow ⇒ torchvision.datasets
from torchvision import datasets
dataset = datasets.ImageFolder(data_dir, transform=transforms.Resize((512, 512)))
Return value illustration
- 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类有如下函数:
- dataset[0][0]=PIL.Image,[1]=tag
- dataset.sample[0][0]
- 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中输出如下: