当我尝试为我自己的数据训练FCN32
semantic segmentation时,我收到此错误:
I0106 12:57:53.273977 19825 net.cpp:100] Creating Layer upscore_sign
I0106 12:57:53.273982 19825 net.cpp:434] upscore_sign <- score_fr_sign
I0106 12:57:53.274001 19825 net.cpp:408] upscore_sign -> upscore_sign
F0106 12:57:53.274119 19825 base_conv_layer.cpp:122] Check failed: channels_ % group_ == 0 (1 vs. 0)
*** Check failure stack trace: ***
@ 0x7f2602e525cd google::LogMessage::Fail()
@ 0x7f2602e54433 google::LogMessage::SendToLog()
@ 0x7f2602e5215b google::LogMessage::Flush()
@ 0x7f2602e54e1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7f260350701b caffe::BaseConvolutionLayer<>::LayerSetUp()
@ 0x7f26033ee557 caffe::Net<>::Init()
@ 0x7f26033efde1 caffe::Net<>::Net()
@ 0x7f26033c5d4a caffe::Solver<>::InitTrainNet()
@ 0x7f26033c7157 caffe::Solver<>::Init()
@ 0x7f26033c74fa caffe::Solver<>::Solver()
@ 0x7f2603400353 caffe::Creator_SGDSolver<>()
@ 0x40c07a train()
@ 0x408748 main
@ 0x7f26014f3830 __libc_start_main
@ 0x409019 _start
@ (nil) (unknown)
我没有包含先前图层的创建。但似乎net
成功创建了以前的图层,并且它到达Creating Layer upscore_sign
,错误就出现了。我更改了solver
如下:
net: "train_val.prototxt"
#test_net: "val.prototxt"
test_iter: 200 #3000 #5105
# make test net, but don't invoke it from the solver itself
test_interval: 1000
display: 20
average_loss: 20
lr_policy: "step" #"fixed"
# lr for unnormalized softmax
base_lr: 1e-10
# high momentum
momentum: 0.99
# no gradient accumulation
iter_size: 1
max_iter: 300000
weight_decay: 0.0005
snapshot: 2000 #10000
snapshot_prefix: "snapshot/FCN32s_train"
test_initialization: false
solver_mode: GPU #+
我将输出数量从60改为5(基于我数据中的类数):convolution_param {num_output: 5 }
有人可以就此提出任何解决方案或想法吗?我错误地设置/更改了什么?我的错误是什么/在哪里?
感谢您的帮助。
答案 0 :(得分:2)
检查失败:channels_%group_ == 0(1对0) 这条线真的很重要!你应该检查你的num_output和group,看看channels_%group_ == 0。