0

_rebuild_tensor_v2?pytorch版本间模型兼容性脱坑实践

最近使用Pytorch 0.4.0 进行模型训练,之后使用一个转模型的工具时,报了一个错,就是标题里面的_rebuild_tensor_v2相关的错误。最后发现是本地使用的pytorch的版本是0.3.0,和0.4.0模型上不兼容。各论坛上的解决方案都是说pytorch版本不向后兼容,建议升级pytorch。无奈我这里不方便升级pytorch版本。那么问题就来了,有没有什么不需要修改pytorch源码,或是不升级pytorch,又能让老版本的pytorch读取新版本模型的方案呢? read more

0

CNN的目标检测概述(三)

本次介绍的是Fast R-CNN,与之前的RCNN和SPPNet不同,Fast R-CNN是一个清晰和快速的目标检测的框架。在训练和测试的速度上都远超过上述两种方法。同时,Fast R-CNN的训练是一次性的端到端的训练,同时训练的分类和回归两个任务。极大的简化的训练的流程。

项目代码:https://github.com/rbgirshick/fast-rcnn

三、Fast R-CNN

1)R-CNN与SPPNet的不足

R-CNN在目标检测中有很好的准确率,但是这个方法本身仍有很多的问题。

  1. 训练过程是多级的。R-CNN的训练分成三个部分,首先是finetune一个网络(目标检测的类别和ImageNet不一样)。之后是使用SVM进行目标的分类的训练。最后是使用feature map来进行目标的bounding-box的回归训练。
  2. 训练过程费时费空间。SVM和回归两个任务,需要存储目标的特征,需要很多空间。网络的训练过程很慢。
  3. 测试速度太慢。需要对每个proposal进行前馈,耗时太长。速度只有47s / image。

SPPNet可以加速R-CNN,在SPPNet中,在卷积的部分直接前馈整张图片,之后对于每个proposal,计算出它在feature map上的位置,然后使用SPP Pooling的方式,得到定长的特征向量。使得测试时间大大缩短。但SPPNet也有很多的问题。 read more

0

CNN的目标检测概述(二)

这次介绍的是2015年的Kaiming He的一篇论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition,以下简称SPP-net。

SPP-net的主要贡献是提出了一种新的pooling的方式,spatial pyramid pooling,简称为SPP。使用这种pooling的方式,可以将任意大小的输入feature map给pooling到固定的大小。使用这种pooling的方式,最终在分类和检测任务上均有一定的效果。

二、SPP-net

1)问题描述

在介绍SPP这个pooling方式之前,我们先说一下,为什么需要这种特殊的pooling。 read more

0

CNN的目标检测概述(一)

在2012年的ImageNet中,AlexNet拔得头筹。之后,CNN成为了图像识别中的一大利器。

在目标检测中引入CNN,开山之作就是2013年的Rich feature hierarchies for accurate object detection and semantic segmentation,之后简称R-CNN。

一、R-CNN

1)算法原理

R-CNN中,将目标检测分成两步来实现:

  1. 首先是生成Region proposals,也就是候选框。有许多的基于图像的低维特征生成候选框的算法,例如selective search等。
  2. 训练一个分类和回归的网络。这个网络可以根据候选框的区域的图片,判断这个图片的类别,以及它应该回归到的位置。

2)检测过程

这样,在具体的一张图片的目标检测的时候,我们可以通过下面的过程来得到结果:

  1. 对于给定一张图片,通过算法得到大量的候选框(2k个左右)。
  2. 将候选框的图片裁剪出,然后输入到CNN网络中。
  3. 网络的输出为分类的结果和回归的结果。然后我们就知道这个区域是不是目标,如果是,计算出它的回归的位置。
  4. 得到大量的有类别的框,通过NMS算法,得到最终的目标的框。

3)网络训练

对于目标检测这个任务,我们现有的标注数据其实并不多。所以通常都是使用ImageNet等大的公开的数据进行预训练,或者直接使用预训练好的模型在finetune。 read more

10

基于Caffe的Large Margin Softmax Loss的实现(中)

小喵的唠叨话:前一篇博客,我们做完了L-Softmax的准备工作。而这一章,我们开始进行前馈的研究。

四、前馈

还记得上一篇博客,小喵给出的三个公式吗?不记得也没关系。

这次,我们要一点一点的通过代码来实现这些公式。小喵主要是GPU上实现前后馈的代码,因为这个层只是用来训练,GPU速度应该会快一点。

我们首先要进行一般的FC层的前馈,因为LM_FC的前馈只是修改了一般的FC中的若干个值,而大部分的值都是没有修改过的。

这样就计算完了一个普通的FC的前馈。 read more

17

基于Caffe的Large Margin Softmax Loss的实现(上)

小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果。这次呢,主要讲述一个比较新的论文中的方法,L-Softmax,据说单model在LFW上能达到98.71%的等错误率。更重要的是,小喵觉得这个方法和DeepID2并不冲突,如果二者可以互补,或许单model达到99%+将不是梦想。

和上一篇博客一样,小喵对读者做了如下的假定: read more

38

基于Caffe的DeepID2实现(下)

小喵的唠叨话:这次的博客,真心累伤了小喵的心。但考虑到知识需要巩固和分享,小喵决定这次把剩下的内容都写完。

四、数据的重整,简单的划分

前面的Data层用于生成成对的输入数据,Normalization层,用于将feature归一化,那么之后是不是就可以使用ContrastiveLoss层进行训练了呢?

且慢,还差一步。

ContrastiveLoss层要求有3个bottom:feature1、feature2以及表示对位的feature是否为同一个identity的label。

我们现在得到的feature却是所有的都在一起,data层直接得到的label也和这里要求的label不同。因此务必要对数据进行一次重整。 read more

10

基于Caffe的DeepID2实现(中)

  小喵的唠叨话:我们在上一篇博客里面,介绍了Caffe的Data层的编写。有了Data层,下一步则是如何去使用生成好的训练数据。也就是这一篇的内容。

二、精髓,DeepID2 Loss层

DeepID2这篇论文关于verification signal的部分,给出了一个用于监督verification的loss。

verification_loss

其中,fi和fj是归一化之后的特征。

当fi和fj属于同一个identity的时候,也就是yij=1时,loss是二者的L2距离,约束使得特征更为相近。

当fi和fj不属于同一个identity的时候,即yij=-1,这时的loss表示什么呢?参数m又表示什么? read more

24

基于Caffe的DeepID2实现(上)

小喵的唠叨话:小喵最近在做人脸识别的工作,打算将汤晓鸥前辈的DeepID,DeepID2等算法进行实验和复现。DeepID的方法最简单,而DeepID2的实现却略微复杂,并且互联网上也没有比较好的资源。因此小喵在试验之后,确定了实验结果的正确性之后,才准备写这篇博客,分享给热爱Deep Learning的小伙伴们。

能够看到这篇博客的小伙伴们,相信已经对Deep Learning有了比较深入的了解。因此,小喵对亲作了如下的假定: read more

0

从0到1,手把手教你配置Caffe环境

  小喵的唠叨话:之前小喵也说过,自己主要是学习图像方面的深度学习算法的,深度学习可以理解为神经网络的拓展,是近年来最火的一项技术。小喵学得不好,就不在这里卖弄了。图像中,最常用到的是CNN模型,也就是卷积神经网络(Convolutional Neural Networks)。实现CNN有许多框架,Caffe,MXNet,Tensor Flow,ConvNet等。这次主要教给大家怎么从0开始,配置自己的Caffe环境。

由于是从0开始安装,如果有什么软件是大家已经装好的,就可以自行跳过。小喵的电脑是CentOS7,64位。主要按照下列的软件顺序进行安装: read more