caffe安装_目标检测之caffe-ssd模型训练与测试
最近把一個(gè)ssd網(wǎng)絡(luò)的net..prototxt網(wǎng)絡(luò)結(jié)構(gòu)和自己生成的hdf5格式數(shù)據(jù)一起做訓(xùn)練時(shí)發(fā)現(xiàn)經(jīng)常報(bào)錯(cuò),因?yàn)閟sd中一些層在caffe中并沒(méi)有實(shí)現(xiàn),需要自己寫相應(yīng)的.cpp,.cu文件重新編譯,比較麻煩,而大家通常訓(xùn)練caffe-ssd都是基于原作者公開的代碼訓(xùn)練的,該代碼中實(shí)現(xiàn)了這些層,于是把原作者代碼跑了一遍.
我的機(jī)器是ubuntu16.04,裝有兩塊GTX 1080TI 的顯卡,一共20多個(gè)G顯存,opencv是自己編譯的3..3.0版本.
因?yàn)槲覚C(jī)器主目錄下已經(jīng)有個(gè)裝好的caffe了,所以再次在另一個(gè)目錄下載該源碼,該源碼下載后編譯也能import caffe,其他caffe項(xiàng)目也可以使用,如果沒(méi)有裝caffe,那就下載編譯這個(gè)源碼就能當(dāng)做caffe使用,同時(shí)也能訓(xùn)練ssd.
1,先進(jìn)入我這次操作的主目錄(/home/user/yjf),下載源碼
git clone https://github.com/weiliu89/caffe.gitcd caffegit checkout ssd(切換到ssd分支)這時(shí)候我的工作目錄為 /home/user/yjf/caffe.然后執(zhí)行如下操作
cp Makefile.config.example Makefile.config然后參考我前面博客說(shuō)過(guò)的如何搭建caffe環(huán)境文章中的說(shuō)法更改Makefile和Makefile.config文件,并參照里面提到的方法進(jìn)行編譯(我感覺(jué)caffe不管是cpu還是gpu編譯起來(lái)其實(shí)很簡(jiǎn)單的,我一般30分鐘就能弄好,沒(méi)有大家想象中的有難度或者難裝,我用的python2.7,opencv3.3.0,cudnn7.3, cuda8.0,我使用cuda9.0報(bào)錯(cuò),看來(lái)cuda9.0不匹配)
2,下載預(yù)訓(xùn)練模型,這個(gè)模型在我們訓(xùn)練ssd的時(shí)候作為初始化模型,我放在百度云了,https://pan.baidu.com/s/11JcopVftsLELIUSYmt-8Bw,大家下載即可.下載后放在/home/user/yjf/caffe/models/VGGNet目錄,如果沒(méi)有VGGNet目錄就新建一個(gè).
3,下載VOC2007和VOC2012數(shù)據(jù)集,放到/caffe/data目錄下,并解壓(其實(shí)沒(méi)多大,幾個(gè)G而已)
cd data
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
4,把下載的數(shù)據(jù)轉(zhuǎn)成訓(xùn)練需要的lmdb文件,在/home/user/yjf/caffe目錄下執(zhí)行
./data/VOC0712/create_list.sh當(dāng)然,可以會(huì)報(bào)錯(cuò)的,打開這個(gè)文件,把第一行的root_dir換成root_dir=/home/user/yjf/caffe/data/VOCdevkit(你下載的VOCdevkit在哪里這個(gè)就換成那個(gè)目錄就好,其他地方不改)
我改了原來(lái)代碼中的3,5,41行,分別加了#yjf注釋,我的放在這里,可以下載看下https://pan.baidu.com/s/1AETTYyjyKAnuKi27kE12Og
然后進(jìn)行重新執(zhí)行.執(zhí)行結(jié)束后把data/VOC0712/create_data.sh里面的第七行root_dir換成root_dir=/home/user/yjf/caffe,注釋掉cur_dir,data_root_dir="$root_dir/data/VOCdevkit")
然后執(zhí)行./data/VOC0712/create_data.sh(執(zhí)行前先在script/crerate_annoset.py中添加如下
import sys
sys.path.insert(0,'/home/user/yjf/caffe/python'))
5.然后在caffe目錄下執(zhí)行
python examples/ssd/ssd_pascal.py開始ssd訓(xùn)練,(訓(xùn)練過(guò)程可能報(bào)錯(cuò)SSD from caffe.proto import caffe_pb2 ImportError: No module named caffe.proto,解決:打開 caffe/scripts/create_annoset.py 文件,在from caffe.proto import caffe_pb2這段話之前加上
import sys
sys.path.insert(0,'/home/user/yjf/caffe/python')(這是剛剛安裝的ssd-caffe的目錄下的python目錄)目標(biāo)是讓程序知道caffe在哪里.
另外,打開caffe/examples/ssd/ssd_pascal.py,看到gpus='0,1,2,3' 該成gpus='0',是指定訓(xùn)練使用的gpu,我用的0,然后python caffe/examples/ssd/ssd_pascal.py開始訓(xùn)練
(題外話:一般caffe需要net.prototxt和solver.prototxt,train.sh三個(gè)訓(xùn)練模型對(duì)吧,這次好像沒(méi)看到,其實(shí)啊,caffe的這些net.prototxt網(wǎng)絡(luò)結(jié)構(gòu)文件是一般通過(guò).py文件生成的,該代碼中也是在訓(xùn)練的代碼中先生成了這些東西,這些東西在/home/user/yjf/caffe/models/VGGNet/VOC0712/SSD_300x300目錄下放著,train.prototxt和test.prototxt就是訓(xùn)練和測(cè)試的網(wǎng)絡(luò)結(jié)構(gòu),同時(shí)人家還生成了deploy.prototxt文件,而solver.prototxt中存放了訓(xùn)練的超參數(shù),snapshot: 8000指定訓(xùn)練8000個(gè)iters保存一次,我嫌棄時(shí)間太長(zhǎng),我想100次保存一個(gè)先看下結(jié)果,不過(guò)沒(méi)到怎么改,然后我就等訓(xùn)練代碼跑起來(lái)后在把程序停掉,這樣就生成了這些文件,我直接在solver.prototx文件中改snapshot為100,然后寫了一個(gè)train.sh文件,內(nèi)容如下:
#!/usr/bin/env sh
set -e
# /home/user/caffe/build/tools/caffe train --solver=./solver.prototxt --gpu 1
/home/user/yjf/caffe/build/tools/caffe train --solver=./solver.prototxt --gpu 1
然后我在caffe/models/VGGNet/VOC0712/SSD_300x300目錄直接執(zhí)行sh ./tran.sh就開始訓(xùn)練了,訓(xùn)練的模型根據(jù)指定目錄也在這個(gè)目錄,大家可以不用這樣,僅供參考
題外話結(jié)束####)
6,測(cè)試訓(xùn)練結(jié)果
在caffe目錄執(zhí)行
python examples/ssd/score_ssd_pascal.py,執(zhí)行前先在該程序中的import caffe之前加上import sys
caffe_root = '/home/user/yjf/caffe/'
sys.path.insert(0,caffe_root+'python')
目標(biāo)是為了讓程序找到caffe安裝目錄.?
Test net outpu的值一般為0.7左右吧,我這個(gè)值低是因?yàn)槲覄倓傞_始訓(xùn)練,我跑了100個(gè)iters就把模型保存起來(lái)試了一下,使用效果肯定低,模型需要跑二十多萬(wàn)個(gè)iters這個(gè)值就上去了.
源碼提供了在視頻和攝像頭上的測(cè)試,
在視頻上測(cè)試
python examples/ssd/ssd_pascal_video.py
直接運(yùn)行這段代碼就可以在視頻預(yù)測(cè),默認(rèn)視頻路徑為examples/videos下面有一個(gè)視頻,效果如下
?
?在攝像頭上測(cè)試
python examples/ssd/ssd_pascal_webcam.py如果報(bào)錯(cuò)就按照第6點(diǎn)在代碼中添加caffe的目錄就好
7,預(yù)測(cè)
caffe目錄執(zhí)行python examples/ssd/ssd_detect.py --model_weights ../VGG_VOC0712_SSD_300x300_iter_120000.caffemodel(此處為你訓(xùn)練的模型地址) --image_files /home/user/yjf/caffe/examples/images/fish-bike.jpg即可在caffe目錄生成一個(gè)detect_result.jpg圖片為檢測(cè)結(jié)果,預(yù)測(cè)之前在該代碼開頭部分參照第6點(diǎn)添加caffe目錄,要不然報(bào)錯(cuò)
經(jīng)過(guò)一個(gè)晚上的訓(xùn)練,用新模型預(yù)測(cè)一下,效果如下圖所示:
?
?至此caffe-ssd測(cè)試結(jié)果,接下來(lái)將講解使用直接的數(shù)據(jù)訓(xùn)練ssd
總結(jié)
以上是生活随笔為你收集整理的caffe安装_目标检测之caffe-ssd模型训练与测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python程序写诗_用Python作诗
- 下一篇: 北京环球影城有充电宝吗