目录

夜雨飘零

记录精彩的程序人生

标签: 深度学习 (83)

基于Tensorflow2 Lite在Android手机上实现图像分类 有更新!

Tensorflow2之后,训练保存的模型也有所变化,基于Keras接口搭建的网络模型默认保存的模型是h5格式的,而之前的模型格式是pb。Tensorflow2的h5格式的模型转换成tflite格式模型非常方便。本教程就是介绍如何使用Tensorflow2的Keras接口训练分类模型并使用Tensorflow Lite部署到Android设备上。

基于MTCNN和MobileFaceNet实现的人脸识别 有更新!

本教程是教程是介绍如何使用Tensorflow实现的MTCNN和MobileFaceNet实现的人脸识别,并不介绍如何训练模型。关于如何训练MTCNN和MobileFaceNet,请阅读这两篇教程 MTCNN-Tensorflow 和 MobileFaceNet_TF ,这两个模型都是比较轻量的模型,所以就算这两个模型在CPU环境下也有比较好的预测速度,众所周知,笔者比较喜欢轻量级的模型,如何让我从准确率和预测速度上选择,我会更倾向于速度,因本人主要是研究深度学习在移动设备等嵌入式设备上的的部署。好了,下面就来介绍如何实现这两个模型实现三种人脸识别,使用路径进行人脸注册和人脸识别,使用摄像头实现人脸注册和人脸识别,通过HTTP实现人脸注册和人脸识别。

基于Kersa实现的中文语音声纹识别 有更新!

本项目说是使用Keras,但使用的都是Tensorflow下的keras接口,本项目主要是用于声纹识别,也有人称为说话人识别。本项目包括了自定义数据集的训练,声纹对比,和声纹识别。

基于Pyramidbox实现的大规模人脸检测 有更新!

PyramidBox 是一种基于SSD的单阶段人脸检测器,它利用上下文信息解决困难人脸的检测问题。如下图所示,PyramidBox在六个尺度的特征图上进行不同层级的预测。该工作主要包括以下模块:LFPN、Pyramid Anchors、CPM、Data-anchor-sampling。

基于PaddlePaddle实现的密度估计模型CrowdNet 有更新!

CrowdNet模型是2016年提出的人流密度估计模型,论文为《CrowdNet: A Deep Convolutional Network for DenseCrowd Counting》,CrowdNet模型主要有深层卷积神经网络和浅层卷积神经组成,通过输入原始图像和高斯滤波器得到的密度图进行训练,最终得到的模型估计图像中的行人的数量。当然这不仅仅可以用于人流密度估计,理论上其他的动物等等的密度估计应该也可以。

基于PaddlePaddle实现的目标检测模型SSD 有更新!

SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法,截至目前是主要的检测框架之一,相比Faster RCNN有明显的速度优势,相比YOLO V1又有明显的mAP优势。本开源是基于PaddlePaddle实现的SSD,参考了PaddlePaddle下的models的ssd ,包括MobileNetSSD,MobileNetV2SSD,VGGSSD,ResNetSSD。使用的是VOC格式数据集,同时提供了预训练模型和VOC数据的预测模型。

Python的Numpy实现深度学习常用的函数 有更新!

常用的激活函数 我们常用的激活函数有sigmoid,tanh,ReLU这三个函数,我们都来学习学习吧。 sigmoid函数 在深度学习中,我们经常会使用到sigmoid函数作为我们的激活函数,特别是在二分类上,sigmoid函数是比较好的一个选择,以下就是sigmoid函数的公式: $$ sigmoid(x) = \frac{1}{1+e^{-x}}\tag{1} $$ sigmoid函数的坐标图是: sigmoid函数的代码实现: import numpy as np def sigmoid(x): s = 1 / (1 + np.exp(-x)) return s 因为是使用numpy实现的sigmoid函数的,所以这个sigmoid函数可以计算实数、矢量和矩阵,如下面的就是当x是实数的时候: if name == 'main': x = 3 s = sigmoid(x) print s 然后会输出: 0.952574126822 当x是矢量或者矩阵是,计算公式如下: $$ sigmoid(x) = sigmoid\begin{pmatrix} x_1 \ ....

《PaddlePaddle从入门到炼丹》十五——把预测模型部署到Android手机上 有更新!

GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note15 前言 现在越来越多的手机要使用到深度学习了,比如一些图像分类,目标检测,风格迁移等等,之前都是把数据提交给服务器完成的。但是提交给服务器有几点不好,首先是速度问题,图片上传到服务器需要时间,客户端接收结果也需要时间,这一来回就占用了一大半的时间,会使得整体的预测速度都变慢了,再且现在手机的性能不断提高,足以做深度学习的预测。其二是隐私问题,如果只是在本地预测,那么用户根本就不用上传图片,安全性也大大提高了。所以本章我们就来学如何包我们训练的PaddlePaddle预测模型部署到Android手机上。 编译paddle-mobile库 想要把PaddlePaddle训练好的预测库部署到Android手机上,还需要借助paddle-mobile框架。paddle-mobile框架主要是为了方便PaddlePaddle训练好的模型部署到移动设备上,比如Android手机,苹果手机,树莓派等等这些移动设备,有了paddle-mobile框架大大方便了....

《PaddlePaddle从入门到炼丹》十四——把预测模型部署在服务器 有更新!

GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note14 前言 如果读者使用过百度等的一些图像识别的接口,比如百度的细粒度图像识别接口,应该了解这个过程,省略其他的安全方面的考虑。这个接口大体的流程是,我们把图像上传到百度的网站上,然后服务器把这些图像转换成功矢量数据,最后就是拿这些数据传给深度学习的预测接口,比如是PaddlePaddle的预测接口,获取到预测结果,返回给客户端。这个只是简单的流程,真实的复杂性远远不止这些,但是我们只需要了解这些,然后去搭建属于我们的图像识别接口。 了解Flask 安装flask很简单,只要一条命令就可以了: pip install flask 同时我们也使用到flask_cors,所以我们也要安装这个库 pip install flask_cors 创建一个 paddle_server.py文件,然后编写一个简单的程序,了解一些如何使用这个Flask框架,首先导入所需的依赖库: import os import uuid import numpy as np......

《PaddlePaddle从入门到炼丹》十三——自定义图像数生成 有更新!

前言 我们在第六章介绍了生成对抗网络,并使用生成对抗网络训练mnist数据集,生成手写数字图片。那么本章我们将使用对抗生成网络训练我们自己的图片数据集,并生成图片。在第六章中我们使用的黑白的单通道图片,在这一章中,我们使用的是3通道的彩色图。 GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note13 定义数据读取 我们首先创建一个image_reader.py文件,用于读取我们自己定义的图片数据集。首先导入所需的依赖包。 import os import random from multiprocessing import cpu_count import numpy as np import paddle from PIL import Image 这里的图片预处理主要是对图片进行等比例压缩和中心裁剪,这里为了避免图片在图片在resize时出现变形的情况,导致训练生成的图片不是我们真实图片的样子。这里为了增强数据集,做了随机水平翻转。最后在处理图片的时候,为了避免数据集中有单通道图片导致训练中断.....

《PaddlePaddle从入门到炼丹》十二——自定义文本数据集分类 有更新!

前言 我们在第五章学习了循环神经网络,在第五章中我们使用循环神经网络实现了一个文本分类的模型,不过使用的数据集是PaddlePaddle自带的一个数据集,我们并没有了解到PaddlePaddle是如何使用读取文本数据集的,那么本章我们就来学习一下如何使用PaddlePaddle训练自己的文本数据集。我们将会从中文文本数据集的制作开始介绍,一步步讲解如何使用训练一个中文文本分类神经网络模型。 GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note12 爬取文本数据集 网络上一些高质量的中文文本分类数据集相当少,经过充分考虑之后,绝对自己从网络中爬取自己的中文文本数据集。在GitHub中有一个开源的爬取今日头条中文新闻标题的代码,链接地址请查看最后的参考资料。我们在这个开源代码上做一些简单修改后,就使用他来爬取数据。 创建一个download_text_data.py文件,这个就是爬取数据集的程序。首先导入相应的依赖包。 import os import random import requests im....

《PaddlePaddle从入门到炼丹》十一——自定义图像数据集识别 有更新!

GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note11 前言 本章将介绍如何使用PaddlePaddle训练自己的图片数据集,在之前的图像数据集中,我们都是使用PaddlePaddle自带的数据集,本章我们就来学习如何让PaddlePaddle训练我们自己的图片数据集。 爬取图像 在本章中,我们使用的是自己的图片数据集,所以我们需要弄一堆图像来制作训练的数据集。下面我们就编写一个爬虫程序,让其帮我们从百度图片中爬取相应类别的图片。 创建一个download_image.py文件用于编写爬取图片程序。首先导入所需的依赖包。 import re import uuid import requests import os import numpy import imghdr from PIL import Image 然后编写一个下载图片的函数,这个是程序核心代码。参数是下载图片的关键、保存的名字、下载图片的数量。关键字是百度搜索图片的关键。 # 获取百度图片下载图片 def download_ima.....

《PaddlePaddle从入门到炼丹》十——VisualDL 训练可视化 有更新!

前言 VisualDL是一个面向深度学习任务设计的可视化工具,包含了scalar、参数分布、模型结构、图像可视化等功能。可以这样说:“所见即所得”。我们可以借助VisualDL来观察我们训练的情况,方便我们对训练的模型进行分析,改善模型的收敛情况。 scalar,趋势图,可用于训练测试误差的展示 image, 图片的可视化,可用于卷积层或者其他参数的图形化展示 histogram, 用于参数分布及变化趋势的展示 graph,用于训练模型结构的可视化 以上的图像来自VisualDL的Github 既然那么方便,那么我们就来尝试一下吧。VisualDL底层采用C++编写,但是它在提供C++ SDK的同时,也支持Python SDK,我们主要是使用Python的SDK。顺便说一下,VisualDL除了支持PaddlePaddle,之外,还支持pytorch, mxnet在内的大部分主流DNN平台。 VisualDL的安装 本章只讲述在Ubuntu系统上的安装和使用,Mac的操作应该也差不多。 使用pip安装 使用pip安装非常简单,只要一条命令就够了,如下: pip3 insta....

《PaddlePaddle从入门到炼丹》九——迁移学习 有更新!

前言 在深度学习训练中,例如图像识别训练,每次从零开始训练都要消耗大量的时间和资源。而且当数据集比较少时,模型也难以拟合的情况。基于这种情况下,就出现了迁移学习,通过使用已经训练好的模型来初始化即将训练的网络,可以加快模型的收敛速度,而且还能提高模型的准确率。这个用于初始化训练网络的模型是使用大型数据集训练得到的一个模型,而且模型已经完全收敛。最好训练的模型和预训练的模型是同一个网络,这样可以最大限度地初始化全部层。 初步训练模型 本章使用的预训练模型是PaddlePaddle官方提供的ResNet50网络模型,训练的数据集是ImageNet,它的下载地址为:http://paddle-imagenet-models-name.bj.bcebos.com/ResNet50_pretrained.zip ,读者可以下载其他更多的模型,可以在这里下载。下载之后解压到models目录下。 编写一个pretrain_model.py的Python程序,用于初步训练模型。首先导入相关的依赖包。 import os import shutil import paddle as paddle imp....

《PaddlePaddle从入门到炼丹》八——模型的保存与使用 有更新!

前言 本系列教程中,前面介绍的都没有保存模型,训练之后也就结束了。那么本章就介绍如果在训练过程中保存模型,用于之后预测或者恢复训练,又或者由于其他数据集的预训练模型。本章会介绍三种保存模型和使用模型的方式。 训练模型 在训练模型的过程中我们可以随时保存模型,当时也可以在训练开始之前加载之前训练过程的模型。为了介绍这三个保存模型的方式,一共编写了三个Python程序进行介绍,分别是save_infer_model.py、 save_use_params_model.py、save_use_persistables_model.py。 导入相关的依赖库 import os import shutil import paddle as paddle import paddle.dataset.cifar as cifar import paddle.fluid as fluid 定义一个残差神经网络,这个是目前比较常用的一个网络。该神经模型可以通过增加网络的深度达到提高识别率,而不会像其他过去的神经模型那样,当网络继续加深时,反而会损失精度。 # 定义残差神经网络(ResNet) def .....

《PaddlePaddle从入门到炼丹》七——强化学习 有更新!

前言 本章介绍使用PaddlePaddle实现强化学习,通过自我学习,完成一个经典控制类的游戏,相关游戏介绍可以在Gym官网上了解。我们这次玩的是一个CartPole-v1游戏,操作就是通过控制滑块的左右移动,不让竖着的柱子掉下来。利用强化学习的方法,不断自我学习,通过在玩游戏的过程中获取到奖励或者惩罚,学习到一个模型。在王者荣耀中的超强人机使用的AI技术也类似这样。 PaddlePaddle程序 创建一个DQN.py的Python文件。导入项目所需的依赖库,如果还没安装gym的话,可以通过命令pip3 install gym安装。 import numpy as np import paddle.fluid as fluid import random import gym from collections import deque from paddle.fluid.param_attr import ParamAttr 定义一个简单的网络,这个网络只是由4个全连接层组成,并为每个全连接层指定参数的名称。指定参数的作用是为了之后更新模型参数使用的,因为之后会通过这个网络生成两个......

《PaddlePaddle从入门到炼丹》六——生成对抗网络 有更新!

@[TOC] 前言 我们上一章使用MNIST数据集进行训练,获得一个可以分类手写字体的模型。如果我们数据集的数量不够,不足于让模型收敛,最直接的是增加数据集。但是我们收集数据并进行标注是非常消耗时间了,而最近非常火的生成对抗网络就非常方便我们数据的收集。对抗生成网络可以根据之前的图片训练生成更多的图像,已达到以假乱真的目的。 训练并预测 创建一个GAN.py文件。首先导入所需要的Python包,其中matplotlib包是之后用于展示出生成的图片。 import numpy as np import paddle import paddle.fluid as fluid import matplotlib.pyplot as plt 定义网络 生成对抗网络由生成器和判别器组合,下面的代码片段就是一个生成器,生成器的作用是尽可能生成满足判别器条件的图像。随着以上训练的进行,判别器不断增强自身的判别能力,而生成器也不断生成越来越逼真的图片,以欺骗判别器。生成器主要由两组全连接和BN层、两组转置卷积运算组成,其中最后一层的卷积层的卷积核数量是1,因为输出的图像是一个灰度图的手写字体图片。 .....

《PaddlePaddle从入门到炼丹》五——循环神经网络 有更新!

前言 除了卷积神经网络,深度学习中还有循环神经网络也是很常用的,循环神经网络更常用于自然语言处理任务上。我们在这一章中,我们就来学习如何使用PaddlePaddle来实现一个循环神经网络,并使用该网络完成情感分析的模型训练。 训练模型 创建一个text_classification.py的Python文件。首先导入Python库,fluid和numpy库我们在前几章都有使用过,这里就不重复了。这里主要结束是imdb库,这个是一个数据集的库,这个是数据集是一个英文的电影评论数据集,每一条数据都会有两个分类,分别是正面和负面。 import paddle import paddle.dataset.imdb as imdb import paddle.fluid as fluid import numpy as np 循环神经网络发展到现在,已经有不少性能很好的升级版的循环神经网络,比如长短期记忆网络等。一下的代码片段是一个比较简单的循环神经网络,首先是经过一个fluid.layers.embedding(),这个是接口是接受数据的ID输入,因为输入数据时一个句子,但是在训练的时候我们是.....

《PaddlePaddle从入门到炼丹》四——卷积神经网络 有更新!

前言 上一章我们通过学习线性回归例子入门了深度学习,同时也熟悉了PaddlePaddle的使用方式,那么我们在本章学习更有趣的知识点卷积神经网络。深度学习之所以那么流行,很大程度上是得益于它在计算机视觉上得到非常好的效果,而在深度学习上几乎是使用卷积神经网络来提取图像的特征的。在PaddlePaddle上如何定义一个卷积神经网络,并使用它来完成一个图像识别的任务呢。在本章我们通过学习MNIST图像数据集的分类例子,来掌握卷积神经网络的使用。 训练模型 创建一个mnist_classification.py文件,首先导入所需得包,这次使用到了MNIST数据集接口,也使用了处理图像得工具包。 import numpy as np import paddle as paddle import paddle.dataset.mnist as mnist import paddle.fluid as fluid from PIL import Image import matplotlib.pyplot as plt 在图像识别上,使用得算法也经过了多次的迭代更新,比如多层感知器,在卷积神经网.....

《PaddlePaddle从入门到炼丹》三——线性回归 有更新!

前言 在第二章,我们已经学习了如何使用PaddlePaddle来进行加法计算,从这个小小的例子中,我们掌握了PaddlePaddle的使用方式。在本章中,我们将介绍使用PaddlePaddle完成一个深度学习非常常见的入门例子——线性回归,我们将分别使用自定义数据集和使用PaddlePaddle提供的数据集接口来训练一个线性回归模型。 使用自定义数据 在这一部分,我们将介绍整个线性回归从定义网络到使用自定义的数据进行训练,最后验证我们网络的预测能力。 首先导入PaddlePaddle库和一些工具类库。 import paddle.fluid as fluid import paddle import numpy as np 定义一个简单的线性网络,这个网络非常简单,结构是:输出层-->>隐层-->>输出层,这个网络一共有2层,因为输入层不算网络的层数。更具体的就是一个大小为100,激活函数是ReLU的全连接层和一个输出大小为1的全连接层,就这样构建了一个非常简单的网络。这里使用输入fluid.layers.data()定义的输入层类似fluid.layers......