
深度学习
文章平均质量分 54
hjimce
追求实现文献算法的快感,追求学会一个新算法的充实感
展开
-
深度学习(十五)基于级联卷积神经网络的人脸特征点定位
本篇博文主要讲解2013年CVPR的一篇利用深度学习做人脸特征点定位的经典paper:《Deep Convolutional Network Cascade for Facial Point Detection》,论文的主页为:http://mmlab.ie.cuhk.edu.hk/archive/CNN_FacePoint.htm 。网页提供了训练数据、测试demo,但是我却没有找到源码,所以只能自己写代码实现。这篇paper是利用深度学习搞人脸特征点定位的开山之作,想当年此算法曾经取得了state-of原创 2015-11-21 00:08:21 · 41859 阅读 · 37 评论 -
深度学习(五十七)tensorflow andorid yolo物体检测测试
一、修改tensorflow/workspace文件,取消android相关注释# Uncomment and update the paths in these entries to build the Android demo.android_sdk_repository( name = "androidsdk", api_level = 24, # Ensure t原创 2017-05-17 14:50:22 · 4489 阅读 · 8 评论 -
深度学习(五十九)mxnet移植至android
一、android移1、$NDK/build/tools/make_standalone_toolchain.py \ --arch arm --api 21 --install-dir /tmp/my-android-toolchain2、git clone https://github.com/xianyi/OpenBLAS.gitcd OpenBLASmake TARGET=AR原创 2017-04-20 19:02:00 · 6664 阅读 · 3 评论 -
深度学习(五十八)caffe移植至mxnet
1、模型转换2、外部引用set(USE_CUDA OFF)set(USE_CUDNN OFF)add_subdirectory("./3dparty/mxnet/")target_link_libraries(faceattribute ${OpenCV_LIBS} mxnet)#链接mxnet库原创 2017-04-18 15:43:22 · 4359 阅读 · 0 评论 -
从零开始编写深度学习库(一)SoftmaxWithLoss CPU编写
一、C++实现void softmax_function(const Eigen::MatrixXf &inputs,Eigen::MatrixXf &softmax) { softmax = inputs.array().exp(); Eigen::VectorXf sorfmax_rowsum = softmax.rowwise().sum(); softmax = softmax.ar原创 2017-05-11 11:15:23 · 3751 阅读 · 0 评论 -
从零开始编写深度学习库(四)Eigen::Tensor学习使用及代码重构
一、矩阵大小可变构造函数:Class Tensor// Create a tensor of rank 3 of sizes 2, 3, 4. This tensor owns// memory to hold 24 floating point values (24 = 2 x 3 x 4).Tensor t_3d(2, 3, 4);//构建一个float类型,3维矩阵,每一维的长度分别为原创 2017-05-12 11:00:54 · 17308 阅读 · 4 评论 -
从零开始编写深度学习库(三)ActivationLayer网络层CPU实现
一、C++实现: static void CActivationLayer::relu_forward(const Eigen::MatrixXf &inputs,Eigen::MatrixXf &outputs){ outputs = inputs.cwiseMax(0); } static void CActivationLayer::relu_backward(const Eigen原创 2017-05-11 17:32:20 · 2923 阅读 · 0 评论 -
从零开始编写深度学习库(二)FullyconnecteLayer CPU编写
一、C++实现 //y=x*w+b static void CFullyconnecteLayer::forward(const Eigen::MatrixXf &inputs, const Eigen::MatrixXf &weights, const Eigen::VectorXf &bais , Eigen::MatrixXf &outputs) { outputs = inpu原创 2017-05-11 15:04:28 · 2117 阅读 · 0 评论 -
深度学习(六十一)NNPACK 移植与实验
1、克隆下载NNPACK2、克隆下载pthreadpool,把其中的include、src文件,共三个文件分别复制到NNPACK,合并include、src文件3、下载fixdiv,把头文件复制到nnpack文件include中https://github.com/Maratyszcza/FXdiv原创 2017-03-25 18:19:19 · 5015 阅读 · 1 评论 -
深度学习(一)深度学习学习资料
持续更新原文地址:http://blog.youkuaiyun.com/hjimce/article/details/45421595作者:hjimce一、学习清单1、综合类(1)收集了各种最新最经典的文献,神经网络的资源列表:https://github.com/robertsdionne/neural-network-papers 里面包含了深度学习领域经典、以及最新最牛逼的算法,如果把这个列表学过一遍...原创 2015-05-01 20:22:28 · 32464 阅读 · 0 评论 -
深度学习(六十)网络压缩简单总结
增加L2权重增加L2权重可以让更多的权重,靠近0,这样每次修剪的比例大大增加。四、从结构上,简化网络计算,这些需自己阅读比较多相关文献,才能设计原创 2016-06-02 10:56:45 · 4713 阅读 · 4 评论 -
算法移植优化(六)tensorflow模型移植推理优化
1、3、bazel build tensorflow/python/tools:optimize_for_inference原创 2017-03-30 14:39:01 · 5990 阅读 · 1 评论 -
深度学习(二十六)Network In Network学习笔记
本篇博文主要讲解2014年ICLR的一篇非常牛逼的paper:《Network In Network》,过去一年已经有了好几百的引用量,这篇paper改进了传统的CNN网络,采用了少量的参数就松松击败了Alexnet网络,Alexnet网络参数大小是230M,采用这篇paper的算法才29M,减小了将近10倍啊。这篇paper提出的网络结构,是对传统CNN网络的一种改进(这种文献少之又少,所以感觉很有必要学习)。原创 2016-01-04 20:23:25 · 57214 阅读 · 38 评论 -
深度学习(十六)基于2-channel network的图片相似度判别
本篇博文主要讲解2015年CVPR的一篇关于图像相似度计算的文章:《Learning to Compare Image Patches via Convolutional Neural Networks》,本篇文章相比于经典的算法Siamese Networks 精度上有比较不错的提高。学习这篇paper的算法,需要熟悉Siamese Networks(经典老文献《Signature Verification Using a Siamese Time Delay Neural Network》)、以及大神何原创 2015-11-29 19:20:49 · 72216 阅读 · 15 评论 -
深度学习(二十五)基于Mutil-Scale CNN的图片语义分割、法向量估计
以为作者要采用mutil-task多任务特征学习的方法,用于估计单幅图像的深度、法向量、语义分割三个任务。还以为paper即将采用跟文献《Facial Landmark Detection by Deep Multi-task Learning》一样的思想,进行提高精度,最后仔细通读全文才知道,其实这三个任务是独立的,不是传说中的“多任务特征学习”,终于松了一口气(因为之前看《机器学习及其应用2015》这本书的第一章的时候,讲到了“鲁邦多任务特征学习”,觉得好难,看不懂,所以就对多任务特征学习有点害怕)。这原创 2015-12-31 23:04:30 · 19481 阅读 · 3 评论 -
深度学习(五十一)变分贝叶斯自编码器(上)
度生成模型比较常碰到的有三个:对抗网络、变分自编码、DBN。学习深度生成模型,涉及到比较多的贝叶斯学派观点,所以公式难免一大堆,贝叶斯观点:对于每个观测数据x,是从分布函数x~p(x)中采样得到。比如对于手写数字数据,我们可以把它看成是从某个28*28维度的某个未知分布函数中,进行随机采样得到的样本。这篇博文我们先讲解深度生成模型中的经典算法:变分自编码器,主要参考文献:《Auto-Encoding Variational Bayes》。原创 2017-02-23 19:15:02 · 6871 阅读 · 3 评论 -
深度学习(五十二)变分贝叶斯自编码器(下)
在生成模型中,假设样本数据X={xi}是根据某个随机过程进行采样得到,每个样本根据某个未知的概率分布函数相互独立采样得到,并且这个未知的概率分布取决于连续的潜变量Z。数据集采样过程分成两个步骤:(1)从先验分布函数采样样本zi;(2)根据条件概率分布函数,进而采样得到样本xi。即数据的生成过程如下:、表示是一个参数化的概率分布函数。然而真正的参数θ、Z都是未知的,而且这些分布函数对于真实数据分布都是相当复杂的。原创 2017-02-25 15:33:07 · 6127 阅读 · 1 评论 -
深度学习(五十三)对抗网络
再举个实际一点的例子:假设有A、B两个人,A是银行的职员,其工作职责是判别真假人民币,防止假钞泛滥;B是专门造假钞的,他的职责是要尽量的造出更加逼真的人民币,来谋取利益。A、B为了混口饭吃,将在不断的相互对抗中,提高自己的专业技能;比如A的辨真伪能力提高了,那么B就需要再次提高自己的造假钞能力,来骗过A,否则原创 2017-02-25 15:28:51 · 3858 阅读 · 0 评论 -
深度学习(五十五)tensorflow分布式训练
Cluster、Job、task概念:三者可以简单的看成是层次关系:task可以看成诗每台机器上的一个进程,每个机器一般只有一个task。多个task称之为job,job又有:ps、worker两种,分别用于参数服务、计算服务。如下图所示,可以看成有四台电脑,第一台电脑用于存储参数、共享参数、共享计算,可以简单的理解成内存、计算共享专用的区域,也就是ps job。另外三台电脑用于并行计算的,也就是原创 2017-03-10 15:02:41 · 42135 阅读 · 13 评论 -
深度学习(五十六)tensorflow项目构建流程
import tensorflow.nn.rnn_celllstm = rnn_cell.BasicLSTMCell(lstm_size)#创建一个lstm cell单元类,隐藏层神经元个数为lstm_sizestate = tf.zeros([batch_size, lstm.state_size])#一个序列隐藏层的状态值loss = 0.0for current_batch_原创 2016-07-13 17:05:03 · 35191 阅读 · 14 评论 -
多GPU切换
CUDA_VISIBLE_DEVICES=0 CUDA_VISIBLE_DEVICES=1,2原创 2017-04-02 12:51:00 · 2204 阅读 · 0 评论 -
深度学习(六十四)Faster R-CNN物体检测
在经典的RCNN中,物体检测的效果取得了State-of-the-art的效果,但是由于计算速度比较慢,后来在SPPNET、Fast R-CNN中,用卷积神经网络一次性提取一整张图片的特征图,然后在根据selective search在原始图片得到的搜索框,映射特征图上bbox,裁剪出feature map的bbox,然后在进行sotfmax物体分类。从而避免了RCNN中,需要2000次的CNN前向计算。在之前的RCNN、Fast-RCNN等算法中,都需要经过Region proposal相关算法进行原始原创 2017-06-17 19:53:21 · 10519 阅读 · 3 评论 -
深度学习(六十五)移动端网络MobileNets
1、L2 decay权重对精度的影响:根据文献介绍,在引入可分离卷积层的时候,建议不用用L2权重,对降低精度,于是做了如下实验:第二行是采用L2 weight decay为0.00005的权重,明显最高精度下降了接近2%2、速度对比:原创 2017-06-01 15:04:24 · 4537 阅读 · 0 评论 -
深度学习(六十二)SqueezeNet网络设计思想笔记
1、尽量用1*1的卷积核替代3*3的卷积核尽可能选择1*1的卷积核为主,因为1*1的卷积核比3*3的卷积核参数少了9倍。2、引入Squeeze layer,尽量减少每一层的输入特征图数量比如对于3*3的卷积层,参数的个数是:(number of input channels) * (numbe原创 2017-05-30 11:09:30 · 3307 阅读 · 3 评论 -
深度学习(七十)darknet 实现编写mobilenet源码
)parse.c文件中函数string_to_layer_type,添加网络层类型解析:if (strcmp(type, "[depthwise_convolutional]") == 0) return DEPTHWISE_CONVOLUTIONAL;(2)darknet.h文件中枚举类型LAYER_TYPE,添加网络层枚举类型:DEPTHWISE_CONVOLUTIONAL;(3)parse.c文件中函数parse_network_cfg添加网络层解析后进行构建: LAYER_T原创 2017-07-27 10:39:53 · 12612 阅读 · 23 评论 -
深度学习(六十九)darknet 实现实验 Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffma
原始模型大小64M:mAP=0.224 训练500次,模型大小54M:mAP=0.203训练5000次,模型大小49M:mAP=0.214训练50000次,模型大小39M:mAP=0.221训练100000次,模型大小30M:mAP=0.231原创 2017-07-04 14:07:03 · 6471 阅读 · 18 评论 -
hjimce算法类博文目录
hjimce算法类博文目录个人博客:http://blog.youkuaiyun.com/hjimce个人qq:1393852684知乎:https://www.zhihu.com/people/huang-jin-chi-28/activities一、深度学习深度学习(七十三)pytorch学习笔记深度学习(七十二)tensorflow 集群训练深度学习(七十一)3D CNN时空特征学习深度学习(七十)da...原创 2016-01-24 13:12:52 · 34553 阅读 · 20 评论 -
深度学习(七十二)ssd物体检测
def ssd_anchor_one_layer(img_shape, feat_shape, sizes, ratios, step, offset...原创 2018-03-05 20:45:59 · 3725 阅读 · 0 评论 -
深度学习(七十一)3D CNN时空特征学习
原创 2018-03-20 12:06:48 · 14046 阅读 · 3 评论 -
深度学习(七十三)pytorch学习笔记
先吐槽一下,深度学习发展速度真的很快,深度学习框架也在逐步迭代,真的是苦了俺这搞深度学习程序员。本人从三年前开始学深度学习开始,这些深度学习框架也是一个换过一个,从keras、theano、caffe、darknet、tensorflow,最后到现在要开始使用pytorch。一、变量、求导torch.autograd模块默认的variable定义的时候,requires_grad是false,变量...原创 2018-03-25 14:48:53 · 8821 阅读 · 5 评论 -
深度学习(七十二)tensorflow 集群训练
#encoding:utf-8# -*- coding: utf-8 -*-#使用说明:1、修改分类数目;2、修改输入图片大小;# 3、修改是否启用集群; 4、修改batch size大小;5、修改数据路径、模型保存路径#6、设置是否启用boostrap loss 损失函数import osimport tensorflow as tffrom input_data import ...原创 2018-03-22 10:24:20 · 5182 阅读 · 0 评论 -
深度学习(七十四)半监督Mean teachers
原创 2018-06-02 21:39:37 · 22406 阅读 · 6 评论 -
深度学习(十四)基于CNN的性别、年龄识别
本篇博文主要讲解2015年CVPR上的一篇paper《Age and Gender Classification using Convolutional Neural Networks》,个人感觉这篇文献没啥难度,只要懂得Alexnet,实现这篇文献的算法,会比较容易。其实读完这篇paper之后,我一直在想paper的创新点在哪里?因为我实在没有看出paper的创新点在哪里,估计是自己水平太lower了,看文献没有抓到文献的创新点。难道是因为利用CNN做年龄和性别分类的paper很少吗?网上搜索了一下,性别原创 2015-10-19 20:56:42 · 43132 阅读 · 17 评论 -
深度学习(七十一)darknet 源码阅读
深度学习(七十一)darknet 源码阅读原创 2017-08-01 13:51:22 · 4729 阅读 · 0 评论 -
深度学习(六十三)空间变换网络
卷积神经网络每一层都有其强大的功能,然而它对于输入数据的空间不变性却还有很大的缺陷,可能max pooling层,具有平移不变性,然而因为max pooling是一个局部操作,在CNN中对于大尺度的空间变换并不具备不变性。于是paper提出原创 2017-06-07 22:42:08 · 6001 阅读 · 0 评论 -
深度学习(六十七)metal forge深度学习库使用
1、设置输入:let input = Input()或者let input = Input(width: 100, height: 100, channels: 3)2、创建网络:let output = input --> Resize(width: 28, height: 28) --> Convolution(kernel: (5, 5), channel原创 2017-06-19 17:41:45 · 1940 阅读 · 0 评论 -
常用数据集脚本
1、imagenet 分类:http://caffe.berkeleyvision.org/gathered/examples/imagenet.html(1)辅助工具源码caffe下面的:./data/ilsvrc12/get_ilsvrc_aux.sh可以下载imagenet相关标注文件、均值文件(2)lmdb生成打包:examples/imagenet/create_imagenet.sh只原创 2017-06-05 11:45:32 · 1843 阅读 · 0 评论 -
从零开始编写深度学习库(五)PoolingLayer 网络层CPU编写
记录:编写卷积层和池化层,比较需要注意的细节就是边界问题,还有另外一个就是重叠池化的情况,这两个小细节比较重要,边界问题pad在反向求导的时候,由于tensorflow是没有计算的,另外一个比较烦人的是Eigen::Tensor的rowmajor、和colmajor问题,也很烦人。为了跟tensorflow做比较,一些边界处理上的细节,需要特别注意。一、c++、maxpooling、avgpool原创 2017-07-13 10:57:50 · 2858 阅读 · 1 评论 -
从零开始编写深度学习库(五)Eigen Tensor学习笔记2.0
1、extract_image_patches函数的使用:假设Eigen::Tensor形状为(3,8,8,9),现在要对第二维、第三维根据size大小为(2,2),stride=(2,2),那么如果tensor类型是rowmajor类型,那么经过extract_image_patches后的数据就是(3,4*4,2,2,9)的5维数组,如果tensor类型是colmajor类型,那么得到的数据就原创 2017-05-26 11:04:31 · 4323 阅读 · 1 评论 -
深度学习(六十六)生成模型、最大化似然、KL散度
成模型中,假设样本数据是来自于未知的数据分布Pr中采样得到,生成模型的学习过程就是要学习一个Pr的近似概率分布Pθ,其中θ是模型的参数。对于Pθ有两种建模方式:(1)直接用参数θ来描述密度函数。也就是概率密度函数满足:(2)通过已知分布的随机变量Z,用参数θ的变换函数gθ(z)来描述概率密度函数:原创 2017-06-27 09:45:55 · 4450 阅读 · 0 评论