小编Jes*_*ock的帖子

CoreML / MLModelConfig PreferredMetalDevice - 了解设备放置启发法

是否有任何公开文档明确说明了CoreML's在 macOS 上运行推理模型时 GPU 设备放置的策略?它如何决定是否应在集成、离散或 CPU 上运行?可以可靠地“强制”一条路径吗?对于像配备多个独立 GPU 和多个 eGPU 的新款 Mac Pro 这样的系统来说,这种情况有何变化?

我对 rMBP 的测试表明答案是否定的 - 温度、电池、插入电源、自动图形设置和应用程序支持,甚至可能还有一些 MLModel 架构启发式方法都在设备放置中发挥着作用。

结合上下文更长:

我很好奇是否有任何关于 CoreML 的设备选择启发式的公开文档。通过添加 10.15 的 CoreML preferredMetalDeviceAPI MLModelConfig,我想可以强制MTLDevice/ MLModelVision 请求运行。

在我使用 Vega 20 的 2018 rMBP 上对集成、分立和 eGPU 进行的测试中,似乎只有 eGPU 在请求时始终运行 CoreML 模型。

我的 CoreML 模型是一个管道模型,由具有多个输出的 MobileNet 分类器(附加到自定义特征提取器的多头分类器)组成。

我很想了解设备选择偏好,原因如下:

a) 我想确保我的MLModel输入图像CIImagesMTLTextures本地设备推理支持,以限制 PCI 传输并继续在单个 GPU 设备上进行处理

b) 我的模型实际上是输入视频帧,WWDC '19 / 10.15 引入了 VideoToolbox 和 …

macos ios metal metal-performance-shaders coreml

18
推荐指数
1
解决办法
2226
查看次数

如何恢复GL_RENDERBUFFER?

我正在努力存储和恢复基于OpenGL ES的应用程序的状态.

我有一个函数来保存GL_RENDERBUFFER以使用以下代码转储数据:

glBindFramebuffer(GL_FRAMEBUFFER, fboTextureBufferData.framebuffer);
glBindRenderbuffer(GL_RENDERBUFFER, fboTextureBufferData.colorbuffer);

GLint x = 0, y = 0, width2 = backingWidth, height2 = backingHeight;
NSInteger dataLength = width * height * 4;
GLubyte *data = (GLubyte*)malloc(dataLength * sizeof(GLubyte));

// Read pixel data from the framebuffer
glPixelStorei(GL_PACK_ALIGNMENT, 4);
glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data);
Run Code Online (Sandbox Code Playgroud)

我没有看到glWritePixels函数.使用上面填充的GLubyte数据重新填充GL_RENDERBUFFER的最佳方法是什么?一个例子将不胜感激.

编辑3:

以下是我尝试配置纹理渲染缓冲区以及用于绘制它的函数的方法.如代码中所述,如果我为glFramebufferTexture2D参数指定GL_COLOR_ATTACHMENT1,则存储的像素数据将被恢复,但我无法获取任何更新.但是如果我使用GL_COLOR_ATTACHMENT0,我会得到绘图更新但没有恢复像素数据.

我尝试了各种组合(例如,对于glFramebufferRenderbuffer参数也使用了GL_COLOR_ATTACHMENT1)但是在尝试渲染时我得到了无效的帧缓冲区错误.我似乎非常接近,但无法弄清楚如何让它们恢复和渲染一起工作.

- (bool)configureRenderTextureBuffer {

    [EAGLContext setCurrentContext:context];

    glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
    [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];

    glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
    [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];

    glGenFramebuffers(1, &fboTextureBufferData.framebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, fboTextureBufferData.framebuffer);

    glGenRenderbuffers(1, &fboTextureBufferData.colorbuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, fboTextureBufferData.colorbuffer);

    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, backingWidth, …
Run Code Online (Sandbox Code Playgroud)

opengl-es framebuffer ios opengl-es-3.0

9
推荐指数
1
解决办法
605
查看次数

UIView removeFromSuperview正在调用didMoveToSuperview

我不明白为什么UIView removeFromSuperview正在打电话didMoveToSuperview.

我认为didMoveToSuperview只有在视图添加到视图时才会调用它.任何人都可以解释为什么removeFromSuperview要打电话didMoveToSuperview

这是我在做的事情removeFromSuperview:

public override func removeFromSuperview() {

    clearDelegates()

    chaosPad?.removeFromSuperview()
    brushSliders?.removeFromSuperview()
    moodSlider?.removeFromSuperview()
    brushShapeMenu?.removeFromSuperview()
    moodMenu?.removeFromSuperview()
    gravityMenu?.removeFromSuperview()
    rotationMenu?.removeFromSuperview()

    menuGroups = []
    centerButtons = []
    scrollMenuItems = []
    menu?.removeFromSuperview()
    menu = nil

    super.removeFromSuperview()
}

func clearDelegates() {
    chaosPad?.delegate = nil
    viewController = nil
}
Run Code Online (Sandbox Code Playgroud)

这是调用堆栈,显示如何didMoveToSuperview调用:

#0  0x0000000110f39708 in specialized _fatalErrorMessage(StaticString, StaticString, StaticString, UInt) -> () ()
#1  0x000000010b9cb960 in TDTOilistMenuPainting.configureFrames() -> () at /FastDev/TDTPhotoLib/Oilist/Classes/TDTOilistMenuPainting.swift:161
#2  0x000000010b9cb83e in TDTOilistMenuPainting.didMoveToSuperview() -> …
Run Code Online (Sandbox Code Playgroud)

uiview ios swift

9
推荐指数
1
解决办法
2046
查看次数

实时捕捉金属MTKView作为电影?

从a中捕获帧的最有效方法是MTKView什么?如果可能的话,我想实时保存帧中的.mov文件.是否可以渲染到AVPlayer框架中?

它目前正在使用此代码绘制(基于@warrenm PerformanceShaders 项目):

func draw(in view: MTKView) {
     _ = inflightSemaphore.wait(timeout: DispatchTime.distantFuture)
             updateBuffers()

    let commandBuffer = commandQueue.makeCommandBuffer()

    commandBuffer.addCompletedHandler{ [weak self] commandBuffer in
        if let strongSelf = self {
            strongSelf.inflightSemaphore.signal()
        }
    }
   // Dispatch the current kernel to perform the selected image filter
    selectedKernel.encode(commandBuffer: commandBuffer,
        sourceTexture: kernelSourceTexture!,
        destinationTexture: kernelDestTexture!)

    if let renderPassDescriptor = view.currentRenderPassDescriptor, let currentDrawable = view.currentDrawable
    {
        let clearColor = MTLClearColor(red: 0, green: 0, blue: 0, alpha: 1)
        renderPassDescriptor.colorAttachments[0].clearColor = clearColor

        let renderEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: …
Run Code Online (Sandbox Code Playgroud)

ios avcapture metal swift3

9
推荐指数
2
解决办法
2011
查看次数

我的合法域名不是合法的Java包名称

我的域名是3DTOPO.com.显然java不允许包域名以数字开头.

为什么Java反向域名遵循与域名相同的规则呢?我真的不想命名我的包com.threedtopo ....

对于不是我的域名的初学者!其他任何人都可以自由注册并使用该域名.此外,它非常尴尬,而不是我的业务名称.

有人有包名称建议吗?

java package

7
推荐指数
4
解决办法
3194
查看次数

CGPath copy lineJoin和miterLimit没有明显的影响

我正在使用copy(strokingWithWidth:lineCap:lineJoin:miterLimit:transform :)来偏移CGPath .问题是偏移路径引入了似乎是斜接连接的各种锯齿状线.将更改设置miterLimit为0无效,使用斜角线连接也没有任何区别.

在此图像中,有原始路径(在应用之前strokingWithWidth),使用斜接连接的偏移路径,以及使用斜角连接的偏移路径.为什么不使用斜角连接有什么影响?

示例路径

使用斜接的代码(注意使用CGLineJoin.round产生相同的结果):

let pathOffset = path.copy(strokingWithWidth: 4.0, 
                           lineCap: CGLineCap.butt,
                           lineJoin: CGLineJoin.miter,
                           miterLimit: 20.0)

context.saveGState()

context.setStrokeColor(UIColor.red.cgColor)
context.addPath(pathOffset)
context.strokePath()

context.restoreGState()
Run Code Online (Sandbox Code Playgroud)

使用斜角的代码:

let pathOffset = path.copy(strokingWithWidth: 4.0, 
                           lineCap: CGLineCap.butt,
                           lineJoin: CGLineJoin.bevel,
                           miterLimit: 0.0)

context.saveGState()

context.setStrokeColor(UIColor.red.cgColor)
context.addPath(pathOffset)
context.strokePath()

context.restoreGState()
Run Code Online (Sandbox Code Playgroud)

core-graphics cgpath ios swift swift3

7
推荐指数
1
解决办法
667
查看次数

为具有灵活形状的 CoreML 2 模型指定输入/输出维度

我设法创建了一个具有灵活输入/输出形状大小的 CoreML 2.0 模型:

在此处输入图片说明

但是,我不知道如何在我的 Xcode 项目中设置大小。如果我将输入像素缓冲区大小设置为 2048x2048,输出像素缓冲区仍然是 1536x1536。如果我将其设置为 768x768,则生成的像素缓冲区仍为 1536x1536 - 但在 768x768 区域之外是空白的。

我检查了自动生成的 Swift 模型类,但没有看到任何线索。

我在任何地方都找不到展示如何使用“灵活性”尺寸的示例。

在 WWDC 2018 Session 708 “What's New in Core ML”中,第 1 部分指出:

这意味着现在您必须运送单个模型。您不必有任何冗余代码。如果您需要在标清和高清之间切换,您可以更快地完成,因为我们不需要从头开始重新加载模型;我们只需要调整它的大小。您有两个选项来指定模型的灵活性。您可以为其尺寸定义一个范围,因此您可以定义最小宽度和高度以及最大宽度和高度。然后在推理时选择两者之间的任何值。但也有另一种方式。您可以枚举将要使用的所有形状。例如,所有不同的纵横比,所有不同的分辨率,这对性能更好。Core ML 更早地了解您的用例,因此它可以 - 它有机会执行更多优化。

他们说“我们只需要调整它的大小”。这太令人沮丧了,因为他们没有告诉你如何调整它的大小!他们还说“然后在推理中选择介于两者之间的任何值”,但不提供如何选择介于两者之间的值的线索!

这是我添加灵活形状大小的方法:

import coremltools
from coremltools.models.neural_network import flexible_shape_utils
spec = coremltools.utils.load_spec('mymodel_fxedShape.mlmodel')
img_size_ranges = flexible_shape_utils.NeuralNetworkImageSizeRange()
img_size_ranges.add_height_range(640, 2048)
img_size_ranges.add_width_range(640, 2048)
flexible_shape_utils.update_image_size_range(spec, feature_name='inputImage', size_range=img_size_ranges)
flexible_shape_utils.update_image_size_range(spec, feature_name='outputImage', size_range=img_size_ranges)
coremltools.utils.save_spec(spec, 'myModel.mlmodel')
Run Code Online (Sandbox Code Playgroud)

以下是该模型的说明:

description {
  input {
    name: "inputImage"
    shortDescription: "Image to stylize"
    type {
      imageType {
        width: 1536
        height: …
Run Code Online (Sandbox Code Playgroud)

ios swift coreml

7
推荐指数
1
解决办法
1513
查看次数

Xcode 图像快速查看在 M1 Mac 上不起作用

自从切换到 M1 Mac 进行开发后,Xcode 不再在断点处显示任何图像预览。

快速查看不适用于任何图像:CGImagesUIImagesCIImagesMTLTextures等。

我正在调试模式下运行。有人知道这是怎么回事吗?

在此输入图像描述

CG图像:

在此输入图像描述

CI图像:

在此输入图像描述

MTL纹理:

在此输入图像描述

macos xcode quicklook apple-m1

7
推荐指数
1
解决办法
723
查看次数

裁剪的UIButton标题

我使用自定义字体作为UIButton的标题.它有效,除了这个特定的字体,第一个字符的一部分被剪裁.例如:

在此输入图像描述

我尝试设置contentEdgeInsets和titleEdgeInsets,似乎无法修复它.我也尝试将button.titleLabel.clipsToBounds属性设置为NO;

任何建议将不胜感激.

iphone uibutton uilabel ios

6
推荐指数
2
解决办法
2797
查看次数

何时从Sandbox切换到生产StoreKit服务器?

我最近向iTunes提交了一个应用内购买的应用.我应该在什么特定时间从使用沙盒服务器切换到生产服务器?

现在?或者在获得批准后?

我可以随时在我的服务器上的php文件中切换.

我查看了StoreKit文档,他们并没有真正说清楚.

谢谢!

iphone storekit ipad ios appstore-sandbox

6
推荐指数
1
解决办法
1883
查看次数