Предварительная обработка образа для предварительно обученной сети yolo

В настоящее время я работаю над проектом, в котором мне нужно использовать yolo3_mobilenet1.0_coco, но входное изображение должно быть предварительно обработано из формата(300,300,3) в (1,3,300,300), что невозможно для im.resize((1,3,300,300)), но есть определенные функции в классе gluoncv как data.transforms.presets.ssd.load_test("string_containing_image_file name", short=512), но все они принимают "string of image file name" как входной аргумент, но я хочу передать переменную с исходным изображением в качестве входных данных.

Есть ли какая-нибудь функция, которая может позволить мне это сделать? Поскольку это должна быть переменная, которую я буду передавать, поскольку я не получу имя файла изображения.

Я уже пробовал

x, img = data.transforms.presets.ssd.load_test(im_fname, short=512)

где im_fname - имя файла изображения в формате (300,300,3). но я не могу передать имя файла, так как изображения будут поступать из ImageDataGenerator в функцию предварительной обработки, где будет использоваться эта сеть yolo.


person Saikat Chakraborty    schedule 16.07.2019    source источник


Ответы (1)


С numpy вы можете просто изменить изображение с последнего канала на канал первым, используя следующий код:

import numpy as np

img = np.random.randn(300, 300, 3)  # creating random image

print(img.shape) #Out: (300, 300, 3)

img_channel_first = np.moveaxis(img, -1, 0)

print(img_channel_first.shape) #Out: (3, 300, 300)

img_in = img_channel_first[np.newaxis,:]

print(img_in.shape) #Out: (1, 3, 300, 300)
person Aditya    schedule 18.07.2019