Caffe 可以直接对图像的像素进行分类吗?
Can Caffe classify pixels of an image directly?
我想将图像的像素分类为 "is street" 或 "is not street"。我有一些来自 KITTI dataset and I have seen that Caffe has an IMAGE_DATA
层类型的训练数据。
标签以与输入图像大小相同的图像形式存在。
除了 Caffe,我解决这个问题的第一个想法是在应该被分类的像素周围提供图像块(例如,顶部/左侧/右侧/底部 20 个像素,导致每个 41×41=1681 个特征我要分类的像素。
但是,如果我可以告诉 caffe 如何使用标签而不必手动创建这些图像补丁(并且图层类型 IMAGE_DATA
似乎表明这是可能的)我会更喜欢。
Caffe可以直接对图像的像素进行分类吗?这样的 prototxt 网络定义会是什么样子?如何向 Caffe 提供有关标签的信息?
我猜输入层应该是这样的
layers {
name: "data"
type: IMAGE_DATA
top: "data"
top: "label"
image_data_param {
source: "path/to/file_list.txt"
mean_file: "path/to/imagenet_mean.binaryproto"
batch_size: 4
crop_size: 41
mirror: false
new_height: 256
new_width: 256
}
}
但是,我不确定 crop_size
到底是什么意思。它真的居中吗? caffe是如何处理角点像素的? new_height
和 new_width
有什么用?
Caffe可以对像素进行分类吗?理论上我认为答案是肯定的。我自己没有尝试过,但我认为没有什么能阻止你这样做。
输入:
您需要两个 IMAGE_DATA
层:一个加载 RGB 图像,另一个加载 corresponding label-mask 图像。请注意,如果您使用 convert_imageset
实用程序,您将无法独立打乱每个集合 - 您将无法将图像与其标签掩码相匹配。
一个 IMAGE_DATA
层有两个 "tops" 一个用于 "data" 一个用于 "label" 我建议你将两个输入层的 "label" 设置为image/label-mask 的索引并添加一个实用层来验证索引 总是 匹配,这将防止您在错误的标签掩码上训练 ;)
示例:
layer {
name: "data"
type: "ImageData"
top: "data"
top: "data-idx"
# paramters...
}
layer {
name: "label-mask"
type: "ImageData"
top: "label-mask"
top: "label-idx"
# paramters...
}
layer {
name: "assert-idx"
type: "EuclideanLoss"
bottom: "data-idx"
bottom: "label-idx"
top: "this-must-always-be-zero"
}
损失层:
现在,您可以对输入数据做任何您想做的事情,但最终要获得像素级标签,您需要像素级损失。因此,您必须让最后一层(在损失之前)产生与 相同 宽度和高度的预测 "label-mask"
并非所有损失层都知道如何处理多个标签,但是 "EuclideanLoss"
(例如)可以,因此你应该有一个类似
的损失层
layer {
name: "loss"
type: "EuclideanLoss"
bottom: "prediction" # size on image
bottom: "label-mask"
top: "loss"
}
我认为 "SoftmaxWithLoss"
有更新的版本可以在这种情况下使用,但您必须自己检查一下。在那种情况下 "prediction"
应该是 2×h×w 的形状(因为你有 2 个标签)。
补充说明:
一旦您在 "ImageData"
的参数中设置了输入大小,您就可以修复网络中所有斑点的大小。您必须将标签尺寸设置为相同尺寸。您必须仔细考虑如何处理不同形状和大小的图像。
看来你可以试试fully convolutional networks for semantic segmentation
这篇论文引用了Caffe:https://github.com/BVLC/caffe/wiki/Publications
模型也在这里:
https://github.com/BVLC/caffe/wiki/Model-Zoo#fully-convolutional-semantic-segmentation-models-fcn-xs
此演示文稿也很有帮助:
http://tutorial.caffe.berkeleyvision.org/caffe-cvpr15-pixels.pdf
我想将图像的像素分类为 "is street" 或 "is not street"。我有一些来自 KITTI dataset and I have seen that Caffe has an IMAGE_DATA
层类型的训练数据。
标签以与输入图像大小相同的图像形式存在。
除了 Caffe,我解决这个问题的第一个想法是在应该被分类的像素周围提供图像块(例如,顶部/左侧/右侧/底部 20 个像素,导致每个 41×41=1681 个特征我要分类的像素。
但是,如果我可以告诉 caffe 如何使用标签而不必手动创建这些图像补丁(并且图层类型 IMAGE_DATA
似乎表明这是可能的)我会更喜欢。
Caffe可以直接对图像的像素进行分类吗?这样的 prototxt 网络定义会是什么样子?如何向 Caffe 提供有关标签的信息?
我猜输入层应该是这样的
layers {
name: "data"
type: IMAGE_DATA
top: "data"
top: "label"
image_data_param {
source: "path/to/file_list.txt"
mean_file: "path/to/imagenet_mean.binaryproto"
batch_size: 4
crop_size: 41
mirror: false
new_height: 256
new_width: 256
}
}
但是,我不确定 crop_size
到底是什么意思。它真的居中吗? caffe是如何处理角点像素的? new_height
和 new_width
有什么用?
Caffe可以对像素进行分类吗?理论上我认为答案是肯定的。我自己没有尝试过,但我认为没有什么能阻止你这样做。
输入:
您需要两个 IMAGE_DATA
层:一个加载 RGB 图像,另一个加载 corresponding label-mask 图像。请注意,如果您使用 convert_imageset
实用程序,您将无法独立打乱每个集合 - 您将无法将图像与其标签掩码相匹配。
一个 IMAGE_DATA
层有两个 "tops" 一个用于 "data" 一个用于 "label" 我建议你将两个输入层的 "label" 设置为image/label-mask 的索引并添加一个实用层来验证索引 总是 匹配,这将防止您在错误的标签掩码上训练 ;)
示例:
layer {
name: "data"
type: "ImageData"
top: "data"
top: "data-idx"
# paramters...
}
layer {
name: "label-mask"
type: "ImageData"
top: "label-mask"
top: "label-idx"
# paramters...
}
layer {
name: "assert-idx"
type: "EuclideanLoss"
bottom: "data-idx"
bottom: "label-idx"
top: "this-must-always-be-zero"
}
损失层:
现在,您可以对输入数据做任何您想做的事情,但最终要获得像素级标签,您需要像素级损失。因此,您必须让最后一层(在损失之前)产生与 相同 宽度和高度的预测 "label-mask"
并非所有损失层都知道如何处理多个标签,但是 "EuclideanLoss"
(例如)可以,因此你应该有一个类似
layer {
name: "loss"
type: "EuclideanLoss"
bottom: "prediction" # size on image
bottom: "label-mask"
top: "loss"
}
我认为 "SoftmaxWithLoss"
有更新的版本可以在这种情况下使用,但您必须自己检查一下。在那种情况下 "prediction"
应该是 2×h×w 的形状(因为你有 2 个标签)。
补充说明:
一旦您在 "ImageData"
的参数中设置了输入大小,您就可以修复网络中所有斑点的大小。您必须将标签尺寸设置为相同尺寸。您必须仔细考虑如何处理不同形状和大小的图像。
看来你可以试试fully convolutional networks for semantic segmentation
这篇论文引用了Caffe:https://github.com/BVLC/caffe/wiki/Publications
模型也在这里: https://github.com/BVLC/caffe/wiki/Model-Zoo#fully-convolutional-semantic-segmentation-models-fcn-xs
此演示文稿也很有帮助: http://tutorial.caffe.berkeleyvision.org/caffe-cvpr15-pixels.pdf