如何在caffe下实现DSOD
一.配置SSD
二.配置DSOD
1.下载DSOD源码
cd Downloads
git clone https://github.com/szq0214/DSOD.git
2.创建相关子目录,并移动文件
- 创建目录
example/dsod/
,并将文件DSOD300_pascal.py
,DSOD300_pascal++.py
,DSOD300_coco.py
,score_DSOD300_pascal.py
和DSOD300_detection_demo.py
移动到该目录下. - 创建目录
example/grp_dsod/
,并将 文件GRP_DSOD320_pascal.py
和score_GRP_DSOD320_pascal.py
移动到该目录下. - 将文件
python/caffe/model_libs.py
备份,并将git得到的model_libs.py
移动到目录python/caffe
下
3.修改相关参数
- DSOD300_pascal.py
# The database file for training data. Created by data/VOC0712/create_data.sh
train_data = "/home/amax/caffe/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb"
# The database file for testing data. Created by data/VOC0712/create_data.sh
test_data = "/home/amax/caffe/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb"
# Defining which GPUs to use.
gpus = "0" #"0,1,2,3,4,5,6,7"
# Divide the mini-batch to different GPUs.
batch_size =4 #32
accum_batch_size = 16 #128
-
DSOD300_pascal++.py
-
DSOD300_coco.py
-
score_DSOD300_pascal.py
-
DSOD300_detection_demo.py
三.训练和测试
-
Train a DSOD model on VOC 07+12:
python examples/dsod/DSOD300_pascal.py
-
Train a DSOD model on VOC 07++12:
python examples/dsod/DSOD300_pascal++.py
-
Train a DSOD model on COCO trainval:
python examples/dsod/DSOD300_coco.py
-
Evaluate the model (DSOD):
python examples/dsod/score_DSOD300_pascal.py
-
Run a demo (DSOD):
python examples/dsod/DSOD300_detection_demo.py
-
Train a GRP_DSOD model on VOC 07+12:
python examples/grp_dsod/GRP_DSOD320_pascal.py
-
Evaluate the model (GRP_DSOD):
python examples/dsod/score_GRP_DSOD320_pascal.py
四.错误集锦
1.NameError: name ‘DSOD300_V3_Body’ is not defined”
Traceback (most recent call last):
File “examples/dsod/DSOD300_pascal.py”, line 380, in
DSOD300_V3_Body(net, from_layer=‘data’)
NameError: name ‘DSOD300_V3_Body’ is not defined
- 解决方案
- 将Git到的model_libs.py存放到
python/caffe/
文件夹下
- 将Git到的model_libs.py存放到
2.Check failed: mdb_status == 0 (2 vs. 0) No such file or directory
I0314 15:43:29.332816 26917 layer_factory.hpp:77] Creating layer data
I0314 15:43:29.333189 26917 net.cpp:100] Creating Layer data
I0314 15:43:29.333199 26917 net.cpp:408] data -> data
I0314 15:43:29.333227 26917 net.cpp:408] data -> label
F0314 15:43:29.336953 26936 db_lmdb.hpp:15] Check failed: mdb_status == 0 (2 vs. 0) No such file or directory
*** Check failure stack trace: ***
@ 0x7fe8101c95cd google::LogMessage::Fail()
@ 0x7fe8101cb433 google::LogMessage::SendToLog()
@ 0x7fe8101c915b google::LogMessage::Flush()
@ 0x7fe8101cbe1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7fe81092fad0 caffe::db::LMDB::Open()
@ 0x7fe8109410f6 caffe::DataReader<>::Body::InternalThreadEntry()
@ 0x7fe810960f35 caffe::InternalThread::entry()
@ 0x7fe80325c5d5 (unknown)
@ 0x7fe7eeb196ba start_thread
@ 0x7fe80ea4641d clone
@ (nil) (unknown)
Aborted (core dumped)
- 解决方案
- 检查
DSOD300_pascal.py
中train_data
、test_data
等路径
- 检查
3.Check failed: error == cudaSuccess (2 vs. 0) out of memory
F0314 16:14:58.156533 3446 syncedmem.cpp:56] Check failed: error == cudaSuccess (2 vs. 0) out of memory
*** Check failure stack trace: ***
@ 0x7f517f76a5cd google::LogMessage::Fail()
@ 0x7f517f76c433 google::LogMessage::SendToLog()
@ 0x7f517f76a15b google::LogMessage::Flush()
@ 0x7f517f76ce1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7f517fee6d30 caffe::SyncedMemory::to_gpu()
@ 0x7f517fee5cf9 caffe::SyncedMemory::mutable_gpu_data()
@ 0x7f517fe21532 caffe::Blob<>::mutable_gpu_data()
@ 0x7f51800c425d caffe::BatchNormLayer<>::Forward_gpu()
@ 0x7f517fe491a2 caffe::Net<>::ForwardFromTo()
@ 0x7f517fe492c7 caffe::Net<>::Forward()
@ 0x7f517ff0bb60 caffe::Solver<>::Step()
@ 0x7f517ff0c5ee caffe::Solver<>::Solve()
@ 0x40bd14 train()
@ 0x4077e8 main
@ 0x7f517df00830 __libc_start_main
@ 0x4080b9 _start
@ (nil) (unknown)
Aborted (core dumped)
- 解决方案
- 调整
DSOD300_pascal.py
中batch_size
、accum_batch_size
大小即可
- 调整
4.重启大法好
五. 其他
1.Python format 格式化函数
>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world'
>>>"{0} {1}".format("hello", "world") # 设置指定位置
‘hello world'
>>>"{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'
2.Pycharm中添加caffe环境变量
import sys
sys.path.append('/home/amax/GWL/DSOD/caffe_DSOD/python')