zoukankan      html  css  js  c++  java
  • 安装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.下载VOC2007VOC2012数据集,放到/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.shcreate_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的版本不能用gpuok,打开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.

  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第50章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第49章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第48章 读书笔记(待更新)
    Spring Boot 中使用 Quartz 实现任务调度
    实战 FastDFS Java 客户端上传文件
    分布式文件系统之 FastDFS
    Java 持久层框架之 MyBatis
    C语言实现贪吃蛇
    [转载]分享三篇非常好的学习心得
    selenium加载cookie报错问题:selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
  • 原文地址:https://www.cnblogs.com/wmlj/p/8682701.html
Copyright © 2011-2022 走看看