使用opencv加载的Torch cyclegan模型没有输出所需的imag

2024-10-01 05:05:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在OpenCV中加载一个预先训练过的torch(.t7)模型。该模型是一个自行车将马图像转换成斑马图像。模型可以在这里找到:https://people.eecs.berkeley.edu/~taesung_park/CycleGAN/models/

我使用了horse2zebra.t7和horse2zebra\u cpu.t7两种型号,但它们都返回平铺的黑白图像,而不是斑马图像。你知道吗

这是一个示例输入图像:

enter image description here

这是输出:

enter image description here

代码:

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)

Tags: 模型图像imageimportmodelnpcpuout
1条回答
网友
1楼 · 发布于 2024-10-01 05:05:25

错过了两件事。第一个是model.forward()[0,:,:,:]返回3x256x2563D blob(平面图像,通道位于第二维度)。但是OpenCV处理交错图像,因此需要按np.transpose256x256x3排列维度。你知道吗

输出值范围也很重要。对于问题中的图像,我从[-0.832621, 0.891473]得到了值。我们需要将它规范化为Uint8类型的[0, 255]。所有这些都是由cv::normalize制造的。你知道吗

import cv2
import numpy as np

model = cv2.dnn.readNetFromTorch('./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 = cv2.normalize(out, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)

out = np.transpose(out, (1, 2, 0))

cv2.imshow('image', out)
cv2.waitKey(0)

cv2.imwrite('out.png', out)

请注意,origin框架可能有不同的后处理过程。如果你能比较一下OpenCV和Torch的输出就好了。这是我从上面的脚本中得到的图像:

enter image description here

相关问题 更多 >