SSD的安装

  • 在home目录下,获取SSD的代码,下载完成后有一个caffe文件夹
    1. git clone https://github.com/weiliu89/caffe.git
    2. cd caffe
    3. git checkout ssd(出现“分支”则说明copy-check成功)
    • 1
    • 2
    • 3
    • 进入下载好的caffe目录,复制配置文件
    1. cd /home/usrname/caffe
    2. cp Makefile.config.example Makefile.config
    • 1
    • 2
    • 1
    • 2
    • 编译caffe三部曲
    1. make all -j16 //-j16根据本机的处理器配置,16是16核处理器的意思
    2. make test -j16
    3. make runtest -j16(这一步不是必须的)
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    • 额外编译,根据需要(因为SSD利用python完成,需编译pycaffe)
    1. make pycaffe -j16

    准备工作

    1. cd ..
    2. mkdir data
    3. cd data/
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    • 下载数据集
    1. wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
    2. wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
    3. wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    • 数据集解压
    1. tar -xvf VOCtrainval_11-May-2012.tar
    2. tar -xvf VOCtrainval_06-Nov-2007.tar
    3. tar -xvf VOCtest_06-Nov-2007.tar
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    • 将图片转化为LMDB文件,用于训练
    1. cd ..
    2. cd caffe/
    3. ./data/VOC0712/create_list.sh
    4. ./data/VOC0712/create_data.sh
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4
    • 这里用的脚本实现批处理,可能会出现:no module named caffe等错误,这是由于caffe的Python环境变量未配置好,可按照下面方法解决:
    1. echo "export PYTHONPATH=/home/usrname/caffe/python" >> ~/.profile
    2. source ~/.profile
    3. echo $PYTHONPATH #检查环境变量的值

    训练模型

    • 在下载的caffe根目录执行如下命令训练,在examples/ssd下存在几个.py文件,训练的时间较长,迭代60000次,博主训练了一天!
    1. python examples/ssd/ssd_pascal.py
    • 1
    • 1

    实验效果

    (1)在图片测试集上测试

    1. python examples/ssd/score_ssd_pascal.py
    • 1
    • 1

    利用它跑了一遍数据集,得出准确率可以达到百分之70多

    (2)在视频上测试

    1. python examples/ssd/ssd_pascal_video.py
    • 1
    • 1

    利用师兄的行人视频做了测试,实时性高,但是漏检率蛮严重的,这是不可避免的 
     
     

    当然,直接跑是他自带的视频,想跑自己的代码的话,要先用vim打开该文件,定位到51行,修改视频路径为已有本地视频,这样就可以畅快的跑自己的视频

    (3)在摄像头上测试

    1. python examples/ssd/ssd_pascal_webcam.py
    • 1
    • 1

    博主移植到台式机上出现了问题,还没有改好bug,改好了会分享给大家

    后期工作

    • 研究SSD的python源代码,用来训练和检测交通标志\文本检测,人脸检测等等

    作者给定的预训练模型

    如果没有好的机器配置或者省事一些的,可以使用作者给出的训练好的模型:

    • Models trained on VOC0712:SSD300 SSD500
    • 还有其他的模型,这里就不一一列举,感兴趣的可以去官方主页看,链接已在前面给出

    最近一直在搞object detection玩,之前用的是faster-rcnn,准确率方面73.2%,效果还不错,但是识别速度有点欠缺,我用的GPU是GTX980ti, 识别速度大概是15fps.最近发现SSD(single shot multibox detector) 这篇论文效果和速度都不错,我自己实验了一下,速度确实比faster-rcnn快不少。下面分两部分来介绍。第一部分介绍SSD的安装,第二部分介绍如何基于SSD训练自己的数据集。

    1.  
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    第二部分 训练自己的数据集

    首先我们不妨先跑一下项目的demo, 需要下载数据集,提前训练好的数据集等。 

    下载预训练的模型,链接:http://pan.baidu.com/s/1miDE9h2 密码:0hf2,下载完成后保存在:

    1. caffe/models/VGGNet/
    • 1
    • 1

    下载VOC2007和VOC2012数据集, 放在/data目录下:

    1. cd data
    2. wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
    3. wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
    4. wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
    5. tar -xvf VOCtrainval_11-May-2012.tar
    6. tar -xvf VOCtrainval_06-Nov-2007.tar
    7. tar -xvf VOCtest_06-Nov-2007.tar
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    创建lmdb格式的数据:

    1. cd caffe
    2. ./data/VOC0712/create_list.sh
    3. # It will create lmdb files for trainval and test with encoded original image:
    4. # - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb
    5. # - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb
    6. ./data/VOC0712/create_data.sh
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    训练和测试

    1. python examples/ssd/ssd_pascal.py
    • 1
    • 2
    • 1
    • 2

    论文中,作者已经预训练好模型,下载链接:http://www.cs.unc.edu/%7Ewliu/projects/SSD/models_VGGNet_VOC0712_SSD_300x300.tar.gz,我们不必自己再去训练,
    下载完成后放入指定的文件夹下。 
    测试时,我们使用/example/ssd/目录里的ssd_detect.ipynb,运行这个文件,需要安装ipython及ipython-notebook,
    或者直接把里面的代码拷贝出来,写到一个新的Python文件里,比如命名ssd_detector.py.

    OK, 下面修改一系列文件来训练自己的数据集 

    两种方案, 第一:保持原来的文件目录结构及文件名不变, 只替换里面的数据。第二:重新新建一个与之前类似的目录结构,改成自己命名的文件夹,第二种方法,有一定的风险性,需要修改程序里涉及数据路径的代码。在之前讲解的faster-rcnnan那篇博客中, 我们采用第一种方案。本次我们采用第二种方案。 

    在/data目录下创建一个自己的文件夹:

    1. cd /data
    2. mkdir mydataset
    • 1
    • 2
    • 1
    • 2

    把/data/VOC0712目录下的create_list.sh 、create_data.sh、labelmap_voc.prototxt 这三个文件拷贝到/mydataset下:

    1. cp data/create* ./mydataset
    2. cp data/label* ./mydataset
    • 1
    • 2
    • 1
    • 2

    labelmap_voc.prototxt, 此文件定义label。

    在/data/VOCdevkit目录下创建mydataset, 并放入自己的数据集:

    1. cd data/VOCdevkit
    2. mkdir mydataset
    3. cd mydataset
    4. mkdir Annotations
    5. mkdir ImageSets
    6. mkdir JPEGImages
    7. cd ImageSets
    8. mkdir Layout
    9. mkdir Main
    10. mkdir Segmentation
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    其中Annotations中存放一些列XML文件,包含object的bbox,name等; 

    ImageSets中三个子目录下均存放train.txt, val.txt, trainval.txt, test.txt这几个文件,文件内容为图片的文件名(不带后缀); 

    JPEGImages存放所有的图片;

    在/examples下创建mydataset文件夹:

    1. mkdir mydataset
    • 1
    • 1

    文件夹内存放生成的lmdb文件。

    上述文件夹创建好后, 开始生成lmdb文件, 在创建之前需要修改相关路径:

    1. ./data/mydataset/create_list.sh
    2. ./data/mydataset/create_data.sh
    • 1
    • 2
    • 1
    • 2

    此时,在examples/mydataset/文件夹下可以看到两个子文件夹, mydataset_trainval_lmdb, mydataset_test_lmdb;里面均包含data.dmb和lock.dmb;

    到此为止,我们的数据集就做好了。接下来就开始训练了。训练程序为/examples/ssd/ssd_pascal.py,运行之前,我们需要修改相关路径代码:

    1. cd /examples/ssd
    2. vim sd_pascal.py 修改如下:
    3. 57行: train_data路径;
    4. 59行:test_data路径;
    5. 197-203行:save_dirsnapshot_dirjob_diroutput_result_dir路径;
    6. 216-220行: name_size_filelabel_map_file路径;
    7. 223行:num_classes 修改为1 + 类别数
    8. 315行:num_test_image:测试集图片数目
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    另外, 如果你只有一个GPU, 需要修改285行: 

    gpus=”0,1,2,3” ===> 改为”0” 

    否则,训练的时候会出错。 

    修改完后运行

    1. python ./examples/ssd/ssd_pascal.py
    • 1
    • 1

    训练完, 修改ssd_detector.py中模型路径, 任意找一张图片识别,看看效果怎么样。

    参考: 

    【1】SSD论文Single Shot MultiBox Detector

    【2】https://github.com/weiliu89/caffe/tree/ssd


[计算机视觉][神经网络与深度学习]SSD安装及其训练教程的更多相关文章

  1. [计算机视觉][神经网络与深度学习]R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记

    R-FCN.SSD.YOLO2.faster-rcnn和labelImg实验笔记 转自:https://ask.julyedu.com/question/7490 R-FCN paper:https: ...

  2. [计算机视觉][神经网络与深度学习]Faster R-CNN配置及其训练教程2

    faster-rcnn分为matlab版本和python版本,首先记录弄python版本的环境搭建过程.matlab版本见另一篇:faster-rcnn(testing): ubuntu14.04+c ...

  3. (转)神经网络和深度学习简史(第一部分):从感知机到BP算法

    深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...

  4. 【神经网络与深度学习】【CUDA开发】caffe-windows win32下的编译尝试

    [神经网络与深度学习][CUDA开发]caffe-windows win32下的编译尝试 标签:[神经网络与深度学习] [CUDA开发] 主要是在开发Qt的应用程序时,需要的是有一个使用的库文件也只是 ...

  5. 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程

    [神经网络与深度学习][python开发]caffe-windows使能python接口使用draw_net.py绘制网络结构图过程 标签:[神经网络与深度学习] [python开发] 主要是想用py ...

  6. 【神经网络与深度学习】【CUDA开发】【VS开发】Caffe+VS2013+CUDA7.5+cuDNN配置过程说明

    [神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置过程说明 标签:[Qt开发] 说明:这个工具在Windows上的配置真的是让我纠结万分,大部分 ...

  7. [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...

  8. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

  9. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】

    [吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [  ]AI为我们的家庭和办公室的个人设备供电 ...

随机推荐

  1. WinForm利用AForge.NET调用电脑摄像头进行拍照和视频

    当然了,你需要去官网下载类库,http://www.aforgenet.com/ 调用本机摄像头常用的组件: AForge AForge.Controls AForge.Imaging AForge. ...

  2. strtok在keil中使用小笔记及字符串转换为多个浮点数的方法

    在pc上面使用这个字符串函数,是没有问题的,但是我在keil中结合rtos来处理字符串的时候,比如char *s = "1.01313;17.2609;17.4875";那么就只能 ...

  3. Django API view 登录认证

    文件分类 url from django.contrib import admin from django.urls import path, re_path from django.urls imp ...

  4. EventWaitHandle 第一课

    本篇通过一个列子使用EventWaitHandle实现两个线程的同步.请参看下面的列子. using System; using System.Collections.Generic; using S ...

  5. AJax和JQ的结合使用

    第一种经典模式 <%-- Created by IntelliJ IDEA. User: 60590 Date: 2019/12/4 Time: 16:08 To change this tem ...

  6. Java 用Jackson进行json和object之间的转换(并解决json中存在新增多余字段的问题)

    1.添加jackson库 如果是maven工程,需要在pom.xml中添加jackson的依赖: <dependency>      <groupId>com.fasterxm ...

  7. (尚022)Vue案例_初始化显示(十分详细!!!)

    项目结构目录 所需资料: comment_page文件夹: ====================================================================== ...

  8. BZOJ 3166: [Heoi2013]Alo 链表+可持久化trie

    链表这个东西非常好用啊 ~ code: #include <bits/stdc++.h> #define N 50010 #define inf 2000400000 #define se ...

  9. C++中继承 声明基类析构函数为虚函数作用,单继承和多继承关系的内存分布

    1,基类析构函数不为虚函数 #include "pch.h" #include <iostream> class CBase { public: CBase() { m ...

  10. 改变Ubuntu命令行 用户名显示前缀

    改变Ubuntu命令行 用户名显示前缀 1.修改命令 [root@daokr ubuntu]#vim ~/.bashrc 修改第 56行 注释掉原来 # PS1='${debian_chroot:+( ...