我使用此代码加载我的网:
@IBAction func slow(sender: UIButton) {
if let filePath = NSBundle.mainBundle().URLForResource("io", withExtension: "mp3") {
let _a = try! AVAudioPlayer(contentsOfURL: filePath)
// Play
_a.play()
}else
{
print("error")
}
}
我怀疑有三条线。
1- net = caffe.Classifier(MODEL_FILE, PRETRAINED,
mean=np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1),
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
什么意思?我应该使用这个平均值还是其他?如果是的话,我在哪里可以获得自定义平均值?我使用的是自定义数据集。
2- mean=np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1)
channel_swap是什么意思?同样,我应该使用此值还是自定义值?
最后一次
3- channel_swap=(2,1,0)
什么是raw_scale?我应该使用什么价值?
我正在使用Cohn Kanade数据集。所有图像均为64x64且为灰度。
答案 0 :(得分:4)
channel_swap
是将RGB
反转为BGR
,如果您使用参考图像网络模型,这显然是必要的,基于[1]中的注释。在您的情况下,图像是灰度的,因此您可能没有三个通道。您可能需要将其设置为(0,0,0),但即使这样也可能没有帮助(我不确定channel_swap
的确切实现)。如果这没有帮助,最简单的解决方案可能是通过将每个像素分成具有相等值的三个值(RGB)来预处理数据。之后,您可以完全删除channel_swap
,因为您的频道具有相同的值,并且交换它们是无操作。
平均值是从输入数据中减去的中心值。 (请记住,神经网络需要数据为零均值,而输入图像通常具有正均值,因此需要减法)。您减去的平均值应该与用于训练的平均值相同,因此使用与模型关联的文件中的平均值是正确的。但是,我不确定你是否应该致电.mean(1)
- 你是否从某个例子中得到了这一点?如果是,那么很可能是正确的事情。
raw_scale
是输入数据的比例。模型需要对像素进行标准化,因此如果输入数据的值介于0到255之间,则设置为255的raw_scale
是正确的。如果您的数据的值介于0和1之间,则raw_scale
应设置为1。
最后,根据我对[2]中评论的理解,您不需要提供image_dims
[1] https://github.com/BVLC/caffe/blob/master/python/caffe/io.py#L204
[2] https://github.com/BVLC/caffe/blob/master/python/caffe/classifier.py#L18
答案 1 :(得分:2)
我同意@Ishamael对channel_swap和意思的评论。我只是想进一步澄清raw_scale。假设图像加载caffe.io.load_image
,则值始终在0到1 [1]的范围内。请注意:
虽然Python代表[0,1]中的图像,但某些Caffe模型 CaffeNet和AlexNet代表[0,255]中的图像,因此raw_scale 这些模型必须是255。
我认为在馈送到网络数据层之前检查输入图像值是明智的,以便选择合适的raw_scale。
谢谢。
[1] https://github.com/BVLC/caffe/blob/master/python/caffe/io.py#L224