Now you see me

Chao's Blog

Month: September 2020

MobileNetV3是该系列的最新版本,该架构在一定程度上是通过自动网络架构搜索(NAS)找到的。 使用MnasNet-A1作为起点,但使用NetAdapt对其进行优化,NetAdapt是一种算法,可自动简化预训练模型,直到达到给定的延迟,同时保持较高的准确性。 除此以外,作者还手工进行了许多改进。 一、V3的改进 本质上,MobileNet版本3是对MnasNet的手工改进。 主要变化是: (1)重新设计了耗时的层; (2)使用h-wish而不是ReLU6; (3)扩展层使用的滤波器数量不同(使用NetAdapt算法获得最佳数量) (4)瓶颈层输出的通道数量不同(使用NetAdapt算法获得最佳数量) (5)Squeeze-and-excitation模块(SE)将通道数仅缩减了3或4倍 (6)对于SE模块,不再使用sigmoid,而是采用ReLU6(x + 3) / 6作为近似(就像h-swish那样) 针对第1点,MobileNet v1和v2都从具有32个滤波器的常规3×3卷积层开始,然而实验表明,这是一个相对耗时的层,只要16个滤波器就足够完成对224 x 224特征图的滤波。虽然这样并没有节省很多参数,但确实可以提高速度。 对于第2点,之前V1和V2都是用ReLU6作为激活层,但是在V3中,作者使用了hard swish(h-swish): \text{h-swish}(x)=x\times \text{ReLU6}(x+3)/6 常规的swish使用的是x\times \text{sigmoid}(x),它可以显著提高神经网络的精度,但是sigmoid的计算实在是太耗时了,所以在这里作者使用了ReLU6作为替代。作者认为几乎所有的软件和硬件框架上都可以使用ReLU6的优化实现。其次,它能在特定模式下消除了由于近似sigmoid的不同实现而带来的潜在数值精度损失。图1即为sigmoid和wish以及对应的hard版本,hard形式其实就是soft形式的低精度化。 图1(源自Ref [1]) 需要注意的是,MobileNet是来自于Google的,自然它更关注的是网络在Android设备上的表现,事实也的确如此,作者主要针对Google Pixel硬件对网络做了参数优化。 当然这并不意味着MobileNet V3就是慢的了,只不过它无法在iOS上达到最佳效果。 不过,并非整个模型都使用了h-swish,模型的前一半层使用常规ReLU(第一个conv层之后的除外)。 为什么要这样做呢? 因为作者发现,h-swish仅在更深层次上有用。 此外,考虑到特征图在较浅的层中往往更大,因此计算其激活成本更高,所以作者选择在这些层上简单地使用ReLU(而非ReLU6),因为它比h-swish省时。 对于第6点,具体解释一下如何完成ReLU6(x + 3) / 6的。如图2所示,在Mul层中,做了乘以0.16667的乘法,这就相当于除以6;ReLU6则融合在了卷积层之中;另外,对于x+3,这里的3被加在了卷积层的偏置层中了。这样做也是一种小的优化方式。 图2(源自Ref [2]) 除了以上提到的,相对于V2,在V3中作者还对最后的层进行了优化。 在MobileNetV2中,在全局平均池化层之前,是一个1 × 1卷积,将通道数从320扩展到1280,因此我们就能得到更高维度的特征,供分类器层使用。 这样做的好处是,在预测时有更多更丰富的特征来满足预测,但是同时也引入了额外的计算成本与延时。 所以,需要改进的地方就是要保留高维特征的前提下减小延时。 在MobileNetV3中,这个1 x 1卷积层位于全局平均池化层的后面,因此它可用于更小的特征图,因此速度更快。如图3所示, 这样使我们就能够删除前面的bottleneck层和depthwise convolution层,而不会降低准确性。 图3(源自Ref […]

一、V2与V1的架构区别 和MobielNetV1相比,MobileNet V2 仍使用深度可分离卷积,但其主要构成模块如下图1所示: 图1(源自Ref [2]) 这次block中有三个卷积层,作者分别将其称之为1 x 1 expansion layer、3 x 3 depthwise convolution和1 x 1 projection layer。后两层其实就是V1中的depthwise convolution和1×1 pointwise convolution layer,只不过在V2中,作者后者称为1 x 1 projection layer,并有不同的作用。下面就来看看,两者的差异究竟在哪里。 在V1中,逐点卷积要么使通道数保持不变,要么使通道数翻倍。 在V2中,情况恰恰相反:它使通道数变小。 这就是为什么现在将该层称为投影层( Projection Layer)的原因:它将具有大量维(通道)的数据投影到具有较少维数的张量中。 例如,depthwise convolution可以在具有144个通道的张量上工作,然后projection layer张量缩小至24个通道。这种层也称为bottleneck layer,因为它减少了流经网络的数据量。(这就体现了“bottleneck residual block”名称的一部分:每个块的输出都是瓶颈。) 此外,bottleneck residual block的第一层是新出现的,也就是expansion layer。 它也是1×1卷积, 其目的是在数据进入深度卷积之前扩展数据中的通道数。 因此,expansion layer始终具有比输入通道更多的输出通道(与projection layer相反)。 Expansion layer将通道数扩展多少倍,这个由扩展因子(expansion factor)给出。 这也是调整不同架构的超参数之一, 默认扩展因子为6。 例如图2所示,如果有一个具有24个通道的张量进入一个bottleneck residual block,则expansion […]

在本文中,主要介绍了MobileNetV1,其中使用的深度可分离卷积能够减小模型尺寸和复杂度,这对于移动端和嵌入式的视觉应用十分有效。作者提出了两个全局超参数(宽度乘子和分辨率乘子),用于取得效率和准确率之间的平衡。MobileNetV1的核心就是更小、更高效。 一、深度可分离卷积 深度可分离卷积之所以如此命名,是因为它不仅涉及空间维度,而且涉及深度维度(通道数)。深度可分离卷积将一个内核拆分为两个独立的内核,这些内核执行两个卷积:逐深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)。 但首先,让我们看看普通卷积的工作原理。 1.1 普通卷积 一般来说,典型的图像不一定是2D图像, 它可能具有深度、宽度和高度。 我们假设有一张12 x 12 x 3像素的输入图像。我们在图像上进行5 x 5的卷积,不使用填充,步幅为1。如果仅考虑图像的宽度和高度,则卷积过程类似于:12 x 12\to5 x 5\to 8 x 8。 在5×5内核中,每25个像素进行标量乘法,每次给出1个数字。 由于没有填充(12 – 5 + 1 = 8),因此最终得到8×8像素的图像。 但是,由于图像具有3个通道,因此我们的卷积内核也需要具有3个通道。 这意味着,每次内核移动时,我们实际上都执行5 x 5 x 3 = 75乘法,而不是执行5 x 5 = 25乘法。 如图1所示,我们以每25个像素执行标量矩阵乘法,输出1个数字。 经过5 x 5 x 3内核后,12 x 12 x 3图像将变为8 x […]

一、介绍 VGG-nets、ResNet和Inception Networks在特征提取领域已经取得了极大的成就,但他们仍然面对一系列的难题。例如,这些模型可能适用于某些数据集,但是由于它们使用了太多的超参数和计算过程,我们就很难将其直接移植到新的数据集上。 为了克服这些问题,业界已经考虑了结合VGG/ResNet(ResNet是从VGG演变而来的)和Inception Networks的优势。 简而言之,就是将ResNet的重复策略(repetition strategy)与Inception Network的拆分-转换-合并策略(split-transform-merge strategy)相结合。 换句话说,网络模块将输入分割,将其转换为所需的格式,然后合并以获取输出,每个模块都遵循相同的拓扑(如图1右侧)。 ResNeXt出现于Aggregated Residual Transformations for Deep Neural Networks,它是一种具有均一性的神经网络,相对于传统的ResNet,ResNeXt减小了超参数的数量。ResNeXt,其中包含了Next,这就意味一个额外的维度。作者在宽度(width)和深度(depth)以外,还提出了一个称为cardinality的参数。 图1左侧是传统的ResNet block;右侧是ResNeXt block,其cardinality是32,可以看出该参数其实就是内部路径数。 图1 ResNeXt block遵循 split-transform-aggregate策略。 ResNeXt block内部路径的数量就是cardinality,在图1中C=32。 ResNeXt block的所有路径具有相同的拓扑结构。 作者没有使用深度和宽度,而是采用了cardinality,较高的数值能够减小验证误差。 和ResNet相比,ResNeXt block使用了更多的子空间(也就是C>1)。 两个架构具有不同的宽度(即通道数)。ResNet的Layer-1的1个卷积层通道数为64,ResNeXt的Layer-1有32个不同卷积层,通道数均为4(一共是32$\times$4个通道数)。虽然ResNeXt block的通道数更多,但两个架构的参数量是一样的(约70k)。 ResNet: $256\times64+3\times3\times64\times64+64\times26$ ResNeXt: $C\times(256 \times d+3\times3 \times d \times d+d \times 256$, with$ C=32$ and $d=4$ 二、合并转换策略 2.1 回顾一下简单的神经元 图2 如图2所示,一个简单神经元的输出是$w{i} x{i}$的总和。上述的操作就可以定义为 […]

You can find this paper here if you are interested. Traction force microscopy (TFM) plays an important role to quantify cellular traction forces (CTFs), which help access the physiological processes and diseases. Here, traction force optical coherence microscopy (TF-OCM) is proposed to reconstruct 3D CTFs quantitatively in scattering media with minute-scale temporal sampling. In this […]

一、初识HarDNet 在一部分,我首先简单展示一下HarDNet的效果, 它使用了经过ImageNet预训练的权重。在这里采用的是PyTorch框架,在Google Colab上测试运行。 1.1 介绍HarDNet HarDNet指的是Harmonic DenseNet: A low memory traffic network,其突出的特点就是低内存占用率。过去几年,随着更强的计算能力和更大的数据集,我们能够训练更加复杂的网络。对于实时应用,我们面临的问题是如何在提高计算效率的同时,降低功耗。在这种情况下,作者们提出了HarDNet在两者之间寻求最佳平衡。 1.2 HarDNet的架构 HarDNet可以用于图像分割和目标检测,其架构是基于Densely Connected Network。在HarDNet中,作者提出了Harmonic Dense Bocks的概念。如图1所示,可以看到该网络就像多个谐波。HarDNet的全称就是Harmonic Densely Connected Network。 图1. Illustrations for HarDNet 1.3 HarDNet的可能应用 我们有许多图像分类算法,但是与其他分类算法相比,HarDNet可以降低功耗并达到类似的精度。 在目标检测中,SSD使用HarDNet-68作为最先进的骨干网络;在图像分割中,可以使用HarDNet对图像进行下采样。 二、再看HarDNet 2.1 背景 在神经网络的推理阶段,如何增加计算效率,并减小功耗,这是一个关键问题。 过去是怎么做的呢?首先就是减小模型的尺寸(模型的参数量和权重),这就意味着更小的MACs(number of multiply-accumulate operations or floating point operations)和更少的动态随机访问存储器(DRAM),这些主要用来读写模型参数和特征图。主要的工作有:Residual Networks 、SqueezeNets、Densely Connected Networks等。也可以通过pruning和quantization来减小模型尺寸和功耗。 对于语义分割任务,中间特征图的总尺寸是模型尺寸的几百倍,这样就会使DRAM过度存取特征图,导致推理速度变慢。 目前减小特征图尺寸的方法基本都是有损的(比如,subsampling),这样会使准确率下降。本文作者设计了一种CNN结构,减小了特征图的DRAM存取量,同时不损害准确率。 2.2 评价指标 Nvidia profiler:DRAM读/写的字节数。 ARM Scale […]