安装SSD
前面两篇文章讲了用SSD检测框架训练自己的数据集,这篇补充一下SSD的安装。github链接:https://github.com/weiliu89/caffe/tree/ssd
SSD是16年ECCV一篇深度学习目标检测的文章,详细知识可以百度或者谷歌,本文我们介绍如何实现。本文默认各位的机子已安装好opencv, 配置编译过cpu版本的caffe(没有也没关系,下面我会讲下).
1. 在home目录下(也可以其他目录,当然其他目录后面就要修改路径,比较麻烦),获取SSD的代码,下载完成后有一个caffe文件夹.(由于本人之前已安装caffe,为避免文件名冲突,所以新建一个名为caffessd的文件夹,并将此次下载的‘ssd版本’的caffe放在caffessd文件夹下了。)
mkdir caffessd
cd caffessd
git clonehttps://github.com/weiliu89/caffe.git #the name of the file you downloaded is "caffe".
cd caffe
gitcheckout ssd
2. 修改caffe的配置文件.
将已经配置过的cpu版本caffe中的Makefile.config复制到刚才下载的caffe目录。如果你没有配置过cpu版本的caffe,可以参考这篇博文.
Ubuntu16.04+caffe的安装和Py-faster-rcnn在CPU电脑的安装-2. http://blog.csdn.net/jx232515/article/details/72384465.下面我直接把Makefile.config需要修改的部分贴在下面了.可以照着修改也行.
去掉注释CPU_ONLY:=1
因为使用CPU,所以要注释掉CUDA有关的行:
#CUDA_DIR := /usr/local/cuda
#CUDA_ARCH := -gencodearch=compute_20,code=sm_20 \
# -gencode arch=compute_20,code=sm_21\
# -gencode arch=compute_30,code=sm_30 \
# -gencode arch=compute_35,code=sm_35 \
# -gencode arch=compute_50,code=sm_50 \
# -gencode arch=compute_50,code=compute_50
去掉注释WITH_PYTHON_LAYER:= 1
INCLUDE_DIRS := $(PYTHON_INCLUDE)/usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS
:= $(PYTHON_LIB)/usr/local/lib /usr/lib
/usr/lib/i386-linux-gnu/hdf5/serial/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/hdf5/serial
#TEST_GPUID:= 0
3.编译caffe
make -j8
# Make sure to include $CAFFE_ROOT/pythonto your PYTHONPATH.
make py
make test -j8
# (Optional)
make runtest -j8
4.下载VGG-ILSVRC-16-layers-fc-reduced.caffemodel预训练模型( https://drive.google.com/uc?id=0BzKzrI_SkD1_WVVTSmQxU0dVRzA&export=downloadhttps://pan.baidu.com/s/1o8A7DZs),将它放入caffe/models/VGGNet/目录下,这样可以直接使用这个模型跑ssd.
5.下载VOC2007和VOC2012数据集,放到/home/data下。(请注意,这里改变了目录)
cd $HOME/data
wgethttp://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wgethttp://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wgethttp://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
# Extract the data.
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar-xvf VOCtest_06-Nov-2007.tar
6.将voc2007数据集转换格式,用于模型的训练.
首先进入caffe目录,可以看到/data/VOC0712/有create_list.sh,create_data.sh .运行就可以转换数据格式,用于模型训练.
此处注意create_list.sh和create_data.sh中路径的修改,修改为自己的路径,要不会出错.
(1)本人的create_list.sh修改如下:
#!/bin/bash
root_dir=$HOME/data/zyt/
sub_dir=ImageSets/Main
bash_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
for dataset in trainval test
do
dst_file=$bash_dir/$dataset.txt
if [ -f $dst_file ]
then
rm -f $dst_file
fi
for name in zyt # VOC2012
do
if [[ $dataset == "test" && $name == "VOC2012" ]]
then
continue
fi
echo "Create list for $name $dataset..."
dataset_file=$root_dir/$name/$sub_dir/$dataset.txt
img_file=$bash_dir/$dataset"_img.txt"
cp $dataset_file $img_file
sed -i "s/^/$name\/JPEGImages\//g" $img_file
sed -i "s/$/.jpg/g" $img_file
label_file=$bash_dir/$dataset"_label.txt"
cp $dataset_file $label_file
sed -i "s/^/$name\/Annotations\//g" $label_file
sed -i "s/$/.xml/g" $label_file
paste -d' ' $img_file $label_file >> $dst_file
rm -f $label_file
rm -f $img_file
done
# Generate image name and size infomation.
if [ $dataset == "test" ]
then
$bash_dir/../../build/tools/get_image_size $root_dir $dst_file $bash_dir/$dataset"_name_size.txt"
fi
# Shuffle trainval file.
if [ $dataset == "trainval" ]
then
rand_file=$dst_file.random
cat $dst_file | perl -MList::Util=shuffle -e 'print shuffle(<STDIN>);' > $rand_file
mv $rand_file $dst_file
fi
done
(2)create_data.sh修改如下:
cur_dir=$(cd $( dirname ${BASH_SOURCE[0]} ) && pwd )
root_dir=$cur_dir/../..
cd $root_dir
redo=1
data_root_dir="$HOME/data/zyt"
dataset_name="zyt"
mapfile="$root_dir/data/$dataset_name/labelmap_voc.prototxt"
anno_type="detection"
db="lmdb"
min_dim=0
max_dim=0
width=0
height=0
extra_cmd="--encode-type=jpg --encoded"
if [ $redo ]
then
extra_cmd="$extra_cmd --redo"
fi
for subset in test trainval
do
python $root_dir/scripts/create_annoset.py --anno-type=$anno_type
--label-map-file=$mapfile --min-dim=$min_dim --max-dim=$max_dim
--resize-width=$width --resize-height=$height --check-label $extra_cmd
$data_root_dir $root_dir/data/$dataset_name/$subset.txt
$data_root_dir/$dataset_name/$db/$dataset_name"_"$subset"_"$db
examples/$dataset_name
done
(3)分别执行如下两条命令转换数据格式:
# Create the trainval.txt, test.txt, andtest_name_size.txt in data/VOC0712/
./data/VOC0712/create_list.sh
# You can modify the parameters increate_data.sh if needed.
# It will create lmdb files for trainvaland test with encoded original image:
# - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb
# - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb
# and make soft links atexamples/VOC0712/
./data/VOC0712/create_data.sh
此时发现执行create_data.sh时还是出错了,报错为:AttributeError: 'module' object has no attribute 'LabelMap',原因是没有添加环境变量,
解决方式:其中$CAFFE_ROOT是本人caffe的根目录,注意换成自己的.
vim ~/.bashrc
最后一行将环境变量的值改为exportPYTHONPATH=/home/zhuyating/caffessd/caffe/python:$PYTHONPATH source~/.profile (由于本人将此次下载的caffe放在caffessd文件夹下,故路径如上所述。)
echo $PYTHONPATH #检查环境变量的值是否修改成功。
7.训练模型
因为我们用的是cpu,首先修改examples/ssd/ssd_pascal.py文件
将如下代码注释掉
#gpus = "0,1,2,3"
#gpulist = gpus.split(",")
#num_gpus = len(gpulist)
# Divide the mini-batch to different GPUs.
batch_size = 32
accum_batch_size = 32
iter_size = accum_batch_size /batch_size
solver_mode = P.Solver.CPU
device_id = 0
batch_size_per_device = batch_size
#if num_gpus > 0:
# batch_size_per_device = int(math.ceil(float(batch_size) /num_gpus))
# iter_size = int(math.ceil(float(accum_batch_size) /(batch_size_per_device * num_gpus)))
# solver_mode = P.Solver.GPU
# device_id = int(gpulist[0])
然后Linux运行Python文件进行训练(一般CPU电脑是会死机的):
Python examples/ssd/ssd_pascal.py
如果不想花费时间训练,可以在这里下载训练好的模型
https://drive.google.com/uc?id=0BzKzrI_SkD1_WVVTSmQxU0dVRzA&export=download
下载后解压,将其中的VGGNet文件夹复制到caffe/models下面,呀,你发现caffe/models下面已经有VGGNet文件夹了,这是之前我们做训练时建立的,没训练就没有了.ok,就可以将VGGNet复制到此处了。
8.测试
1)在图片测试集上测试
pythonexamples/ssd/score_ssd_pascal.py
这时你可能会有以下几种报错:
a.显示cpu-only的版本不能用gpu,ok,打开score_ssd_pascal.py修改为
solver_mode = P.Solver.CPU
b. 出错:checked failed: num_test_image_ <= names_.size() (4952 vs.2525)
原因及解决方法:ssd_pascal.py文件中num_test_image参数是4952,而test_name_size.txt里面却只有2525张图片的信息。此时要检查test_name_size.txt是不是只有2525张图片的信息,若只有2525张图片的信息,则删掉test_name_size.txt,重新转换数据得到4952张图片的信息或者直接拷贝同学已有的test_name_size.txt替换原来的test_name_size.txt。
2)在视频上测试
pythonexamples/ssd/ssd_pascal_video.py
当然,直接跑是他自带的视频,想跑自己的代码的话,要先用vim打开该文件,定位到51行,修改视频路径为已有本地视频,这样就可以跑自己的视频了。
3)使用摄像头测试
pythonexamples/ssd/ssd_pascal_webcam.py.
安装SSD的更多相关文章
- 华硕_ZX50JX4200 安装ssd固态盘
本人亲身的一次经历,帮朋友的华硕手提装一个内存和ssd固态 内存5分钟搞定,但是ssd固态盘就经过了一番的折腾 首先要拧掉所有后盖的螺丝,把光驱拆下来,注意撬开键盘板的时候有排线,不能弄断了.然后一定 ...
- 联想G50-70安装SSD及WIN10教程
借着双11的东风,果断入手SSD120G和4G内存条1枚.经过近一周的安装与试运行,笔者实现了SSD+HDD双硬盘+WIN10系统.目前运行体验非常好,开机时间9秒,软件运行也非常流畅.在折腾的过程中 ...
- 笔记本安装SSD固态硬盘详细的优化设置
现在好多笔记本.台式机都加上固态硬盘了,固态硬盘的优势大家应该都有所了解了,在此略写一下固态硬盘优势: 1.启动快,没有电机加速旋转的过程: 2.不用磁头,快速随机读取,读延迟极小: 3.相对固 ...
- 安装SSD固态硬盘
满足三个要求:开启AHCI."4K对齐".SSD初始化. 1. 开启AHCI模式 重启,进入bios,高级模式,SATA模式选择,选择AHCI. 2. 4K对齐 第3步,在分区的时 ...
- Jetson AGX Xavier/Ubuntu安装SSD
参考 https://blog.csdn.net/xingdou520/article/details/84309155 1. 查看硬盘所有分区 sudo fdisk -lu 会找到/dev/nvme ...
- SSD安装记录
这两天配置SSD,折腾了一两天,终于搞定了,记录下自己遇到的大坑. 1.安装SSD 安装参考:http://blog.csdn.net/shawncheer/article/details/53227 ...
- 与你相遇好幸运,gen8安装
gen8到手后,立马去买了 SSD https://item.jd.com/2010277.html 支架 https://item.jd.com/2671609.html NAS盘 https:// ...
- ubuntu kylin 16.04系统的基本安装
系统版本:ubuntu kylin 16.04 硬件状况:500G HDD+120G SSD 已安装操作系统:WIN 10专业版(craked) ——WIN 10系统是装在SSD的第一个盘符内的.以前 ...
- 在 Windows 安装期间将 MBR 磁盘转换为 GPT 磁盘
以 UEFI 启动的 Windows 磁盘必须是 GPT 格式.本文将介绍如何在安装 Windows 期间将磁盘从 MBR 转换成 GPT. 特别注意:操作不慎可能丢失所有数据,如果你懂得安装系统的一 ...
随机推荐
- git命令合并分支代码
对于复杂的系统,我们可能要开好几个分支来开发,那么怎样使用git合并分支呢? 合并步骤:1.进入要合并的分支(如开发分支合并到master,则进入master目录)git checkout maste ...
- pytest--fixture参数化的实现方式和执行顺序
之前看到fixture函数可以通过添加,params参数来实现参数化,后续看到了悠悠 的博客,可以通过@pytest.mark.parametrize来实现,现在做一个总结 实现方式一 通过param ...
- 雷林鹏分享:YAF路由问题
这2天休年假,在家宅着学习研究了YAF框架,用YAF做过APP接口的项目,但是没有用来做过WEB方面的应用.趁着这2天在家想把博客用YAF进行一下改版,目的也想进一步学习一下YAF. 在这过程中遇到不 ...
- 射频(SX1278)
射频是什么? 官方说法:RF,Radio Frequency. (不懂的人,看了还是不懂,不过对于物联网行业的开发工程师.产品经理和项目经理,还是有需要对射频有个基础了解的.) 燚智能解读: 两个人, ...
- Java程序设计的第一次作业1
- mac电脑上不能用移动硬盘的原因和方法
原因: 一般性是因为这个移动硬盘的格式是 NTFS 格式的,对于这种格式的磁盘格式,在苹果系统中却是不支持往硬盘里写入数据的 解决方法: 方法一: ntfs的格式分区,这种格式分区与我们的苹果电脑自身 ...
- js 实用小技巧
https://blog.csdn.net/www93111/article/details/76176771
- MySQL数据库(2)
上一篇我们讲述过MySQL创建数据库,数据表的内容,其中涉及到了几个约束: NOT NULL 非空约束 PRIMARY KEY 主键约束 UNIQUE KEY 唯一约束 其实还有两个约束 ...
- Visual Studio 向工程中添加文件夹
将要添加的文件夹拷贝到工程的目标文件夹中. 打开工程,在Solution Explorer中选中“Show All Files”按钮. 然后VS会显示文件夹中包含,但是不在工程中的文件夹. 右键该文件 ...
- canal demo搭建全记录
一.环境介绍 canal是阿里开源的中间件,主要用于同步mysql数据库变更.具体参见:https://github.com/alibaba/canal/releases 搭建环境: vmware c ...