So erstellen Sie eine caffemodel-Datei von der Ausbildung Bildes und seiner beschriftet?
Arbeite ich in Alters-Einstufung basierend auf dem opensource bei hier
Der python-code hat
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))
In die .prototxt
- Datei wie unten dargestellt angezeigt wird. Ich bleibe eine Datei, die ".caffemodel"
. Als source-code, stellte er es vor. Allerdings würde ich mag, um es wieder zu schaffen, basierend auf meinem Gesicht Datenbank. Könnten Sie irgendwelche tutorial oder einige Weg, um es zu schaffen? Ich gehe davon aus, dass ich einen Ordner mit Bild enthalten 100 Bilder und aufgeteilt gehört zu jedem Alter Gruppen (1 zu 1) wie
image1.png 1
image2.png 1
..
image10.png 1
image11.png 2
image12.png 2
...
image100.png 10
Dies ist prototxt-Datei. Vielen Dank im Voraus
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"
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um eine caffemodel müssen Sie trainieren das Netz. Dass prototxt-Datei ist nur für das Modell bereitstellen und kann nicht verwendet werden, es zu trainieren.
Müssen Sie eine Daten-Ebene, die die Punkte in die Datenbank. Mit einer Liste von Dateien, die Sie erwähnen, die Quelle der Schicht sollte im HDF5. Sie werden wahrscheinlich möchten Sie auch eine transform_param mit dem Mittelwert. Die Bild-Dateien können ersetzt werden durch eine LMDB oder LevelDB-Datenbank für die Effizienz Zwecke.
Am Ende das Netzwerk, das Sie haben, zu ersetzen, die dem 'prob' Schicht mit einem 'Verlust' Schicht. So etwas wie dieses:
Schichten {
name: "Verlust"
Typ: SoftmaxWithLoss
unten: "fc8"
top: "Verlust"
}
Den layer-Katalog finden Sie hier:
http://caffe.berkeleyvision.org/tutorial/layers.html
Oder, wie Ihr Netzwerk, ist ein bekannter... nur schauen Sie dieses tutorial :P.
http://caffe.berkeleyvision.org/gathered/examples/imagenet.html
Den richtigen prototxt-Datei für die Ausbildung ist inbegriffen im caffe ('train_val.prototxt').