【目标检测】25、Sparse R-CNN: End-to-End Object Detection with Learnable Proposals

2023-11-16

出处:CVPR2021
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、背景

目前的目标检测方法很大程度上依赖于密集的候选框,如在特征图 H × W H \times W H×W 上的每个 grid 预设 k k k 个 anchors,且取得了较好的效果。

但这些方法有以下问题:

  • 这些方法通常会生成冗余且近似重复的结果,所以必须使用 NMS
  • many-to-one label assignment 的方法对规则很敏感
  • 最终的性能和 anchor box 的尺寸、宽高比、个数、生成规则等有很大的关系

二、动机

作者认为 sparse property 来源于两个方面:sparse box & sparse features

  • sparse box:候选框很少
  • 每个box中的特征不需要和全图中的所有目标进行交互

所以作者提出看 Sparse R-CNN,如图1©所示,目标候选框是

本文中,作者使用了学习得到的 N N N 个 anchor,来进行后续的分类的回归。把成百上千的手工设计的 anchor 缩减为了学习得到的大约 100 个 proposals。避免了手工设计和 many-to-one 的 label 分配,且最后不需要 NMS 。

三、方法

Sparse R-CNN 的中心思想:使用少的 proposal boxes(100)来代替 RPN 生成的大量 candidate,如图3所示。
在这里插入图片描述

  • backbone:
  • dynamic instance interactive head
  • cls head
  • reg head

3.1 Backbone

FPN based ResNet(using p2→p5)

channel:256

其余设置:和 Faster RCNN 基本相同

3.2 Learnable proposal box

维度: N × 4 N \times 4 N×4

初始化: ranging from 0 to 1

优化:在训练的过程中使用反向传播来优化

从概念上来讲,Sparse R-CNN 学习到的统计特征,是训练集中最可能出现目标的位置。RPN中,是和当前图像有很强关联 proposal,并且提供的是一个粗糙的图像位置。

所以,Sparse R-CNN 可以被认为是目标检测器的扩展,从 完全 dense→dense-to-sparse→ 完全 sparse。

3.3 Learnable proposal feature

由于上面 4-d 的proposal box是对目标的简单直接的描述,提供了粗糙的位置,但丢失了如目标的姿态和形状等信息。

此处作者提出了另外一个概念——proposal feature(N x d),它是一个高维(例如256)潜在向量,预计用于编码丰富的实例特征。proposal feature 的数量和 box一样。

3.4 Dynamic instance interactive head

给定 N 个proposal boxes:

  • Sparse R-CNN 首先使用 RoIAlign 来对每个box抽取特征
  • 然后每个 box 的特征会使用 prediction head 来生成最终的预测

dynamic interactive head:

在这里插入图片描述

  • 对于 N 个proposal box,使用 N 个 proposal feature
  • 每个 RoI feature 将会和对应的 proposal feature进行交互,过滤掉无用的bin,输出最终的目标特征
  • 模块的简单形式:1x1 conv + 1x1 conv + relu

3.5 Set prediction loss

Sparse R-CNN 在固定尺寸的分类和回归预测上使用 set prediction loss。

在这里插入图片描述

  • 分类:focal loss
  • L1:中心点 loss
  • giou:宽和高 loss
  • 权重:2:5:2

四、效果

作者提出了两种版本的 Sparse R-CNN:

  • 第一种:使用 100 个学习的 proposal boxes,不使用随机 crop 的数据增强
  • 第二种*:使用 300 个学习的 proposal boxes,使用随机 crop 的数据增强
    在这里插入图片描述

Sparse R-CNN:

  • 速度是 DETR 的10x(图2)
  • AP: 45.0 AP vs. 43.8 AP
  • 速度:22FPS vs. 19FPS
  • 迭代周期:36 epochs vs. 50 epochs

在这里插入图片描述
Proposal boxes 的性能:

在这里插入图片描述

  • 学习到的 proposal boxes 通常会覆盖整个图片,来保证recall
  • 每个 stage 会逐步 refine 每个 box 的位置,并且去除掉重复的
  • 图5同事也体现了box对目标稀疏场景和目标复杂场景的鲁棒性,对稀疏场景,前几个stage就会把大量重复的框丢掉,对复杂场景,会经过多个stage后实现对每个目标的精准检测

五、代码

代码路径:https://github.com/PeizeSun/SparseR-CNN

# 训练
python projects/SparseRCNN/train_net.py --num-gpus 8 \
    --config-file projects/SparseRCNN/configs/sparsercnn.res50.100pro.3x.yaml
# 评测
python projects/SparseRCNN/train_net.py --num-gpus 8 \
    --config-file projects/SparseRCNN/configs/sparsercnn.res50.100pro.3x.yaml \
    --eval-only MODEL.WEIGHTS path/to/model.pth
# 可视化
python demo/demo.py\
    --config-file projects/SparseRCNN/configs/sparsercnn.res50.100pro.3x.yaml \
    --input path/to/images --output path/to/save_images --confidence-threshold 0.4 \
    --opts MODEL.WEIGHTS path/to/model.pth

Head 结构:

  (init_proposal_features): Embedding(100, 256)
  (init_proposal_boxes): Embedding(100, 4)
  (head): DynamicHead(
    (box_pooler): ROIPooler(
      (level_poolers): ModuleList(
        (0): ROIAlign(output_size=(7, 7), spatial_scale=0.25, sampling_ratio=2, aligned=True)
        (1): ROIAlign(output_size=(7, 7), spatial_scale=0.125, sampling_ratio=2, aligned=True)
        (2): ROIAlign(output_size=(7, 7), spatial_scale=0.0625, sampling_ratio=2, aligned=True)
        (3): ROIAlign(output_size=(7, 7), spatial_scale=0.03125, sampling_ratio=2, aligned=True)
      )
    )
    (head_series): ModuleList(
      (0): RCNNHead(
        (self_attn): MultiheadAttention(

          (out_proj): _LinearWithBias(in_features=256, out_features=256, bias=True)
        )
        (inst_interact): DynamicConv(
          (dynamic_layer): Linear(in_features=256, out_features=32768, bias=True)
          (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
          (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (activation): ReLU(inplace=True)
          (out_layer): Linear(in_features=12544, out_features=256, bias=True)
          (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        )
        (linear1): Linear(in_features=256, out_features=2048, bias=True)
        (dropout): Dropout(p=0.0, inplace=False)
        (linear2): Linear(in_features=2048, out_features=256, bias=True)
        (norm1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (dropout1): Dropout(p=0.0, inplace=False)
        (dropout2): Dropout(p=0.0, inplace=False)
        (dropout3): Dropout(p=0.0, inplace=False)
        (cls_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
        )
        (reg_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
          (3): Linear(in_features=256, out_features=256, bias=False)
          (4): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (5): ReLU(inplace=True)
          (6): Linear(in_features=256, out_features=256, bias=False)
          (7): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (8): ReLU(inplace=True)
        )
        (class_logits): Linear(in_features=256, out_features=2, bias=True)
        (bboxes_delta): Linear(in_features=256, out_features=4, bias=True)
      )
      (1): RCNNHead(
        (self_attn): MultiheadAttention(
          (out_proj): _LinearWithBias(in_features=256, out_features=256, bias=True)
        )
        (inst_interact): DynamicConv(
          (dynamic_layer): Linear(in_features=256, out_features=32768, bias=True)
          (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
          (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (activation): ReLU(inplace=True)
          (out_layer): Linear(in_features=12544, out_features=256, bias=True)
          (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        )
        (linear1): Linear(in_features=256, out_features=2048, bias=True)
        (dropout): Dropout(p=0.0, inplace=False)
        (linear2): Linear(in_features=2048, out_features=256, bias=True)
        (norm1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (dropout1): Dropout(p=0.0, inplace=False)
        (dropout2): Dropout(p=0.0, inplace=False)
        (dropout3): Dropout(p=0.0, inplace=False)
        (cls_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
        )
        (reg_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
          (3): Linear(in_features=256, out_features=256, bias=False)
          (4): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (5): ReLU(inplace=True)
          (6): Linear(in_features=256, out_features=256, bias=False)
          (7): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (8): ReLU(inplace=True)
        )
        (class_logits): Linear(in_features=256, out_features=2, bias=True)
        (bboxes_delta): Linear(in_features=256, out_features=4, bias=True)
      )
      (2): RCNNHead(
        (self_attn): MultiheadAttention(
          (out_proj): _LinearWithBias(in_features=256, out_features=256, bias=True)
        )
        (inst_interact): DynamicConv(
          (dynamic_layer): Linear(in_features=256, out_features=32768, bias=True)
          (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
          (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (activation): ReLU(inplace=True)
          (out_layer): Linear(in_features=12544, out_features=256, bias=True)
          (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        )
        (linear1): Linear(in_features=256, out_features=2048, bias=True)
        (dropout): Dropout(p=0.0, inplace=False)
        (linear2): Linear(in_features=2048, out_features=256, bias=True)
        (norm1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (dropout1): Dropout(p=0.0, inplace=False)
        (dropout2): Dropout(p=0.0, inplace=False)
        (dropout3): Dropout(p=0.0, inplace=False)
        (cls_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
        )
        (reg_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
          (3): Linear(in_features=256, out_features=256, bias=False)
          (4): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (5): ReLU(inplace=True)
          (6): Linear(in_features=256, out_features=256, bias=False)
          (7): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (8): ReLU(inplace=True)
        )
        (class_logits): Linear(in_features=256, out_features=2, bias=True)
        (bboxes_delta): Linear(in_features=256, out_features=4, bias=True)
      )
      (3): RCNNHead(
        (self_attn): MultiheadAttention(
          (out_proj): _LinearWithBias(in_features=256, out_features=256, bias=True)
        )
        (inst_interact): DynamicConv(
          (dynamic_layer): Linear(in_features=256, out_features=32768, bias=True)
          (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
          (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (activation): ReLU(inplace=True)
          (out_layer): Linear(in_features=12544, out_features=256, bias=True)
          (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        )
        (linear1): Linear(in_features=256, out_features=2048, bias=True)
        (dropout): Dropout(p=0.0, inplace=False)
        (linear2): Linear(in_features=2048, out_features=256, bias=True)
        (norm1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (dropout1): Dropout(p=0.0, inplace=False)
        (dropout2): Dropout(p=0.0, inplace=False)
        (dropout3): Dropout(p=0.0, inplace=False)
        (cls_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
        )
        (reg_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
          (3): Linear(in_features=256, out_features=256, bias=False)
          (4): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (5): ReLU(inplace=True)
          (6): Linear(in_features=256, out_features=256, bias=False)
          (7): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (8): ReLU(inplace=True)
        )
        (class_logits): Linear(in_features=256, out_features=2, bias=True)
        (bboxes_delta): Linear(in_features=256, out_features=4, bias=True)
      )
      (4): RCNNHead(
        (self_attn): MultiheadAttention(
          (out_proj): _LinearWithBias(in_features=256, out_features=256, bias=True)
        )
        (inst_interact): DynamicConv(
          (dynamic_layer): Linear(in_features=256, out_features=32768, bias=True)
          (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
          (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (activation): ReLU(inplace=True)
          (out_layer): Linear(in_features=12544, out_features=256, bias=True)
          (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        )
        (linear1): Linear(in_features=256, out_features=2048, bias=True)
        (dropout): Dropout(p=0.0, inplace=False)
        (linear2): Linear(in_features=2048, out_features=256, bias=True)
        (norm1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (dropout1): Dropout(p=0.0, inplace=False)
        (dropout2): Dropout(p=0.0, inplace=False)
        (dropout3): Dropout(p=0.0, inplace=False)
        (cls_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
        )
        (reg_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
          (3): Linear(in_features=256, out_features=256, bias=False)
          (4): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (5): ReLU(inplace=True)
          (6): Linear(in_features=256, out_features=256, bias=False)
          (7): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (8): ReLU(inplace=True)
        )
        (class_logits): Linear(in_features=256, out_features=2, bias=True)
        (bboxes_delta): Linear(in_features=256, out_features=4, bias=True)
      )
      (5): RCNNHead(
        (self_attn): MultiheadAttention(
          (out_proj): _LinearWithBias(in_features=256, out_features=256, bias=True)
        )
        (inst_interact): DynamicConv(
          (dynamic_layer): Linear(in_features=256, out_features=32768, bias=True)
          (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
          (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (activation): ReLU(inplace=True)
          (out_layer): Linear(in_features=12544, out_features=256, bias=True)
          (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        )
        (linear1): Linear(in_features=256, out_features=2048, bias=True)
        (dropout): Dropout(p=0.0, inplace=False)
        (linear2): Linear(in_features=2048, out_features=256, bias=True)
        (norm1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (norm3): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
        (dropout1): Dropout(p=0.0, inplace=False)
        (dropout2): Dropout(p=0.0, inplace=False)
        (dropout3): Dropout(p=0.0, inplace=False)
        (cls_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
        )
        (reg_module): ModuleList(
          (0): Linear(in_features=256, out_features=256, bias=False)
          (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (2): ReLU(inplace=True)
          (3): Linear(in_features=256, out_features=256, bias=False)
          (4): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (5): ReLU(inplace=True)
          (6): Linear(in_features=256, out_features=256, bias=False)
          (7): LayerNorm((256,), eps=1e-05, elementwise_affine=True)
          (8): ReLU(inplace=True)
        )
        (class_logits): Linear(in_features=256, out_features=80, bias=True)
        (bboxes_delta): Linear(in_features=256, out_features=4, bias=True)
      )
    )
  )
  (criterion): SetCriterion(
    (matcher): HungarianMatcher()
  )
)
cfg.MODEL.SparseRCNN:
CfgNode({'NUM_CLASSES': 80, 'NUM_PROPOSALS': 100, 'NHEADS': 8, 'DROPOUT': 0.0, 'DIM_FEEDFORWARD': 2048, 'ACTIVATION': 'relu', 
'HIDDEN_DIM': 256, 'NUM_CLS': 1, 'NUM_REG': 3, 'NUM_HEADS': 6, 'NUM_DYNAMIC': 2, 'DIM_DYNAMIC': 64, 'CLASS_WEIGHT': 2.0, 
'GIOU_WEIGHT': 2.0, 'L1_WEIGHT': 5.0, 'DEEP_SUPERVISION': True, 'NO_OBJECT_WEIGHT': 0.1, 'USE_FOCAL': True, 
'ALPHA': 0.25, 'GAMMA': 2.0, 'PRIOR_PROB': 0.01})
projects/SparseRCNN/sparsercnn/head.py
# line 173
features:

(Pdb) p features[0].shape
torch.Size([1, 256, 152, 232])
(Pdb) p features[1].shape
torch.Size([1, 256, 76, 116])
(Pdb) p features[2].shape
torch.Size([1, 256, 38, 58])
(Pdb) p features[3].shape
torch.Size([1, 256, 19, 29])
bboxes.shape
torch.size([1, 100, 4])
pooler:
ROIPooler(
  (level_poolers): ModuleList(
    (0): ROIAlign(output_size=(7, 7), spatial_scale=0.25, sampling_ratio=2, aligned=True)
    (1): ROIAlign(output_size=(7, 7), spatial_scale=0.125, sampling_ratio=2, aligned=True)
    (2): ROIAlign(output_size=(7, 7), spatial_scale=0.0625, sampling_ratio=2, aligned=True)
    (3): ROIAlign(output_size=(7, 7), spatial_scale=0.03125, sampling_ratio=2, aligned=True)
  )
)
pro_features.shape
torch.Size([1, 100, 256])
roi_features:
100,256,7,7
->
49, 100, 256
weight_dict:

{'loss_ce': 2.0, 'loss_bbox': 5.0, 'loss_giou': 2.0, 'loss_ce_0': 2.0, 'loss_bbox_0': 5.0, 'loss_giou_0': 2.0, 
'loss_ce_1': 2.0, 'loss_bbox_1': 5.0, 'loss_giou_1': 2.0, 'loss_ce_2': 2.0, 'loss_bbox_2': 5.0, 'loss_giou_2': 2.0, 
'loss_ce_3': 2.0, 'loss_bbox_3': 5.0, 'loss_giou_3': 2.0, 'loss_ce_4': 2.0, 'loss_bbox_4': 5.0, 'loss_giou_4': 2.0}

真值获取:

detector.py
if self.training:
   gt_instances = [x["instances"].to(self.device) for x in batched_inputs]
   targets = self.prepare_targets(gt_instances)
   if self.deep_supervision:
       output['aux_outputs'] = [{'pred_logits': a, 'pred_boxes': b}
                                for a, b in zip(outputs_class[:-1], outputs_coord[:-1])]

   loss_dict = self.criterion(output, targets)
   weight_dict = self.criterion.weight_dict
   for k in loss_dict.keys():
       if k in weight_dict:
           loss_dict[k] *= weight_dict[k]
   return loss_dict
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【目标检测】25、Sparse R-CNN: End-to-End Object Detection with Learnable Proposals 的相关文章

  • URI和URL、URN的作用和区别

    前言 我们都知道URL是使用Web浏览器等访问Web页面时需要输入的网页地址 而对URI URN的认识可能很少 更有甚者会像我一样 把URI与URL搞混 还以为是一个东西的不同别名 其实URI是URL与URN的超集 URI包括URL和URN

随机推荐

  • htons()是什么

    一个数字0x12345678 左边是高字节 右边是低字节 存储到内存中有两种方式 小端法就是把低字节先存入 内存地址里从低到高就会变成 78 56 34 12 相反大端法就是把高字节先存入 内存地址里从低到高存入的数据旧变成了12 34 5
  • ASP连接Excel的方法

    在ASP中 可以将Excel作为一种轻量级数据库 用于存取数据 下面是一个使用ASP连接Excel的代码实例 首先创建excel数据链接 然后打开连接 在excel中名为 招聘 的表格中查询id 1的一条数据 并打印StuName列的数据
  • 操作系统笔记整理3——进程的描述与控制(2)

    点此链接可跳转到 操作系统笔记整理 目录索引页 参考书籍 计算机操作系统 第四版 汤小丹等编著 文章目录 点此链接可跳转到 操作系统笔记整理 目录索引页 线程的概念 线程的运行状态 多线程中的进程 线程的实现 内核支持线程KST 用户级线程
  • 在Surface Pro 4上安装Bliss OS

    安装Bliss OS 起因 为了让已经有点跑不动的苏婆4发挥余热 其实是想玩Arcaea 打算往上面安装安卓系统 之所以不使用模拟器 就是因为模拟器跑起来太慢了 而且像是mumu之类的模拟器还不支持多点触控 失败的尝试 凤凰系统 很漂亮 但
  • websocket中stompjs订阅消息队列消息,无法正常关闭socket带来的浏览器开销问题

    先说一下问题在公司的业务场景 前端页面作为消费者 监听的是rabbitmq中的一个交换机 由此来订阅消息 原生websocket因为无法更好实现监听和数据传输 所以采用stomp来更好创建socket 但是websocket经历一段时间会自
  • 项目启动卡在了Started Application in 10.266 seconds (JVM running for 13.033)

    好端端的项目启动后卡在这一行Started Application in 10 266 seconds JVM running for 13 033 日志中原本打印的执行的banner和程序都没有执行 访问那页面是404 很奇怪 因为啥东西
  • webpack 设置ttf 字体 不报错但是不生效

    webpack config js const path require path module exports entry src index js mode development output filename bundle js p
  • Gitee注册教程

    Gitee注册教程 目录 一 关于Gitee 二 注册Gitee 三 使用Gitee 一 关于Gitee Gitee也叫码云 是开源中国 OSChina 推出的基于Git的代码托管服务 Gitee包括三个版本 分别是 社区版 企业版和高校版
  • prometheus:(二)监控概述

    目录 一 监控系统概论 运维监控平台设计思路 二 prometheus基础资源监控 2 1网络监控 2 2存储监控 2 3服务器监控 2 4中间件监控 2 5应用程序监控 APM 三 常用监控系统介绍 3 1 Cacti 3 2 Nagio
  • tensorflow之Optimizers(tensorflow的优化器)

    一 概述 1 默认情况下 优化器训练目标函数所依赖的所有可训练变量 如果你不想训练某一个变量 你可以将关键词trainable设置为False 举例如下 global step tf Variable 0 trainable False d
  • 图像语义分割方法研究进展

    全监督学习的图像语义分割方法研究进展 简介 1 全监督学习的图像语义分割方法 1 1 基于全卷积的图像语义分割方法 1 2 基于编码器解码器结构的图像语义分割方法 1 3 基于注意力机制的图像语义分割方法 1 4 基于添加特殊模块的图像语义
  • nginx: configuration file /home/xx.local/etc/nginx/nginx.conf test failed

    nginx启动失败 输入 nginx t c HOME local etc nginx nginx conf nginx alert could not open error log file open var log nginx erro
  • 提升代码质量的几点建议

    在我从事编程工作的过程中 提升代码质量是一个极其重要且不可忽视的问题 在我看来 提升代码质量需要注意以下几点 1 遵守规范 包括变量命名规范 文件命名规范 方法命名规范等等 2 保持代码简洁 我们应该尽量避免冗余 复杂的代码 使用有意义的变
  • A - C语言实验——求一个3*3矩阵对角线元素之和

    Description 给定一个3 3的矩阵 请你求出对角线元素之和 Input 按照行优先顺序输入一个3 3矩阵 每个矩阵元素均为整数 Output 从左下角到右上角这条对角线上的元素之和 Sample Input 1 2 3 3 4 5
  • [MRCTF2020]千层套路1

    BUU题目复现 开局一个压缩包 flag全靠懵 拿到压缩包第一件事直接看能不能直接解压缩 很明显 有密码 不行 下一步 使用010Editor查看内部结构 发现确实操作着很多的 zip 文件 但是我使用binwalk foremost都没办
  • Python爬虫实战,requests模块,Python实现IMDB电影top数据可视化

    前言 利用Python爬取IMDB电影 废话不多说 让我们愉快地开始吧 开发工具 Python版本 3 6 4 相关模块 requests模块 random模块 bs4模块 以及一些Python自带的模块 环境搭建 安装Python并添加到
  • 凯恩帝对刀和刀补_KND数控车床试切对刀和调刀补

    展开全部 M 是测量的意思 有的系统是输32313133353236313431303231363533e78988e69d8331333262353363入你的测量值 然后点一个 测量 按钮 数控车对刀步骤 第一把刀的对刀步骤 第一步 确
  • linux 查询服务器的配置信息

    linux下看配置 可没有windows那么直观 你只能一个一个查看 一 cpu root srv more proc cpuinfo grep model name root srv grep model name proc cpuinf
  • 【Java数据结构】泛型详解+图文,通配符上界、下界

    0 泛型的本质 0 泛型的目的 1 泛型的语法 1 1 泛型的使用 2 包装类 2 1 装箱和拆箱 2 2 1练习题 3 泛型如何编译 4 泛型的上界 5 通配符 5 1通配符上界 5 2通配符下界 有坑填坑 0 泛型的本质 泛型的本质 泛
  • 【目标检测】25、Sparse R-CNN: End-to-End Object Detection with Learnable Proposals

    文章目录 一 背景 二 动机 三 方法 3 1 Backbone 3 2 Learnable proposal box 3 3 Learnable proposal feature 3 4 Dynamic instance interact