【问题标题】:How to apply Deeplab V3 in Xcode for real time segmentation?如何在 Xcode 中应用 Deeplab V3 进行实时分割?
【发布时间】:2019-09-30 05:41:48
【问题描述】:

其实我是 swift 和 Deeplab V3 的初学者。我真的不知道如何在 Xcode 上集成 deeplab。我只想在 ios 中使用经过 tensorflow 训练的示例模型进行语义分割。

【问题讨论】:

    标签: ios xcode deeplab


    【解决方案1】:

    https://github.com/cainxx/image-segmenter-ios

    浏览上述链接,该链接实现了用于分割的 COREML 模型。使用标准转换工具将您的 Tensorflow 模型转换为 Coreml 模型。我们已经测试过一次。并且足够自信,它会起作用。

    【讨论】:

    • 谢谢,但它不能实时工作,我不知道我该怎么办??你有什么想法吗?
    【解决方案2】:

    Apple 在其官方网站上提供了 .mlmodel 格式的 deeplab v3。您可以通过拖放轻松地将其集成到您的 xcode 中。我发现的唯一问题是输出格式是多数组,我不知道如何将结果显示为图像。 这是 deeplab mlmodel 的链接 https://docs-assets.developer.apple.com/coreml/models/Image/ImageSegmentation/DeepLabV3/DeepLabV3.mlmodel

    【讨论】:

      【解决方案3】:

      要将多数组转换为图像,您必须使用 cg 栅格化数据。这是将多数组中每个非零值的 alpha 设置为 1 的示例。因此,在多数组中识别的所有内容都具有完整的 alpha。您也可以从数组中解释不同的值。

                  guard let mlMultiArray = observations.first?.featureValue.multiArrayValue else {
                  
                      return
                  }
                  let aWidth = CGFloat(mlMultiArray.shape[0].intValue)
                  let aHeight = CGFloat(mlMultiArray.shape[1].intValue)
      
                  UIGraphicsBeginImageContext(
                      CGSize(width: aWidth, height: aHeight))
                  if let ctx = UIGraphicsGetCurrentContext() {
      
                      ctx.clear(CGRect(x: 0.0, y: 0.0, width: Double(aWidth), height: Double(aHeight)));
      
                      for j in 0..<Int(aHeight) {
                          for i in 0..<Int(aWidth) {
      
                              let aValue =
                                  (mlMultiArray[j * Int(aHeight) + i].floatValue > 0.0) ?
                                      1.0 : 0.0
                              let aRect = CGRect(
                                  x: CGFloat(i),
                                  y: CGFloat(j),
                                  width: 1.0,
                                  height: 1.0)
      
                              let aColor: UIColor = UIColor(
                                  displayP3Red: 0.0,
                                  green: 0.0,
                                  blue: 0.0,
                                  alpha: CGFloat(aValue))
      
                              aColor.setFill()
                              UIRectFill(aRect)
                          }
                      }
                      
                      let anImage = UIGraphicsGetImageFromCurrentImageContext()
      
                      self.segmentationImage = anImage
                      UIGraphicsEndImageContext()
                  }
      

      【讨论】:

        猜你喜欢
        • 2019-09-10
        • 2019-05-23
        • 2018-08-21
        • 2019-02-06
        • 2020-03-15
        • 2020-12-17
        • 2019-04-18
        • 2019-09-25
        • 1970-01-01
        相关资源
        最近更新 更多