【伯乐在线导读】:最近微软的 How-old.net 网站非常火热,用户在该站上传照片后,它可以测算出照片中人物的性别和年龄。

有国外网友在 Quora 上问了 How-old.net 的工作原理。下面是参与了该项目的微软项目经理 Eason Wang 的回复。

(Eason Wang 是 Bing 的资深项目经理,此回答获得了三千三百个点赞)

我本人就直接参与了这个项目。说实话,这个小网站的走红大大出乎了我的意料。我事后进行了一些为什么会走红的分析并且在 Medium 写了一篇文章

回到主题吧,我的回答分成两个部分。第一个部分会讲讲如何快速地在任意的软件中实现一模一样的功能,第二个部分我会深入一些描述这项技术本身。

在过去的几年和微软研发部门的合作中,就 Bing 的图像搜索技术而言,我们达到了最好的工业图像理解能力,这项技术迅速延伸到微软的其他产品。目前在 微软牛津项目主页 上,这项技术对所有的开发者开放。想要在自己的软件中实现一样的功能,你只需要简单地调用一下我们的 web API,就可以以 JSON 格式获取所需的一切信息。你可以尝试着在 www.projectoxford.ai 的这个页面上传一幅图像,它将在数秒内给你结果,脸部坐标、性别和年龄信息都在里面。Face API 只是我们在牛津项目上做的特性的其中一项。还有很多其他的核心功能来帮助打造创新性的应用。微软内部的 API 向大众开放让我感到很兴奋,我知道这会对开发社区起到深远的影响。这让之前看起来不可能的事情变得只用简单地调用一下 web API 就能做到了。#HowOldRobot 只是这些能力的小小展示,Azure 机器学习团队的一个开发人员只用了一天就把它开发出来了。

(译者注:以下是 API 示例,为 JSON 格式)

JSON:
[
  {
    "faceId": "5af35e84-ec20-4897-9795-8b3d4512a1f9",
    "faceRectangle": {
      "width": 60,
      "height": 60,
      "left": 276,
      "top": 43
    },
    "faceLandmarks": {
      "pupilLeft": {
        "x": "295.1",
        "y": "56.8"
      },
      "pupilRight": {
        "x": "317.9",
        "y": "59.6"
      },
      "noseTip": {
        "x": "311.6",
        "y": "74.7"
      },
      "mouthLeft": {
        "x": "291.0",
        "y": "86.3"
      },
      "mouthRight": {
        "x": "311.6",
        "y": "88.6"
      },
      "eyebrowLeftOuter": {
        "x": "281.6",
        "y": "50.1"
      },
      "eyebrowLeftInner": {
        "x": "304.2",
        "y": "51.6"
      },
      "eyeLeftOuter": {
        "x": "289.1",
        "y": "57.1"
      },
      "eyeLeftTop": {
        "x": "294.0",
        "y": "54.5"
      },
      "eyeLeftBottom": {
        "x": "293.0",
        "y": "61.0"
      },
      "eyeLeftInner": {
        "x": "297.8",
        "y": "58.7"
      },
      "eyebrowRightInner": {
        "x": "316.0",
        "y": "54.2"
      },
      "eyebrowRightOuter": {
        "x": "324.7",
        "y": "54.2"
      },
      "eyeRightInner": {
        "x": "312.9",
        "y": "60.9"
      },
      "eyeRightTop": {
        "x": "317.8",
        "y": "57.7"
      },
      "eyeRightBottom": {
        "x": "317.9",
        "y": "63.7"
      },
      "eyeRightOuter": {
        "x": "322.8",
        "y": "60.8"
      },
      "noseRootLeft": {
        "x": "304.0",
        "y": "60.2"
      },
      "noseRootRight": {
        "x": "312.2",
        "y": "61.2"
      },
      "noseLeftAlarTop": {
        "x": "302.6",
        "y": "70.2"
      },
      "noseRightAlarTop": {
        "x": "313.0",
        "y": "70.0"
      },
      "noseLeftAlarOutTip": {
        "x": "298.8",
        "y": "76.2"
      },
      "noseRightAlarOutTip": {
        "x": "315.2",
        "y": "76.6"
      },
      "upperLipTop": {
        "x": "307.3",
        "y": "84.0"
      },
      "upperLipBottom": {
        "x": "306.6",
        "y": "86.4"
      },
      "underLipTop": {
        "x": "305.5",
        "y": "89.6"
      },
      "underLipBottom": {
        "x": "304.1",
        "y": "94.0"
      }
    },
    "attributes": {
      "age": 24,
      "gender": "female",
      "headPose": {
        "roll": "4.0",
        "yaw": "31.3",
        "pitch": "0.0"
      }
    }
  }
]

How-old.net  这个网站主要依赖于三个关键的技术:面部检测、性别分类和年龄检测。面部检测是另外两个的基础。对于年龄检测和性别检测来说,只是机器学习中很典型的回归和分类问题,涉及到了面部特征的表示、训练数据的采集、回归和分类模型的构建以及模型的优化。这方面有很多的已经发表的论文。如果你有兴趣想进一步了解就告诉我。

另一方面,深度学习和对大规模数据的理解推动了图像理解的突破,为更加智能的系统和程序端口打开了一扇门。你可以看看我最新的关于图像图表如何应用于更进阶场景的博客:http://blogs.bing.com/search-qua…

留下你的评论让我改进这个回答,谢谢!