关于cnn:AI识万物从0搭建和部署手语识别系统-⛵

作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 计算机视觉实战系列: https://www.showmeai.tech/tutorials/46 本文地址:https://www.showmeai.tech/article-detail/292 申明:版权所有,转载请分割平台与作者并注明出处 珍藏ShowMeAI查看更多精彩内容据北京听力协会预估数据,我国听障人群数量已过千万。而在寰球范畴内有4.66亿人患有残疾性听力损失,约占全世界人口的5%。聋哑人士很非凡,他们须要应用手语进行交换,其余与常人无异,我国存在特殊教育程度在各城市中倒退力度具备较大差别,国家通用手语推广水平浅,但不懂手语,与听力障碍者交流会十分艰难。 在本篇内容中,ShowMeAI 借助深度学习与神经网络技术,针对这个问题从 0 构建 1 个应用程序,检测手语并将其翻译给其他人进而突破手语隔膜。 搭建和部署实现后,你能够通过摄像头,轻松测试模型,如下图所示,快来一起试试吧。这个动图中的手势代表的单词,见文末哦! 手语介绍咱们先来简略理解一下手语,它由 3 个次要局部组成: 手指拼写:这是一种手动的交换形式,用双手和手指拼写单词。每个字母都用指定的手地位示意。单词级符号词汇:这是一个大型视频数据集,用于辨认单词或字母的整个手势。非手部特色:包含任何面部表情、嘴巴、舌头或身材姿态。 在本文中,咱们先解决第①个局部的问题。咱们筹备应用的解决方案是基于视觉数据的神经网络 深度学习与计算机视觉人工智能和计算机视觉的最典型的模型是卷积神经网络(CNN),它在典型的计算机视觉利用中(如图像识别、指标检测等)利用宽泛。咱们在本次利用的核心技术也将采纳 CNN。 CNN 网络有着如上图所示的网络结构,典型的构造包含卷积层、池化层、激活层、全连贯层等,对于输出图像,能够无效抽取图像内容表征,并进行分类或其余解决。卷积层等非凡构造,能够在控制参数量的前提下,保障良好的图像特征提取能力。 对于卷积神经网络的具体常识能够参考ShowMeAI下述教程: ShowMeAI的 深度学习教程 | 吴恩达专项课程 · 全套笔记解读 中的文章 卷积神经网络解读ShowMeAI的 深度学习与计算机视觉教程 中的文章 卷积神经网络详解 小试牛刀,买通流程咱们来构建一个 CNN 辨认的流程,会分成以下根底步骤: 数据读取与切分数据可视化及预处理CNN网络构建与训练① 导入相干库咱们在这里次要应用 TensorFlow 构建网络与训练,会应用 Numpy 做数据计算与解决,以及应用 Matplotlib 进行简略可视化。 对于这些工具库,ShowMeAI都制作了快捷即查即用的速查表手册,大家能够在下述地位取得: Tensorflow 速查手册Numpy 速查手册Matplotlib 速查手册咱们先把这些工具库导入。 # 导入工具库import stringimport pandas as pdimport numpy as npimport tensorflow as tfimport matplotlib.pyplot as pltfrom tensorflow import kerasfrom functools import partialfrom tensorflow.keras.preprocessing.image import ImageDataGenerator, array_to_img② 读取数据集本数据集为手语字母对应的数据集,图片 size 不大,所以也叫做 sign_mnist 数据集(类比手写数字数据集 mnist),局部示例图片如下 ...

August 9, 2022 · 5 min · jiezi

关于cnn:产品实操三分钟教你快速搭建字符识别CNN模型

深度学习中最令人兴奋的畛域之一就是计算机视觉。通过卷积神经网络CNN(Convolutional Neural Networks),咱们曾经可能创立主动驾驶零碎、面部检测零碎和主动医学图像剖析等。但如果不是业余的数据工程师与行业人员,您简直没有机会理解CNN。明天,本文将从实践与实际两种形式,率领各位来理解CNN的外部结构,以及CNN是如何实现具体性能的。 01 第一局部:卷积神经网络CNN 什么是卷积神经网络 咱们经常据说的神经网络,全名人工神经网络ANN(Artificial Neural Network),是一种模拟生物神经网络的构造和性能的数学模型或计算模型。而卷积神经网络CNN是一种前馈神经网络,在图像处理方面CNN的体现非常杰出。 为什么应用卷积神经网络? 全连贯神经网络不适宜用于解决图像,因为会有以下三方面的问题:没有利用像素之间地位信息;参数过多效率低下,训练艰难;大量的参数导致网络过拟合。 应用卷积神经网络CNN能够解决下面的问题。CNN在原来的全连贯层后面退出多个卷积层、激活函数与池化层,其中每层的神经元将只与前一层中的一小块区域连贯,而不是采取全连贯形式,防止参数爆炸的同时扩大了神经网络的层数,使深度学习成为可能。 传统神经网络(左)与卷积神经网络CNN(右) 工作原理 卷积神经网络CNN中次要由输出层、卷积层、激活函数、池化层以及全连贯层组成。CNN的工作原理相似大脑辨认图像的过程,不同的大脑区域能够辨认图像不同维度的特色。CNN中的每个卷积层都蕴含多个卷积核。这些卷积核从左到右,从上到下扫描整个图像以失去特色图。在通过多个卷积层的计算后能够失去图像在不同维度的形象示意,从而获取图像特色以辨认图像。 卷积计算示意图(图片起源:github mlonotebook) 为了让各位对CNN有一个具体的印象,接下来本文将对CNN的每一层进行解说。 卷积层 通过卷积层,咱们能够实现对图像的去噪、锐化、边缘检测、含糊等操作,从而达到提取图像不同特色的目标。 在卷积层中,蕴含多个可学习的卷积核,让上一层输入的特色图与卷积核进行卷积操作,即输出项与卷积核之间进行点积运算,而后将后果送入激活函数,就能够失去输入特色图。 以下图为例。图中输出图像大小为32323,3是它的深度(RGB),卷积层的卷积核大小为553。通过一个卷积核与输出图像的卷积就能够失去一个28281的特色图。 卷积计算示例 第一层卷积层只能提取一些低级的特色,如边缘、线条和角等层级,而更多层的网路就能从低级特色中迭代提取更简单的特色。 下图是输出图像别离通过1个/2个/3个卷积核卷积后输入的特色图,能够看到通过迭代后咱们取得了更深层次的特色图。 卷积特色图 通过卷积核,CNN能够提取图片的一部分,相当于传统神经网络的一个特色。多个卷积核对应多个特色,产生多个特色的同时应用卷积的形式防止了参数爆炸。 激活函数 激活函数又称非线性映射。若干线性操作层(卷积层)的重叠只能起到线性映射的作用,无奈造成简单的函数。激活函数能够引入非线性因素,减少整个网络的表达能力。因而每次卷积实现后,都须要应用激活函数对后果进行解决。 常见的激活函数有Sigmoud、tanh、Maxout以及咱们最罕用的Relu等。 常见的激活函数 以ReLu为例,该函数能够将图片中的负像素值替换为零,以此对特征提取的后果进行修改。 ReLu解决特色图像 池化层 池化层又称下采样层,次要的作用是对激活函数解决后的后果进行降维,压缩数据和参数的量来保留最显著的特色,避免过拟合。 以罕用的最大池化为例,在最大池化过程中,输出图像大小为44,在每22的区域中计算最大值。最初输入的池化特色大小为2*2,这个过程中分辨率变为原来的一半。 最大池化示例 全连贯层 全连贯层能够把所有部分特色通过权值矩阵从新整合为一个残缺的特色视图,其输入值能够采纳softmax分类器进行分类。 全连贯层示意图 Softmax分类器罕用于多分类工作,它能够将多个神经元的输入映射到(0,1)的区间中,以概率的模式实现多分类。 Dropout函数 Dropout函数是指在深度学习网络的训练过程中,让某个神经元的激活值以肯定的概率p进行工作。这样能够使模型泛化性更强,因为它不会太依赖某些部分的特色。 Dropout函数示例 02 第二局部:试验 试验——手写数字辨认 读完了下面的内容,置信您对卷积神经网络CNN有了初步的理解。接下来,本文将通过试验的形式直观地展示CNN的搭建,训练以及测试过程。 本试验将在Sophon Base中构建一个简略的卷积神经网络,并应用一部分MNIST数据集训练它辨认手写数字。 数据集介绍MNIST数据集蕴含60000个训练集和10000测试数据集。分为图片和标签,图片是28*28的像素矩阵,标签为0~9共10个数字。 MINST数据集 本次试验应用的数据集为Sophon Base平台提供的images_small_minst数据集,该数据集选取了MINST数据集的一小部分图片,训练集加测试集总共500个。具体字段如下所示: small_minst数据集 试验环境星环科技Sophon Base数据迷信平台 开始试验在创立我的项目之前,本文默认您的sophon平台及各种配置文件曾经胜利装置,失常运行,并且您已胜利注册sophon 用户。 进入我的项目首页,点击 “+新建我的项目” 以新建一个我的项目。 在我的项目首页,点击创立好的我的项目。点击左侧的试验,点击试验以新建空白试验。试验创立后会主动进入该试验界面。 从左侧将算子“images_small_minst”、“字符串索引”、“设置角色”、“人工神经网络”、“利用模型”、“性能(分类)”拖动至右侧工作区并依照下图进行连贯: 算子连贯示意图 算子的连贯也能够参考下方视频进行操作: ,时长00:59 主流程算子连贯 算子参数设置如下:“字符串索引” 算子 ...

September 28, 2021 · 1 min · jiezi

关于cnn:技术博客目标检测算法RCNN介绍

指标检测算法R-CNN介绍作者:高雨茁 指标检测简介指标检测(Object Detection)的工作是找出图像中所有感兴趣的指标(物体),确定它们的类别和地位。计算机视觉中对于图像识别有四大类工作:1.分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断外面蕴含什么类别的指标。2.定位-Location:解决“在哪里?”的问题,即定位出这个指标的的地位。3.检测-Detection:解决“是什么?在哪里?”的问题,即定位出这个指标的的地位并且晓得指标物是什么。4.宰割-Segmentation:分为实例的宰割(Instance-level)和场景宰割(Scene-level),解决“每一个像素属于哪个指标物或场景”的问题。 以后指标检测算法分类1.Two stage指标检测算法先进行区域生成(region proposal,RP)(一个有可能蕴含待检物体的预选框),再通过卷积神经网络进行样本分类。工作:特征提取—>生成RP—>分类/定位回归。常见的two stage指标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。 2.One stage指标检测算法不必RP,间接在网络中提取特色来预测物体分类和地位。工作:特征提取—>分类/定位回归。常见的one stage指标检测算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等。 本文后续将介绍其中的经典算法R-CNN并给出相应的代码实现。 R-CNNR-CNN(Regions with CNN features)是将CNN办法利用到指标检测问题上的一个里程碑。借助CNN良好的特征提取和分类性能,通过RegionProposal办法实现目标检测问题的转化。算法分为四个步骤: 从原图像生成候选区域(RoI proposal)将候选区域输出CNN进行特征提取将特色送入每一类别的SVM检测器,判断是否属于该类通过边界回归失去准确的指标区域算法前向流程图如下(图中数字标记对应上述四个步骤):在下文中咱们也会依照上述四个步骤的程序解说模型构建,在这之后咱们会解说如何进行模型训练。但在开始具体上述操作之前,让咱们简略理解下在训练中咱们将会应用到的数据集。 数据集简介原论文中应用的数据集为:1.ImageNet ILSVC(一个较大的辨认库) 一千万图像,1000类。2.PASCAL VOC 2007(一个较小的检测库) 一万图像,20类。训练时应用辨认库进行预训练,而后用检测库调优参数并在检测库上评测模型成果。 因为原数据集容量较大,模型的训练工夫可能会达到几十个小时之久。为了简化训练,咱们替换了训练数据集。与原论文相似,咱们应用的数据包含两局部:1.含17种分类的花朵图片 2.含2种分类的花朵图片。 咱们后续将应用17分类数据进行模型的预训练,用2分类数据进行fine-tuning失去最终的预测模型,并在2分类图片上进行评测。 模型构建步骤一该步骤中咱们要实现的算法流程局部如下图数字标记:R-CNN中采纳了selective search算法来进行region proposal。该算法首先通过基于图的图像宰割办法初始化原始区域,行将图像宰割成很多很多的小块。而后应用贪婪策略,计算每两个相邻的区域的类似度,而后每次合并最类似的两块,直至最终只剩下一块残缺的图片。并将该过程中每次产生的图像块包含合并的图像块都保留下来作为最终的RoI(Region of Interest)集。具体算法流程如下:区域合并采纳了多样性的策略,如果简略采纳一种策略很容易谬误合并不类似的区域,比方只思考纹理时,不同色彩的区域很容易被误合并。selective search采纳三种多样性策略来减少候选区域以保障召回: 多种色彩空间,思考RGB、灰度、HSV及其变种多种类似度度量规范,既思考色彩类似度,又思考纹理、大小、重叠状况等通过扭转阈值初始化原始区域,阈值越大,宰割的区域越少很多机器学习框架都内置实现了selective search操作。 步骤二该步骤中咱们要实现的算法流程局部如下图数字标记:在步骤一中咱们失去了由selective search算法生成的region proposals,但各proposal大小根本不统一,思考到region proposals后续要被输出到ConvNet中进行特征提取,因而有必要将所有region proposals调整至对立且合乎ConvNet架构的规范尺寸。相干的代码实现如下: import matplotlib.patches as mpatches# Clip Imagedef clip_pic(img, rect): x = rect[0] y = rect[1] w = rect[2] h = rect[3] x_1 = x + w y_1 = y + h # return img[x:x_1, y:y_1, :], [x, y, x_1, y_1, w, h] return img[y:y_1, x:x_1, :], [x, y, x_1, y_1, w, h]#Resize Imagedef resize_image(in_image, new_width, new_height, out_image=None, resize_mode=cv2.INTER_CUBIC): img = cv2.resize(in_image, (new_width, new_height), resize_mode) if out_image: cv2.imwrite(out_image, img) return imgdef image_proposal(img_path): img = cv2.imread(img_path) img_lbl, regions = selective_search( img, scale=500, sigma=0.9, min_size=10) candidates = set() images = [] vertices = [] for r in regions: # excluding same rectangle (with different segments) if r['rect'] in candidates: continue # excluding small regions if r['size'] < 220: continue if (r['rect'][2] * r['rect'][3]) < 500: continue # resize to 227 * 227 for input proposal_img, proposal_vertice = clip_pic(img, r['rect']) # Delete Empty array if len(proposal_img) == 0: continue # Ignore things contain 0 or not C contiguous array x, y, w, h = r['rect'] if w == 0 or h == 0: continue # Check if any 0-dimension exist [a, b, c] = np.shape(proposal_img) if a == 0 or b == 0 or c == 0: continue resized_proposal_img = resize_image(proposal_img,224, 224) candidates.add(r['rect']) img_float = np.asarray(resized_proposal_img, dtype="float32") images.append(img_float) vertices.append(r['rect']) return images, vertices让咱们抉择一张图片查看下selective search算法成果 ...

August 18, 2020 · 9 min · jiezi

关于cnn:基于keras平台CNN神经网络模型的服装识别分析

原文链接:http://tecdat.cn/?p=8493在许多介绍图像识别工作的介绍中,通常应用着名的MNIST数据集。然而,这些数据存在一些问题: 1.太简略了。例如,一个简略的MLP模型能够达到99%的准确度,而一个2层CNN能够达到99%的准确度。 2.它被适度应用。从字面上看,每台机器学习入门文章或图像识别工作都将应用此数据集作为基准。然而,因为取得近乎完满的分类后果非常容易,所以它的实用性会受到打折,并且对于古代机器学习/ AI工作并不真正有用。 因而,呈现Fashion-MNIST数据集。该数据集是作为MNIST数据的间接代替而开发的,其意义在于: 1.尺寸和格调雷同:28x28灰度图像 2.每个图像与10个类中的1个相关联,即:        0:T恤/上衣,        1:裤子,        2:套头衫,        3:连衣裙,        4 :外套,        5:凉鞋,        6:衬衫,        7:运动鞋,        8:背包,        9:脚靴 3. 60000训练样本和10000个测试样本以下是一些样本的快照: 自从它呈现以来,曾经有多份提交文件来对这些数据进行基准测试,其中一些可能达到95%以上的准确度 。  我也试图用keras来对这个数据进行基准测试。keras是构建深度学习模型的高级框架,在后端抉择TensorFlow,Theano和CNTK。它很容易装置和应用。对于我的应用程序,我应用了CNTK后端。  在这里,我将以两个模型为基准。一种是层构造为256-512-100-10的MLP,另一种是类VGG的CNN。  第一个模型在100个历元后的测试数据上达到了[0.89,0.90]的精度,而后者达到了45个期间后的测试数据的精度> 0.94。  咱们先用tSNE来看它。据说tSNE是最无效的尺寸放大工具。   我应用了1000个样本来疾速运行。如果您的PC速度足够快并且有工夫,则能够针对残缺数据集运行tSNE。  咱们看到,包含品质大小,底部决裂和对称性等几个特色将类别离开。  为了建设本人的网络,咱们首先导入一些库 该模型在大概100个期间的测试数据集上达到了近90%的准确度。当初,咱们来构建一个相似VGG的CNN模型。咱们应用相似于VGG的体系结构,但依然十分不同。因为图形数据很小,如果咱们应用原始VGG体系结构,它很可能会适度配合,并且在测试数据时体现不佳,这些数据在下面列出的公开提交的基准测试中察看到。在keras中构建这样一个模型是十分天然和容易的: 这个模型有150万个参数。咱们能够调用'fit'办法来训练模型: model3_fit=model3.fit(X_train, Y_train2, validation_data = (X_test, Y_test2), epochs=50, verbose=1, batch_size=500)通过40次当前,这个模型在测试数据上取得了0.94的精度。显然,这个模型也存在适度拟合问题。咱们稍后会解决这个问题。

July 17, 2020 · 1 min · jiezi