MXNet-SSD 再识--Mobilenet_v2

1。加载预训练模型

除了MXNet-SSD 初识中介绍的参数外,在此还需要再添加另一个参数:

--pretrained

2。修改/home/whut/yyCode/ssd/symbol/symbol_factory.py

elif network=='mobilenet_v2':
        image_shape = '3,224,224'
        network = 'mobilenet_v2'
        from_layers = ['relu6_1_expand', 'relu6_4', '', '', '', '']
        num_filters = [-1, -1, 512, 256, 256, 128]
        strides = [-1, -1, 2, 2, 2, 2]
        pads = [-1, -1, 1, 1, 1, 1]
        sizes = [[.1, .141], [.2, .272], [.37, .447], [.54, .619], [.71, .79], [.88, .961]]
        ratios = [[1, 2, .5], [1, 2, .5, 3, 1. / 3], [1, 2, .5, 3, 1. / 3], [1, 2, .5, 3, 1. / 3], \
                  [1, 2, .5], [1, 2, .5]]
        normalizations = -1
        steps = []
        return locals()

添加mobilenet_v2的相关说明。

3。开始训练

尝试一:batch-size=128,lr=0.005,--lr-steps='120,240',--end-epoch=360

MXNet-SSD 再识--Mobilenet_v2_第1张图片

 发现:过早的调整了学习率。

尝试二:batch-size=128,lr=0.005,--lr-steps='150,280',--end-epoch=360

MXNet-SSD 再识--Mobilenet_v2_第2张图片

发现:可以尝试不改变学习率,让其自然生长。

尝试三:batch-size=128,lr=0.005,--lr-steps='',--end-epoch=360

MXNet-SSD 再识--Mobilenet_v2_第3张图片

发现可以在200和250设置衰减,验证是否能够增加1%。

--finetune      #从哪一个epoch开始,此时会冻住蛮多层,会从当时的学习率开始
--begin-epoch   #从哪一个epoch开始训练,与从头训练类似
--resume        #恢复训练

此时,我的目的是为了对所有参数进行调整,所以选取resume

MXNet-SSD 再识--Mobilenet_v2_第4张图片

4。验证

python evaluate.py --network mobilenet_v2  --epoch 0

毫无疑问会报错

bug-1

whut@whut-Z370-AORUS-Gaming-5:~/yyCode/ssd$ python evaluate.py --network mobilenet_v2  --epoch 0
['0']
[gpu(0)]
[20:59:21] src/io/iter_image_det_recordio.cc:281: ImageDetRecordIOParser: /home/whut/yyCode/ssd/data/val.rec, use 11 threads for decoding..
[20:59:21] src/io/iter_image_det_recordio.cc:334: ImageDetRecordIOParser: /home/whut/yyCode/ssd/data/val.rec, label padding width: 8
Traceback (most recent call last):
  File "evaluate.py", line 115, in 
    voc07_metric=args.use_voc07_metric)
  File "/home/whut/yyCode/ssd/evaluate/evaluate_net.py", line 116, in evaluate_net
    data = [mx.random.uniform(-1.0, 1.0, shape=shape, ctx=ctx) for _, shape in mod.data_shapes]
  File "/home/whut/anaconda2/lib/python2.7/site-packages/mxnet/ndarray/random.py", line 102, in uniform
    [low, high], shape, dtype, ctx, out, kwargs)
  File "/home/whut/anaconda2/lib/python2.7/site-packages/mxnet/ndarray/random.py", line 48, in _random_helper
    return random(*params, shape=shape, dtype=dtype, ctx=ctx, out=out, **kwargs)
  File "", line 58, in _random_uniform
  File "/home/whut/anaconda2/lib/python2.7/site-packages/mxnet/_ctypes/ndarray.py", line 92, in _imperative_invoke
    ctypes.byref(out_stypes)))
  File "/home/whut/anaconda2/lib/python2.7/site-packages/mxnet/base.py", line 251, in check_call
    raise MXNetError(py_str(_LIB.MXGetLastError()))
mxnet.base.MXNetError: [20:59:22] include/mxnet/./base.h:388: Invalid context string [gpu(0)]

 仿照train.py修改两个地方:

1)evaluate.py

#87行
ctx = [mx.gpu(int(i)) for i in args.gpu_id.split(',') if i.strip()]

2)evaluate_net.py

#116行
data = [mx.random.uniform(-1.0, 1.0, shape=shape, ctx=ctx[0]) for _, shape in mod.data_shapes]

bug-2

whut@whut-Z370-AORUS-Gaming-5:~/yyCode/ssd$ python evaluate.py --network mobilenet_v2  --epoch 0
['0']
[gpu(0)]
[21:17:09] src/io/iter_image_det_recordio.cc:281: ImageDetRecordIOParser: /home/whut/yyCode/ssd/data/val.rec, use 11 threads for decoding..
[21:17:09] src/io/iter_image_det_recordio.cc:334: ImageDetRecordIOParser: /home/whut/yyCode/ssd/data/val.rec, label padding width: 8
Traceback (most recent call last):
  File "evaluate.py", line 115, in 
    voc07_metric=args.use_voc07_metric)
  File "/home/whut/yyCode/ssd/evaluate/evaluate_net.py", line 92, in evaluate_net
    load_net, args, auxs = mx.model.load_checkpoint(model_prefix, epoch)
  File "/home/whut/anaconda2/lib/python2.7/site-packages/mxnet/model.py", line 439, in load_checkpoint
    save_dict = nd.load('%s-%04d.params' % (prefix, epoch))
  File "/home/whut/anaconda2/lib/python2.7/site-packages/mxnet/ndarray/utils.py", line 175, in load
    ctypes.byref(names)))
  File "/home/whut/anaconda2/lib/python2.7/site-packages/mxnet/base.py", line 251, in check_call
    raise MXNetError(py_str(_LIB.MXGetLastError()))
mxnet.base.MXNetError: [21:17:10] src/io/local_filesys.cc:199: Check failed: allow_null  LocalFileSystem::Open "/home/whut/yyCode/ssd/model/ssd_mobilenet_v2_300-0000.params": No such file or directory

修改 model目录下的相应文件

whut@whut-Z370-AORUS-Gaming-5:~/yyCode/ssd$ python evaluate.py --network mobilenet_v2  --epoch 0
['0']
[gpu(0)]
[21:20:34] src/io/iter_image_det_recordio.cc:281: ImageDetRecordIOParser: /home/whut/yyCode/ssd/data/val.rec, use 11 threads for decoding..
[21:20:35] src/io/iter_image_det_recordio.cc:334: ImageDetRecordIOParser: /home/whut/yyCode/ssd/data/val.rec, label padding width: 8
[21:20:36] src/operator/nn/./cudnn/./cudnn_algoreg-inl.h:97: Running performance tests to find the best convolution algorithm, this can take a while... (setting env variable MXNET_CUDNN_AUTOTUNE_DEFAULT to 0 to disable)
[21:20:42] src/operator/nn/./cudnn/./cudnn_algoreg-inl.h:97: Running performance tests to find the best convolution algorithm, this can take a while... (setting env variable MXNET_CUDNN_AUTOTUNE_DEFAULT to 0 to disable)
INFO:root:Finished inference with 160 images
INFO:root:Finished with 332.948322 images per second
1: 0.93783993784
2: 0.979020979021
3: 1.0
4: 0.763636363636
5: 0.929292929293
6: 0.818181818182
7: 0.75
8: 0.984848484848
9: 0.927272727273
10: 1.0
11: 0.733044733045
12: 0.675324675325
13: 0.69696969697
14: 1.0
15: 1.0
16: 1.0
17: 0.909090909091
18: 1.0
mAP: 0.894695736362

5。demo

python demo.py --network mobilenet_v2

相关主要参数:

--network
--images
--data-shape
--class-names

实验结果:

MXNet-SSD 再识--Mobilenet_v2_第5张图片

你可能感兴趣的:(MXNet-SSD 再识--Mobilenet_v2)