参考:https://blog.youkuaiyun.com/lihe4151021/article/details/90343163
https://www.cnblogs.com/EstherLjy/p/6863890.html
http://www.voidcn.com/article/p-cfyxpqps-bqs.html
现在用caffe-ssd运行下自己的数据集
前提:caffe已经配置好,数据集也已经做好,lmdb也已经做好
如下,caffe下的ssd文件
我自己的数据集
我的LMDB路径
数据训练
1.训练时使用ssd demo中提供的预训练好的VGGnet model
链接下载地址:https://pan.baidu.com/s/1X7gkyHnd87nv5TTqWfaR2Q 提取密码:45tm
将该模型保存到 : caffe-ssd/models/VGGNet下(没有VGGNet,就新建一个)。
2.训练程序为/examples/ssd/ssd_pascal.py,先更改名字为ssd_pascal_nwpu.py运行之前,我们需要修改相关路径代码,ssd_pascal_nwpu.py运作如下修改:
train_data路径:
将train_data = "examples/VOC0712/VOC0712_trainval_lmdb"
修改为 :train_data = "examples/MyDataSet/MyDataSet_trainval_lmdb"
test_data路径:
将test_data = "examples/VOC0712/VOC0712_test_lmdb"
修改为 :test_data = "examples/MyDataSet/MyDataSet_test_lmdb"
以及model_name、save_dir、snapshot_dir、job_dir、output_result_dir路径:
以及修改name_size_file、pretrain_model,label_map_file路径;
num_classes修改为1 + 类别数;
num_test_image:测试集图片数目
另外, 如果只有一个GPU, 需要修改行: gpus=”0,1,2,3” ===> 改为”0” ,如果出现 out of memory,则将batch size 相应改小一些。
可以修改训练以及测试过程中的参数,可根据自己需要调整。
3.上述修改完成后,在caffe(ssd)根目录下,我的是/home/zhai/experiment/caffe-ssd-master/caffe 运行:
python ./examples/ssd/ssd_pascal_nwpu.py
问题记录
File "./examples/ssd/ssd_pascal_nwpu.py", line 250
SyntaxError: Non-ASCII character '\xe6' in file ./examples/ssd/ssd_pascal_nwpu.py on line 250, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
原因:Python文件中不支持中文,中文注释也不行。为解决这个问题,就需要在代码开头声明编码格式为UTF-8。
中文字符声明:
# -*- coding: utf-8 -*-
修改
开始训练,
python ./examples/ssd/ssd_pascal_nwpu.py
这初始的误差有点大,不知道结果怎么样。果不其然,loss = nan
I0818 16:50:25.076333 6551 solver.cpp:259] Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0818 16:50:25.076347 6551 sgd_solver.cpp:138] Iteration 150, lr = 0.00125
I0818 16:51:02.850242 6551 solver.cpp:243] Iteration 160, loss = nan
I0818 16:51:02.850358 6551 solver.cpp:259] Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0818 16:51:02.850371 6551 sgd_solver.cpp:138] Iteration 160, lr = 0.00125
I0818 16:51:43.495267 6551 solver.cpp:243] Iteration 170, loss = nan
I0818 16:51:43.495431 6551 solver.cpp:259] Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0818 16:51:43.495445 6551 sgd_solver.cpp:138] Iteration 170, lr = 0.00125
I0818 16:52:21.630558 6551 solver.cpp:243] Iteration 180, loss = nan
I0818 16:52:21.630770 6551 solver.cpp:259] Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0818 16:52:21.630796 6551 sgd_solver.cpp:138] Iteration 180, lr = 0.00125
I0818 16:53:00.213999 6551 solver.cpp:243] Iteration 190, loss = nan
I0818 16:53:00.214116 6551 solver.cpp:259] Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0818 16:53:00.214126 6551 sgd_solver.cpp:138] Iteration 190, lr = 0.00125
I0818 16:53:39.971237 6551 solver.cpp:243] Iteration 200, loss = nan
I0818 16:53:39.971369 6551 solver.cpp:259] Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0818 16:53:39.971383 6551 sgd_solver.cpp:138] Iteration 200, lr = 0.00125
I0818 16:54:20.600934 6551 solver.cpp:243] Iteration 210, loss = nan
I0818 16:54:20.601011 6551 solver.cpp:259] Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0818 16:54:20.601025 6551 sgd_solver.cpp:138] Iteration 210, lr = 0.00125
I0818 16:55:02.897075 6551 solver.cpp:243] Iteration 220, loss = nan
I0818 16:55:02.897166 6551 solver.cpp:259] Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0818 16:55:02.897177 6551 sgd_solver.cpp:138] Iteration 220, lr = 0.00125
损失值溢出,从网上找来的意见是修改base_lr
,乘以0.1,改为0.0001
参考:https://blog.youkuaiyun.com/guojingjuan/article/details/55252411
https://blog.youkuaiyun.com/qionggaobi9328/article/details/95940170
只是修改ssd_pascal_nwpu.py
中的参数(大部分是solver.prototxt中的参数
),重新执行后base_lr
有改变,mbox_loss
没有再出现=nan
的情况
ctrl+c
中断程序后,再重新执行,需要删除/home/zhai/experiment/caffe-ssd-master/caffe/models/VGGNet_Mydataset/MyDataSet/SSD_300x300路径下的临时文件,不然会从中断点继续执行。
删除后,执行
python ./examples/ssd/ssd_pascal_nwpu.py
loss是下降的,成功哦。
测试
1.测试单张图片
测试程序为/examples/ssd/ssd_detect.py,运行之前,复制ssd_detect.py为ssd_detect_nwpu.py我们需要修改相关路径代码,ssd_detect_nwpu.py作如下修改:
原始路径代码:
修改后路径代码:
注意:需要将待检测图片拷贝到data/MyDataSet/test_images路径下,我用到的图片为000387.jpg。
上述修改完成后,在caffe(ssd)根目录下运行:
python ./examples/ssd/ssd_detect_nwpu.py
在caffe/examples/ssd/results目录下会生成检测结果图像。
2.批量检测多张图片
修改ssd_detect.py的代码(加个for循环),代码链接:https://download.youkuaiyun.com/download/yu734390853/10275197