使用SDNN (space displacement neural network)进行多字体手写识别
手写单字体的识别,在看过卷积神经网络的mnist例子之后,很容易实现,那么如何实现多字体的同时识别呢? 如下图

LeCun大神所用的是SDNN space displacement neural network,这是什么鬼?
经过一番查询之后,原来它就是滑动窗口+图像金子塔+NMS,2015年yahoo的一篇论文 Multi-view Face Detection using deep convolutional Neural Networks 用的也是这种方法
参考页面:https://www.quora.com/What-is-a-space-displacement-neural-network-SDNN
下面是两位知情人士的回答:
A neural network that is slided as a detector across all the possible locations in the image. You have a network with an input layer of size NxN pixels, Then, you have an image with size MxM pixels, with M>N. The objects that you want to detect are somewhere in the image but you do not know where. Thus, you sweep your neural network all over the image. At the first position, in the top-left corner, you have certain classification scores for the objects that you want to detect, and you update your score map at that position. Then, you apply your NN on a position shifted of 1 or few pixels horizontally, and you update the score map for that position as well. This process continue until all the image is processed and all the score map completed.
The score map represents a detection map of your objects. A mechanism of non-maxima suppression have to be implemented in order to avoid multiple matches of the same object.
It avoids you to use segmentation. However, also in this case there is not free lunch. For making it scale invariant, you need to create a scale space of your input image. This requires to perform a number of classification on the order of ten thousands for few scale in 1MP image. Even if you can reuse a great part of the computation for convolutional layers for nearby classifications, you have to recompute the fully connected layers all the time, making the process painfully slow.
That is why people started to research in object proposal techniques. Maybe one day enough computational power may let us not think about these problems.
翻译如下:
一个神经网络,像探测器一样,在图像的所有可能的位置进行滑动。假设你有一个输入大小为N×N象素的神经网络,然后,你有大小MXM像素的图像,其中M>N,你要检测图像中的某处,但你不知道在哪里。因此,你用神经网络扫描来遍布图像。在第一个位置,在左上角,你有一定的分类分数的对象,你想检测,你更新你的得分地图在那个位置。然后,你把你的NN水平转移到1或几个像素的位置,你更新该位置的得分地图以及。这个过程继续,直到所有的图像处理和所有的得分图完成。
分数图表示对象的检测图。以避免多个相同的对象的匹配,非最大值抑制的机制。
它避免了你使用分割。然而,在这种情况下也没有免费的午餐。为了使其缩放不变,您需要创建一个输入图像的缩放空间。这就需要对图像1mp几个规模十成千上万的顺序执行一系列分类。即使你可以利用附近的分类卷积层计算的很大一部分,你必须重新计算的全连接层的所有时间,使过程缓慢。
这就是为什么人们开始研究对象的建议技术(术语为region proposal,“区域建议”)。也许有一天足够的计算能力可能让我们不考虑这些问题。
Barath Lakshmanan, works at TVS Motor Company
CNNs extract features from the input and classify them. However, the input has to be size-normalized. In case of a single composite objects, each individual object within them have variable size and it is difficult to segment them. One way to recognize such objects is using a sliding window in the input layer as mentioned by Alessandro Ferrari.
It is to be noted that when convolution is performed, on the inputs which are overlapping regions in an image, same set of features gets extracted repeatedly. In order to avoid this redundant action, convolution is performed on the entire input image till the last conv layer. Finally the classifier is used as sliding window on the obtained feature map to produce the heat map.
Performance of such network should improve drastically as the redundancy is removed. This design is called as Space Displacement Neural Network (SDNN).
翻译如下:
CNN的特征提取和分类的输入。然而,输入必须是尺寸归一化。在一个单一的复合对象的情况下,每个单独的对象内有可变的大小,它是很难分割。认识到这些对象的一个方法是使用在输入层由Alessandro法拉利提到一个滑动窗口。
需要注意的是,当进行卷积,在图像中的重叠区域的输入,相同的一组功能被提取重复。为了避免这种重复的动作,卷积进行对整个输入图像到最后转换层。最后,分类器被用作所得到的特征映射的滑动窗口产生的热映射。
这样的网络的性能应大幅改善冗余被删除。这种设计被称为空间位移的神经网络(SDNN)。
使用SDNN (space displacement neural network)进行多字体手写识别的更多相关文章
- Recurrent Neural Network[survey]
0.引言 我们发现传统的(如前向网络等)非循环的NN都是假设样本之间无依赖关系(至少时间和顺序上是无依赖关系),而许多学习任务却都涉及到处理序列数据,如image captioning,speech ...
- How to implement a neural network
神经网络的实践笔记 link: http://peterroelants.github.io/posts/neural_network_implementation_part01/ 1. 生成训练数据 ...
- (转)The Neural Network Zoo
转自:http://www.asimovinstitute.org/neural-network-zoo/ THE NEURAL NETWORK ZOO POSTED ON SEPTEMBER 14, ...
- 深度神经网络如何看待你,论自拍What a Deep Neural Network thinks about your #selfie
Convolutional Neural Networks are great: they recognize things, places and people in your personal p ...
- A Neural Network in 11 lines of Python
A Neural Network in 11 lines of Python A bare bones neural network implementation to describe the in ...
- Recurrent Neural Network系列2--利用Python,Theano实现RNN
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Recurrent Neural Network系列4--利用Python,Theano实现GRU或LSTM
yi作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORK ...
- What is “Neural Network”
Modern neuroscientists often discuss the brain as a type of computer. Neural networks aim to do the ...
- 通过Visualizing Representations来理解Deep Learning、Neural network、以及输入样本自身的高维空间结构
catalogue . 引言 . Neural Networks Transform Space - 神经网络内部的空间结构 . Understand the data itself by visua ...
随机推荐
- Python学习---模拟微信网页登录180410
WEB微信 网页登录的猜想: a. 访问页面出现二维码 b. 长轮询监听是否已经扫码并且点击确认 c. 如何进行会话保持 d. 如何获取用户列表 e. 如何发送消息(接收消息) 过程:访问微信官网[h ...
- layer的alert图
layer.alert("xxx",1); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 及以后
- 微信JSSDK与录音相关的坑
微信JSSDK与录音相关的坑 最近一直在做微信JSSDK与录音相关的功能开发, 遇到了各种奇尺大坑, 时不时冷不丁地被坑一道, 让我时常想嘶吼: "微信JSSDK就是个大腊鸡!!!!!!!! ...
- APP案例分析——嘀嗒番茄钟
第一部分 调研, 评测 个人第一次上手体验 一直在用时间管理的软件,但是下载了卸载,来来去去也用了很多个.这个嘀嗒番茄钟也是最近比较喜欢的软件,界面简洁,功能简单,没有那么复杂非常容易上手. 功能性的 ...
- 动态代理与HOOK(与oc isa 替换)
HOOK:面向函数,解决函数调用拦截与替换的问题: 动态代理:面向对象,解决对象的动态替换问题: 动态代理的实现方案: 1.经典代理机制: 2.子类化机制:oc语言的isa替换是这额解决方案的经典案例 ...
- Linux改变文件所有者
Linux改变文件所有者 #把当前路径下jsportal文件夹及下的所有文件的所有者改为appmanager组下的appmanager用户.chown -R -v appmanager:appmana ...
- django下载excel,使用django-excel插件
django下载Excel,使用django-excel插件 由于目前的资料多是使用pandas或xlwt库实现的.其实没有那么的麻烦,因为django有相对应的插件django-excel. 该插件 ...
- Java认证与授权服务JAAS基础概念
转:http://www.nosqlnotes.com/technotes/jaas-concept/ JAAS是”Java Authentication and Authorization Serv ...
- ElasticSearch学习之——基本的文档CURD
一.文档的添加 POST http://127.0.0.1:9200/{index}/{type}/{id} { "key":"value", "ke ...
- Day4 数组
双重for循环 外循环控制行,内循环控制列. //乘法表 ; i <= ; i++) { ; j <= i ;j++) { System.out.print(j+"*" ...