簡體   English   中英

MLModel 與 MultiArray output 一起使用,但無法成功將 output 更改為圖像

[英]MLModel works with MultiArray output but cannot successfully change the output to an image

我已使用 coremltools 4.0 將 Keras model 轉換為 MLModel,但成功有限。

它有效,但前提是我為 output 使用 MLMultiArray 並轉換為圖像。 轉換為圖像比推理需要更長的時間; 使其無法使用。

如果我嘗試更改 MLModel 規范以使用 output 的圖像,我會收到此錯誤運行預測:

無法將 output 身份轉換為圖像:

NSUnderlyingError=0x2809bad00 {Error Domain=com.apple.CoreML Code=0 "無效的數組形狀 (2048, 2048, 3) 用於轉換為灰度圖像"

即使我為 output 顏色指定了RGB

output { 名稱:“身份”類型 { imageType { 寬度:2048 高度:2048 顏色空間: RGB } } }

如果我使用 MultiArray (有效) Xcode 報告:

output:Float32 1 x 2048 x 2048 x 3 陣列

我懷疑問題出在第一個維度,即批號,但沒有顯示任何維度,所以我無法刪除批次維度:

output { 名稱:“身份”類型 { multiArrayType { dataType: FLOAT32 } } }

我不認為我可以將 output 形狀添加到 Keras Conv2D output 層,因為它有多個不同形狀的入站節點。 以下是 output 形狀:

>>> print(outputLayer.get_output_shape_at(0))
(None, None, None, 3)
>>> print(outputLayer.get_output_shape_at(1))
(1, 512, 512, 3)
>>> print(outputLayer.get_output_shape_at(2))
(1, 2048, 2048, 3)

>>> print(outputLayer.output)
Tensor("SR/Identity:0", shape=(None, None, None, 3), dtype=float32)

我認為 coremltools 混淆了通道的批次,這就是為什么即使我指定 RGB 也嘗試創建灰度圖像的原因。

知道如何解決嗎?

我有原始的 Keras model,但我看不到如何在沒有批次尺寸的情況下指定形狀。 這里是Keras model層描述的開始和結束

__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
LR_input (InputLayer)           [(None, None, None,  0                                            
__________________________________________________________________________________________________
Pre_blocks_conv (Conv2D)        multiple             896         LR_input[0][0]                   
__________________________________________________________________________________________________
F_1_1_1 (Conv2D)                multiple             9248        Pre_blocks_conv[0][0]            

...                             multiple
...                             multiple

SR (Conv2D)                     multiple             84          PixelShuffle[0][0]               
==================================================================================================

在 Core ML 中,尺寸的順序是(通道、高度、寬度),因此它期望看到 3 x 2048 x 2048 output 而不是 2048 x 2048 x 3。

請注意,您還需要確保 output 像素在 [0, 255] 而不是 [0, 1] 范圍內,這可能是您的 Keras Z20F35E630DAF44DBFA4C3F68F5399DC8 給您的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM