【语义分割专题】语义分割相关工作--ENet网络相关工作

Enet实现原理 一、Enet简介 在UDP(用户数据报协议)的基础上提供一个相对薄,简单且健壮的网络通信层,它的主要功能是可选的可靠,按顺序传送数据包。 Enet省略了某些更高级别的网络功能,例如身份验证,服务发现,加密或其他特定于应用程序的类似任务,因此该库保持灵活,可移植且易于嵌入。 二、为啥需要Enet TCP不支持多信道 TCP需要用户自己处理粘包问题 UDP不支持排序,连接管理,带宽资源管理,数据包的大小有限制 Enet实现了基于单一UDP,具有UDP和TCP等价功能,但比同时集成UDP和TCP更干净的统一 阅读详情

ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation

Paszke, A., Chaurasia, A., Kim, S., & Culurciello, E. (2016). ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ArXiv, abs/1606.02147.

在这里插入图片描述

  # Initial block of the model:
  #         Input
  #        /     \
  #       /       \
  #maxpool2d    conv2d-3x3
  #       \       /  
  #        \     /
  #      concatenate


 # Upsampling bottleneck:
  #     Bottleneck Input
  #        /        \
  #       /          \
  # conv2d-1x1     convTrans2d-1x1
  #      |             | PReLU
  #      |         convTrans2d-3x3
  #      |             | PReLU
  #      |         convTrans2d-1x1
  #      |             |
  # maxunpool2d    Regularizer
  #       \           /  
  #        \         /
  #      Summing + PReLU
  #
  #  Params: 
  #  projection_ratio - ratio between input and output channels
  #  relu - if True: relu used as the activation function else: Prelu us used



  # Regular|Dilated|Downsampling bottlenecks:
  #
  #     Bottleneck Input
  #        /        \
  #       /          \
  # maxpooling2d   conv2d-1x1
  #      |             | PReLU
  #      |         conv2d-3x3
  #      |             | PReLU
  #      |         conv2d-1x1
  #      |             |
  #  Padding2d     Regularizer
  #       \           /  
  #        \         /
  #      Summing + PReLU
  #
  # Params: 
  #  dilation (bool) - if True: creating dilation bottleneck
  #  down_flag (bool) - if True: creating downsampling bottleneck
  #  projection_ratio - ratio between input and output channels
  #  relu - if True: relu used as the activation function else: Prelu us used
  #  p - dropout ratio



  # Asymetric bottleneck:
  #
  #     Bottleneck Input
  #        /        \
  #       /          \
  #      |         conv2d-1x1
  #      |             | PReLU
  #      |         conv2d-1x5
  #      |             |
  #      |         conv2d-5x1
  #      |             | PReLU
  #      |         conv2d-1x1
  #      |             |
  #  Padding2d     Regularizer
  #       \           /  
  #        \         /
  #      Summing + PReLU
  #
  # Params:    
  #  projection_ratio - ratio between input and output channels

论文架构

  • Abstract

  • Introduction

    目前的图像分割网络主要是用到了VGG16的架构,大量的参数以及长时间的推理时间。

    可好好思考一下谷歌新提出的efficientnet网络架构。

  • Related Work

    large architectures and numerous parameters

  • Network architecture

  • Design choices

    bottleneck:
    下采样的bottleneck:
    主线包括三个卷积层,
    先是2×2投影做降采样;
    然后是卷积(有三种可能,Conv普通卷积,asymmetric分解卷积,Dilated空洞卷积)
    后面再接一个1×1的做升维 注意每个卷积层后均接Batch
    Norm和PReLU。
    辅线包括最大池化和Padding层
    最大池化负责提取上下文信息
    Padding负责填充通道,达到后续的残差融合 融合后再接PReLU。
    非下采样的bottleneck:
    主线包括三个卷积层,
    先是1×1投影;
    然后是卷积(有三种可能,Conv普通卷积,asymmetric分解卷积,Dilated空洞卷积)
    后面再接一个1×1的做升维 注意每个卷积层后均接Batch
    Norm和PReLU。
    辅线直接恒等映射(只有下采样才会增加通道数,故这里不需要padding层)
    融合后再接PReLU。

    Feature map resolution:下采样做成空间信息丢失,会对边缘信息造成影响。要求输入和输出要有相同的分辨率。强有力的下采样也需要强有力的上采样。FCN中通过skip connections;segnet通过池化索引。本文将输入先压缩,只输入小的特征图给网络结构,去除一部分图片的视觉冗余内容。但下采样的好处在于可以获取更大的感受野,获取更多的上下文信息,便于分类。
    FCN的解决办法是将encoder阶段的feature map塞给decoder,增加空间信息。
    SegNet的解决办法是将encoder阶段做downsampling的indices保留到decoder阶段做upsampling使用。
    ENet采用的是SegNet的方法,这可以减少内存需求。同时为了增加更好的上下文信息,使用dilated conv(空洞卷积)扩大上下文信息。

    后处理的模块:CRF以及RNN都可以用来提高准确率。

  • stage

    ENet模型大致分为5个stage:
    - initial:初始化模块
    左边是做3×3/str=2的卷积,右边是做MaxPooling,将两边结果concat一起,做 通道合 并,这样可以上来显著减少存储空间。
    - stage1:encoder阶段。包括5个bottleneck,第一个bottleneck做下采样,后面4个重复的bottleneck
    - stage2-3:encoder阶段。stage2的bottleneck2.0做了下采样,后面有时加空洞卷积,或分解卷积。stage3没有下采样,其他都一样。
    - stage4-5:属于decoder阶段。比较简单。一个上采样配置两个普通的bottleneck。

  • Network architecture

    Early downsampling:早期处理高分辨率的输入会耗费大量计算资源,ENet的初始化模型会大大减少输入的大小。这是考虑到视觉信息在空间上是高度冗余的,可以压缩成更有效的表示方式。

    Decoder size:size 相比于SegNet中encoder和decoder的镜像对称,ENet的Encoder和Decoder不对称,由一个较大的Encoder和一个较小的Decoder组成。

    Nonlinear operations:relu并不一定有用;PRELU。非线性激活函数relu的应用降低了精度,分析的原因是网络层数太少了,不够深,不能很快的过滤信息,采用prelu。

    Factorizing filters:将n×n的卷积核拆为n×1和1×n(InceptionV3提出的)。可以有效的减少参数量,并提高模型感受野。

    Dilated convolutions:空洞卷积,精度蹭蹭蹭蹭上升。空洞卷积Dilated convolutions可以有效的提高感受野。有效的使用Dilated convolutions提高了4%的IoU,使用Dilated convolutions是交叉使用,而非连续使用。

    Regularization:因为数据集本身不大,很快会过拟合。使用L2效果不佳,使用stochastic depth还可以,但琢磨了一下stochastic depth就是Spatial Dropout的特例,故最后选择Spatial Dropout,效果相对好一点

    Regularization

  • Results

  • Conclutison

参考链接 : https://github.com/srihari-humbarwadi/ENet-A-Deep-Neural-Network-Architecture-for-Real-Time-Semantic-Segmentation/blob/master/batch_training.py

在这里插入图片描述

代码

def initial_block(tensor):
    conv = Conv2D(filters=13,kernel_size=(3,3),strides=(2,2),padding="same",name="initial_block_conv",kernel_initializer="he_normal")(tensor)
    pool = MaxPooling2D(pool_size=(2,2),name="initial_blokc_pool")(tensor)
    concat = concatenate([conv,pool],axis=-1,name="initial_block_concat")
    return concat
def bottleneck_encoder(tensor, nfilters, downsampling=False, dilated=False, asymmetric=False, normal=False, drate=0.1,
                       name=''):
    y = tensor
    skip = tensor
    stride = 1
    ksize = 1
    if downsampling:
        stride = 2
        ksize = 2
        skip = MaxPooling2D(pool_size=(2, 2), name=f'max_pool_{name}')(skip)
        skip = Permute((1, 3, 2), name=f'permute_1_{name}')(skip)  # (B, H, W, C) -> (B, H, C, W)
        ch_pad = nfilters - K.int_shape(tensor)[-1]
        skip = ZeroPadding2D(padding=((0, 0), (0, ch_pad)), name=f'zeropadding_{name}')(skip)
        skip = Permute((1, 3, 2), name=f'permute_2_{name}')(skip)  # (B, H, C, W) -> (B, H, W, C)

    y = Conv2D(filters=nfilters // 4, kernel_size=(ksize, ksize), kernel_initializer='he_normal',
               strides=(stride, stride), padding='same', use_bias=False, name=f'1x1_conv_{name}')(y)
    y = BatchNormalization(momentum=0.1, name=f'bn_1x1_{name}')(y)
    y = PReLU(shared_axes=[1, 2], name=f'prelu_1x1_{name}')(y)

    if normal:
        y = Conv2D(filters=nfilters // 4, kernel_size=(3, 3), kernel_initializer='he_normal', padding='same',
                   name=f'3x3_conv_{name}')(y)
    elif asymmetric:
        y = Conv2D(filters=nfilters // 4, kernel_size=(5, 1), kernel_initializer='he_normal', padding='same',
                   use_bias=False, name=f'5x1_conv_{name}')(y)
        y = Conv2D(filters=nfilters // 4, kernel_size=(1, 5), kernel_initializer='he_normal', padding='same',
                   name=f'1x5_conv_{name}')(y)
    elif dilated:
        y = Conv2D(filters=nfilters // 4, kernel_size=(3, 3), kernel_initializer='he_normal',
                   dilation_rate=(dilated, dilated), padding='same', name=f'dilated_conv_{name}')(y)
    y = BatchNormalization(momentum=0.1, name=f'bn_main_{name}')(y)
    y = PReLU(shared_axes=[1, 2], name=f'prelu_{name}')(y)

    y = Conv2D(filters=nfilters, kernel_size=(1, 1), kernel_initializer='he_normal', use_bias=False,
               name=f'final_1x1_{name}')(y)
    y = BatchNormalization(momentum=0.1, name=f'bn_final_{name}')(y)
    y = SpatialDropout2D(rate=drate, name=f'spatial_dropout_final_{name}')(y)

    y = Add(name=f'add_{name}')([y, skip])
    y = PReLU(shared_axes=[1, 2], name=f'prelu_out_{name}')(y)

    return y

def bottleneck_decoder(tensor, nfilters, upsampling=False, normal=False, name=''):
    y = tensor
    skip = tensor
    if upsampling:
        skip = Conv2D(filters=nfilters, kernel_size=(1, 1), kernel_initializer='he_normal', strides=(1, 1),
                      padding='same', use_bias=False, name=f'1x1_conv_skip_{name}')(skip)
        skip = UpSampling2D(size=(2, 2), name=f'upsample_skip_{name}')(skip)

    y = Conv2D(filters=nfilters // 4, kernel_size=(1, 1), kernel_initializer='he_normal', strides=(1, 1),
               padding='same', use_bias=False, name=f'1x1_conv_{name}')(y)
    y = BatchNormalization(momentum=0.1, name=f'bn_1x1_{name}')(y)
    y = PReLU(shared_axes=[1, 2], name=f'prelu_1x1_{name}')(y)

    if upsampling:
        y = Conv2DTranspose(filters=nfilters // 4, kernel_size=(3, 3), kernel_initializer='he_normal', strides=(2, 2),
                            padding='same', name=f'3x3_deconv_{name}')(y)
    elif normal:
        Conv2D(filters=nfilters // 4, kernel_size=(3, 3), strides=(1, 1), kernel_initializer='he_normal',
               padding='same', name=f'3x3_conv_{name}')(y)
    y = BatchNormalization(momentum=0.1, name=f'bn_main_{name}')(y)
    y = PReLU(shared_axes=[1, 2], name=f'prelu_{name}')(y)

    y = Conv2D(filters=nfilters, kernel_size=(1, 1), kernel_initializer='he_normal', use_bias=False,
               name=f'final_1x1_{name}')(y)
    y = BatchNormalization(momentum=0.1, name=f'bn_final_{name}')(y)

    y = Add(name=f'add_{name}')([y, skip])
    y = ReLU(name=f'relu_out_{name}')(y)

    return y
def ENET(input_shape=(None, None, 3), nclasses=11):
    print('. . . . .Building ENet. . . . .')
    img_input = Input(input_shape)

    x = initial_block(img_input)

    x = bottleneck_encoder(x, 64, downsampling=True, normal=True, name='1.0', drate=0.01)
    for _ in range(1, 5):
        x = bottleneck_encoder(x, 64, normal=True, name=f'1.{_}', drate=0.01)

    x = bottleneck_encoder(x, 128, downsampling=True, normal=True, name=f'2.0')
    x = bottleneck_encoder(x, 128, normal=True, name=f'2.1')
    x = bottleneck_encoder(x, 128, dilated=2, name=f'2.2')
    x = bottleneck_encoder(x, 128, asymmetric=True, name=f'2.3')
    x = bottleneck_encoder(x, 128, dilated=4, name=f'2.4')
    x = bottleneck_encoder(x, 128, normal=True, name=f'2.5')
    x = bottleneck_encoder(x, 128, dilated=8, name=f'2.6')
    x = bottleneck_encoder(x, 128, asymmetric=True, name=f'2.7')
    x = bottleneck_encoder(x, 128, dilated=16, name=f'2.8')

    x = bottleneck_encoder(x, 128, normal=True, name=f'3.0')
    x = bottleneck_encoder(x, 128, dilated=2, name=f'3.1')
    x = bottleneck_encoder(x, 128, asymmetric=True, name=f'3.2')
    x = bottleneck_encoder(x, 128, dilated=4, name=f'3.3')
    x = bottleneck_encoder(x, 128, normal=True, name=f'3.4')
    x = bottleneck_encoder(x, 128, dilated=8, name=f'3.5')
    x = bottleneck_encoder(x, 128, asymmetric=True, name=f'3.6')
    x = bottleneck_encoder(x, 128, dilated=16, name=f'3.7')

    x = bottleneck_decoder(x, 64, upsampling=True, name='4.0')
    x = bottleneck_decoder(x, 64, normal=True, name='4.1')
    x = bottleneck_decoder(x, 64, normal=True, name='4.2')

    x = bottleneck_decoder(x, 16, upsampling=True, name='5.0')
    x = bottleneck_decoder(x, 16, normal=True, name='5.1')

    img_output = Conv2DTranspose(nclasses, kernel_size=(2, 2), strides=(2, 2), kernel_initializer='he_normal',
                                 padding='same', name='image_output')(x)
    img_output = Activation('softmax')(img_output)

    model = Model(inputs=img_input, outputs=img_output, name='ENET')
    print('. . . . .Build Compeleted. . . . .')
    return model

其中的loss值定义

def dice_coeff(y_true, y_pred):
    smooth = 1.
    y_true_f = K.flatten(y_true)
    y_pred_f = K.flatten(y_pred)
    intersection = K.sum(y_true_f * y_pred_f)
    score = (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)
    return score

def dice_loss(y_true, y_pred):
    loss = 1 - dice_coeff(y_true, y_pred)
    return loss

def total_loss(y_true, y_pred):
    loss = binary_crossentropy(y_true, y_pred) + (3*dice_loss(y_true, y_pred))
    return loss
小结-语义分割 语义分割是将标签分配给图像中的像素。 一、图像分类与语义分割不同点? 池化层可以增加感受野,同时减少特征图的分辨率。这对于分类来说十分有效,其对象的空间位置无关重要,并能提取出更多抽象、突出的特征。然而,池化和带步长的卷积对语义分割是不利的,因为降低特征图分辨率意味着空间信息的丢失,如精确的边缘形状。因此语义分割提出的几种典型的网络都致力于恢复编码器中因降低分辨率而丢失的信息。 二、语义分割... 阅读详情

相关推荐

语义分割:基于openCV和深度学习(一)

语义分割:基于openCV和深度学习(一) Semantic segmentation with OpenCV and deep learning 介绍如何使用OpenCV、深度学习和ENet架构执行语义分段。阅读完今天的文章后,能够使用OpenCV对图像和视频应用语义分割。深度学习有助于提高计算机视觉的前所未有的准确性,包括图像分类、目标检测,现在甚至分割。 传统的分割方法是将图像分割为若干部分(标准化切割、图形切割、抓取切割、超像素等);然而,算法并没有真正理解这些部分所代表的内容。 另一方面,语义分割

吴建明wujianming_110117 2179

实时分割网络-ENet

背景介绍:实时执行像素级语义分割的能力在移动应用程序中至关重要,最近的DCNN网络的缺点在于需要大量浮点运算,运行时间长,阻碍了语义分割的可用性算法组成:提出了ENet,专门针对需要低延迟操作的任务文章亮点:ENet与现存模型相比,速度提升了18倍,FLOPs减少了75倍,参数减少了79倍,并能保证不错的准确度模型评估:在CamVid、Cityscapes和SUM RGBD数据集均取得了不错的成绩。

shengweiit的博客 1861

KillConfirmOverlay:开源弹幕覆盖层,实现CS直播击杀反馈特效

弹幕文化催生了直播互动玩法的持续创新,而如何将实时弹幕与游戏画面深度结合,一直是直播技术实践中的热门方向。弹幕覆盖层作为独立于游戏画面的渲染层,通过WebSocket实时通信协议接收弹幕消息,再以前端动画形式呈现,为直播间提供了远超普通弹幕栏的互动体验。本文从实时消息架构、弹幕数据流转、OBS浏览器源集成等基础技术切入,介绍一个名为KillConfirmOverlay 5.0的开源项目——它把弹幕监听、关键词触发、击杀反馈动画和OBS集成整合为完整工程示例,适用于CS直播场景下的自定义弹幕特效开发。通过剖析

weixin_34354945的博客 552

计算机视觉——实时语义分割ENet算法原理与模型训练

ENet所提出的这一创新神经网络架构,专为语义分割任务量身打造,其核心设计理念在于充分发挥嵌入式设备上有限资源的潜力。在这一目标的指引下,ENet的工作取得了显著的成效,不仅成功实现了与现有技术相比更为高效的计算性能,而且在某些情况下,还实现了与之相匹配甚至更优的结果,即便这些现有技术对计算能力和内存的需求远高于ENet的设计。

知来者逆的博客 5329

EfficientNet的代码实例:语义分割实战

1. 背景介绍 1.1 语义分割的挑战与意义 语义分割是计算机视觉领域的一项重要任务,其目标是将图像中的每个像素分类到预定义的语义类别中。这项技术在自动驾驶、医疗影像分析、机器人技术等领域具有广泛的应用。然而,语义分割也面临着诸多挑战: 复杂场景

AI天才研究院 833

机器学习笔记 - ENet论文解读

实时执行逐像素语义分割的能力在移动应用程序中至关重要。 最近针对此任务的深度神经网络的缺点是需要大量的浮点运算,并且运行时间长,这阻碍了它们的可用性。 在本文中,我们提出了一种名为 ENet(高效神经网络)的新型深度神经网络架构,专为需要低延迟操作的任务而创建。 ENet 的速度提高了 18 倍,所需的 FLOP 减少了 75 个,参数减少了 79 个,并且提供了与现有模型相似或更好的准确度。 我们已经在 CamVid、Cityscapes 和 SUN 数据集上对其进行了测试,并报告了与现有最先进.....

学以致用 知行合一 2214

轻量级实时语义分割:ENet & ERFNet

ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation 发表在CVPR2016。ERFNet: Efficient Residual Factorized ConvNet for Real-Time Semantic Segmentation 发表在2018年1月的IEEE Transactions on Intelligent Transportation Systems。两者任务均为轻量级实时性语义分割。.

BIT_Legend的博客 3440

语义分割(研究现状、技术基础)

前言 语义分割的目标是输入图像的每个像素分配一个标签,即像素级别的物体分类任务,如下图所示, 其中一张场景图像及该场景对应的语义分割标签图像,道路所属的所有像素区域都被标注为紫色,即道路类。基于这一特性,它可以广泛地应用于人脸分割、医学图像处理和自动驾驶领域的感知应用。 一、国内外研究现状 1.1 通用语义分割 FCN:Fully Convolution Network(FCN)作为语义分割在深度学习领域的开山之作,它第一次将图像分类网絡的最后一层全连接层替换为一系列反卷积层,使得经过下采

黎国溥 1万+

ENet——实时语义分割的深度神经网络架构与代码实现

在移动设备上执行实时像素级分割任务具有重要意义。现有的基于分割的深度神经网络需要大量的浮点运算,并且通常需要较长时间才能投入使用。本文提出的ENet架构旨在减少潜在的计算负担。ENet在保持或提高分割精度的同时,相比现有的分割网络,速度提升了18倍,参数量减少了79倍。论文地址:https://arxiv.org/abs/1606.02147随着增强现实设备、智能家居设备和自动驾驶技术的兴起,将语义分割算法移植到性能较低的移动设备上变得尤为迫切。

知来者逆的博客 3485

LightNet:用于语义图像分割的轻量级网络(Cityscapes和Mapillary Vistas数据集)-Python开发

LightNet !!!新仓库。 ⇒LightNet ++:增强的轻量级网络,用于实时语义分割!!! ⇒EfficientNet.PyTorch:Ef LightNet的简洁,模块化,人性化的PyTorch实现! ⇒LightNet ++:增强的轻量级网络,用于实时语义分割!!! ⇒EfficientNet.PyTorch:具有预先训练的权重的EfficientNet的简洁,模块化,人性化的PyTorch实施!!!新仓库。 ⇒MixNet-Pytorch:具有预先训练的权重的MixNet的简洁,模块化,人性化的PyTorch实现该存储库包含以下代码(在PyTorch中):“ LightNet:用于语义图像分割的轻量级网络”(联合国

安装keil5(MDK)及导入pack包教程

首先说明的是我安装的Keil版本为Keil V5.29.0.0 1、安装软件 右键管理员权限运行安装包 设置安装路径以及pack的存放路径 随意输入First Name和E-mail 安装驱动 完成软件安装,然后可以先关闭弹出的Pack Install(一会再添加) 2、激活一下软件 打开桌面的Keil File → License Management(我之前注册过了) 右...

hrx-@@ 10万+

ENet:一种用于实时语义分割的深层神经网络结构

摘要: 实时执行像素语义分割的能力在移动应用程序中至关重要。最近针对这一任务的深层神经网络的缺点是需要大量的浮点运算,并且运行时间长,这阻碍了其可用性。在本文中,我们提出了一种新的深度神经网络体系结构ENet(高效神经网络),专门为需要低延迟操作的任务创建。ENet的速度高达18CamVid,Cityscaoes和SUN数据集上对其进行了测试,并报告了与现有最先进方法的比较,以及网络精度和处理时间之间的权衡。我们减少了嵌入式系统上拟议体系结构的性能度量,并提出了可能的软件改进建议,是ENet更快。 介绍

的博客 3965

TDDFT计算软件Octopus学习笔记(二):基态计算(Si)

本文以硅为例,来进行基态计算。

陈啸的博客 7308

enet分割_论文阅读 | CVPR 2016 | 语义分割论文: ENet

论文源址:https://arxiv.org/abs/1606.02147tensorflow github: https://github.com/kwotsin/TensorFlow-ENet摘要 在移动端上进行实时的像素级分割十分重要。基于分割的深度神经网络中存在大量的浮点运算而且需要经过较长的时间才可以进行投入使用。该文提出的ENet目的是减少潜在的计算。ENet相比现存的分割网络,速度快...

weixin_39716043的博客 336

车辆动力学仿真模型的可信度评估方法

以转向工况测试为例,实车采集的方向盘转角作为车辆动力学模型的输入,记录车辆动力学模型的横摆角速度的输出结果,计算横摆角速度的幅频特性,根据《GB/T 6323-2014 转向盘角脉冲试验》的方法,获取横摆角速度峰值、横摆角速度谐振峰频率、横摆角速度谐振峰水平,与采集的实车结果对比,并计算车辆动力学模型和实车对于关键对比参数的相对误差。由公式(2)计算可得,在制动工况和转向工况测试下,车辆动力学模型和实车的纵向车速、制动减速度、制动距离、横摆角速度基本一致,精度> 85%,具有较好的精度。

wangchen900705的博客 1961

IEC 61400-1:2019 中的 Vref ——从分类基准到极端风模型的应用

IEC 61400-1:2019 中的 Vref ——从分类基准到极端风模型的应用

weixin_46713695的博客 1290

实时语义分割调研

文章目录0. 前言1. 语义分割概述2. 一些总结3. 论文浏览3.1 ENet3.2 ICNet3.3 BiSeNet3.4 CGNet3.5 DFANet3.6 Fast-SCNN3.7 BiSeNetV23.8 HyperSeg3.9 Rethinking BiSeNet For Real-time Semantic Segmentation 0. 前言 实时语义分割(real-time semantic segmentation),目标是能实时跑在CPU上。 本文调研的基本都是普通的语义分割方法,

清欢 6006

Android 14.0 开机广播接收慢广播延迟问题分析

在14.0的系统rom定制化开发中,在某些时候在接收开机广播的时候发现,过了一分钟才收到开机广播,接下来就需要分析下 开机广播的相关分发机制,来处理下相关问题

安卓兼职framework和app工程师的博客 631

实时分割网络(持续更新)

实时性本质:牺牲精度换取效率 问题1:实时与经典分割算法区别 (1)为什么提出实时性? 目前在深度学习领域,算法设计可分为两个派别 一派为学院派,研究强大复杂的模型网络和实验方法,为了追求更高的性能;另一派为工程派,旨在将算法更稳定高效的落地在硬件平台上,效率是其追求的目标复杂的模型固然具有更好的性能,但是高额的存储空间计算资源消耗是使其难以有效的应用在各硬件平台上的重要原因。(学院派以论文为导向,工程派以生产为导向) (2)经典分割与实时分割 经典分割代表算法 :FCN、U-Net、DeepLab系列、R

RuixuanZhang的博客 5494

代谢组数据分析(一):生成代谢组数据SummarizedExperiment对象

本文介绍了基于Zeybel 2022年发布的多组学数据集的分析脚本,该数据集包含微生物组、宿主人体学指标、临床学指标、血浆代谢组和免疫因子等多维度数据,涵盖56位患者的横截面数据和22位患者的纵向时间序列数据。脚本旨在生成适用于下游分析的数据对象,主要包括phyloseq和SummarizedExperiment两类。phyloseq对象用于整合微生物群落数据,支持多数据整合、可视化、丰富分析功能和便捷的数据处理;SummarizedExperiment对象则广泛应用于基因组学和转录组学研究,便于数据整合、

专注生信领域 2997

大华 DSS 数字监控系统 itcBulletin SQL 注入漏洞复现

大华 DSs 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。大华 DSS存在SQL注入漏洞,攻击者 pota/services/itcBuletin 路由发送特殊构造的数据包,利用报错注入获取数据库敏感信息。攻击者除了可以利用 SQL注入漏词获取数据库中的信息例如,管理员后台密码、站点的用户人人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限poc验证是否存在漏洞如果你想查询用户名和密码。

holyxp的博客 4005

超像素池化全监督语义分割

Efficient semantic image segmentation with superpixel pooling 摘要 在这项工作中,我们评估了超像素池化层在深层网络结构中用于语义分割的应用。超像素池化是一种灵活有效的方法,可以替代其他包含空z间先验信息的池策略。我们提出了一个简单而高效的gpu层实现,并探讨了几种将该层集成到现有网络架构中的设计。我们在IBSR和Cityscapes数据集上提供了实验结果,表明可以利用超像素池化以最小的计算开销持续提高网络精度。源代码可从https://githu

Nick Blog 2246

OpenCV-Python图形图像处理:自用的一些工具函数源代码

本文为《OpenCV-Python图形图像处理:博主自用的一些工具函数功能及调用语法介绍》内容配套函数的源代码。

老猿Python 2495

GraalVM SDK 变更日志深度解读:从 Polyglot 嵌入 API 到 Native Image 框架的演进全览

> 本指南以仓库 [sdk/CHANGELOG.md](https://link.gitcode.com/i/cc7dc111bc111854a04e44e48c4a5d28) 为骨架,系统梳理 GraalVM SDK 从 0.26 到 25.4 版本的核心 API 演进脉络,并结合 `sdk/` 目录下的源码实现(如 `org.graalvm.polyglot`、`org.graalvm.nat

gitblog_00455的博客 438

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

DFANet: 实时语义分割的深度特征聚集

DFANet: 实时语义分割的深度特征聚集 DFANet: Deep feature aggrgation for real-time semantic segmention 文章目录DFANet: 实时语义分割的深度特征聚集摘要引言背景、之前工作的缺点本文工作贡献相关工作实时分割深度可分离卷积(Depthwise Separable Convolution)高层特征上下文编码特征聚集深度特征聚集...

Michael to Learn 804

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: 【语义分割专题】语义分割相关工作--Fully Convolutional DenseNet
下一篇: 【语义分割专题】语义分割相关工作--PSPNet
mind_programmonkey
mind_programmonkey 领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
博客等级 码龄9年 4435粉丝 1111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值