当前位置: 首页 > 知识库问答 >
问题:

Pytorch Facenet MTCNN图像输出

况鸿雪
2023-03-14

我正在用facenet pytorch做一个人脸识别应用(https://github.com/timesler/facenet-pytorch)在python中使用两种方法。

第一种方法代码-

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编码。

在本例中,我使用了两个不同的面,并绘制了面之间的距离

        a.jpg       b.jpg
a.jpg   0.000000    1.142466
b.jpg   1.142466    0.000000

它工作得很好...

第二种方法代码-

 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)

在这段代码中,我通常先获得面坐标,然后是嵌入。两个面之间的距离-

        a.jpg       b.jpg
a.jpg   0.000000    0.631094
b.jpg   0.631094    0.000000

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

然后,我通过在馈送到resnet之前绘制结果(face)来找到第一种方法比第二种方法性能好的原因。

在第二种方法中,我通过使用mtcnn裁剪面来填充与输入图像(清晰图像)中给定的相同的面。detect()

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

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

谢谢

共有1个答案

薛弘阔
2023-03-14

也许是因为张量在[-1:1]范围内返回?你必须把它转换回uint8[0-255]。

 类似资料:
  • 问题内容: 我正在使用核心图像,并且将CIFilter棕褐色调应用于图像。我在viewDidLoad中运行了一次过滤器,然后立即调用另一个再次添加过滤器的函数。由于某些原因,当我尝试访问输出图像时,应用程序崩溃并说输出图像为nil。有人知道为什么会这样吗? 谢谢 问题答案: 您不能调用该UIImage并将其用作UIImageView的图像。UIImageView需要一个由位图(CGImage)支持

  • 问题内容: 我有一张图片(例如) 有一个哑剧类型 如何将其输出到浏览器? 问题答案:

  • 问题内容: 如何在servlet中提供存储在我的硬盘中的图像? 例如: 我有一个图像存储在path中,并且我想使用URL在servlet中提供该图像。 问题答案: 将servlet映射到url-pattern 从磁盘读取文件 写到 将标头设置为(如果只是png)

  • 我想让我的PHP输出一个简单的图像,但当我这样做的时候,它给我一个白色的正方形,所以我以为IMG是找不到的,但当我放一个简单的HTML IMG标签,它就可以找到,代码非常简单。同样,如果我尝试从互联网上的图像,它也不会起作用。

  • 我在我的网络应用程序中实现了一个输入文件图像捕捉,让用户拍照并上传。然而,当他们把平板电脑颠倒过来时,图像会出现颠倒。当在应用程序之外使用相机应用程序时,你如何拍照并不重要,它总是颠倒的。 如何在我的web应用程序中强制执行此操作?

  • 问题内容: 我正在尝试保存使用matplotlib创建的图;但是,图像保存为空白。 这是我的代码: tessstttyyy.png为空白(也尝试使用.jpg) 问题答案: 首先,什么时候发生?我会测试一下,然后再调整传递给的值;可以尝试输入值131、132和133,或者取决于是否存在的值。 其次,在调用之后,创建一个新图形。为了解决这个问题,您可以 致电之前致电 通过调用“获取当前图形”来保存图形