先来上两张图看看那种猫是暹罗?那种猫是英短?
第一张暹罗
第二张英短
你以后是不是可以识别了暹罗和英短了?大概能,好像又不能。这是因为素材太少了,我们看这两张图能分别提取出来短特征太少了。那如果我们暹罗短放100张图,英短放100张图给大家参考,再给一张暹罗或者英短短照片是不是就能识别出来是那种猫了,即使不能完全认出来,是不是也有90%可能是可以猜猜对。那么如果提供500张暹罗500张英短短图片呢,是不是猜对的概率可以更高?
我们是怎么识别暹罗和英短的呢?当然是先归纳两种猫的特征如面部颜色分布、眼睛的颜色等等,当再有一张要识别短图片时,我们就看看面部颜色分布、眼睛颜色是不是可暹罗的特征一致。
同样把识别暹罗和英短的方法教给计算机后,是不是计算机也可以识别这两种猫?
那么计算机是怎么识别图像的呢?先来看一下计算机是怎么存储图像的。
图像在计算机里是一堆按顺序排列的数字,1到255,这是一个只有黑白色的图,但是颜色千变万化离不开三原色——红绿蓝。
这样,一张图片在计算机里就是一个长方体!depth为3的长方体。每一层都是1到255的数字。
让计算机识别图片,就要先让计算机了解它要识别短图片有那些特征。提取图片中的特征就是识别图片要做的主要工作。
下面就该主角出场了,卷及神经网络(Convolutional Neural Network, CNN).
最简单的卷积神经网络就长下面的样子。
分为输入、卷积层、池化层(采样层)、全连接和输出。每一层都将最重要的识别信息进行压缩,并传导至下一层。
卷积层:帮助提取特征,越深(层数多)的卷积神经网络会提取越具体的特征,越浅的网络提取越浅显的特征。
池化层:减少图片的分辨率,减少特征映射。
全连接:扁平化图片特征,将图片当成数组,并将像素值当作预测图像中数值的特征。
•卷积层
卷积层从图片中提取特征,图片在计算机中就上按我们上面说的格式存储的(长方体),先取一层提取特征,怎么提取?使用卷积核(权值)。做如下短操作:
观察左右两个矩阵,矩阵大小从6×6 变成了 4×4,但数字的大小分布好像还是一致的。看下真实图片:
图片好像变模糊了,但这两个图片大小没变是怎么回事呢?其实是用了如下的方式:same padding
在6×6的矩阵周围加了一圈0,再做卷积的时候得到的还是一个6×6的矩阵,为什么加一圈0这个和卷积核大小、步长和边界有关。自己算吧。
上面是在一个6×6的矩阵上使用3X3的矩阵做的演示。在真实的图片上做卷积是什么样的呢?如下图:
对一个32x32x3的图使用10个5x5x3的filter做卷积得到一个28x28x10的激活图(激活图是卷积层的输出).
•池化层
减少图片的分辨率,减少特征映射。怎么减少的呢?
池化在每一个纵深维度上独自完成,因此图像的纵深保持不变。池化层的最常见形式是最大池化。
可以看到图像明显的变小了。如图:
在激活图的每一层的二维矩阵上按2×2提取最大值得到新的图。真实效果如下:
随着卷积层和池化层的增加,对应滤波器检测的特征就更加复杂。随着累积,就可以检测越来越复杂的特征。这里还有一个卷积核优化的问题,多次训练优化卷积核。
下面使用apple的卷积神经网络框架TuriCreate实现区分暹罗和英短。(先说一下我是在win10下装的熬夜把电脑重装了不下3次,系统要有wls,不要用企业版,mac系统和ubuntu系统下安装turicreae比较方便)
首先准备训练用图片暹罗50张,英短50长。测试用图片10张。
上代码:(开发工具anaconda,python 2.7)
数据放到了h盘image目录下,我是在win10下装的ubuntu,所以h盘挂在mnt/下。
test的文件:(x指暹罗,y指英短,这样命名是为了代码里给测试图片区分猫咪类型)
test_data[‘label’] = test_data[‘path’].apply(lambda path: ‘xianluo’ if ‘x’ in path else ‘yingduan’)
第一次结果如下:
训练精度0.955 验证精度才0.75 正确率才0.5。好吧,看来是学习得太少,得上三年高考五年模拟版,将暹罗和英短的图片都增加到100张。在看结果。
这次训练精度就达到0.987了,验证精度1.0,正确率1.0 牛逼了。
看下turicreate识别的结果:
我们实际图片上猫是:(红色为真实的猫的类型-在代码里根据图片名称标记的,绿色为识别出来的猫的类型)
可以看到两者是一致的。牛逼了训练数据才两百张图片,就可以达到这种效果。
本文原创首发于Cobub官网博客,如需转载请注明出处~
- 大小: 50.2 KB
- 大小: 37.6 KB
- 大小: 36.7 KB
- 大小: 5.6 KB
- 大小: 16.9 KB
- 大小: 16.5 KB
- 大小: 134.2 KB
- 大小: 27.4 KB
- 大小: 154.2 KB
- 大小: 16.4 KB
- 大小: 6.9 KB
- 大小: 23.8 KB
- 大小: 27.4 KB
- 大小: 6.1 KB
- 大小: 12 KB
- 大小: 113.7 KB
- 大小: 15.5 KB
- 大小: 14 KB
- 大小: 9.3 KB
- 大小: 11.3 KB
分享到:
相关推荐
Python 使用人工智能实现暹罗猫和英短猫的识别主要依赖于深度学习中的卷积神经网络(Convolutional Neural Network,CNN)。CNN 是一种专门处理图像数据的神经网络模型,它能够自动学习和提取图像中的特征,从而进行...
双LSTM神经网络-暹罗LSTM
我们在这里专门使用该代码使用暹罗卷积神经网络(CNN)对全字语音片段进行表示学习。 这里的代码是简单的神经网络代码,没有特征提取或评估代码,甚至没有示例脚本。 我们希望发布一个单独的食谱,说明如何使用暹罗...
用暹罗神经网络替换YOLOv4,以识别两幅图像之间的差异,这可用于构建和学习暹罗-YOLOv4
总结来说,该研究通过融合不同类型的卷积神经网络,实现了对手写数字的高效识别。其创新之处在于利用数据打乱策略加速模型训练,并通过结合多种网络结构增强特征表达。这不仅提高了识别准确率,还为深度学习在其他...
暹罗神经网络最初被用于图像识别,其核心思想是使用共享权重的两个或多个神经网络分支来比较不同输入之间的相似性。这种架构特别适合处理时间序列数据,因为它可以学习到输入序列的内在结构,并对它们进行有效的编码...
本文描述了一种用于车辆再识别的双流连体神经网络。该网络同时输入96 96像素的汽车形状的小粗糙块和96 48像素的便于人类识别的车牌图像的精细特征。然后,我们将两者优势结合起来的溪流通过合并距离暹罗描述符和一个...
孪生神经网络(Siamese Neural Networks,简称SNN)是一种深度学习模型,因其结构中的两个或多个共享相同权重的神经网络分支而得名。在MATLAB中实现孪生网络,可以有效地解决图像识别和匹配问题,特别是对于小样本...
暹罗深度神经网络的语义相似性。 该存储库包含Tensorflow中的暹罗神经网络的实现,该实现基于3种不同的主要深度学习架构构建: 卷积神经网络递归神经网络多头注意力网络创建该存储库的主要原因是将GitHub上主要基于...
连体ReID 这是使用暹罗神经网络体系结构的重新识别算法。 /!\ 建设中
传统的签名验证方法依赖于特征提取和比较,而现代技术则利用深度学习,特别是卷积神经网络(CNN)来自动学习签名的特征。 **暹罗网络详解** 暹罗网络是一种特殊的深度学习模型,主要用于一对一匹配任务,如人脸...
暹罗网络(Siamese Networks)是一种特殊的神经网络结构,通常用于相似性学习任务中,如图像检索、人脸识别等。它由两个或多个共享权重的子网络组成,每个子网络接收不同的输入,并通过比较它们的输出来评估输入之间...
暹罗网络(Siamese Network)是一种深度学习架构,主要用于解决图像识别中的相似性学习问题,特别是人脸识别。...通过理解并实践这个教程,你将深化对深度学习和神经网络的理解,提升自己的技能水平。
使用暹罗卷积网络检测翻唱歌曲 经过训练的python和深度学习模型可自动识别翻唱歌曲。 简单的4层暹罗卷积,在输出端增加了仿射层。 65%的精度表明该数据集可以采用这种方式进行构图。 计划为将来的工作进行数据扩充...
连体神经网络的单次图像识别 PyTorch中的的实现,在数据集上进行了培训和测试。 要求 火炬视觉== 0.5.0 火炬== 1.4.0 numpy == 1.16.3 pytorch_lightning == 0.5.3.2 枕头== 7.0.0 提供requirements.txt 指示 ...
面部识别系统的核心是暹罗神经网络。 多年来,已经发布并实现了不同的体系结构。 该库使用dlib的面部识别模型,该模型受ResNet-34网络的启发。 修改后的ResNet-34具有29个卷积层。 该模型在LFW数据集上达到了99.38...
使用暹罗网络构建语音和面部识别模型 了解原型网络及其变体 从头开始建立关系网络和匹配网络 在Python中从头开始实现MAML和爬行动物算法 如果您觉得这本书适合您,请立即获取! 说明和导航 所有代码都组织在文件夹中...
Chainer是一个强大的、灵活的Python深度学习框架,它允许用户以动态计算图的方式构建复杂的神经网络模型,非常适合实现暹罗网络。 在"chainer-siamese"项目中,我们可以看到如何用Chainer来构建和训练暹罗网络。...