训练缩减版的VGG-8作为微调材料,读取数据阶段为何频频“迷之卡死”

由于VGG-16有好多重复的3-1-1卷积核,庞大了些,或许用VGG-10,VGG-8就可以了,而且使用速度或许会有一些提升。
于是就写了VGG-8。
vgg-8.jpg


但是训练的时候就出现问题,读取数据时间特别长,半小时之后报一个“CUDNN”的那个显存不足错误,修改batch_size,一直从256到1,都是这个错,好郁闷。。。

起初以为是显卡问题,一直用的是GTX980,4G显存。后来换泰坦,12G显存,应该也是够了,但还是报这个错。。。

后来以为是imagenet数据数据坏了,做了一下只有两张图的小lmdb训练试试看,结果出现“读取均值文件后读取数据卡死现象”,等了一个多小时都没有但应。那应该不是数据问题而是网络问题了吧。
k1.jpg


发此贴在GTX980机器上,我就贴上980的监测和系统内存情况吧,都很低,但就是卡着进行不下去
k2.jpg


k3.jpg



VGG-8前段嫁接在其他网络前面训练畅通无阻,但是单独训练就歇菜。。。训练同样用imagenet数据的lmdb,想做一个预训练模型,不用预训练模型直接跑也出了结果,但是回归效果不好,很多误检,鲁棒性太差。

乞求大神指点。献上小弟的膝盖~~~

贴上train.prototxt,感兴趣的同学我们一起交流哈
name: "my_vgg-8"
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mirror: true
    crop_size: 227
    mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
  }
  data_param {
    #source: "/media/evence/disk2/caffe-master/examples/imagenet/ilsvrc12_train_lmdb"
    source: "examples/images/img_train_lmdb"
    batch_size: 256
    backend: LMDB
  }
}
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  transform_param {
    mirror: false
    crop_size: 227
    mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
  }
  data_param {
    #source: "/media/evence/disk2/caffe-master/examples/imagenet/ilsvrc12_val_lmdb"
    source: "examples/images/img_train_lmdb"
    batch_size: 50
    backend: LMDB
  }
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  convolution_param {
    num_output: 64
    pad: 1
    kernel_size: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "relu1"
  type: "ReLU"
  bottom: "conv1"
  top: "conv1"
}

layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}
layer {
  name: "conv2"
  type: "Convolution"
  bottom: "pool1"
  top: "conv2"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  convolution_param {
    num_output: 128
    pad: 1
    kernel_size: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "relu2"
  type: "ReLU"
  bottom: "conv2"
  top: "conv2"
}
layer {
  name: "pool2"
  type: "Pooling"
  bottom: "conv2"
  top: "pool2"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}
layer {
  name: "conv3"
  type: "Convolution"
  bottom: "pool2"
  top: "conv3"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 256
    pad: 1
    kernel_size: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "relu3"
  type: "ReLU"
  bottom: "conv3"
  top: "conv3"
}

layer {
  name: "pool3"
  type: "Pooling"
  bottom: "conv3"
  top: "pool3"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}

layer {
  name: "conv4"
  type: "Convolution"
  bottom: "pool3"
  top: "conv4"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 512
    pad: 1
    kernel_size: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "relu4"
  type: "ReLU"
  bottom: "conv4"
  top: "conv4"
}
layer {
  name: "conv5"
  type: "Convolution"
  bottom: "conv4"
  top: "conv5"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 512
    pad: 1
    kernel_size: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "relu5"
  type: "ReLU"
  bottom: "conv5"
  top: "conv5"
}
layer {
  name: "pool5"
  type: "Pooling"
  bottom: "conv5"
  top: "pool5"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
  name: "fc66"
  type: "Convolution"
  bottom: "pool5"
  top: "fc66"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 1024
    pad: 6
    kernel_size: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
    dilation: 6
  }
}
layer {
  name: "relu66"
  type: "ReLU"
  bottom: "fc66"
  top: "fc66"
}
layer {
  name: "drop66"
  type: "Dropout"
  bottom: "fc66"
  top: "fc66"
  dropout_param {
    dropout_ratio: 0.5
  }
}
layer {
  name: "fc77"
  type: "Convolution"
  bottom: "fc66"
  top: "fc77"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 1024
    kernel_size: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "relu77"
  type: "ReLU"
  bottom: "fc77"
  top: "fc77"
}
layer {
  name: "drop77"
  type: "Dropout"
  bottom: "fc77"
  top: "fc77"
  dropout_param {
    dropout_ratio: 0.5
  }
}
layer {
  name: "fc88"
  type: "InnerProduct"
  bottom: "fc77"
  top: "fc88"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 1000
    weight_filler {
      type: "gaussian"
      std: 0.005
    }
    bias_filler {
      type: "constant"
      value: 0.1
    }
  }
}
layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "fc88"
  bottom: "label"
  top: "accuracy"
  include {
    phase: TEST
  }
}
layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "fc88"
  bottom: "label"
  top: "loss"
}
细心的同学一定发现fc6和fc7怎么变成卷基层了,其实我是为了嫁接ssd,ssd前段用的VGG-16,我想换成VGG-8减轻模型负担,为保证预训练结构和嫁接结构一致,所以也改成了conv层

solver.prototxt文件
net: "models/my_vgg/train_val.prototxt"
test_iter: 1000
test_interval: 1000
base_lr: 0.001
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 450000
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "models/my_vgg/snap/my_caffe_vgg_train"
solver_mode: GPU

------------------------------------------------------------------------------------------------------------------------------------------------------
感谢大神的提示,刚才做了三次试验,为了把问题描述清楚,我把结果贴上来吧:
1.将均值写在train.prototxt中,卡在了初始化TEST的data->label这一步。
value_mean.jpg


2.去掉均值文件和均值,同样卡在了初始化 TEST的data->label这一步。
no_mean.jpg


3.用均值文件地址,就是问题中那个截图,卡在了初始化TEST的读取均值文件这一步。
file_mean.jpg

 
已邀请:

Evence

赞同来自:

然后,我下了一个所谓的原本VGG-16,跑起来之后又是无限卡死在data位置。。。宝宝心里苦=,=

vgg16-raw-train.jpg


vgg16-raw-failed.jpg

 

辛淼 - CaffeCN社区创始人。北航PhD,目前在哈佛大学工作。

赞同来自:

是均值文件的问题吗?试试把mean值直接写到train.prototxt里。
很久以前碰到过卡死的问题,但是情况不太一样,是网络初始化已经完成了,在读第一组数据的时候就卡住了,那是因为leveldb的问题,后来的caffe版本已经修正了那个bug。从你的截图上看网络初始化还未完成,应该不是数据的问题。
 

epleone

赞同来自:

看你的配置文件 训练集和测试集都使用了img_train_lmdb, 文件被读的时候没法再被读进去了

爱在路上 - 想成为菜鸟中的战斗机

赞同来自:

我这边VGG16-finetune,为什么加了acc层和loss层之后就运行不了了??没有的话,就可以finetune,有知道什么原因的吗??

dingdingpixi

赞同来自:

请问你的vgg8的输出是1024?这样的vgg用来做ssd的base network比较起vgg16来mAP下降了多少?

rtft667r5

赞同来自:

VGG是 layers  将layer换成layers。然后里面的参数按照leyers的参数设置就行了

要回复问题请先登录注册