Performing classification with softmaxloss. Somewhat unexpected output.

33 views
Skip to first unread message

Irtiza Hasan

unread,
Oct 23, 2016, 12:09:52 PM10/23/16
to Caffe Users
Hello every one,
 I have a question. I have a network that I am trying to use for classification. I have 9 classes, but the issue is that the network is outputting me in a way that at least I do not understand. It outputs me a 9x1 vector which is fine but the values inside are not probabilities neither my class labels. I have tried converting the softmax output to probabilities but to no affect . I am using caffe an matcaffe 

. What I want is given the input blob the network tells me to which class it belongs, say my classes are 1 to 9(which of course I feed it for training). I am attaching my prototxt file. angle_pred is the one I am specifically talking about. 

Can someone guide me I am sure i am missing small trick. I am relatively new to this.




name: "Zeiler_conv5"

input: "data"
input_dim: 1
input_dim: 3
input_dim: 224
input_dim: 224

input: "rois"
input_dim: 1 # to be changed on-the-fly to num ROIs
input_dim: 5 # [batch ind, x1, y1, x2, y2] zero-based indexing
input_dim: 1
input_dim: 1

input: "labels"
input_dim: 1 # to be changed on-the-fly to match num ROIs
input_dim: 1
input_dim: 1
input_dim: 1

input: "bbox_targets"
input_dim: 1 # to be changed on-the-fly to match num ROIs
input_dim: 84 # 4 * (K+1) (=21) classes
input_dim: 1
input_dim: 1

input: "bbox_loss_weights"
input_dim: 1 # to be changed on-the-fly to match num ROIs
input_dim: 84 # 4 * (K+1) (=21) classes
input_dim: 1
input_dim: 1

input: "angle_head"
input_dim: 1 # to be changed on-the-fly to match num ROIs
input_dim: 9 # 9 (-180:45:180) classes
input_dim: 1
input_dim: 1

input: "angle_head_weight"
input_dim: 1 # to be changed on-the-fly to match num ROIs
input_dim: 9 # 9 (-180:45:180) classes
input_dim: 1
input_dim: 1

layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
lr_mult: 0.0
}
param {
lr_mult: 0.0
}
convolution_param {
num_output: 96
kernel_size: 7
pad: 3
stride: 2
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}

layer {
name: "relu1"
type: "ReLU"
bottom: "conv1"
top: "conv1"
}

layer {
name: "norm1"
type: "LRN"
bottom: "conv1"
top: "norm1"
lrn_param {
local_size: 3
alpha: 0.00005
beta: 0.75
norm_region: WITHIN_CHANNEL
}
}

layer {
name: "pool1"
type: "Pooling"
bottom: "norm1"
top: "pool1"
pooling_param {
kernel_size: 3
stride: 2
pad: 1
pool: MAX
}
}

layer {
name: "conv2"
type: "Convolution"
bottom: "pool1"
top: "conv2"
param {
lr_mult: 0.0
}
param {
lr_mult: 0.0
}
convolution_param {
num_output: 256
kernel_size: 5
pad: 2
stride: 2
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 1
}
}
}

layer {
name: "relu2"
type: "ReLU"
bottom: "conv2"
top: "conv2"
}

layer {
name: "norm2"
type: "LRN"
bottom: "conv2"
top: "norm2"
lrn_param {
local_size: 3
alpha: 0.00005
beta: 0.75
norm_region: WITHIN_CHANNEL
}
}

layer {
name: "pool2"
type: "Pooling"
bottom: "norm2"
top: "pool2"
pooling_param {
kernel_size: 3
stride: 2
pad: 1
pool: MAX
}
}

layer {
name: "conv3"
type: "Convolution"
bottom: "pool2"
top: "conv3"
param {
lr_mult: 0.0
}
param {
lr_mult: 0.0
}
convolution_param {
num_output: 384
kernel_size: 3
pad: 1
stride: 1
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}

layer {
name: "relu3"
type: "ReLU"
bottom: "conv3"
top: "conv3"
}

layer {
name: "conv4"
type: "Convolution"
bottom: "conv3"
top: "conv4"
param {
lr_mult: 0.0
}
param {
lr_mult: 0.0
}
convolution_param {
num_output: 384
kernel_size: 3
pad: 1
stride: 1
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 1
}
}
}

layer {
name: "relu4"
type: "ReLU"
bottom: "conv4"
top: "conv4"
}

layer {
name: "conv5"
type: "Convolution"
bottom: "conv4"
top: "conv5"
param {
lr_mult: 0.0
}
param {
lr_mult: 0.0
}
convolution_param {
num_output: 256
kernel_size: 3
pad: 1
stride: 1
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 1
}
}
}

layer {
name: "relu5"
type: "ReLU"
bottom: "conv5"
top: "conv5"
}

layer {
bottom: "conv5"
bottom: "rois"
top: "pool5"
name: "roi_pool5"
type: "ROIPooling"
roi_pooling_param {
pooled_w: 6
pooled_h: 6
spatial_scale: 0.0625 # (1/16)
}
}

layer {
bottom: "pool5"
top: "fc6"
name: "fc6"
param {
lr_mult: 1.0
}
param {
lr_mult: 2.0
}
type: "InnerProduct"
inner_product_param {
num_output: 4096
}
}

layer {
bottom: "fc6"
top: "fc6"
name: "relu6"
type: "ReLU"
}

layer {
bottom: "fc6"
top: "fc6"
name: "drop6"
type: "Dropout"
dropout_param {
dropout_ratio: 0.5
scale_train: false
}
}

layer {
bottom: "fc6"
top: "fc7"
name: "fc7"
param {
lr_mult: 1.0
}
param {
lr_mult: 2.0
}
type: "InnerProduct"
inner_product_param {
num_output: 4096
}
}

layer {
bottom: "fc7"
top: "fc7"
name: "relu7"
type: "ReLU"
}

layer {
bottom: "fc7"
top: "fc7"
name: "drop7"
type: "Dropout"
dropout_param {
dropout_ratio: 0.5
scale_train: false
}
}

layer {
bottom: "fc7"
top: "cls_score"
name: "cls_score"
param {
lr_mult: 1.0
}
param {
lr_mult: 2.0
}
type: "InnerProduct"
inner_product_param {
num_output: 21
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}

layer {
bottom: "fc7"
top: "angle_pred"
name: "angle_pred"
type: "InnerProduct"
param {
lr_mult: 1.0
}
param {
lr_mult: 2.0
}
inner_product_param {
num_output: 9
weight_filler {
type: "gaussian"
std: 0.001
}
bias_filler {
type: "constant"
value: 0
}
}
}

layer {
bottom: "fc7"
top: "bbox_pred"
name: "bbox_pred"
type: "InnerProduct"
param {
lr_mult: 1.0
}
param {
lr_mult: 2.0
}
inner_product_param {
num_output: 84
weight_filler {
type: "gaussian"
std: 0.001
}
bias_filler {
type: "constant"
value: 0
}
}
}

layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "cls_score"
bottom: "labels"
top: "loss_cls"
loss_weight: 0
}

layer {
name: "accuarcy"
type: "Accuracy"
bottom: "cls_score"
bottom: "labels"
top: "accuarcy"
}

layer {
name: "loss_angle"
type: "SmoothL1Loss"
bottom: "angle_pred"
bottom: "angle_head"
bottom: "angle_head_weight"
top: "loss_angle"
loss_weight: 1
}

layer {
name: "loss_bbox"
type: "SmoothL1Loss"
bottom: "bbox_pred"
bottom: "bbox_targets"
bottom: "bbox_loss_weights"
top: "loss_bbox"
loss_weight: 0
}

Message has been deleted

nila...@gmail.com

unread,
Oct 23, 2016, 4:01:58 PM10/23/16
to Caffe Users
The values inside your 9x1 output vector are to be interpreted as confidence scores. You can use an argmax operation to obtain class labels.
Reply all
Reply to author
Forward
0 new messages