目录

夜雨飘零

记录精彩的程序人生

《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从入门到炼丹》十四——把预测模型部署在服务器 有更新!

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从入门到炼丹》十五——把预测模型部署到Android手机上 有更新!

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

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实现声音分类 有更新!

本章我们来介绍如何使用PaddlePaddle训练一个区分不同音频的分类模型,例如你有这样一个需求,需要根据不同的鸟叫声识别是什么种类的鸟,这时你就可以使用这个方法来实现你的需求了。

基于Tensorflow实现声音分类 有更新!

本章我们来介绍如何使用Tensorflow训练一个区分不同音频的分类模型,例如你有这样一个需求,需要根据不同的鸟叫声识别是什么种类的鸟,这时你就可以使用这个方法来实现你的需求了。话不多说,来干。

Android使用AIUI快速搭建智能助手 有更新!

目前大部分的手机都有语音助手,例如小米手机的小爱同学,VIVO的小V等等,通过智能助手我们可以快速询一些资讯或者操作手机,例如询问天气,发送微信给你的好友等等。这篇文章就来介绍如何使用AIUI快速搭建类似这样的智能助手。

Android使用webrtc实现检测用户是否在说话 有更新!

我们在Android应用做语音识别的时候,一般是用户唤醒之后开始说话。当用户超过一定的时候没有说话,就停止录音,并把录音发送到语音识别服务器,获取语音识别结果。本教程就是解决如何检测用户是否停止说话,我们使用的是WebRTC架构的源代码中的vad代码实现的。 VAD算法全称是Voice Activity Detection,该算法的作用是检测是否是人的语音,使用范围极广,降噪,语音识别等领域都需要有vad检测。webrtc的vad检测原理是根据人声的频谱范围,把输入的频谱分成六个子带:80Hz——250Hz,250Hz——500Hz,500Hz——1K,1K——2K,2K——3K,3K——4K。分别计算这六个子带的能量。然后使用高斯模型的概率密度函数做运算,得出一个对数似然比函数。对数似然比分为全局和局部,全局是六个子带之加权之和,而局部是指每一个子带则是局部,所以语音判决会先判断子带,子带判断没有时会判断全局,只要有一个通过认为是语音。

使用Tensorflow实现声纹识别 有更新!

本章介绍如何使用Tensorflow实现简单的声纹识别模型,首先你需要熟悉音频分类,没有了解的可以查看这篇文章《基于Tensorflow实现声音分类》。基于这个知识基础之上,我们训练一个声纹识别模型,通过这个模型我们可以识别说话的人是谁,可以应用在一些需要音频验证的项目。

基于PaddlePaddle实现声纹识别 有更新!

本章介绍如何使用PaddlePaddle实现简单的声纹识别模型,本项目参考了人脸识别项目的做法PaddlePaddle-MobileFaceNets ,使用了ArcFace Loss,ArcFace loss:Additive Angular Margin Loss(加性角度间隔损失函数),对特征向量和权重归一化,对θ加上角度间隔m,角度间隔比余弦间隔在对角度的影响更加直接。

Python实现常见的排序算法 有更新!

本章介绍使用Python实现场景的几种排序算法。分别有冒泡算法、快速排序、插入排序、希尔排序、选择排序、堆排序、归并排序、计数排序、桶排序、基数排序。

Mediapipe框架在Android上的使用 有更新!

MediaPipe是用于构建跨平台多模态应用ML管道的框架,其包括快速ML推理,经典计算机视觉和媒体内容处理(如视频解码)。下面是用于对象检测与追踪的MediaPipe示例图,它由4个计算节点组成:PacketResampler计算器;先前发布的ObjectDetection子图;围绕上述BoxTrakcing子图的ObjectTracking子图;以及绘制可视化效果的Renderer子图。

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

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

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

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

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

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

基于Pytorch实现的流式与非流式语音识别 有更新!

MASR是一款基于Pytorch实现的语音识别框架,MASR致力于简单,实用的语音识别项目。可部署在服务器,Nvidia Jetson设备,未来还计划支持Android等移动设备。

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

Paddle Lite是飞桨基于Paddle Mobile全新升级推出的端侧推理引擎,在多硬件、多平台以及硬件混合调度的支持上更加完备,为包括手机在内的端侧场景的AI应用提供高效轻量的推理能力,有效解决手机算力和内存限制等问题,致力于推动AI应用更广泛的落地。

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

PP-YOLO是PaddleDetection优化和改进的YOLOv3的模型,其精度(COCO数据集mAP)和推理速度均优于YOLOv4模型,PP-YOLO在COCO test-dev2017数据集上精度达到45.9%,在单卡V100上FP32推理速度为72.9 FPS, V100上开启TensorRT下FP16推理速度为155.6 FPS。其中还包含了PP-YOLO tiny模型,此模型后量化压缩模型,将模型体积压缩到1.3M,对精度和预测速度基本无影响。

基于insightface实现的人脸识别和人脸注册 有更新!

本教程的人脸识别是使用的是insightface库进行开发的,该库使用的框架为mxnet。

Android基于图像语义分割实现人物背景更换 有更新!

本教程是通过PaddlePaddle的PaddleSeg实现的,该开源库的地址为:http://github.com/PaddlPaddle/PaddleSeg ,使用开源库提供的预训练模型实现人物的图像语义分割,最终部署到Android应用上。关于如何在Android应用上使用PaddlePaddle模型,可以参考笔者的这篇文章《基于Paddle Lite在Android手机上实现图像分类》。