在Python代码中,我看到分配给MobileNet的图像为224x224,而Tensorflow.js版本似乎可以使用任何大小或宽高比。对于非正方形图像,它会拉伸它们还是添加白色或透明像素以产生正方形输入,并保持图像的长宽比?如果确实将其拉伸成正方形,是否应该在使用model.classify之前进行一些图像处理?
https://github.com/tensorflow/tfjs-models/tree/master/mobilenet#making-a-classification对此没有说什么。
答案 0 :(得分:1)
没有要求图像是正方形的。使用非正方形图像将获得相同的结果。也许某些神经网络(例如移动网络)使用正方形图像的原因是为了进行操作(例如卷积),其中大部分时间将内核选择为正方形。
要使用移动网络进行分类,需要将图像重塑为[224, 224, 3]
的形状,即网络的输入大小。诸如.resizeBilinear
,resizeNearestNeighbor
等方法将达到该目的。显然,将非正方形图像转换为正方形图像会使图像失真。但是这些算法使用anti-aliasing的技术来弥补失真。
但是输入图像的失真是需要考虑的较少的事情。实际上,良好的模型预测应该不会造成这种失真,因为训练后的数据会失真很多,并增加了噪声,因此模型可以很好地推广。