最近把一个ssd网络的net..prototxt网络结构和自己生成的hdf5格式数据一起做训练时发现经常报错,因为ssd中一些层在caffe中并没有实现,需要自己写相应的.cpp,.cu文件重新编译,比较麻烦,而大家通常训练caffe-ssd都是基于原作者公开的代码训练的,该代码中实现了这些层,于是把原作者代码跑了一遍.

我的机器是ubuntu16.04,装有两块GTX 1080TI 的显卡,一共20多个G显存,opencv是自己编译的3..3.0版本.

因为我机器主目录下已经有个装好的caffe了,所以再次在另一个目录下载该源码,该源码下载后编译也能import caffe,其他caffe项目也可以使用,如果没有装caffe,那就下载编译这个源码就能当做caffe使用,同时也能训练ssd.

1,先进入我这次操作的主目录(/home/user/yjf),下载源码

git clone https://github.com/weiliu89/caffe.gitcd caffegit checkout ssd(切换到ssd分支)

这时候我的工作目录为 /home/user/yjf/caffe.然后执行如下操作

cp Makefile.config.example Makefile.config

然后参考我前面博客说过的如何搭建caffe环境文章中的说法更改Makefile和Makefile.config文件,并参照里面提到的方法进行编译(我感觉caffe不管是cpu还是gpu编译起来其实很简单的,我一般30分钟就能弄好,没有大家想象中的有难度或者难装,我用的python2.7,opencv3.3.0,cudnn7.3, cuda8.0,我使用cuda9.0报错,看来cuda9.0不匹配)

2,下载预训练模型,这个模型在我们训练ssd的时候作为初始化模型,我放在百度云了,https://pan.baidu.com/s/11JcopVftsLELIUSYmt-8Bw,大家下载即可.下载后放在/home/user/yjf/caffe/models/VGGNet目录,如果没有VGGNet目录就新建一个.

3,下载VOC2007和VOC2012数据集,放到/caffe/data目录下,并解压(其实没多大,几个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,把下载的数据转成训练需要的lmdb文件,在/home/user/yjf/caffe目录下执行

./data/VOC0712/create_list.sh当然,可以会报错的,打开这个文件,把第一行的root_dir换成root_dir=/home/user/yjf/caffe/data/VOCdevkit(你下载的VOCdevkit在哪里这个就换成那个目录就好,其他地方不改)

我改了原来代码中的3,5,41行,分别加了#yjf注释,我的放在这里,可以下载看下https://pan.baidu.com/s/1AETTYyjyKAnuKi27kE12Og

然后进行重新执行.执行结束后把data/VOC0712/create_data.sh里面的第七行root_dir换成root_dir=/home/user/yjf/caffe,注释掉cur_dir,data_root_dir="$root_dir/data/VOCdevkit")

然后执行./data/VOC0712/create_data.sh(执行前先在script/crerate_annoset.py中添加如下

import sys

sys.path.insert(0,'/home/user/yjf/caffe/python'))

5.然后在caffe目录下执行

python examples/ssd/ssd_pascal.py开始ssd训练,(训练过程可能报错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目录)目标是让程序知道caffe在哪里.

另外,打开caffe/examples/ssd/ssd_pascal.py,看到gpus='0,1,2,3' 该成gpus='0',是指定训练使用的gpu,我用的0,然后python caffe/examples/ssd/ssd_pascal.py开始训练

(题外话:一般caffe需要net.prototxt和solver.prototxt,train.sh三个训练模型对吧,这次好像没看到,其实啊,caffe的这些net.prototxt网络结构文件是一般通过.py文件生成的,该代码中也是在训练的代码中先生成了这些东西,这些东西在/home/user/yjf/caffe/models/VGGNet/VOC0712/SSD_300x300目录下放着,train.prototxt和test.prototxt就是训练和测试的网络结构,同时人家还生成了deploy.prototxt文件,而solver.prototxt中存放了训练的超参数,snapshot: 8000指定训练8000个iters保存一次,我嫌弃时间太长,我想100次保存一个先看下结果,不过没到怎么改,然后我就等训练代码跑起来后在把程序停掉,这样就生成了这些文件,我直接在solver.prototx文件中改snapshot为100,然后写了一个train.sh文件,内容如下:

#!/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目录直接执行sh ./tran.sh就开始训练了,训练的模型根据指定目录也在这个目录,大家可以不用这样,仅供参考

题外话结束####)

6,测试训练结果

在caffe目录执行

python examples/ssd/score_ssd_pascal.py,执行前先在该程序中的import caffe之前加上

import sys

caffe_root = '/home/user/yjf/caffe/'

sys.path.insert(0,caffe_root+'python')

目标是为了让程序找到caffe安装目录.​

Test net outpu的值一般为0.7左右吧,我这个值低是因为我刚刚开始训练,我跑了100个iters就把模型保存起来试了一下,使用效果肯定低,模型需要跑二十多万个iters这个值就上去了.

源码提供了在视频和摄像头上的测试,

在视频上测试

python examples/ssd/ssd_pascal_video.py

直接运行这段代码就可以在视频预测,默认视频路径为examples/videos下面有一个视频,效果如下

​在摄像头上测试

python examples/ssd/ssd_pascal_webcam.py如果报错就按照第6点在代码中添加caffe的目录就好

7,预测

caffe目录执行python examples/ssd/ssd_detect.py --model_weights ../VGG_VOC0712_SSD_300x300_iter_120000.caffemodel(此处为你训练的模型地址) --image_files /home/user/yjf/caffe/examples/images/fish-bike.jpg即可在caffe目录生成一个detect_result.jpg图片为检测结果,预测之前在该代码开头部分参照第6点添加caffe目录,要不然报错

经过一个晚上的训练,用新模型预测一下,效果如下图所示:

​至此caffe-ssd测试结果,接下来将讲解使用直接的数据训练ssd

caffe安装_目标检测之caffe-ssd模型训练与测试相关推荐

  1. python ssd目标检测_目标检测算法之SSD的数据增强策略

    前言 这篇文章是对前面<目标检测算法之SSD代码解析>,推文地址如下:点这里的补充.主要介绍SSD的数据增强策略,把这篇文章和代码解析的文章放在一起学最好不过啦.本节解析的仍然是上篇SSD ...

  2. caffe框架下目标检测——faster-rcnn实战篇操作

    原有模型 1.下载fasrer-rcnn源代码并安装 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 1) ...

  3. 基于深度学习的目标检测算法:SSD——常见的目标检测算法

    from:https://blog.csdn.net/u013989576/article/details/73439202 问题引入: 目前,常见的目标检测算法,如Faster R-CNN,存在着速 ...

  4. 实时检测input的长度_目标检测——TinyYOLOv3

    目标检测--从简单的开始!进击的YOLO! 目标检测--Backbone与Detection head 目标检测--搭建更好更快的YOLO! 目标检测--制作GroundTruth!开始训练! 目标检 ...

  5. 《南溪的目标检测学习笔记》——模型预处理的学习笔记

    1 介绍 在目标检测任务中,模型预处理分为两个步骤: 图像预处理:基于图像处理算法 数值预处理:基于机器学习理论 关于图像预处理,请参考<南溪的目标检测学习笔记>--图像预处理的学习笔记 ...

  6. 目标检测 YOLOv5 - 如何提高模型的指标,提高精确率,召回率,mAP等

    目标检测 YOLOv5 - 如何提高模型的指标,提高精确率,召回率,mAP等 flyfish 文中包括了YOLOv5作者分享的提高模型指标小技巧和吴恩达(Andrew Ng)在做缺陷检测项目( ste ...

  7. Swim-Transform V2:用于目标检测,视觉大模型不再是难题(附源代码)

    关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2111.09883.p ...

  8. 【人工智能与机器学习】——Keras编程分别实现人脸微笑和口罩数据集的识别模型训练和测试(卷积神经网络CNN) + 实时分类微笑和口罩识别检测

    机器学习练习目录 一.理解人脸图像特征提取的各种方法的特征 1.HOG 2.Dlib 3.卷积神经网络(CNN) 二.卷积神经网络(CNN)笑脸数据集(genki4k)正负样本的划分.模型训练和测试的 ...

  9. R语言使用lm构建线性回归模型、并将目标变量对数化实战:模型训练集和测试集的残差总结信息(residiual summary)、模型训练(测试)集自由度计算、模型训练(测试)集残差标准误计算

    R语言使用lm构建线性回归模型.并将目标变量对数化实战:模型训练集和测试集的残差总结信息(residiual summary).模型训练(测试)集自由度计算.模型训练(测试)集残差标准误计算(Resi ...

最新文章

  1. 深度学习算法实践(基于Theano和TensorFlow)
  2. java课程第七天,匿名内部类以及异常处理
  3. Behavior Designer笔记
  4. .net Core 3 preview 3试用 WPF,winform桌面开发
  5. feign接口调用出现连接超时
  6. e3d教程做logo教程_看了教程还是不会做平面设计?关键的方法给你揭秘!附450集教程...
  7. jQuery学习笔记02:核心部分
  8. 千锋中级Python视频百度云
  9. python获取某天的属于第几周等时间问题
  10. iPhone应用可用性的试探性分析
  11. Veeam backup job(3)
  12. MySQL最好的写的_mysql中写sql的好习惯
  13. ip定压终端服务器是什么,IP网络功放 IP网络物联功放 IP网络联机功放 IP网络数字定压功放...
  14. matlab计算恒向线航程
  15. 贪心法 第3关:将真分数用埃及分数之和表示
  16. 使用python3+pyqt5实现图片识别文字工具
  17. 台式计算机中的CPU指的是,电脑硬件认识之什么是电脑的CPU(cpu详细介绍)
  18. Android开发--WIFI输入密码Dialog的实现
  19. 对 原子性,可见性的理解
  20. win10不能访问samba共享问题的解决

热门文章

  1. 问题: 将N个元素使用push_back插入到vector中, 求push_back操作的复杂度。
  2. mysql 更新 字段 递增_MySQL使用递增变量更新字段
  3. 一文教你使用java开发一款推箱子游戏
  4. javaScript学习笔记之break 和 continue 语句对比
  5. java分页 jar_零基础学java之javaEE,分页
  6. java freemarker 分页_10小时入门java开发04 springboot+freemarker+bootstrap快速实现分页功能...
  7. 计算机上的usb设备是什么东西,联接一个USB的线在电脑桌上方便插U盘的东西叫什么?...
  8. Vue 封装的组件生命周期钩子
  9. 8、路由 router
  10. 消息提示框-事件冒泡