Как передать изображение OpenCV в обученную модель CNN (добавить новое измерение) в Python? - PullRequest
1 голос
/ 09 марта 2019

Я получаю эту ошибку Error when checking input: expected conv2d_11_input to have 4 dimensions, but got array with shape (300, 300, 3) Как я могу передать изображение RGB к CNN? Как перечислить образцы для создания 4D изображения?

Ответы [ 2 ]

3 голосов
/ 09 марта 2019

Функция свертки ожидает пакет изображений, даже если у вас есть отдельное изображение, вы должны передать его как:

#  assume img is your RGB image
#  add 4th batch dimension
img = np.expand_dims(img, axis=0)) 

#  now you can pass it to CNN
0 голосов
/ 10 марта 2019

Как правило, чтобы добавить новое измерение в матрицу numpy, вы можете использовать np.newaxis или np.expand_dims (или просто reshape)

import numpy as np 
nh, nw = 300, 300
x = np.random.rand(nh, nw, 3)

y = x[np.newaxis, ...]   
z = np.expand_dims(x, axis=0)

>>> x.shape
(300, 300, 3)
>>> y.shape
(1, 300, 300, 3)
>>> z.shape
(1, 300, 300, 3)

Но если выхотите передать RGB модели CNN, возможно, вам нужен еще один шаг: поменять местами каналы и конвертировать в float32:

import cv2 
import numpy as np 

fpath = "test.png"
nh, nw = 300, 300 

img = cv2.imread(fpath)
img = cv2.cvtColor(cv2.resize(img, (nw, nh)), cv2.COLOR_BGR2RGB)
ximg = np.float32(img) / 255.0 
ximg = ximg[np.newaxis, ...]

>>> (ximg.shape, ximg.dtype)
((1, 300, 300, 3), dtype('float32'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...