如何从训练图像及其标签创建一个 caffemodel 文件?
How to create an caffemodel file from training image and its labeled?
我在 here 从事基于开源的年龄分类工作
python 代码有
age_net_pretrained='./age_net.caffemodel'
age_net_model_file='./deploy_age.prototxt'
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
其中.prototxt
文件如下所示。我留一个文件就是".caffemodel"
。至于源码,他之前提供过。但是,我想根据我的面部数据库重新创建它。你能有任何教程或某种方法来创建它吗?我假设我有一个文件夹图像,其中包含 100 张图像并划分为每个年龄组(1 到 1),例如
image1.png 1
image2.png 1
..
image10.png 1
image11.png 2
image12.png 2
...
image100.png 10
这是 prototxt 文件。提前致谢
name: "CaffeNet"
input: "data"
input_dim: 1
input_dim: 3
input_dim: 227
input_dim: 227
layers {
name: "conv1"
type: CONVOLUTION
bottom: "data"
top: "conv1"
convolution_param {
num_output: 96
kernel_size: 7
stride: 4
}
}
layers {
name: "relu1"
type: RELU
bottom: "conv1"
top: "conv1"
}
layers {
name: "pool1"
type: POOLING
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layers {
name: "norm1"
type: LRN
bottom: "pool1"
top: "norm1"
lrn_param {
local_size: 5
alpha: 0.0001
beta: 0.75
}
}
layers {
name: "conv2"
type: CONVOLUTION
bottom: "norm1"
top: "conv2"
convolution_param {
num_output: 256
pad: 2
kernel_size: 5
}
}
layers {
name: "relu2"
type: RELU
bottom: "conv2"
top: "conv2"
}
layers {
name: "pool2"
type: POOLING
bottom: "conv2"
top: "pool2"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layers {
name: "norm2"
type: LRN
bottom: "pool2"
top: "norm2"
lrn_param {
local_size: 5
alpha: 0.0001
beta: 0.75
}
}
layers {
name: "conv3"
type: CONVOLUTION
bottom: "norm2"
top: "conv3"
convolution_param {
num_output: 384
pad: 1
kernel_size: 3
}
}
layers{
name: "relu3"
type: RELU
bottom: "conv3"
top: "conv3"
}
layers {
name: "pool5"
type: POOLING
bottom: "conv3"
top: "pool5"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layers {
name: "fc6"
type: INNER_PRODUCT
bottom: "pool5"
top: "fc6"
inner_product_param {
num_output: 512
}
}
layers {
name: "relu6"
type: RELU
bottom: "fc6"
top: "fc6"
}
layers {
name: "drop6"
type: DROPOUT
bottom: "fc6"
top: "fc6"
dropout_param {
dropout_ratio: 0.5
}
}
layers {
name: "fc7"
type: INNER_PRODUCT
bottom: "fc6"
top: "fc7"
inner_product_param {
num_output: 512
}
}
layers {
name: "relu7"
type: RELU
bottom: "fc7"
top: "fc7"
}
layers {
name: "drop7"
type: DROPOUT
bottom: "fc7"
top: "fc7"
dropout_param {
dropout_ratio: 0.5
}
}
layers {
name: "fc8"
type: INNER_PRODUCT
bottom: "fc7"
top: "fc8"
inner_product_param {
num_output: 8
}
}
layers {
name: "prob"
type: SOFTMAX
bottom: "fc8"
top: "prob"
}
要获得 caffemodel,您需要训练网络。该 prototxt 文件仅用于部署模型,不能用于训练它。
您需要添加指向数据库的数据层。要使用您提到的文件列表,图层的源应该是 HDF5。您可能想要添加一个带有平均值的 transform_param。为了提高效率,可以将图像文件替换为 LMDB 或 LevelDB 数据库。
在网络的末端,您必须用 'loss' 层替换 'prob' 层。像这样:
层数{
姓名:"loss"
类型:SoftmaxWithLoss
底部:"fc8"
顶部:"loss"
}
图层目录可以在这里找到:
http://caffe.berkeleyvision.org/tutorial/layers.html
或者,因为你的网络是一个众所周知的网络...看看这个教程 :P.
http://caffe.berkeleyvision.org/gathered/examples/imagenet.html
用于训练的正确 prototxt 文件包含在 caffe ('train_val.prototxt') 中。
我在 here 从事基于开源的年龄分类工作 python 代码有
age_net_pretrained='./age_net.caffemodel'
age_net_model_file='./deploy_age.prototxt'
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
其中.prototxt
文件如下所示。我留一个文件就是".caffemodel"
。至于源码,他之前提供过。但是,我想根据我的面部数据库重新创建它。你能有任何教程或某种方法来创建它吗?我假设我有一个文件夹图像,其中包含 100 张图像并划分为每个年龄组(1 到 1),例如
image1.png 1
image2.png 1
..
image10.png 1
image11.png 2
image12.png 2
...
image100.png 10
这是 prototxt 文件。提前致谢
name: "CaffeNet"
input: "data"
input_dim: 1
input_dim: 3
input_dim: 227
input_dim: 227
layers {
name: "conv1"
type: CONVOLUTION
bottom: "data"
top: "conv1"
convolution_param {
num_output: 96
kernel_size: 7
stride: 4
}
}
layers {
name: "relu1"
type: RELU
bottom: "conv1"
top: "conv1"
}
layers {
name: "pool1"
type: POOLING
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layers {
name: "norm1"
type: LRN
bottom: "pool1"
top: "norm1"
lrn_param {
local_size: 5
alpha: 0.0001
beta: 0.75
}
}
layers {
name: "conv2"
type: CONVOLUTION
bottom: "norm1"
top: "conv2"
convolution_param {
num_output: 256
pad: 2
kernel_size: 5
}
}
layers {
name: "relu2"
type: RELU
bottom: "conv2"
top: "conv2"
}
layers {
name: "pool2"
type: POOLING
bottom: "conv2"
top: "pool2"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layers {
name: "norm2"
type: LRN
bottom: "pool2"
top: "norm2"
lrn_param {
local_size: 5
alpha: 0.0001
beta: 0.75
}
}
layers {
name: "conv3"
type: CONVOLUTION
bottom: "norm2"
top: "conv3"
convolution_param {
num_output: 384
pad: 1
kernel_size: 3
}
}
layers{
name: "relu3"
type: RELU
bottom: "conv3"
top: "conv3"
}
layers {
name: "pool5"
type: POOLING
bottom: "conv3"
top: "pool5"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layers {
name: "fc6"
type: INNER_PRODUCT
bottom: "pool5"
top: "fc6"
inner_product_param {
num_output: 512
}
}
layers {
name: "relu6"
type: RELU
bottom: "fc6"
top: "fc6"
}
layers {
name: "drop6"
type: DROPOUT
bottom: "fc6"
top: "fc6"
dropout_param {
dropout_ratio: 0.5
}
}
layers {
name: "fc7"
type: INNER_PRODUCT
bottom: "fc6"
top: "fc7"
inner_product_param {
num_output: 512
}
}
layers {
name: "relu7"
type: RELU
bottom: "fc7"
top: "fc7"
}
layers {
name: "drop7"
type: DROPOUT
bottom: "fc7"
top: "fc7"
dropout_param {
dropout_ratio: 0.5
}
}
layers {
name: "fc8"
type: INNER_PRODUCT
bottom: "fc7"
top: "fc8"
inner_product_param {
num_output: 8
}
}
layers {
name: "prob"
type: SOFTMAX
bottom: "fc8"
top: "prob"
}
要获得 caffemodel,您需要训练网络。该 prototxt 文件仅用于部署模型,不能用于训练它。
您需要添加指向数据库的数据层。要使用您提到的文件列表,图层的源应该是 HDF5。您可能想要添加一个带有平均值的 transform_param。为了提高效率,可以将图像文件替换为 LMDB 或 LevelDB 数据库。
在网络的末端,您必须用 'loss' 层替换 'prob' 层。像这样:
层数{ 姓名:"loss" 类型:SoftmaxWithLoss 底部:"fc8" 顶部:"loss" }
图层目录可以在这里找到:
http://caffe.berkeleyvision.org/tutorial/layers.html
或者,因为你的网络是一个众所周知的网络...看看这个教程 :P.
http://caffe.berkeleyvision.org/gathered/examples/imagenet.html
用于训练的正确 prototxt 文件包含在 caffe ('train_val.prototxt') 中。