Caffe学习系列——5使用R-CNN进行目标检测

RCNN是一个比较经典的目标检测算法,由此后续衍生出的一系列fast-rcnn、faster-rcnn都对目标检测产生了很大的影响。对于RCNN、Fast-RCNN、Faster-RCNN的介绍请看我的这篇博文()
本文主要介绍如何使用caffe实现RCNN目标检测,这也是caffe文档中Notebook Examples的倒数第二个例子,链接在此: http://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/detection.ipynb在这个例子,预训练模型是基于Imagnet数据集的,并在ILSVRC13上进行了微调。一共有200个类。需要注意的是:本例中一个原始数据对应的所有SVM分类的得分是没有概率校准和类间比较的。并且使用现成的模型只是为了简便,并不是完整的R-CNN模型。
首先,我们需要做一些准备工作:

Read More

目标检测方法——从RCNN、Fast-RCNN到Faster-RCNN

什么是目标检测?目标检测主要是明确从图中看到了什么物体?他们在什么位置。传统的目标检测方法一般分为三个阶段:首先在给定的图像上选择一些候选的区域,然后对这些区域提取特征,最后使用训练的分类器进行分类。
1. 区域选择
这一步是为了对目标进行定位。传统方法是采用穷举策略。由于目标可能在图片上的任意位置,而且大小不定,因此使用滑动窗口的策略对整幅图像进行遍历,而且需要设置不同的长宽。这种策略虽然可以检测到所有可能出现的位置,但是时间复杂度太高,产生的冗余窗口太多,严重影响后续特征的提取和分类速度的性能。
2. 特征提取
提取特征的好坏会直接影响到分类的准确性,但又由于目标的形态多样性,提取一个鲁棒的特征并不是一个简单的事。这个阶段常用的特征有SIFT(尺度不变特征变换 ,Scale-invariant feature transform)和HOG( 方向梯度直方图特征,Histogram of Oriented Gradient)等。
3. 分类器
主要有SVM,Adaboost等
综上所述,传统目标检测存在两个主要问题:一个是基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余;而是手工设计的特征对于多样性没有很好的鲁棒性。

Read More

Caffe学习系列——4使用训练好的模型进行分类

本文主要介绍如何用训练好的模型进行分类,如何训练模型可以查看上一篇博文,本文用到的模型即上一篇博文训练好的模型。当然如果你还没有自己训练模型,也可以使用Caffe官网提供的 利用imagenet图片和caffenet模型训练好的一个caffemodel。
首先需要准备三个文件:

  1. Caffemodel文件
    可以直接在浏览器里输入地址下载,也可以运行脚本文件下载。下载地址为:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel
    文件名称为:bvlc_reference_caffenet.caffemodel,文件大小为230M左右,为了代码的统一,将这个caffemodel文件下载到caffe根目录下的 models/bvlc_reference_caffenet/ 文件夹下面。也可以运行脚本文件进行下载:

    Read More

Caffe学习系列——3Fine-tuning微调网络

本文主要介绍如何在Caffe上微调网络,来适应我们自己特定的新任务。一般来说我们通常都是需要在一些特定的领域里来识别分类,比如服装类、标志等等,但是深度学习中数据集的准备一直是最令人头疼的一件事。我们很难拿到大量的数据。在这种情况下重新训练的一个新的网络是比较复杂,且参数也不好调整,因此数据集为图像时,通过fine-tuning微调是一个比较理想的选择。Fine-tuning的整体思路就是,ImageNet是一个千万级的图像数据库,现已经在ImageNet上训练了一个很牛的网络,我们可以把pretrain的网络拿过来,然后只重新训练最后几层。意思就是以前需要分成1000类,现在只需要识别是狗还是猫,或者衣服是上衣还是裤子。故就只需要把最后一层softmax从40961000的分类器变成40922的分类器。微调网络需要一个已初始化的模型参数文件,这里不同于用某某网络训练自己的数据集方法。后者在训练过程中,这些参数都被随机的初始化。而fine-tuning是在已训练好的参数的基础上,根据我们的分类识别任务进行特定的微调。总而言之,fine-tuning这种策略目前在应用中是非常好使的。接下来介绍一下fine-tuning流程以及简单介绍一下该如何调参。

Read More

Caffe学习系列——2用AlexNet训练自己的数据集

本文主要介绍AlexNet网络结构以及如何使用AlexNet来训练自己的数据集。
讲到AlexNet,就不得不提ImageNet以及ImageNet LSVRC大赛,ImageNet是一项大型计算机视觉系统识别项目,是目前世界上图像识别最大的数据库,截止2016年,ImageNet提供超过10亿张手工标记的图片。从2010年,ImageNet组开始一年一度的the ImageNet Large Scale Visual Recognition Challenge (大规模视觉识别大赛,简称ILSVRC)。本文要介绍的AlexNet就是由Alex提出的网络结构模型,此网络结构赢得了2112届的冠军,同时刷新了image classification的记录,奠定了deep learning在计算机视觉中的地位。
Alex是一个大型深度卷积神经网络,其优势在于:网络增大(5个卷积层+3个全连接层+1个softmax层),同时解决过拟合(dropout,data augmentation,LRN),并且利用多GPU加速计算,在ILSVRC-2012大赛中,以top-5测试误差率15.3%取得了胜利。

Read More

Caffe学习系列——1介绍与安装过程

Caffe是一个高效,模块化的深度学习框架,其作者是毕业于UC Berkeley的博士贾扬清。Cafe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口;可以在CPU和GPU(CPU与GPU的区别)之间无缝切换。
Caffe的优势:

  1. 上手快:模型与相应优化都是以文本形式标示,方便立即上手以及调参
  2. 速度快:能够运行最优化的模型与海量数据
  3. 模块化:方便扩展到新的任务和设置上。可以使用Caffe提供的各层类型来定义自己的模型
  4. 开放性:可以基于公开的代码和参考模型实现自己的模型
  5. 社区好:可以通过BSD-2参与开发与讨论

学习Caffe可以看看网提供的两个文档:一个是DIY Deep Learning for Vision with Caffe,这是伯克利介绍caffe的PPT,可以快速的了解什么是Caffe。还有一个是Model Zoo,这是目前基于Caffe上实现的模型与深度学习例子,可以大致浏览一下。
本文主要分三个部分:第一个部分是参照官网进行的安装过程,包括安装过程中遇到的问题及解决方法,第二个部分是对Caffe整个结构的介绍。

Read More

Hadoop伪分布式搭建

准备Linux环境

  1. 点击VMware快捷方式,右键打开文件所在位置,然后双击vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip 设置网段:192.168.8.0 子网掩码:255.255.255.0 -> apply -> ok
    回到windows –> 打开网络和共享中心 -> 更改适配器设置 -> 右键VMnet1 -> 属性 -> 双击IPv4 -> 设置windows的IP:192.168.8.100 子网掩码:255.255.255.0 -> 点击确定
    在虚拟软件上 –My Computer -> 选中虚拟机 -> 右键 -> settings -> network adapter -> host only -> ok

    Read More

HDFS介绍

分布式文件系统是管理网络中跨多台计算机存储的文件系统。HDFS(Hadoop Distributed File System)以流式数据访问模式来存储超大文件,运行于商用硬件集群上。其中流式数据访问指的是一次写入、多次读取是最高效的访问模式。
HDFS具有以下几大特性:

  1. 高容错性
  2. 高吞吐量
  3. 超大数据集
  4. 流式数据访问
  5. 移动计算优于移动数据
  6. 轻便访问异构的软硬件平台

Read More

Hadoop简介

Hadoop是Apache基金会下的一个开源分布式计算平台,可以充分利用集群的计算和存储能力,完成海量数据的处理。Hadoop采用分布式存储方式来提高读写速度和扩大存储容量;采用MapReduce整合分布式文件系统上的数据,保证高速分析处理数据;与此同时还采用存储冗余数据来保证数据的安全性。经过几年的快速发展,Hadoop现在已经发展为包含多个相关项目的软件生态系统。狭义的Hadoop核心只包括Hadoop Common、Hadoop HDFS和Hadoop MapReduce三个子项目。而如今的Hadoop软件生态圈还包括 Avro、ZooKeeper、Hive、Pig和Hbase等项目、构建在这些项目之上,面向具体领域、应用的Machout、X-Rime、Crossbow和Ivory等项目,以及Chukwa、Flume、Sqoop、Oozie和Karmasphere等数据交换、工作流和开发环境这样的外围支撑系统。

Read More

Java内存管理及垃圾回收机制

Java语言的一大特点就是会自动进行垃圾回收处理,不像C++语言,程序员必须对内存分配与管理亲力亲为,当内存使用完后必须手工释放内存空间,否则就会引起内存泄漏,严重时甚至导致程序瘫痪。而java的垃圾回收机制大大减轻开发人员的工作量,但也增加了软件系统的负担。本文首先介绍java的内存管理,包括内存的分区,使得能够更好地理解垃圾回收机制。
本文是在看了《Think in JAVA》、《JAVA核心技术卷》以及相关的一些博客后的总结笔记,纯属个人理解。若有错误,望指出。文末会贴出参考资料的链接。

Read More