WildCat's Blog

Google ML Kit 初探:一个来自机器学习初学者的不专业测评

欢迎转载,请注明原文链接。

在 Google I/O 2018 上,Google 发布了 ML Kit 1。通过 ML Kit,即使没有机器学习背景的开发者也可以快速开发出一些基于机器学习的项目2。调用 ML Kit 的 API 就像调用其他移动原生 SDK 一样简单。这对于多次入门机器学习,却仍旧还在入门的我来说,的确是一个激动人心的消息 😅。不过,Google 的这个 ML Kit 能否在自己的 apps 广泛使用?有哪些优点缺点?尤其是对于中国特殊的网络环境,又究竟会如何呢?本文将简要介绍 ML Kit 的开发体验,以及从机器学习初学者角度来不专业地衡量这个工具的优缺点。

顺便说下,Google 对于 ML Kit 的命名真的很机灵,估计会因此给 Google 带来不少来自搜索引擎的流量。因为每年 WWDC 时,Apple 喜欢以 FooKit 这种格式命名自己新的 SDK,比如 ARKitMapKit 等等。不过,Apple 的机器学习 SDK 并没有以 MLKit 命名,而是叫做 Core ML (当然也符合 Apple 此前的命名偏好之一)。相信很多搜 Core ML 的同学经常误输入为”MLKit“,未来这时候 Google 就可以放心的给自己家 SDK 导流啦(截至目前,Google 仍旧很良心,搜“mlkit”时大都是 Apple Core ML 的结果)。

注:本文中的示例 apps 主要有两个:

开发体验

对于普通 iOS 开发者,创建和运行一个 ML Kit 的 hello world 项目不会超过五分钟3

firebase-console

如果想创建一个 iOS 原生 OCR 项目(下文称作“MLKitDemo”),只需要在 Podfile 添加下面三行代码:

pod 'Firebase/Core'
pod 'Firebase/MLVision'
pod 'Firebase/MLVisionTextModel'

然后,在 Firebase Console 中创建自己的 app(可能需要绑定信用卡),下载对应的 GoogleService-Info.plist 后,即可使用了。简单的文字识别如下所示4

func performTextRecognition() {
    textDetector = vision.textDetector()
    let uiImage = UIImage(named: "demo_image")
    let visionImage = VisionImage(image: uiImage!)
    let visionMetaData = VisionImageMetadata()
    visionMetaData.orientation = .bottomRight
    visionImage.metadata = visionMetaData

    textDetector!.detect(in: visionImage) { (features, error) in
        guard error == nil, let features = features, !features.isEmpty else {
            print("Error. You should also check the console for error messages.")
            // ...
            return
        }

        // Recognized and extracted text
        print("Detected text has: \(features.count) blocks")
        for block in features {
            print("\"\(block.text)\"")
        }
        // ...
    }
}

依赖项目以及占用空间

下文信息是基于 MLKitExample(Firebase 官方示例),而不是上文的 hello world 项目(MLKitDemo)。

虽然目前 ML Kit 集成的 API 都很简单,但是 SDK 的依赖却比较庞大(来源 pod install):

Installing Firebase (5.0.0)
Installing FirebaseAnalytics (5.0.0)
Installing FirebaseCore (5.0.0)
Installing FirebaseInstanceID (3.0.0)
Installing FirebaseMLCommon (0.9.0)
Installing FirebaseMLModelInterpreter (0.9.0)
Installing FirebaseMLVision (0.9.0)
Installing FirebaseMLVisionBarcodeModel (0.9.0)
Installing FirebaseMLVisionFaceModel (0.9.0)
Installing FirebaseMLVisionLabelModel (0.9.0)
Installing FirebaseMLVisionTextModel (0.9.0)
Installing GTMSessionFetcher (1.1.15)
Installing GoogleAPIClientForREST (1.3.4)
Installing GoogleMobileVision (1.3.0)
Installing GoogleToolboxForMac (2.1.4)
Installing Protobuf (3.5.0)
Installing TensorFlowLite (0.1.7)
Installing nanopb (0.3.8)

依赖自带一些 pre-trained models,自然也是比较大(来源 ncdu):

  635.2 MiB [##########] /GoogleMobileVision
   29.5 MiB [          ] /TensorFlowLite
   18.2 MiB [          ] /FirebaseAnalytics
    4.1 MiB [          ] /FirebaseInstanceID
    4.1 MiB [          ] /FirebaseMLVision
    2.7 MiB [          ] /FirebaseMLModelInterpreter
    1.6 MiB [          ] /Protobuf
  556.0 KiB [          ] /GoogleAPIClientForREST
  484.0 KiB [          ] /GTMSessionFetcher
  292.0 KiB [          ] /Target Support Files
  284.0 KiB [          ] /FirebaseCore
  232.0 KiB [          ] /Pods.xcodeproj
  124.0 KiB [          ] /nanopb
  112.0 KiB [          ] /GoogleToolboxForMac
   80.0 KiB [          ] /FirebaseMLCommon
   12.0 KiB [          ] /FirebaseMLVisionLabelModel
   12.0 KiB [          ] /FirebaseMLVisionBarcodeModel
   12.0 KiB [          ] /FirebaseMLVisionTextModel
   12.0 KiB [          ] /FirebaseMLVisionFaceModel
   12.0 KiB [          ] /Firebase
    8.0 KiB [          ]  Manifest.lock
    0.0   B [          ] /Headers
    0.0   B [          ] /Local Podspecs

GoogleMobileVision 下的 pre-trained models 大小:

  252.4 MiB [##########] /FaceDetector
  250.0 MiB [######### ] /TextDetector
   88.2 MiB [###       ] /LabelDetector
   26.8 MiB [#         ] /BarcodeDetector
   17.7 MiB [          ] /Detector

部署和使用体验

在 iOS 上部署基于 ML Kit 的 app 非常简单,并不需要额外的操作,直接安装即可。

App 大小

由于包含了 pre-trained models,app 自然要比常规应用要大不少:

app-size

使用体验

文字识别(Text recognition)

文字识别的准确度也是非常之高的,即使照片有点糊。例子为《经济学人》某一期目录:

text-rec

不过这个 pre-trained model 只支持英文文字识别,对于中文或者中英文混合文字识别,需要加载自定义模型。

人脸检测(Face detection)

人脸识别自然是比较准确,这一块各家都做的已经比较成熟了,更何况是 Google。这里用人民群众喜闻乐见的川普总统为例:

trump-face-rec

物体识别(Image labelling)

还是用川普总统的照片测试,物体名称识别比较成功(confidence 比较高),可惜位置没有标注出来:

labelling

网络使用

由于众所周知的原因,Google 的服务并不一定能在中国正常使用。笔者特意使用 Little Snitch 观察了下网络使用(只含有离线模型的 app),发现依旧有调用 Google 的 API:

demo-networking

很显然 play.googleapis.com 是 ping 不通也无法直接连接的。因此,很遗憾,这个 SDK 目前似乎无法在中国直接使用。

总结

从 TensorFlow 到 AutoML,从 TensorFlow Lite 到 ML Kit,不难看出 Google 在机器学习领域广泛的布局。平心而论,从 ML Kit 的易用性来看,这可以说是 Google 的又一良心之作:提供快速开发套件的同时,又通过 TensorFlow Lite 提供强大的灵活性。但不可避免的是,ML Kit 是与 Firebase 绑定的存在(即使实用离线推断,目前也需要配置 Firebase 的 app credentials),在中国使用 Firebase 并不是一件容易的事情。如果 app 的主要受众是中国用户的话,也可以退而求其次,使用 TensorFlow Lite 在移动端部署机器学习模型仍旧是不错的选择。

引用与尾注


  1. TechCrunch: Google’s ML Kit makes it easy to add AI smarts to iOS and Android app: https://techcrunch.com/2018/05/08/googles-ml-kit-makes-it-easy-to-add-ai-smart-to-ios-and-android-apps ↩︎

  2. Google Developers Blog: Introducing ML Kit: https://developers.googleblog.com/2018/05/introducing-ml-kit.html ↩︎

  3. 这里抛开网络因素。 ↩︎

  4. 参考官方文档:https://firebase.google.com/docs/ml-kit/recognize-text ↩︎