记录精彩的程序人生
存档:
2020 年 03 月 (83)
前言 开发人脸识别系统,人脸数据集是必须的。所以在我们开发这套人脸识别系统的准备工作就是获取人脸数据集。本章将从公开的数据集到自制人脸数据集介绍,为我们之后开发人脸识别系统做好准备。 公开人脸数据集 公开的人脸数据集有很多,本中我们就介绍几个比较常用的人脸数据集。 CelebA人脸数据集 官方提供的下载地址:https://pan.baidu.com/s/1eSNpdRG#list/path=%2F 该数据集下载后有3个文件夹,Anno文件夹是存放标注文件的,Eval文件夹是存放评估列表文件的,Img文件是存放图片文件的。 Img中有3中类型的图像文件,其中 img_align_celeba.zip是经过对人脸居中,裁剪,并统一大小为178*178的jpg图片; img_align_celeba_png.7z中的图片跟img_align_celeba.zip中的图片一样,唯一不同的是这些图片是png格式的,所以这些图片要大得多。 img_celeba.7z这个是人脸图片的原始图片,没有经过居中裁剪等处理的图片。 Anno文件夹中有5个标注文件,其中 identity_CelebA.......
前言 中央民族大学创业团队巨神人工智能科技在科赛网公开了一个TibetanMNIST正是形体藏文中的数字数据集,TibetanMNIST数据集的原图片中,图片的大小是350*350的黑白图片,图片文件名称的第一个数字就是图片的标签,如0_10_398.jpg这张图片代表的就是藏文的数字0。在本项目中我们结合第四章所学的卷积神经网络,来完成TibetanMNIST数据集的分类识别。 导入所需的包 主要是使用到PaddlePaddle的fluid和paddle依赖库,cpu_count库是获取当前CPU的数量的,matplotlib用于展示图片。 import paddle.fluid as fluid import paddle import numpy as np from PIL import Image import os from multiprocessing import cpu_count import matplotlib.pyplot as plt 生成图像列表 因为TibetanMNIST数据集已经在科赛网发布了,所以我们创建项目之前还需要在科赛网中把数据集下载下来.....
前言 TensorFlow Lite是一款专门针对移动设备的深度学习框架,移动设备深度学习框架是部署在手机或者树莓派等小型移动设备上的深度学习框架,可以使用训练好的模型在手机等设备上完成推理任务。这一类框架的出现,可以使得一些推理的任务可以在本地执行,不需要再调用服务器的网络接口,大大减少了预测时间。在前几篇文章中已经介绍了百度的paddle-mobile,小米的mace,还有腾讯的ncnn。这在本章中我们将介绍谷歌的TensorFlow Lite。 Tensorflow Lite的GitHub地址:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite Tensorflow的版本为:Tensorflow 1.14.0 转换模型 手机上执行预测,首先需要一个训练好的模型,这个模型不能是TensorFlow原来格式的模型,TensorFlow Lite使用的模型格式是另一种格式的模型。下面就介绍如何使用这个格式的模型。 获取模型主要有三种方法,第一种是在训练的时候就保存tflite模型,另外一种就是使用其他....
前言 Caffe是目前比较常用的深度学习框架,这个框架安装没有其他一下主流框架那么简单,直接使用pip命令安装,它更常用的是使用编译的方式安装。所以写下这个文章记录一下。 在Ubuntu上安装Caffe 如果Ubuntu版本是>= 17.04的,就可以使用以下的方式安装Caffe,注意安装的是Python 3的版本。 apt install caffe-cpu 如果是低于这版本,就要使用源码编译了,笔者的系统是64位的Ubuntu 16.04,下面就介绍安装步骤,使用的Python 2。 安装依赖环境 首先我们要安装依赖环境,依赖环境有点多,需要保证都安装了,以免在编译的时候出错。如果之前安装过了,重复执行命令也没有问题的。 apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler apt-get install --no-install-recommends libboost-all-dev apt-get in.....
前言 在之前笔者有介绍过《在Android设备上使用PaddleMobile实现图像分类》,使用的框架是百度开源的PaddleMobile。在本章中,笔者将会介绍使用腾讯的开源手机深度学习框架ncnn来实现在Android手机实现图像分类,这个框架开源时间比较长,相对稳定很多。 ncnn的GitHub地址:https://github.com/Tencent/ncnn 使用Ubuntu编译ncnn库 1、首先要下载和解压NDK。 wget https://dl.google.com/android/repository/android-ndk-r17b-linux-x86_64.zip unzip android-ndk-r17b-linux-x86_64.zip 2、设置NDK环境变量,目录是NDK的解压目录。 export NDK_ROOT="/home/test/paddlepaddle/android-ndk-r17b" 设置好之后,可以使用以下的命令查看配置情况。 root@test:/home/test/paddlepaddle# echo $NDK_ROOT /hom......
前言 在之前笔者有介绍过《在Android设备上使用PaddleMobile实现图像分类》,使用的框架是百度开源的PaddleMobile。在本章中,笔者将会介绍使用小米的开源手机深度学习框架MACE来实现在Android手机实现图像分类。 MACE的GitHub地址:https://github.com/XiaoMi/mace 编译MACE库和模型 编译MACE库和模型有两种方式,一种是在Ubuntu本地上编译,另一种是使用docker编译。下面就介绍使用这两种编译方式。 使用Ubuntu编译 使用Ubuntu编译源码比较麻烦的是就要自己配置环境,所以下面我们就来配置一下环境。以下是官方给出的环境依赖: 所需依赖 SoftwareInstallation commandTested version Python 2.7 Bazelbazel installation guide0.13.0 CMakeapt-get install cmake>= 3.11.3 Jinja2pip install -I jinja2==2.102.10 PyYamlpip install....
前言 有不少开发者在学习深度学习框架的时候会开源一些训练好的模型,我们可以使用这些模型来运用到我们自己的项目中。如果使用的是同一个深度学习框架,那就很方便,可以直接使用,但是如果时不同深度学习框架,我们就要对模型转换一下。下面我们就介绍如何把Caffe的模型转换成PaddlePaddle的Fluid模型。 环境准备 在线安装最新发布的PaddlePaddle,可以使用pip命令直接在线安装PaddlePaddle。 pip install paddlepaddle 下在安装最新的PaddlePaddle,可以在下面选择适合自己PaddlePaddle的版本,这里下载的是最新编译得到的,然后使用pip命令安装。 http://www.paddlepaddle.org/documentation/docs/zh/0.14.0/new_docs/beginners_guide/install/install_doc.html#id26 克隆PaddlePaddle下的models源码。 git clone https://github.com/PaddlePaddle/mod....
前言 本文章我们来学习一下使用PaddlePaddle实现人脸对比和人脸识别,使用的训练数据集是CASIA-WebFace。 数据集介绍 我们使用的是CASIA-WebFace数据集,该人脸数据集是目前最大的公开人脸数据集。该人脸数据集一共有包含10,575个人,494,414张图像,包含彩色图和灰图。各大人脸数据集情况如下表。 DatasetSubjectsImagesAvailability LFW [1]5,74913,233Public WDRef [2]2,99599,773Public (feature only) CelebFaces [3]10,177202,599Private SFC [4]4,0304,400,000Private CACD [5]2,000163,446Public (partial annotated) CASIA-WebFace10,575494,414Public 训练模型 为了方便读取数据集,我们要生成一个图像列表,用于训练时读取数据,这个列表的作用具体可以阅读笔者之前的文章《我的PaddlePaddle学习之路》笔记四——自....
前言 现在越来越多的手机要使用到深度学习了,比如一些图像分类,目标检测,风格迁移等等,之前都是把数据提交给服务器完成的。但是提交给服务器有几点不好,首先是速度问题,图片上传到服务器需要时间,客户端接收结果也需要时间,这一来回就占用了一大半的时间,会使得整体的预测速度都变慢了,再且现在手机的性能不断提高,足以做深度学习的预测。其二是隐私问题,如果只是在本地预测,那么用户根本就不用上传图片,安全性也大大提高了。现在的手机深度学习会计有很多,比如百度的paddle-mobile、小米的MACNE、腾讯的NCNN、谷歌的TensorFlow lite,而我们在本章使用的是百度的paddle-mobile。 PaddleMobile的GitHub地址:https://github.com/PaddlePaddle/paddle-mobile 编译paddle-mobile库 想要使用paddle-mobile,就要编译Android能够使用的CPP库,在这一部分中,我们介绍两种编译Android的paddle-mobile库,分别是使用Docker编译paddle-mobile库、使用Ubunt....
前言 在Android 6.0(API 级别 23)以下申请权限是非常简单的,直接在AndroidManifest.xml这个配置文件中加入申请权限的列表就可以了,比如我要申请四个权限,如下: <!--打电话--> <uses-permission android:name="android.permission.CALL_PHONE" /> <!--使用相机--> <uses-permission android:name="android.permission.CAMERA" /> <!--写入内存卡--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--读取内存卡--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 但是在Android 6.0(API 级别 23)以.....
前言 在本篇文章中,我们将会介绍TensorFlow的安装,TensorFlow是Google公司在2015年11月9日开源的一个深度学习框架。 官网文档地址为:https://www.tensorflow.org/ 官方GitHub仓库:https://github.com/tensorflow/tensorflow TensorFlow目前支持4种开发语言,分别是Python(包括Python2和Python3)、Java、Go、C。笔者使用的环境如下: 开发语言:Python 3.6 使用操作系统:Ubuntu 16.04、Windows 10 硬件环境:CPU 基于这些环境,我们来安装TensorFlow吧,笔者将会通过两种操作系统来安装,分别是Ubuntu 16.04和Windows 10。 Ubuntu下安装TensorFlow 在Ubuntu上我们准备两种安装方式,分别是原生pip、Virtualenv 环境 和 Docker容器,下面我们就在三个环境下安装。 原生pip安装TensorFlow 使用原生的pip安装时最简单的,直接安装使用一条命令就可以安装完成了....
前言 笔者在《MySQL数据库实现主从复制》这一篇文章中有提到读写分离这个技术,这个技术时基于主从复制之后的一种技术。在数据库主从复制中,一个主数据库有一个或者多个从数据库,我们可以对主数据库进行写入操作(insert,delete,update),对一个或者多个从数据库进行读取操作(select)。这个的操作方式,就是大量的查询请求也会分布到各个从数据库上,达到负载均衡,比如3个从数据库,有9条查询请求,那么每一个从数据库只要处理3条查询请求就可以了,大大减少了数据库的查询压力。 在Mycat中,读写分离可以说有两种,一种是一主一从,另一种是一主多从。我们分别来介绍这两种方式: 一主一从: 是一个主数据库一个从数据库,如果我们对主数据库进行写入操作,那么从数据库也会执行相应的操作。笔者把一主多从也归为这种方式,因为一主多从其实也就是增加多几个从数据库而已,具体的结构每个变动太大。在一主一从中,最大的好处是实现了读写分离,在Mycat的调度下,把所有写的操作都是在主数据库中,把所有的读的操作都放在从数据库中。可能有读者可能会有疑问,这中读取分离也可以使用后端代码实现,为什么要使用Myc....
前言 我们用的在这篇文章《在CentOS上使用Nginx和Tomcat搭建高可用高并发网站》使用的只有一个MySQL数据库。 从安全角度来说这是非常不安全的,比如这个数据库服务器磁盘突然损坏了,里面的数据全部丢失了。这种情况如果一开始只是部署一个数据库的话就非常危险了,这表明我们要丢失全部数据,而数据对网站来说是最最重要的,所以我们要保证数据的安全。 从性能上来说,我们在《CentOS下安装和使用Mycat实现分布式数据库》这篇文章中介绍了分布式数据库,性能虽然比单个数据库的性能要好。但是当使用分布式数据库时,数据量还是很大,在查询数据时,可能会变得非常慢,导致锁表,一旦锁表就无法写入数据,就会影响其他用户的写入数据的操做。所以就需要读写分离,主(master)数据库负责写入数据,从(slave)数据库负责查询数据,就算从(slave)数据库在查询数据时出现了锁表,也不会影响到主(master)数据库的的写入操作,最多也是从(slave)数据库的数据更新的慢一些。基于这种情况,就出现了主从复制这个技术。 **主从复制:**就是有两个数据库服务器,一个是主(master)数据库服务器......
前言 在笔者的《在CentOS上使用Nginx和Tomcat搭建高可用高并发网站》这篇文章中,笔者介绍了如何在CentOS上搭建一个可支持高可用高并发的Java web后端服务器。善于思考的读者可能会想到,在上一篇文章中,我们只是实现Java web服务器的分布式来应对高并发,但是高并发对数据库的的负担也是很重的。在上一篇文章中,我们只是使用到一个MySQL服务器,但是但数据量非常大的时候,比如有一千万的用户,如果只有单个数据库存储,那一张用户表就有一千万条数据。庞大的数据量使得我们对数据进行查询的时候非常慢,但出现高并发的时候,大量的查询请求发送到数据库服务器,而数据库来不及响应,随时可能出现数据库崩溃的情况。 面对这个问题,我们使用Mycat来实现分布式数据库,假设我们有两个数据库服务器,那么一千万条的数据分开来存储,这样每个数据库只有五百万条数据,可以大大提高查询速度。如果有更多的数据库服务器,那么每个数据库所需要存储的数据就更少了,查询速度就会更快。基于这一个问题,我们就来学习如何在CentOS下安装和使用Mycat实现分布式数据库。 分布式数据库的整体架构: 总体架构 我们.....
前言 本篇文章将介绍如何搭建使用Nginx和Tomcat的高可用高并发的网站,我们将会在CentOS系统上搭建这样一个网站后端。这个系统的架构如下: 虚拟IP地址:192.168.204.221 主虚拟服务器:192.168.204.121 备虚拟服务器:192.168.204.122 Nginx服务器1:192.168.204.123 Nginx服务器2:192.168.204.124 Tomcat服务器1:192.168.204.123 Tomcat服务器2:192.168.204.124 创建CentOS虚拟机 我们这次安装的虚拟机是CentOS迷你版,镜像为:CentOS-6.5-x86_64-minimal.iso,该镜像可以到这里下载:http://vault.centos.org/6.5/isos/x86_64/CentOS-6.5-x86_64-minimal.iso。参考笔者的这一篇文章CentOS搭建云服务平台的前半部分创建4个CentOS虚拟机,用来模仿后台的多个系统,要注意的是这篇文章CentOS搭建云服务平台安装的的桌面版,我们在本文章用的迷你版,但是安.......
前言 最近在学习PaddlePaddle在各个显卡驱动版本的安装和使用,所以同时也学习如何在Ubuntu安装和卸载CUDA和CUDNN,在学习过程中,顺便记录学习过程。在供大家学习的同时,也在加强自己的记忆。本文章以卸载CUDA 8.0 和 CUDNN 7.05 为例,以安装CUDA 10.0 和 CUDNN 7.4.2 为例。 安装显卡驱动 禁用nouveau驱动 sudo vim /etc/modprobe.d/blacklist.conf 在文本最后添加: blacklist nouveau options nouveau modeset=0 然后执行: sudo update-initramfs -u 重启后,执行以下命令,如果没有屏幕输出,说明禁用nouveau成功: lsmod | grep nouveau 下载驱动 官网下载地址:https://www.nvidia.cn/Download/index.aspx?lang=cn ,根据自己显卡的情况下载对应版本的显卡驱动,比如笔者的显卡是RTX2070: 下载完成之后会得到一个安装包,不同版本文件名可能不一样: ....
前言 最近在学习在centOS上搭建一个云服务平台,所以写下该文章当做笔者的学习笔记,提供给大家一起学习。虽然我们没有办法实现像百度云、腾讯云、阿里云那么强大的云服务平台,但是可以学习它们这些思维,做一个简单的云平台给自己的团队或公司使用。 创建主机 我们的云服务器平台的结构是这样的: 这个平台是在一个主机,然后在主机中创建多个虚拟机给用户使用,所以我们首先要有一个主机。这个主机理论上是真正的物理机,同时有着非常多的物理资源,比如内存,磁盘,CPU等等。为了学习,我们在VMware中创建一个机器当做我们的主机,使用的系统是CentOS6.5。我们先要下载这个镜像,笔者使用的镜像是CentOS-6.5-x86_64-minimal.iso这个镜像,其下载地址是:http://vault.centos.org/6.5/isos/x86_64/CentOS-6.5-x86_64-minimal.iso 。 我们在VMware创建一个新的虚拟机,操作如小: 然后选择经典模型开始创建: 接下来是选择第三个的稍后安装操作系统: 选择的系统类型是Linux,具体的是CentOS 64位: ....
前言 在本章中,我们一起来学习下TensorFlow。我们将会学习到TensorFlow的一些基本库。通过计算一个线性函数来熟悉这些库。最后还学习使用TensorFlow搭建一个神经网络来识别手势。本章用到的一些库在这里下载。 TensorFlow的基本库 首先是导入所需的库,其中最重要的库就是tensorflow的,我们给它一个别名tf。 import math import numpy as np import h5py import tensorflow as tf from tensorflow.python.framework import ops from tf_utils import load_dataset, random_mini_batches, convert_to_one_hot, predict 下面我们使用TensorFlow计算一个损失函数,损失函数公式如下: $$ loss = \mathcal{L}(\hat{y}, y) = (\hat y^{(i)} - y^{(i)})^2 \tag{1} $$ 首先定义两个变量,对应是公式的y帽和y,如下,.....
前言 反向传播计算梯度$\frac{\partial J}{\partial \theta}$, $\theta$表示模型的参数。 $J$是使用正向传播和损失函数来计算的。 计算公式如下: $$ \frac{\partial J}{\partial \theta} = \lim_{\varepsilon \to 0} \frac{J(\theta + \varepsilon) - J(\theta - \varepsilon)}{2 \varepsilon} \tag{1} $$ 因为向前传播相对容易实现,所以比较容易获得正确的结果,确定要计算成本$J$ 正确。因此,可以通过计算$J$ 验证计算$\frac{\partial J}{\partial \theta}$ 。 一维梯度检查 一维线性函数$J(\theta) = \theta x$。该模型只包含一个实值参数$\theta$,并采取x作为输入。 一维线性模型 上图显示了关键的计算步骤:首先从开始$x$,然后评估该功能 $J(x)$(“前向传播”)。然后计算导数 $\frac{\partial J}{\partial \thet.....
前言 如果训练数据集不够大,由于深度学习模型具有非常大的灵活性和容量,以至于过度拟合可能是一个严重的问题,为了解决这个问题,引入了正则化的这个方法。要在神经网络中加入正则化,除了在激活层中加入正则函数,应该dropout也是可以起到正则的效果。我们来试试吧。 前提工作 在使用之前,我们还要先导入所需的依赖包,和加载数据,其中有些依赖包可以在这里下载。 # coding=utf-8 import matplotlib.pyplot as plt from reg_utils import compute_cost, predict, forward_propagation, backward_propagation, update_parameters from reg_utils import sigmoid, relu, initialize_parameters, load_2D_dataset from testCases import * # 加载数据 train_X, train_Y, test_X, test_Y = load_2D_dataset() 以下就是我们使用到.....