CoreML Vision 人脸检测的输入图像尺寸要求是啥

Posted

技术标签:

【中文标题】CoreML Vision 人脸检测的输入图像尺寸要求是啥【英文标题】:What are the input image size requirements for CoreML Vision face detectionCoreML Vision 人脸检测的输入图像尺寸要求是什么 【发布时间】:2020-01-18 04:25:01 【问题描述】:

我正在使用 Vision 框架来检测图像中的人脸。我在 Apple 的文档中找不到输入图像的要求。通常在使用机器学习模型时,尤其是在 CoreML 中使用 .mlmodel 时,它描述了所需的输入。例如Image (Color 112 x 112)

let image: UIImage = someUIImage()    
let handler = VNImageRequestHandler(ciImage: CIImage(cgImage: (image?.cgImage)!))
let faceRequest = VNDetectFaceLandmarksRequest(completionHandler:  (request: VNRequest, error: Error?) in
    guard let observations = request.results as? [VNFaceObservation]
    else 
        print("unexpected result type from VNFaceObservation")
                return
        
    self.doSomething(with observations: observations)
)

do 
    try handler.perform([faceRequest])
 catch 
    print("Face detection failed: \(error)")

【问题讨论】:

【参考方案1】:

没关系,Vision 会自动处理这个问题。 (它可能会或可能不会在后台使用机器学习模型。)

您确实需要确保整个面部/头部在图像中可见,否则面部检测器将无法正常工作。

它也可能不适用于非常小的图像,但我从未尝试过。

【讨论】:

我正在从相机胶卷中获取图像。我猜它不适用于缓存 32x32 中最小的可用图像,另一方面也不需要全尺寸图像。如果他们提到建议的或最小的尺寸,我会知道要拿什么。现在我只是猜测。 我在相机的 1080x1920 图像上使用它没有问题。我确信 Vision 会在内部将图像大小调整为它喜欢的任何大小。 如果要处理相机胶卷中的所有照片(10k 张照片),这一点至关重要。我使用 .fasFormat 交付模式获取 224x224。我正在退化 90x120,这是 VNRequest 的输入,效果很好。但这是一种猜测 我想你可以设置一个断点,然后使用调试器来逐步执行 Vision 正在执行的操作。 ;-) 肯定会在某处致电vImageScale_xxx() 我读过他们的论文,描述了他们在做什么。在第一层中使用 convul​​ution 意味着您可以提供任何输入大小。也许这是一种新概念,即输入越好,输出就越好(发生)。而不是通常如何在固定输入大小上训练模型

以上是关于CoreML Vision 人脸检测的输入图像尺寸要求是啥的主要内容,如果未能解决你的问题,请参考以下文章

使用“android-vision”库保存实时检测到的人脸(跟踪人脸)图像

使用 Vision 和 AVFoundation 框架从实时摄像头(而非静态图像)进行实时人脸检测

OpenFace CoreML 模型。没有人脸检测

Apple Vision Framework:通过观察检测微笑或幸福的面孔?

在 macOS 中使用 Vision 和 CoreML 对图像进行分类

Apple Vision Framework 识别人脸