4

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

4

3 回答 3

2

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

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

于 2019-05-18T10:02:25.550 回答
1

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

于 2019-06-15T11:45:35.437 回答
0

要将多阵列转换为图像,您必须使用 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()
            }
于 2021-09-01T03:44:54.477 回答