我在基于inception-v3的网络上工作。我成功训练网络,现在我想将一批opencv图像提供给我的网络并获得一些输出。
网络的原始占位符接受字符串并将其解码为jpg (this image)但我使用opencv读取视频帧并将其转换为Android.local
列表:
nparray
如果我想使用单个图像,因为我直接从opencv读取帧,我将它们转换为np-array然后将其反馈到" Cast:0"初始网络的一层:
for cnt in range(batch_size):
frameBuffer = []
if (currentPosition >= nFrames):
break
ret, frame = vidFile.read()
img_data = np.asarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
frameBuffer.append(img_data)
currentPosition += multiplier
结果还可以。但我想提供一批帧:我尝试以当前的方式使用pred = sess.run([predictions], {'Cast:0': img_data})
:
feed_dict
但我得到了错误;我知道我喂错了批次。你对我如何将一批图像输送到某个网络层有任何建议吗?
答案 0 :(得分:0)
你的feed_dict(至少)存在问题:feed_dict通常是一个带有张量或字符串(用于张量名称)作为键的字典,以及值(以通常的类型,np数组等形式给出)。 / p>
在这里你使用{'Cast:0': feed_dict}
,所以你的字典的价值本身就是一个字典,这对张量流没有意义。您需要将值放在那里,即图像的连接(解码,转换等)。另外,对不起,如果我遗漏了某些内容,但我想frameBuffer
应该包含批处理的所有图片,因此应该从for
循环初始化。
此代码应该有效:
frameBuffer = []
for cnt in range(batch_size):
if (currentPosition >= nFrames):
break
ret, frame = vidFile.read()
img_data = np.asarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
frameBuffer.append(img_data)
currentPosition += multiplier
avgRepresentation, pred = sess.run([pool_avg, predictions],{'Cast:0': np.asarray(frameBuffer)})