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

How to use caffe convnet library to detect facial expressions?

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

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

有人可以教我怎么做吗?

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

  1. caffe/build/tools/convert_imageset:

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

用法如下:

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

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

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

这需要构建 caffe 的 python 界面。在这里你写了一些 python 代码:

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

Here's Gustav Larsson 将博客 post 中的图像转换为 lmdb 的代码片段。在他的示例中,他为图像 classification.

构建了图像和标签对的 lmdb

正在将 lmdb 加载到您的网络中:

这与在 LeNet 示例中完全一样。描述 LeNet 模型的网络原型文本开头的数据层。

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:scale 的值替换为 CK+ 数据集中灰度强度的平均值。