2019年7月30日 星期二

Mask RCNN - Balloon 進行 splash 時出現 operands could not be broadcast together with shapes 的錯誤問題排解

跨系統或跨裝置本來問題就有點多,在我使用 splash 去辨識氣球圖片的時候產生了 operands could not be broadcast together with shapes (1024,1024,4) (3,) 的錯誤。  以下為解決過程及方案。

從 Trace Code 去看問題點,我輸入的圖片 的 images.shape 是:
(1, 1024, 1024, 4)
....

看最後一個元素的值是 4 ,這應該是一個 RGBA 的圖片,但回去看程式碼: https://github.com/matterport/Mask_RCNN/blob/1ad9feaae3d87b52495413e6c8ea0e92f0e5bc34/mrcnn/model.py#L2798

測試後可以發現程式碼中的 mold_image 進行運算的 mean_pixel 是 3 個值的陣列:

[123.7, 116.8, 103.9]
...

此時只要拿掉 alpha channel 即可,直接在 mold_image return 之前加上判斷式修改:


if images.shape[-1] is 4:
    images = images[..., :3]

拿掉 channel 之後, image shape 變成:
(1, 1024, 1024, 3)

且正常運行 splash 了。


Reference:
https://stackoverflow.com/questions/35902302/discarding-alpha-channel-from-images-stored-as-numpy-arrays/35902359
https://github.com/matterport/Mask_RCNN/blob/1ad9feaae3d87b52495413e6c8ea0e92f0e5bc34/mrcnn/model.py#L2798
https://github.com/matterport/Mask_RCNN/issues/578

沒有留言:

張貼留言

© ERIC RILEY , 自由無須告知轉貼
Background Japanese Sayagata by Olga Libby