- 配置caffe-SSD
- SSD: Single Shot MultiBox Detector的安装配置和运行
- SSD: Single Shot MultiBox Detector 检测单张图
- Caffe学习系列(八):Caffe-SSD及其轻量化模型
- Caffe上用SSD训练和测试自己的数据
make -j10 make pycaffe要 make pycaffe,才會有 python/caffe/_caffe.so
完成後,還要設定 環境變數 PYTHONPATH 到 python/caffe,python 才能 import 得到 caffe.
ssd 的修改版本,已經把 ssd 加到 example 中。
examples/ssd/ssd_pascal.py 是產生 network, solve, deploy 的 python script 。
他會依照 hard coded 的 layer 寫出 run 的 script...
/jobs/VGGNet/VOC0712/SSD_300x300$ cat VGG_VOC0712_SSD_300x300.sh cd /home/charles-chang/caffessd ./build/tools/caffe train \ --solver="models/VGGNet/VOC0712/SSD_300x300/solver.prototxt" \ --weights="models/VGGNet/VGG_ILSVRC_16_layers_fc_reduced.caffemodel" \ --gpu 0 2>&1 | tee jobs/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300.log和這個script 需要的 prototxt.
ssd_pascal.py 中, run_soon= True 的話,在 create 完需要的net file, shell script 後,
就會直接 call subprocess.call( ) 來 run 這個 script,進行 training.
依照說明,到github 把 .caffemodel下載下來。
放到 create models/VGGNet folder 下。
這是 pretrained 好 converlution layer 的 parameters.
接著依照說明download training data 到 ~/data 下。(因為 ssd_pascal.py hard code path)
run caffe/data/VOC0712/ 下的 create_list.sh, create_data.sh。
他會把 ~/data/ 下的 資料放到 lmdb 中。
create_list.sh, create_data.sh 要照順序做,create_data.sh 最後會把 list 跟 data 合在一起,並且在 example/VOC0712/ 下建立 link 到 ~/data/VOC....
example/VOC0712/ 下的 link 才是 等一下 train 的 reference data path (ref: train.prototxt)
之後,就可以 run ssd_pascal.py
因為 hard coded, gpu 數量,所以會出現Check failed: error == cudaSuccess (10 vs. 0) invalid device ordinal
依照說明改 GPU 可使用數目。
同樣,會出現 out of memory,修改 batch_size, 和 accum_batch_size。
diff --git a/examples/ssd/ssd_pascal.py b/examples/ssd/ssd_pascal.py index 62129ba..1de3c5b 100644 --- a/examples/ssd/ssd_pascal.py +++ b/examples/ssd/ssd_pascal.py @@ -329,13 +329,13 @@ clip = False # Solver parameters. # Defining which GPUs to use. -gpus = "0,1,2,3" +gpus = "0" gpulist = gpus.split(",") num_gpus = len(gpulist) # Divide the mini-batch to different GPUs. -batch_size = 32 -accum_batch_size = 32 +batch_size = 16 +accum_batch_size = 16 iter_size = accum_batch_size / batch_size solver_mode = P.Solver.CPU device_id = 0
create_data.sh 最後的 command 是:
/home/checko/caffessd/build/tools/convert_annoset --anno_type=detection --label_type=xml --label_map_file=/home/checko/caffessd/data/VOC0712/../../data/VOC0712/labelmap_voc.prototxt --check_label=True --min_dim=0 --max_dim=0 --resize_height=0 --resize_width=0 --backend=lmdb --shuffle=False --check_size=False --encode_type=jpg --encoded=True --gray=False /home/checko/data/VOCdevkit/ /home/checko/caffessd/data/VOC0712/../../data/VOC0712/test.txt /home/checko/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb和
/home/checko/caffessd/build/tools/convert_annoset --anno_type=detection --label_type=xml --label_map_file=/home/checko/caffessd/data/VOC0712/../../data/VOC0712/labelmap_voc.prototxt --check_label=True --min_dim=0 --max_dim=0 --resize_height=0 --resize_width=0 --backend=lmdb --shuffle=False --check_size=False --encode_type=jpg --encoded=True --gray=False /home/checko/data/VOCdevkit/ /home/checko/caffessd/data/VOC0712/../../data/VOC0712/trainval.txt /home/checko/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb
train 出現
F0816 17:06:47.531648 3928 math_functions.cpp:250] Check failed: a <= b (0 vs. -1.19209e-07) *** Check failure stack trace: *** @ 0x7fdb6c1a60cd google::LogMessage::Fail() @ 0x7fdb6c1a7f33 google::LogMessage::SendToLog() @ 0x7fdb6c1a5c28 google::LogMessage::Flush() @ 0x7fdb6c1a8999 google::LogMessageFatal::~LogMessageFatal() @ 0x7fdb6c8b6087 caffe::caffe_rng_uniform<>() @ 0x7fdb6c8716a8 caffe::SampleBBox() @ 0x7fdb6c871a00 caffe::GenerateSamples() @ 0x7fdb6c871c50 caffe::GenerateBatchSamples() @ 0x7fdb6c9bcdd2 caffe::AnnotatedDataLayer<>::load_batch() @ 0x7fdb6c953faa caffe::BasePrefetchingDataLayer<>::InternalThreadEntry() @ 0x7fdb6ca9c965 caffe::InternalThread::entry() @ 0x7fdb60df4bcd (unknown) @ 0x7fdb4d0f06db start_thread @ 0x7fdb6a8e988f clone然後這一篇:"caffe 错误 math_functions.cpp Check failed: a <= b" 說改 SampleBBox()..
沒有留言:
張貼留言