按照本教程,我使用训练了一个Pix2Pix网络。Pix2Pix使用实例规范化,因此在进行推理时,我们需要实例归一化层(批处理规格为1)来计算样本均值和方差。在Tensorflow中,我将前向调用为pred = model(x,training=True)。模型是Pix2Pix的生成器部分,它是一个具有实例规范化的UNet。
model = tf.keras.models.load_model("pix2pix")
pred = model(img, training=True)https://www.tensorflow.org/tutorials/generative/pix2pix
我们在C++中使用该模型,使用OpenCV神经网络进行推理,但是我们看到,OpenCV DNN的“前向”调用与Training=False一样,即它使用模型中的训练均值和方差,而不是获得样本的均值和方差。另外,利用OpenVINO对模型进行了优化,得到了中间表示。
print('OpenCV DNN Inference...')
print('OCV Version is',cv2.__version__)
# Load model
net = cv2.dnn.readNet("model.bin", "model.xml")
# Format input
blob = cv2.dnn.blobFromImages(img)
net.setInput(blob)
pred = net.forward()是否有一种方法可以让OpenCV DNN转发调用像使用Training=True那样进行推理?
发布于 2022-04-04 03:46:28
这个问题实际上是专注于OpenCV而不是OpenVINO。为了进行更深入的解释,最好将其重定向到他们的论坛/平台,因为他们是合适的专家。
通常,training参数会通知神经网络层它应该选择哪条路径,因为该层的行为在训练和推理过程中有所不同。
参考您共享的链接,已经解释了training=True是在培训阶段的算法中有意使用的,因为您希望获得批处理统计信息,同时在测试数据集中运行模型。如果使用training=False,则可以从培训数据集(您不想要的)中获得累积的统计信息。
简而言之,您需要知道您的层在培训和推理过程中需要执行什么(取决于您的软件设计)。然后,根据训练/推理阶段将条件分配给training参数。
https://stackoverflow.com/questions/71713114
复制相似问题