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

最近把一个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下面有一个视频,效果如下

1c1310f2f1ef4f7b94c1d310dee50e4e
77dfd3617b834a09b9b7b0cd9de36652

57e78a99706e4ed4afaa919961073fce

​在摄像头上测试

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目录,要不然报错

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

551a9719c0d547ba87262a3262d29c00

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python之classmethod和staticmethod的区别

python中3种方式定义类方法,常规方式、classmethod修饰方式、staticmethod修饰方式。 class A(object):def foo(self, x):print(调用foo函数 (%s, %s)%(self, x))print(self:, self)classmethoddef class_foo(cls, x):print(调用class_foo函数 (%s, %s) % (cls, x))…

php开发微信图灵机器人

本着开源为原则,为这个世界更美好作出一份共享,我就给大家做个指路人,如果实用,记得给提供开源的朋友一些鼓励。 简单介绍一下实现思路,使用swoole扩展接管php运行,由于swoole只能在类UNIX上运行&#xff0…

jQuery源码的基础知识

序言:DOM addEventListener attachEvent与addEventListener区别适应的浏览器版本不同,同时在使用的过程中要注意attachEvent方法 按钮onclickaddEventListener方法 按钮click一、arguments对象: 1、arguments 属性 为当前执行…

python如何读取数据并输出为表格_Python实现将数据库一键导出为Excel表格的实例...

数据库数据导出为excel表格,也可以说是一个很常用的功能了。毕竟不是任何人都懂数据库操作语句的。 下面先来看看完成的效果吧。 数据源导出结果依赖 由于是Python实现的,所以需要有Python环境的支持 Python2.7.11 我的Python环境是2.7.11。虽然你用的可…

android手机连接无线路由器上网设置,手机连接无线网络怎么设置?手机Wifi无线网设置教程...

随着智能手机无线上网的流行,如今很多家庭都会组建Wifi无线网络,目前组建Wifi网络,大致有两种情况,一种是使用无线路由器,另外一种是将笔记本变身无线无路由器,从而实现智能手机也可以免费Wifi上网&#xf…

通俗易懂了解Vuex

1.前言 在使用Vue进行开发的时候,关于vue组件通信的方式,除了通俗易懂了解Vue组件的通信方式这篇博文谈到三种通信方式,其实vue更提倡我们使用vuex来进行组件间的状态管理以及通信问题。Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。…

netcore 内存限制_.NET Core 和 Serverless 构建飞速发展的架构

(给DotNet加星标,提升.Net技能)英文:samueleresca.net译文:cnblogs.com/Rwing/p/fast-growing译者:Rwing本篇文章的第一部分介绍了有关Serverless计算的基本概念。第二部分展示了如何构建 .NET Core的Lambda函数,其中使…

更多Requests的小技巧以及总结

对于requests的爬虫库,我们已经学到了尾声。 我们在这儿可以挖掘出更多的requests的使用小技巧。 一.cookie对象与字典的转换 在爬取目标cookie的时候,我们可以将cookie信息进行简化处理。 现在做一个简单的代码验证看看,使用百度的cookies&a…

进入Undertow Web服务器

随着Java EE 7的到来以及处理诸如Web Sockets API和HTTP升级(例如EJB over HTTP)之类的高级功能的要求,WildFly开发团队已经做出了重要决定。 在长期致力于JBoss Web服务器(Apache Tomcat的一个分支)之后,新…

centos 重启网卡_CentOS6 网络管理之网卡配置及简单路由设置

CentOS6中关于网络配置的命令有很多,本文将介绍几个平时最长用的几个命令,以及网卡IP地址的配置和简单路由配置。1、经常使用的查看IP地址命令为 ifconfig,不跟参数的情况下默认查看所有已启用的网卡信息,如下图所示:如…

绝地求生 android版支持蓝牙吗,《绝地求生》吃鸡必须要顶配吗?这些配置也能畅玩...

导读《绝地求生》火爆之余,很多人在想要加入这款游戏时,却被游戏传闻中的超高配置要求给吓到了,然后心生退意。事实上,吃鸡的配置要求真的这么高吗?其实并不是!传言1:8G内存不能玩这则传言的说法…

《美团机器学习实践》高清PDF+思维导图+美团算法团队

在美团的搜索、推荐、计算广告、风控、图像处理等领域,相关的人工智能技术得到广泛的应用。《美团机器学习实践》包括通用流程、数据挖掘、搜索和推荐、计算广告、深度学习以及算法工程6大部分内容,全面介绍了美团在多个重要方面对机器学习的应用。通过本…

Java 8中的java.util.Random

Java 8中java.util.Random类的简洁功能之一是对其进行了改进,现在可以返回随机的数字流 。 例如,要生成一个介于0(含)和1(不含)之间的随机双精度数的无限流: Random random new Random(); Do…

appium判断元素是否存在_Python+selenium自动化之判定元素是否存在

在测试过程中,我碰到过这类的问题,使用find_element却找不到某个元素而产生异常,这就需要在操作某个元素之前判定该元素是否存在,而selenium中没有判定元素是否存在的方法,或者判定相同的元素有几个,需要操…

棋盘DP三连——洛谷 P1004 方格取数 洛谷 P1006 传纸条 Codevs 2853 方格游戏

P1004 方格取数 题目描述 设有N $\times N$NN的方格图(N $\le 9$)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00。如下图所示(见样例): A0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 …

html一张图片用两种滤镜,HTML图片CSS滤镜—灰度效果

this.p{ m:2,b:2,loftPermalink:,id:fks_082065087087086069087082087095083084084067083083082065,blogTitle:HTML图片CSS滤镜—灰度效果,blogAbstract: ,blogTag:html,blogUrl:blog/static/72507542200941384735902,isPublished:1,istop:false,type:2,modifyTime:13288029920…

怎么通过media foundation将图像数据写入虚拟摄像头_千倍成本压缩!特斯拉开发虚拟激光雷达,替代最贵自动驾驶传感器...

「谁用激光雷达,谁完蛋!」在去年特斯拉举办的 Autonomy Day 上,特斯拉 CEO Elon Musk 言辞激烈地炮轰激光雷达。「昂贵的传感器是不必要的,这就像是一大堆昂贵的附属品。」「像阑尾一样。一个阑尾不好——那么,一大堆阑…

使用Drools 6.0进行部署

KieScanner 6.0 KieScanner取代了5.x KnowledgeAgent。 它使用嵌入式Maven允许在运行时解析和检索jar。 6.0应用程序现在可以轻松支持依赖关系和可传递依赖关系; 使用众所周知的Maven语义进行版本控制。 它允许在类路径上进行部署,也可以在运行时动态进行…

activemq安装与配置_ActiveMQ(消息队列)从入门到了解

一、 ActiveMQ 简介 1 什么是 ActiveMQ ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个 完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现,尽管 JMS 规范出台已经是很久 的事情了,但是 JMS 在当…

智联招聘简历如何导出html,如何将拉勾网(智联招聘)的预览简历导出来

最近在整理简历的时候发现拉勾网/智联招聘上面的预览简历是那么简洁漂亮,可是当我想把他导到本地,发pdf文件给企业时却只能是word,那么的难看,摸索了一会儿找到了一种比较好的方法可以得到预览的简历。1.另存为html文件在这里插入…