我正在从输入图像中提取30个面部关键点(x,y),这是根据Kaggle面部关键点竞赛的要求进行的。
我该如何设置Caffe来运行回归并生成30维的输出?
输入:96x96图像输出:30 -(30维)。
我该如何相应地设置Caffe?我使用EUCLIDEAN_LOSS(平方和)来获得回归输出。这里有一个使用Caffe的简单逻辑回归模型,但它不起作用。看起来准确度层无法处理多标签输出。
I0120 17:51:27.039113 4113 net.cpp:394] accuracy <- label_fkp_1_split_1I0120 17:51:27.039135 4113 net.cpp:356] accuracy -> accuracyI0120 17:51:27.039158 4113 net.cpp:96] Setting up accuracyF0120 17:51:27.039201 4113 accuracy_layer.cpp:26] Check failed: bottom[1]->channels() == 1 (30 vs. 1) *** Check failure stack trace: *** @ 0x7f7c2711bdaa (unknown) @ 0x7f7c2711bce4 (unknown) @ 0x7f7c2711b6e6 (unknown)
这是层文件:
name: "LogReg"layers { name: "fkp" top: "data" top: "label" type: HDF5_DATA hdf5_data_param { source: "train.txt" batch_size: 100 } include: { phase: TRAIN }}layers { name: "fkp" type: HDF5_DATA top: "data" top: "label" hdf5_data_param { source: "test.txt" batch_size: 100 } include: { phase: TEST }}layers { name: "ip" type: INNER_PRODUCT bottom: "data" top: "ip" inner_product_param { num_output: 30 }}layers { name: "loss" type: EUCLIDEAN_LOSS bottom: "ip" bottom: "label" top: "loss"}layers { name: "accuracy" type: ACCURACY bottom: "ip" bottom: "label" top: "accuracy" include: { phase: TEST }}
回答:
我找到了解决方法:)
我将SOFTLAYER替换为EUCLIDEAN_LOSS函数,并更改了输出的数量。它起作用了。
layers { name: "loss" type: EUCLIDEAN_LOSS bottom: "ip1" bottom: "label" top: "loss"}
HINGE_LOSS也是另一个选择。