1

如何使用 caffe convnet 检测面部表情?

我有一个图像数据集 Cohn Kanade,我想用这个数据集训练 caffe convnet。Caffe有一个文档站点,但它没有解释如何训练我自己的数据。只需使用预先训练的数据。

有人可以教我怎么做吗?

4

1 回答 1

1

Caffe 支持多种输入数据格式(HDF5/lmdb/leveldb)。这只是选择一个你觉得最舒服的问题。这里有几个选项:

  1. 咖啡/构建/工具/convert_imageset:

convert_imageset是您从构建 caffe 中获得的命令行工具之一。

用法大致如下:

  • 在文本文件中指定图像和标签对的列表。每对 1 行。
  • 指定图像的位置。
  • 选择后端数据库(哪种格式)。默认是 lmdb 应该没问题。

您需要编写一个文本文件,其中每行以图像的文件名开头,后跟标量标签(例如 0、1、2、...)

  1. 使用 Caffe 的类在 python 中构建您的 lmdb Datum

这需要构建 caffe 的 python 接口。在这里,您编写了一些 python 代码:

  • 遍历图像列表
  • 将图像加载到numpy数组中。
  • 构造一个 caffeDatum对象
  • 将图像数据分配给Datum对象。
  • 该类Datum有一个名为的成员label,如果您希望网络分类,您可以将其设置为 CK 数据集中的 AU 类。
  • Datum对象写入数据库并移动到下一个图像。

这是Gustav Larsson 的博客文章中将图像转换为 lmdb 的代码片段。在他的示例中,他为图像分类构建了一个图像和标签对的 lmdb。

将 lmdb 加载到您的网络中:

这与 LeNet 示例中的完全一样。此数据层位于描述 LeNet 模型的网络 prototxt 的开头。

layer {
  name: "mnist"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    scale: 0.00390625
  }
  data_param {
    source: "examples/mnist/mnist_train_lmdb"
    batch_size: 64
    backend: LMDB
  }
}

源字段是您将 caffe 指向您刚刚创建的 lmdb 的位置。

与性能更相关且对使其正常工作并不重要的是指定如何规范化输入特征。这是通过transform_param现场完成的。CK+ 有固定大小的图像,所以不需要调整大小。您需要做的一件事是标准化灰度值。您可以通过均值减法来做到这一点。这样做的一个简单方法是将 的值替换为transform_param:scaleCK+ 数据集中灰度强度的平均值。

于 2015-09-30T13:26:04.037 回答