发布
社区首页 >问答首页 >Pytorch Facenet MTCNN图像输出

Pytorch Facenet MTCNN图像输出
EN

Stack Overflow用户
提问于 2020-10-16 10:36:31
回答 1查看 1.2K关注 0票数 0

我正在用两种方法在python中使用facenet py手电筒(https://github.com/timesler/facenet-pytorch)做人脸识别应用程序。

第一方法代码-

代码语言:javascript
代码运行次数:0
复制
resnet = InceptionResnetV1(pretrained='vggface2').eval()
mtcnn = MTCNN(image_size=96)

img = Image.open(image_path)
image_prep = mtcnn(img)
plt.figure()
plt.axis('off')
plt.imshow(image_prep.permute(1, 2, 0))
if image_prep is not None:
  image_embedding = resnet(image_prep.unsqueeze(0))

在这段代码中,我从给定的图像中提取人脸,并获得用于识别人脸的512编码。

在这个例子中,我使用了两个不同的面孔,并绘制了两张脸之间的距离。

代码语言:javascript
代码运行次数:0
复制
        a.jpg       b.jpg
a.jpg   0.000000    1.142466
b.jpg   1.142466    0.000000

效果很好..。

第二方法代码-

代码语言:javascript
代码运行次数:0
复制
 img = Image.open(image)
 boxes, probs = mtcnn.detect(img) # Gives the coordinates of the face in the given image
 face = img.crop((boxes[0][0], boxes[0][1], boxes[0][2], boxes[0][3])) # Cropping the face
 plt.figure()
 plt.imshow(face)
 pil_to_tensor = transforms.ToTensor()(face).unsqueeze_(0) # Converting to tensor type
 image_embedding = resnet(pil_to_tensor)

在这段代码中,我首先得到面部的坐标,然后是嵌入。两张脸之间的距离-

代码语言:javascript
代码运行次数:0
复制
        a.jpg       b.jpg
a.jpg   0.000000    0.631094
b.jpg   0.631094    0.000000

在第一种方法中,直接将图像输入到mtcnn中,得到了较好的效果,两面之间的距离大于1.0。在第二种方法中,我使用mtcnn.detect()获取人脸的坐标,从给定的图像中裁剪人脸,然后输入resnet。这种方法减少了两个不同人脸之间的距离。

然后,通过在resnet中绘制结果(面),找出第一种方法优于第二种方法的原因。

在第二种方法中,通过使用mtcnn.detect()对人脸进行裁剪,给出与输入图像相同的人脸(清晰图像)。

但是,在第一种方法中,我直接给出了mtcnn(img)的输入,它在黑暗中返回人脸的张量,而不是输入图像。这个较暗的图像不是一个清晰的图像(眼睛周围的区域比较暗,我用了很多照片测试),不能清楚地看到眼睛。这就是原因所在,第一种方法显示出两面之间的距离较高。

我的疑问是,为什么mtcnn在黑暗中返回张量,如何解决它,在这个问题上帮助我,

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-01-03 10:30:53

可能是因为张量在-1:1范围内?你必须把它转换回uint8 0-255。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64387540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档