对残差网络动机的理解
神经网络以其强大的非线性表达能力而获得人们的青睐,但是将网络层数加深的过程中却遇到了很多困难,随着批量正则化,ReLU 系列激活函数等手段的引入,在多层反向传播过程中产生的梯度消失和梯度爆炸问题也得到了很大程度的解决。然而即便如此,随着网络层数的增加导致的拟合能力退化现象依然存在,如下图所示
可以看到,训练误差和测试误差都随网络层数的增加而增加,可以排除过拟合造成的预测性能退化。所以这里存在一个逻辑上讲不通的问题,通常来说,我们认为神经网络可以学习出任意形状的函数,具体到这个问题上来,假如浅层网络可以获得一个不错的效果,那么理论上深层网络增加的额外层只需要学会恒等映射,即可获得与浅层网络相同的预测精度
但实际情况根本不是这么回事儿,那么问题出在哪儿了呢?我们一厢情愿的认为中...
点我阅读更多...
关于 Faster RCNN 目标检测算法的详细分析
追本溯源
Faster RCNN 的最初版本是 RCNN,这是将神经网络算法应用在目标检测领域的最初的尝试之一,因此其方法显得有些稚嫩,或者说更易于理解接受。RCNN 的全称是 Regions with CNN features,简单来说,RCNN 的原理是用 CNN 来提取 Region 的特征,然后将这些特征送入分类模型进行分类,当时比较流行的分类模型还是像SVM这种比较传统的算法,为什么会说 RCNN 是两阶段的模型,就是因为最开始特征提取和分类模型都不统一,模型的训练过程不是连续的。
前面我们提到 Region 这个词,如果不解释一下的话可能会引起迷惑。其实 Region 就是图片中的一块区域,因为目标检测模型和LeNet、VGG这些分类模型不一样,其目的是为了检测图片中的...
点我阅读更多...
如何在神经网络中实现不同尺寸图片的批量输入
当我们使用 VGG 或者 ResNet 做图片分类的时候,最后一层接的全连接层的输出尺寸必然是恒定值,即潜在类别数量,尽管骨架卷积网络不要求输入的图片具有相同的尺寸,但为了接上全连接层,也必须将所有输入图片都变形到相同的尺寸。所以一般来讲,在数据加载阶段会有一个 Resize 操作
transform = transforms.Compose(
[
transforms.ToTensor(),
transforms.Resize(256),
transforms.RandomCrop(224),
...
]
)
这种强行将所有图片变换到一致大小的操作会造成图片中物体的几何变形,在 SPPNet 的论文中,作者认为这对图片识别精度不利,于是提...
点我阅读更多...
算法题:矩形分割
问题 给定一个矩形框作为背景,在其中放置一个方块,可以将大矩形分割成若干个大小不等的矩形区域,放置的方块越多,分割方案也越多,如下图所示。
现在给出大矩形的坐标,以及若干方块的坐标(方块完全位于大矩形内部,且它们之间不相交,并且放置顺序固定),要求编程输出分割后最大的矩形区域坐标。
思路
首先分析放置一个矩形的分割情况,一个方块可以把背景分割成 4 个矩形区域,其中每个点可以横向或者纵向绘制线段,因此总共有 (2^4 = 16) 种分割方案。
在放置第二个矩形物体的时候,会出现两种情况,一种情况是落入前一步的小矩形内(下图左边),第二情况是破坏原来的分割方案(下图右边)。
对于第一种情况,置入的物体可以继续分割其所在的矩形,而第二种情况则直接淘汰掉,表现在树结构上...
点我阅读更多...面向组合子编程在复杂业务逻辑中的工程化实现——多源图片素材请求模块
现有项目需要处理大量的图片,这些图片有的保存在文件系统,有的放在对象存储,甚至还有一部分需要实时地从网上下载。在不同的条件下可能需要处理这些图片中的一部分或全部,比如需求 A
A: 按文件系统 - 对象存储 - 网络的顺序依次处理,在这期间如果满足中止条件,则放弃后续图片。
对于这样的需求,我们可以给出下面的伪代码
// A
is_stopped=false
for image in file_system:
is_stopped = check()
if(is_stopped) {
break
}
handle(image)
for image in ossfs:
is_stopped=check()
if(is_stopped){
...
点我阅读更多...