是否有任何公开文档明确说明了CoreML's
在 macOS 上运行推理模型时 GPU 设备放置的策略?它如何决定是否应在集成、离散或 CPU 上运行?可以可靠地“强制”一条路径吗?对于像配备多个独立 GPU 和多个 eGPU 的新款 Mac Pro 这样的系统来说,这种情况有何变化?
我对 rMBP 的测试表明答案是否定的 - 温度、电池、插入电源、自动图形设置和应用程序支持,甚至可能还有一些 MLModel 架构启发式方法都在设备放置中发挥着作用。
结合上下文更长:
我很好奇是否有任何关于 CoreML 的设备选择启发式的公开文档。通过添加 10.15 的 CoreML preferredMetalDevice
API MLModelConfig
,我想可以强制MTLDevice
/ MLModel
Vision 请求运行。
在我使用 Vega 20 的 2018 rMBP 上对集成、分立和 eGPU 进行的测试中,似乎只有 eGPU 在请求时始终运行 CoreML 模型。
我的 CoreML 模型是一个管道模型,由具有多个输出的 MobileNet 分类器(附加到自定义特征提取器的多头分类器)组成。
我很想了解设备选择偏好,原因如下:
a) 我想确保我的MLModel
输入图像CIImages
由MTLTextures
本地设备推理支持,以限制 PCI 传输并继续在单个 GPU 设备上进行处理
b) 我的模型实际上是输入视频帧,WWDC '19 / 10.15 引入了 VideoToolbox 和 …
我正在努力存储和恢复基于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) 我不明白为什么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) 从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) 我的域名是3DTOPO.com.显然java不允许包域名以数字开头.
为什么Java反向域名遵循与域名相同的规则呢?我真的不想命名我的包com.threedtopo ....
对于不是我的域名的初学者!其他任何人都可以自由注册并使用该域名.此外,它非常尴尬,而不是我的业务名称.
有人有包名称建议吗?
我正在使用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) 我设法创建了一个具有灵活输入/输出形状大小的 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) 自从切换到 M1 Mac 进行开发后,Xcode 不再在断点处显示任何图像预览。
快速查看不适用于任何图像:CGImages
、UIImages
、CIImages
、MTLTextures
等。
我正在调试模式下运行。有人知道这是怎么回事吗?
CG图像:
CI图像:
MTL纹理:
我使用自定义字体作为UIButton的标题.它有效,除了这个特定的字体,第一个字符的一部分被剪裁.例如:
我尝试设置contentEdgeInsets和titleEdgeInsets,似乎无法修复它.我也尝试将button.titleLabel.clipsToBounds属性设置为NO;
任何建议将不胜感激.
我最近向iTunes提交了一个应用内购买的应用.我应该在什么特定时间从使用沙盒服务器切换到生产服务器?
现在?或者在获得批准后?
我可以随时在我的服务器上的php文件中切换.
我查看了StoreKit文档,他们并没有真正说清楚.
谢谢!