机器学习
文章平均质量分 94
yuanlulu
做过嵌入式Linux开发、深度学习平台开发。擅长c++和python。
展开
-
基于语义分割的身份证部件解析和文字检测
概述这个工作主要是利用人脸解析项目的算法,探索一下语义分割的功能。安排实习生利用合成的身份证照片进行了语义分割的标注。我的目的有两个:1.检测身份证上的信息是否齐全;2.确定身份证各文字信息的位置,把文字抠出来给OCR程序。基于opencv的算法之前写过一篇文章《python_opencv–身份证文字区域检测》,利用opencv的接口进行二值化,然后找出所有的阴影对应的外接矩形。这个方法...原创 2019-05-10 18:09:42 · 4985 阅读 · 9 评论 -
在树莓派3B+上编译ncnn并用benchmark和mobilenet_yolo测试
步骤安装git和cmake$ sudo apt-get install git$ sudo apt-get install cmake安装protocobuf和其它依赖项这段命令参考自《树莓派3B完成ncnn框架测试》sudo apt-get install -y gfortransudo apt-get install -y libprotobuf-dev libleveldb-...原创 2019-01-09 18:07:44 · 5901 阅读 · 8 评论 -
Facebook开源高性能内核库QNNPACK_笔记
PDOT简介卷积可以分解成一种名为 im2col 的内存布局转换和矩阵相乘的组合。因此,卷积神经网络中的有效推理问题很大程度上可以看做矩阵乘法的有效实现问题——在线性代数库中也称为 GEMM。当前的处理器上,这一实现会受到内存和缓存带宽,而不是乘-加单元计算力的限制。但一个小小的修改——同时计算几行 A 和几行 B 的点积——却使得性能大大提升。修改后的基元加载 A 的 MR 及 B 的 ...原创 2019-01-24 16:00:51 · 1378 阅读 · 0 评论 -
英特尔OpenVINO深度学习框架--ubuntu16.04上的安装手记
概述OpenVINO是intel的深度学习工具框架,本质是一个支持intel各种硬件(CPU、集显、FPGA和Movidius VPU)的推理机。这个工具本身不做训练,但是可以把其它深度学习框架(如 Caffe, TensorFlow, MXNet)训练的模型文件转化为自己支持的格式。所以OpenVINO分为两部分(github上源码也分为这么两个目录):Inference Engine...原创 2019-01-23 23:06:19 · 9605 阅读 · 2 评论 -
超详细:自制yolo3训练数据集总结
概述本文总结yolo作者实现的darknet版本的yolo3训练数据集格式。数据集文件目录最终数据集需要3个文本文件和2个目录: train.txt # 文本文件,保存训练图片目录列表 test.txt # 文本文件,保存测试图片目录列表 class.names # 文本文件,保存分类名称 labels # 目录,保存每个图片的边界框和分类信息 ...原创 2018-12-25 21:54:05 · 9501 阅读 · 6 评论 -
这就是神经网络 5:轻量化神经网络--MobileNet V1、MobileNet V2、ShuffleNet V1、ShuffleNet V2
概述深度神经网络模型被广泛应用在图像分类、物体检测等机器视觉任务中,并取得了巨大成功。然而,由于存储空间和功耗的限制,神经网络模型在嵌入式设备上的存储与计算仍然是一个巨大的挑战。本文介绍几个经典的人工设计的轻量化神经网络模型。(当然也有其它方法对已有的网络模型进行压缩,甚至自动学习设计紧凑的网络模型,本文不涉及这部分)轻量化神经网络牵涉到的基础知识(如分组卷积、1x1点卷积、深度卷积(dep...原创 2018-12-06 23:59:38 · 9642 阅读 · 1 评论 -
这就是神经网络 3:NIN,Inception-V1,Inception-V2,Inception-V3, Inception-V4
NIN (2014)NIN全称是‘Network In Network’。这篇论文主要有两个改进思路:MLPconv和全局平均池化。MLPconv全称是multilayer perceptron convolution layer(直译为:多层感知机卷积层),也就是普通卷积层+1x1卷积+ReLU激活函数。NIN中的MLPconv是对conv+relu的改进,conv+relu构建的是一个一...原创 2018-12-03 21:18:22 · 4717 阅读 · 0 评论 -
tensorflow 20:搭网络、导出模型、运行模型
概述以前自己都利用别人搭好的工程,修改过来用,很少把模型搭建、导出模型、加载模型运行走一遍,搞了一遍才知道这个事情也不是那么简单的。搭建模型和导出模型参考《TensorFlow固化模型》,导出固化的模型有两种方式.方式1:导出pb图结构和ckpt文件,然后用 freeze_graph 工具冻结生成一个pb(包含结构和参数)在我的代码里测试了生成pb图结构和ckpt文件,但是没接着往下走,...原创 2018-12-12 19:59:04 · 4905 阅读 · 0 评论 -
这就是神经网络 4:ResNet-V1、ResNet-V2、ReNeXt、SENet
ResNet-V1(2015)ResNet在ILSVRC 2015分类任务上赢得了第一名。ResNet在主要是为了解决深度网络的退化问题。退化问题是指,随着网络深度的增加,准确率达到饱和(这可能并不奇怪)然后迅速下降。这并不是由过拟合引起的,因为训练准确率也下降了。考虑在一个浅层网络上增加恒等映射成为一个更深版本的网络,更深的模型不应当产生比它的浅层版本更高的训练错误率。作者的思路就是产生...原创 2018-12-05 21:05:25 · 8062 阅读 · 0 评论 -
深度学习中的组归一化(GroupNorm)
批归一化(BN)的缺点BN 需要用到足够大的批大小(例如,每个工作站采用 32 的批量大小)。一个小批量会导致估算批统计不准确,减小 BN 的批大小会极大地增加模型错误率。加大批大小又会导致内存不够用。归一化的分类BN,LN,IN,GN从学术化上解释差异:BatchNorm:batch方向做归一化,算N*H*W的均值LayerNorm:channel方向做归一化,算C*H*W的均值...原创 2018-11-17 17:45:48 · 16180 阅读 · 1 评论 -
这就是神经网络 2:VGG论文翻译(大部分)
概述非常喜欢VGG这篇论文,内容写的层层递进,逻辑严密。对多尺度及深度的探讨很经典。奈何别人的翻译十分拗口,总是感觉理解不透。只好自己反复阅读,把最精彩的多尺度及实验部分翻译一下。翻译过程尽量使用国人能懂的方式,宁愿以中国人的思维重写也不使用机器翻译的结果,过程中反复推敲,修改了部分啰嗦的定语和不易懂的表达方式。不喜欢‘我亲爱的老伙计‘、’你这该死的’这种假翻译。翻译就应该让人感觉不出这是翻...原创 2018-11-23 19:53:02 · 3260 阅读 · 1 评论 -
这就是神经网络 1:早期分类网络之LeNet-5、AlexNet、ZFNet、OverFeat、VGG
概述本系列文章计划介绍总结经典的神经网络结构,先介绍分类网络,后续会包括通用物体检测、语义分割,然后扩展到一些相对较细的领域如人脸检测、行人检测、行人重识别、姿态估计、文本检测等。一些经典网络的年代、性能及参数趋势如下表所示:LeNet-5 (1998)LeNet-5来自Yann LeCun在1998年的论文,这个网络用于识别手写数字。作者有个很出名的数据集MNIST,也是本论文用到的...原创 2018-11-21 18:13:52 · 4379 阅读 · 1 评论 -
tensorflow 19: tflite 概念理解
概述学术界对精度、自由度的要求和工业界对速度、精简度的要求形成了反差,这就使得越来越多的框架开始把training和inference分开,各公司都开始针对移动设备纷纷推出高性能inference库。tflitetflite其实就是谷歌自己的一个轻量级推理库。主要用于移动端。之前的tensorflow mobile那一套到2019年就不再维护了。tflite使用的思路主要是从预训练的模型转...原创 2018-11-14 11:24:53 · 20026 阅读 · 9 评论 -
tensorflow 18:cifar10图片分类训练(cpu或单gpu)
概述接着前面几篇博客讲cifar10的训练,本文牵涉的代码文件主要是cifar10_train.py。仔细看前面的cifar10.py就会发现,所有变量都被声明放在cpu上,如参考资料里的《卷积神经网络》所说,这是为了多个GPU上共享变量。只有train部分的节点没指定设备,如果有gpu的话训练还是默认在gpu上,其他部分都在cpu上。代码分解命令行选项参数FLAGS = tf.app....原创 2018-11-06 00:48:38 · 2258 阅读 · 0 评论 -
MTCNN人脸及特征点检测--基于树莓派3B+及ncnn架构
概述本文尝试在树莓派3B+上用ncnn框架测试MTCNN。ncnn的基本编译和使用请参考《在树莓派3B+上编译ncnn并用benchmark和mobilenet_yolo测试》。本文在这个博客基础上进行操作。操作步骤下载mtcnn从mtcn-ncnn项目中下载mtcnn子目录,把这个目录放在最新的ncnn源码目录下添加对mtcnn的支持修改ncnn最顶层的CMakeList.txt,...原创 2019-01-15 20:39:23 · 8259 阅读 · 10 评论 -
这就是神经网络 6:SqueezeNet和Xception
概述之前也写博客介绍过轻量化神经网络架构:《集异璧-神经网络结构 5:轻量化神经网络–MobileNet V1、MobileNet V2、ShuffleNet V1、ShuffleNet V2》。但是那篇文章没有包含SqueezeNet和Xception。这次把这两个网络补上。SqueezeNet (2017)SqueezeNet 由伯克利&斯坦福的研究人员合作发表于 ICLR-2...原创 2019-01-28 22:01:16 · 2474 阅读 · 0 评论 -
这就是神经网络 17:深度学习-评价指标_ROC_mAP
概述本文主要讲述目标检测指标mAP。主要也是自己做这块有段时间,但是这个指标一直没弄的特别清楚。而且网上很多博客写的并不准确,会给人不少舞蹈,希望自己的文章能帮到别人。基础知识true positive, false positive, true negative, false negative本段参考《目标检测的评价指标》,链接见最下方。首先解释一下上面四个词:分类正确的两类:t...原创 2019-05-08 20:45:46 · 9401 阅读 · 2 评论 -
目标检测中的检测框合并策略:NMS和Soft-NMS
概述目标检测中的Region Proposal动辄上千,会形成大量有重合的检测框,需要使用某些算法对检测框去重。常用的两种算法是NMS和Soft-NMS。NMS全称‘非极大值抑制(non maximum suppression)’.算法思想很简单,按照分类概率排序,概率最高的框作为候选框,其它所有与它的IOU高于一个阈值(这是人工指定的超参)的框其概率被置为0。然后在剩余的框里寻找概率第...原创 2019-05-02 17:00:40 · 6581 阅读 · 0 评论 -
这就是神经网络 14:深度学习-目标检测-YOLOv1、YOLOv2、YOLOv3
YOLOYOLO是与SSD齐名的one_stage目标检测算法代表。SSD系列有比较多的变体,大部分都不是SSD作者做的工作。而YOLO目前已经进化到V3,据我所知都是yolo作者自己做的工作。网络结构由于yolo属于one_stage的目标检测算法,所以网络结构比较简单。固定输入448x448大小的图片,最后输出7x7x30大小的特征图。作者的主干网络受GoogLeNet的启发,共有...原创 2019-04-15 20:21:28 · 8367 阅读 · 1 评论 -
这就是神经网络 12:深度学习-语义分割-DeepLabV1、V2、V3和V3+
概述说到语义分割,谷歌的DeepLab系列都是一个无法绕过的话题。目前这个系列共出了4个版本:V1、V2、V3和V3+。DeepLab是全景分割,也有DeeperLab原班人马在里面参与。本文主要关注DeepLabV3+和DeepLab。V1、V2作为前作,有一定的参考价值,但是我精力有限,这两篇主要从其它总结材料里学习而不是原论文,V3和V3+才是我的重点。一个系列看下来,感觉好漫长,半辈...原创 2019-03-31 16:31:20 · 4253 阅读 · 0 评论 -
rk3399上opencv使用gstreamer访问mipi摄像头
环境硬件:友善之臂NanoPC T4rk3399:Big.Little 架构:双核Cortex-A72 + 四核 Cortex-A53 架构,64位CPU主频超过1.8GHz软件:rk3399-eflasher-friendlydesktop-bionic-4.4-arm64-20181219.img这是友善之臂定制的一个基于ubuntu18.04的64位操作系统。探索思路自己...原创 2019-03-30 19:35:46 · 11682 阅读 · 9 评论 -
这就是神经网络 11:深度学习-语义分割-DFN、BiSeNet、ExFuse
前言本篇介绍三篇旷视在2018年的CVPR及ECCV上的文章。旷视做宣传做的很好,出的论文解读文章很赞,省去了我从头开始理解的痛苦,结合论文基本能很快了解全貌。语义分割任务同时需要 Spatial Context 和 Spatial Detail ,也就是分类的语义信息和形状的空间信息。不同的网络从不同的角度解决这两个问题,做不同的妥协。DFN这是在CVPR2018上被接收的文章。DFN...原创 2019-03-24 20:24:29 · 7680 阅读 · 1 评论 -
这就是神经网络 10:深度学习-语义分割-RefineNet、PSPNet 、GCN
前言看论文写总结不易。喜欢就点个赞或者关注下。RefineNet这是16年底的论文,看完PSPNet和DeepLabV3+再回来看此论文,感觉乏善可陈。RefineNet给我的感觉就是一个resnet思想改造的U-Net,参数和计算量都大了很多。作者的一些trick没有很充分的对比实验来说明非此不可,我只能说本网络效果不错,但是谈不上多大的创新,也没耳目一新的见解,论文写的还不是很充分。说...原创 2019-03-15 21:21:43 · 4616 阅读 · 4 评论 -
人脸解析(Face Parsing)和人体解析Human Parsing:方法、数据集和论文
人脸解析人脸解析(Face Parsing)即把人脸的各个部分分割出来。下图左侧是原图,中间是标注,右侧是我输出的结果:这方面网上资料不多,论文也不火,很少看到商用的。目前看到华为有提供这个功能。华为人脸解析地址:https://developer.huawei.com/consumer/cn/hiai/engine/face-parsing人脸解析可预见的应用场景就是虚拟试妆,或者电...原创 2019-03-15 18:21:20 · 25351 阅读 · 5 评论 -
rk3399+ubuntu:基于深度学习框架ncnn对比clang和gcc性能
编译方式修改toolchains/aarch64-linux-gnu.toolchain.cmake,内容如下:# set cross-compiled system type, it's better not use the type which cmake cannot recognized.SET ( CMAKE_SYSTEM_NAME Linux )SET ( CMAKE_SYST...原创 2019-02-26 22:09:05 · 5346 阅读 · 8 评论 -
这就是神经网络 9:深度学习-语义分割-FCN、U-Net、SegNet
FCN简介FCN全称是‘Fully Convolutional Networks’,也就是全卷积网络。这个网络去掉了全连接层,网络结构里只有卷积(池化和反卷积)操作。本文的FCN特指这个语义分割网络,而非广义的全卷积网络。作者在论文里说,这是第一个可以端到端训练、输出像素级预测(pixels-to-pixels)语义分割网络,它可以处理任意大小的图片输入。本网络使用上采样层进行预测,使用降采...原创 2019-03-02 21:36:00 · 10453 阅读 · 0 评论 -
这就是神经网络 8:深度学习-目标检测-SSD和DSSD
前言最近有一篇综述目标检测的论文《Deep Learning for Generic Object Detection: A Survey》,来自首尔国立大学的 Lee hoseong 在近期开源了「deep learning object detection」GitHub 项目,正是参考该论文开发的。该项目集合了从 2013 年 11 月提出的 R-CNN 至在近期发表的 M2Det 等几十篇...原创 2019-02-24 17:55:20 · 2925 阅读 · 1 评论 -
rk3399环境配置:安装opencv、dlib和tensorflow,并测试ncnn性能
概述最近入手了NanoPC-T4开发板,上面用的是rk3399这款芯片。安装系统:rk3399-eflasher-friendlydesktop-bionic-4.4-arm64-20181219。这是一个ubuntu18.04为基础的Linux系统。安装过程下面的操作都是在root用户下完成的。更新源到/etc/apt/sources.list.替换url为http://mirror...原创 2019-02-24 12:57:03 · 8359 阅读 · 9 评论 -
这就是神经网络 7:深度学习-目标检测-超详细图解Faster R-CNN
本文动机说实话,介绍Faster R-CNN的文章我看了很多,论文的英文原文和翻译都看过,我知道two-statge和anchor的主要思想,可是我脑子里始终没法建立一个完整的Faster R-CNN的框架,有太多的细节没有搞清楚,每个步骤的tensor是什么维度?这些维度是什么含义?第二阶段的坐标回归和第一阶段一样吗?有太多的细节让我疑惑不已。别人的文章讲的都是别人建立了整体概念以后的细节分解...原创 2019-02-06 21:43:28 · 7010 阅读 · 1 评论 -
tensorflow 17:搭建图片分类计算图(cifar10.py)
概述书接上回,继续讲cifar10的例子,这次讲cifar10.py。代码在https://github.com/tensorflow/models/tree/master/tutorials/image/cifar10cifar10.py速览这个文件主要包含以下几个部分:读取数据搭建前向预测计算图搭建loss搭建train下载cifar10数据集并解压这个文件的代码没有搭建...原创 2018-11-05 20:48:10 · 1072 阅读 · 0 评论 -
tensorflow 16:数据读取(以cifar10_input.py为例)
数据读取概述TensorFlow程序读取数据一共有3种方法:供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据。从文件读取数据: 在TensorFlow图的起始, 让一个输入管线从文件中读取数据。预加载数据: 在TensorFlow图中定义常量或变量来保存所有数据(仅适用于数据量比较小的情况)。目前我用过的主要是第一种,就是提供fee...原创 2018-11-05 20:45:25 · 5680 阅读 · 3 评论 -
基于检测和多目标跟踪的客流统计功能小结
项目要求 利用安防相机俯拍的视频流,对画面中的人进行计算计数,要求双向计数。典型场景:电信营业厅。 毕竟是公司项目,在此做简要概述。方案简述 利用opencv取rtsp流,利用深度学习目标检测算法行人检测,利用多目标跟踪算法对行人跟踪。 从界面在大门上画两条折线,折线端点传给算法。依次通过两条线则增加一次计数。由于画了两条线,可以做双向计数。 算法约定最多支持4个通道,也就是支持在界...原创 2018-09-05 21:21:59 · 14815 阅读 · 42 评论 -
物体检测之选择性搜索(Selective Search)
概述本文牵涉的概念是候选区域(Region Proposal ),用于物体检测算法的输入。无论是机器学习算法还是深度学习算法,候选区域都有用武之地。本文的来源是翻译参考资料里的《Selective Search for Object Detection (C++ / Python)》,这是国外一个大神的博客,讲的是择性搜索(Selective Search)这一种产生候选区域的算法。这个算...翻译 2018-08-29 01:55:50 · 30343 阅读 · 6 评论 -
机器视觉特征提取介绍:HOG、SIFT、SURF、ORB、LBP、HAAR
一. 概述这里主要记录自己的一些感悟,不是很系统。想要详细系统的理论,请参考文末的《图像处理之特征提取》。个人不是专业cv工程师,很多细节没有深究,描述可能不严谨。 在总结物体检测算法之前先把基础的特征点理论整理一下。二. HOG求取前先灰度化然后Gamma校正,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰。HOG主要捕获轮廓信息。统计每个cell的梯...原创 2018-08-28 15:15:14 · 48892 阅读 · 6 评论 -
opencv目标检测器训练的资料整理
概述opencv自带的分类器是adaboost分类器算法思想是通过迭代训练弱分类器得到一个强分类器。每次迭代得到局部最优的分类器,然后将局部最优的分类器权值相加最后得到一个可用的强分类器。具体的原理可参考《浅析人脸检测之Haar分类器方法》在windows下编译opencv之后,在build\x64\vc14\bin目录下回有opencv_createsamples.exe和opencv_...原创 2018-08-30 18:10:08 · 2211 阅读 · 0 评论 -
ARM64+ubuntu18.04深度学习环境安装小结
概述本人断断续续花费了两周时间,在某国产ARM64+linux环境的服务器上,使用docker容器安装成功了公司深度学习项目所需的环境。中间过程坎坷,在此结文以记,希望能对他人有所帮助,少踩坑。目前成功搭建的环境如下:aarch64 docker容器,ubuntu18.04, python2, opencv3.3, dlib19.15, tensorflow1.5, sklearn。上...原创 2018-08-12 15:59:53 · 14468 阅读 · 1 评论 -
吴恩达视频课程之异常检测笔记
概述本笔记整理自网易云课堂吴恩达的《机器学习》。吴恩达所讲的异常检测属于无监督学习。即利用已有的无标签数据求取样本的分布模型参数(正太分布参数),然后对新来的数据计算属于这个分布的概率,当概率大于一个阈值时认为测数据是正常的,否则认为是异常数据。(由于插入图片和公式不方便,本文没有图片和公式)异常检测的一些场景工程诊断(发动机异常检测)、异常行为检测、数据中心硬件监控等。...原创 2018-08-06 23:12:21 · 1764 阅读 · 0 评论 -
sklearn+python:逻辑回归
概述逻辑回归是一种分类算法,并不是线性回归的子类sklearn:使用逻辑回归诊断乳腺癌使用sklearn自带的乳腺癌数据,逻辑回归用来诊断是阴性还是阳性。这个数据集有569个样本,每个样本有30个特征,共357的阳性(y=1)样本,212个阴性(y=0)样本. 本例子使用90%的例子做训练,10%的例子做测试。from sklearn.model_selection im...原创 2018-07-17 01:09:00 · 6406 阅读 · 0 评论 -
sklearn+python:无监督学习之k_means
K均值简介K均值是一种无监督学习算法,在没有标签的训练样本中学习到聚类的中心点,后续测试数据可以计算和聚类中心的距离,归类到距离最近的聚类中心上。随机初始化只要K的值比样本少,可以随机选择K个样本作为初始簇心。初始化状态的不同,最终得到的结果也会不同,有些情况下K均值会收敛到局部最优解。解决局部最优的方法就是多次随机初始化运行,选择最终成本最小的分类方案。但是如果K特别大,...原创 2018-07-15 15:52:22 · 1638 阅读 · 1 评论 -
svm核函数
svm的分类根据数据可分的情况,svm分为3种: - 线性可分支持向量机(没有噪音和异常数据,分隔超平面可以在训练数据集做到100%准确) - 线性支持向量机(有噪音和异常数据,分隔超平面无法在训练数据集做到100%准确) - 非线性支持向量机(数据集不是线性可分的,必须借助升维)上面三种svm由简到繁,其实所有的svm都可以可以统一写为带核函数的推理形式。前两种情况下可以选择不用核...原创 2018-07-14 23:00:04 · 3151 阅读 · 0 评论