我正在尝试在OpenCV中加载一个预先训练过的torch(.t7)模型。该模型是一个自行车将马图像转换成斑马图像。模型可以在这里找到:https://people.eecs.berkeley.edu/~taesung_park/CycleGAN/models/
我使用了horse2zebra.t7和horse2zebra\u cpu.t7两种型号,但它们都返回平铺的黑白图像,而不是斑马图像。你知道吗
这是一个示例输入图像:
这是输出:
代码:
import cv2
import numpy as np
model = cv2.dnn.readNetFromTorch('./cyclegan_horse2zebra_cpu.t7')
image = cv2.imread('./images/1.jpg')
blob = cv2.dnn.blobFromImage(image, 1, (256, 256))
model.setInput(blob)
out = model.forward()[0,:,:,:]
out = np.reshape(out, (256, 256, 3))
cv2.imshow('image', out)
cv2.waitKey(0)
cv2.imwrite('out.png', out)
错过了两件事。第一个是
model.forward()[0,:,:,:]
返回3x256x256
3D blob(平面图像,通道位于第二维度)。但是OpenCV处理交错图像,因此需要按np.transpose
:256x256x3
排列维度。你知道吗输出值范围也很重要。对于问题中的图像,我从
[-0.832621, 0.891473]
得到了值。我们需要将它规范化为Uint8类型的[0, 255]
。所有这些都是由cv::normalize制造的。你知道吗请注意,origin框架可能有不同的后处理过程。如果你能比较一下OpenCV和Torch的输出就好了。这是我从上面的脚本中得到的图像:
相关问题 更多 >
编程相关推荐