PaperNotes(3)-图像分割-RCNN-FCN-Boxsup

图像分割算法对比小结

  • 1.{基本概念}
  • 2.{R-CNN}
    • 2.1R-CNN 网络结构
      • 选择性搜索算法
      • 为什么选择SVM作分类器
      • 边框回归
    • 2.2{R-CNN 训练}
    • 2.3{R-CNN实验结果}
    • 2.4{R-CNN语义分割}
    • 2.5{补充材料}
      • 2.5.1{R-CNN建议区域放缩}
      • 2.5.2{IOU阈值设置不一样的原因}
      • 2.5.3{Bounding-box回归修正}
    • 2.6{R-CNN存在的问题}
  • 3.{R-CNN变体}
    • 3.1{Fast-RCNN}
      • 3.1.1{Fast-RCNN的两点改进}
      • 3.1.2{Fast-RCNN实验结果}
    • 3.2{Faster-RCNN}
      • 3.2.1{Faster-RCNN的核心改进}
  • 4.{FCN-全卷积神经网络}
    • 4.1{FCN网络结构}
    • 4.2{FCN存在的问题}
  • 5.{FCN的改进模型}
    • 5.1{U-Net}
      • 5.1.1{U-Net结构}
      • 5.1.2{u-net两点改进}
    • 5.2{segNet}
      • 5.2.1{segNet结构}
      • 5.2.2{segNet两点改进}
  • 6.{Mask-RCNN}
    • 6.1{Mask-RCNN的结构}
    • 6.2{Mask-RCNN的两点改进}
    • 6.3{Mask-RCNN的实验效果}
  • 7.{弱监督语义分割}
    • 7.1{BoxSup}
      • 7.1.1{BoxSup的训练流程}

本文总结了从2014年R-CNN 第一次提出之后,将 深度学习 方法应用到图像分割领域的一些经典算法,在每个小节中,附上 文章疑难点 的参考资料。

在讲具体的方法之前,先来看一下以下相关概念。

1.{基本概念}

1.object detection-目标检测,检测图片是否带有感兴趣的目标,通常用方框框出来
2.semantic segmentation-语义分割,将图片中目标按不同的语义,以边缘为界分隔
3.instance segmentation-实例分割,将图片中相同语义区域内的不同实例分割开

在这里插入图片描述
4.IOU-ntersection-over-union
目标检测需要定位出物体的bounding box,IOU用于描述bounding box的定位精度:
IOU=SA∩BSA+SB−SA∩BIOU=\frac{S_{A\cap B}}{S_A+S_B-S_{A\cap B}}IOU=SA+SBSABSAB

在这里插入图片描述
5.mAP:是指每个类别的平均正确率的算术平均值.
详细参考博文:
https://blog.csdn.net/anaijiabao/article/details/101495088
https://blog.csdn.net/a417197457/article/details/80224886


第一类方法:基于建议区域的方法。
第一篇是2014年的r-cnn,区域建议的卷积神经网络用于目标检测语义分割。

2.{R-CNN}

[1]R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic
segmentation. In Computer Vision and Pattern Recognition,
2014.

论文翻译:
R-CNN论文详解(论文翻译):https://blog.csdn.net/v1_vivian/article/details/78599229
【论文翻译】Mask R-CNN:https://blog.csdn.net/xiaqunfeng123/article/details/78716136

在R-CNN之前,overfeat(2013,ImageNet定位任务的冠军)已经使用深度学习的方法做目标检测,但R-CNN是第一个真正可以工业级应用的解决方案。

文章的两个贡献:
(1)apply high-capacity CNNs to bottom-up region proposals in order to localize and segment objects.
(2)when labeled training data is scarce, supervised pre-training for an auxiliary task,followed by domain-specific fine-tuning, yields a significant
performance boost.

2.1R-CNN 网络结构

在这里插入图片描述
Object detection with R-CNN:
(1)selective search[39](选择性搜索)产生2000个建议区域.

(2)建议区域放缩成277*277,利用Alexnet[25](caffe),对每个放缩后的建议区域提取4096维度的特征.

(3)对特征向量使用每个类别的SVM进行打分,14096-4096(n+1) [n种前景对象+1个背景对象] 将建议区域分到分类得分最高的类别,SVM的得分是里分类面的距离越远越好【每个类别的SVM分类器是提前训练好】

(4)针对每个类别的建议区域,采用非极大值抑制算法去除多余的建议区域。【将与置信度最高的区域IOU值>0.5的区域都去除。】

选择性搜索算法

1)使用一种过分割手段,将图像分割成小区域 (2k~3k 个)
查看现有小区域,
2)按照合并规则最应该合并的相邻两个区域(颜色太相似了)。重复合并操作,直到合并的结果是整张图

3)在曾经存在过的区域中选2000个区域,即为选择性搜索产生的建议区域。

selective search 合并规则:颜色相近(颜色直方图);纹理相近(梯度直方图);合并后总面积小的;合并后总面积在其BBOX中所占比例大的(保证合并后形状规则)

多样化与后处理
颜色想尽规则的补充:
为尽可能不遗漏候选区域,上述操作在多个颜色空间中同时进行(RGB,HSV,Lab等)。在一个颜色空间中,使用上述四条规则的不同组合进行合并。所有颜色空间与所有规则的全部结果,在去除重复后,都作为候选区域输出。

为什么选择SVM作分类器

svm训练和cnn训练过程的正负样本定义方式不同,softmax得到的结果比svm精度低。

边框回归

学习一个线性回归器,用于bounding box的边框回归,输入为Alexnet pool5的输出。
回归的目标是:从 SVM给出的边框 -》真值边框 的x,y方向的平移量Δx,Δy\Delta x,\Delta yΔx,Δy,缩放尺度:Sx,SyS_x,S_ySx,Sy

2.2{R-CNN 训练}

(1)有监督的预训练-AlexNet网络参数粗调整:
ILSVRC2012分类数据集(没有bounding box)上预训练CNN,采用Caffe的CNN库。

(2)特定领域的参数调优-AlexNet网络参数细调整:
结构:随机初始化的(N+1)类的分类层,替换掉ImageNet的1000类的分类层\
输入:变形后的bounding box图像
数据集:VOC2012-train
超参数:SGD,lr=0.001为预训练时的110\frac{1}{10}101,避免破坏预训练模型,正样本IOU>=0.5(ground-truth box),mini-batch-size=128(正:负=32:96)

(3)取alexnet输出的特征,为每个物体类训练一个SVM分类器.
数据集:VOC2012-trainval
输入:2000[建议区域]*4096[提取的特征]
SVM权重矩阵:4096[每一个区域的特征]*N[类别数]
正样本:ground-truth box,负样本IOU<0.5,其余全部丢弃.

2.3{R-CNN实验结果}

在这里插入图片描述
mAP比当时最好的方法提高了30%左右.

2.4{R-CNN语义分割}

用alexnet对CPMS区域提取特征,进行分类.
CPMS区域的三种处理方式:
(1)和前面的目标检测一样,直接形变矩形区域
(2)取矩形区域的mask,计算特征
(3)简单串联(1)(2)两个的特征
文章没有给出语义分割的效果图,只有在voc2011上的平均正确率,感觉最后也只是切割出了矩形框.

2.5{补充材料}

2.5.1{R-CNN建议区域放缩}

由selective search[39]产生2000个建议区域都是矩形的,但大小不一.附录A中作者展示了三种放缩方案,最终通过实验性能选择了{padding+各向异性} 放缩方法.
在这里插入图片描述
(A)bounding box图像
(B)把bounding box的边界对周围图像内容扩展延伸成227*227正方形;如果已经延伸到了原始图片的外边界,那么就用bounding box中的颜色均值填充;
©用固定的背景颜色填充成正方形图片(背景颜色也是采用bounding box的像素颜色均值)
(D)不管图片的长宽比例,直接进行放缩,不管它是否扭曲

在放缩前,先将bounding box向周围图像内容padding.上图第1、3行padding=0,第2、4行padding=16.

2.5.2{IOU阈值设置不一样的原因}

fine-tunning阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松: IoU>0.5的建议框为正样本,否则为负样本
SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本.

文章解释见附录B

2.5.3{Bounding-box回归修正}

训练了一个线性回归模型,给定一个选推荐区域的pool5特征,去回归一个新的检测窗口.(附录C)
mAP:50.2%->53.7%

2.6{R-CNN存在的问题}

(1)产生的proposal region需要经过warp操作再送入后续网络,导致图像的变形和扭曲.\
(2)每一个proposal region都需要进入CNN网络计算,两千个region存在大量的范围重叠,重复的特征提取带来巨大的计算浪费。

3.{R-CNN变体}

3.1{Fast-RCNN}

[2]R. Girshick, “Fast R-CNN,” in IEEE International Conference on
Computer Vision (ICCV), 2015.

论文翻译:https://blog.csdn.net/u014119694/article/details/88421618

在这里插入图片描述

Fast-RCNN算法流程:

  1. selective search(选择性搜索)产生2000个建议区域

  2. 整张图片输进CNN,得到feature map

  3. 找到每个建议区域在feature map上的映射区域(具体怎么实现的没细看),将这些区域输入ROI pooling层和之后网络.

  4. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类 ; 对于属于某一特征的候选框,用回归器进一步调整其位置。

3.1.1{Fast-RCNN的两点改进}

{改进1:}全图输入CNN生成一张feature map ,避免重复特征提取

{改进2:}feature map 上大小不一的建议区域,直接输入RoI池化中,不经过放缩形变操作.
在这里插入图片描述
RoI pooling:建议区域大小为wh,池化后的目标尺寸为WH,将wh的区域划分为WH个网格,每个格子的尺寸为[w/W,h/H],对每个[w/W,h/H]格子进行最大/平均池化操作,以达到不同大小的建议区域,经过RoI pooling 之后得到相同大小的特征层.

参考博文:ROI Pooling(感兴趣区域池化)
https://blog.csdn.net/H_hei/article/details/89791176

3.1.2{Fast-RCNN实验结果}

在这里插入图片描述
(注:S,M,L为三种不同的训练模型)
Fast-RCNN 比 R-CNN训练快了大概10倍,测试大概快了100倍左右.

3.2{Faster-RCNN}

[3]Ren S , He K , Girshick R , et al. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2015, 39(6):1137-1149

Faster-RCNN(2015)算法流程:
(1)输入图像到卷积网络中,生成该图像的feature map。
(2)将feature map传入Region Proposal Network,返回object proposals
(3)将object proposals 传入 ROI pooling层和之后网络
(4)(后续部分与R-CNN相同)
在这里插入图片描述

3.2.1{Faster-RCNN的核心改进}

利用Region Proposal Network,优化object proposals的方法.
在这里插入图片描述


第二类方法是基于图像逐像素分类的方法,先来看看2015年的第一篇文章,全卷机网络用于语义分割。

4.{FCN-全卷积神经网络}

[5]J. Long, E. Shelhamer, and T. Darrell, “Fully convolutional networks for semantic segmentation,” in CVPR, pp. 3431–3440, 2015.
(201503 arXiv)

论文翻译:https://blog.csdn.net/mmmmsunshine/article/details/78921265

FCN开创性地利用图像逐像素分类,解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全连接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,在最后上的采样的特征图上进行逐像素分类。

4.1{FCN网络结构}

{1.卷积化:}将CNN分类器最后的全连接层换成卷积层,使得网络可以接受任意尺寸的输入,经过全卷积处理之后得到图像的heatmap.
在这里插入图片描述

2.上采样:}将heatmap进行上采样处理之后,得到N+1张与原图同样大小的特征图.
在这里插入图片描述

3.跳跃结构(Skip Layer):}直接将heatmap上采样到原图大小,丢失了分割细节.所以作者将heatmap2倍上采样之后,与次层特征相加,再做上采样的以捕捉更多的细节信息.
在这里插入图片描述
在这里插入图片描述
作者对AlexNet,VGG,GoogleLeNet做了网络结构的对比实验,发现VGG的效果最好:
在这里插入图片描述

网络超参数设置:
(1)minibatch:20张图片
(2)learning rate:0.001
(3)初始化:分类网络之外的卷积层参数初始化为0
(4)反卷积参数初始化为bilinear插值。最后一层反卷积固定位bilinear插值

4.2{FCN存在的问题}

1.分割的结果不够精细。图像过于模糊或平滑,没有分割出目标图像的细节。

2.因为模型是基于CNN改进而来,即便是用卷积替换了全连接,但是依然是独立像素进行分类,没有充分考虑像素与像素之间的关系。

与当时最先进方法的对比实验(对比R-CNN mean I0U 提高了10%)
在这里插入图片描述

在FCN 提出的同年内,随即出现了两个比较不错的改进工作,一个是5月份提出的U-net模型,另一个是11月份提出的segnet模型。

5.{FCN的改进模型}

5.1{U-Net}

[7]Ronneberger O , Fischer P , Brox T . U-Net: Convolutional Networks for Biomedical Image Segmentation[J]. 2015.
(201505 arXiv)

生物学会议ICMICCAI 2015相关的文章,主要是针对生物学影像进行分割。该文考虑到医学影像往往比较少,而深度学习通常需要大量的图像。因此作者使用数据增强提高数据的利用效率;并基于FCN提出U型网络模型,最终在三个生物学数据集上达到了当时最好的性能。

U-Net 因其网络的实用性,小数据学习能力,现在已经成功地被应用到其他领域,例如 卫星图像分割,同时也成为许多模型的改进基础。

5.1.1{U-Net结构}

在这里插入图片描述

5.1.2{u-net两点改进}

改进1:}结构上编码网络与解码网络对称构成U形结构,编码器用的是典型的CNN,解码时上采样,卷积处理得到特征图与对应的编码层特征图拼接,卷积处理后输入后续的解码层.拼接的过程中,需要将编码层特征图进行剪裁处理.

改进2:} 增加损失函数对分割边界像素的惩罚系数:
E=∑x∈Ωw(x)log(pl(x)(x))E=\sum_{x\in \Omega}w(x)log(p_{l(x)}(x))E=xΩw(x)log(pl(x)(x))

w(x)=wc(x)+w0∗exp(−d1(x)+d2(x)2σ2)w(x)=w_c(x)+w_0*exp(-\frac{d_1(x)+d_2(x)}{2\sigma^2})w(x)=wc(x)+w0exp(2σ2d1(x)+d2(x))
xxx:图像像素点,l(x):x的真是类别

{u-net实验效果图}
在这里插入图片描述

5.2{segNet}

[6] Badrinarayanan V , Kendall A , Cipolla R . SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation[J]. 2015.
(201511 arXiv,TPAMI 2015收录)

论文翻译:https://blog.csdn.net/u014451076/article/details/70741629

segnet是专门为道路场景图像语义分割设计的一个网络,作者认为在自动驾驶,场景分析这类实时性要求很高的场景中,模型方法推断过程中内存和计算的效率要十分高效才行.

5.2.1{segNet结构}

在这里插入图片描述

5.2.2{segNet两点改进}

改进1:}去除了VGG16中的全链接层,只留下卷积层.以便减小网络可学习参数,加速end-to-end训练过程.
在这里插入图片描述

改进2:}在解码网络中,segNet改进了FCN的上采样去卷积的方式,segNet网络中的解码层,先上采样,再进行卷积操作.上采样过程中接受对应编码层传递过来的max-pooling indices,将特征填入对应的位置.
在这里插入图片描述

作者认为如果反卷积过程中利用了对应卷积层的信息,且这个信息越多,对最后的逐像素分类的效果会越好.FCN用了2-3层的卷积层信息(这个在推断阶段的存储代价已经很大了),为了利用更多的信息,又不造成内存压力,segnet 利用了每一卷积层中max -pooling indices.
在这里插入图片描述
(CamVid road scenes 数据集)

文章贡献:}
(1)提高了边界划分的精度;
(2)减少了可训练参数数量,实现端到端训练;
(3)文中upsampling的形式可以方便地合并到其他模型中[FCN].


接下来看一下第一类和第二类方法的一个结合体:mask-R-cnn
Mask-R-CNN 是何凯明2017年提出的一篇文章,是ICCV2017最佳论文。

6.{Mask-RCNN}

[4] He K , Gkioxari G , Dollar P , et al. Mask R-CNN[C]// 2017 IEEE International Conference on Computer Vision (ICCV). IEEE Computer Society, 2017.

论文翻译:https://blog.csdn.net/xiaqunfeng123/article/details/78716136

Mask R-CNN是ICCV 2017的best paper , Mske R-CNN在Faster R-CNN 架构上添加了一个全卷积网络分支,用于预测每个建议区域的mask,使得整个模型可以集目标检测,目标分类,语义分割三大任务于一体.

6.1{Mask-RCNN的结构}

在这里插入图片描述

6.2{Mask-RCNN的两点改进}

改进1:RoI Pooling->RoI Align}\
在RPN给出特征图的建议区域之后,将大小不一的建议区域传给RoI Align层进行处理,相比于Faster R-CNN 中的RoI Pooling , RoI Align对建议区域的采用双线性插值计算输入特征的准确值,使AP提高了3%.
在这里插入图片描述

改进2:mask分支}\
经过RoI Align处理后的特征图分两路输入后续的网络:
一路去往和Faster R-CNN 一样的分支(bounding box 的回归与分类);
一路去往Mask分支,产生K个m∗mm*mmm二值的mask.
在这里插入图片描述
全卷积网络接受feature map产生N个mask图,接受一个来自分类分支的类别标签,选择对应类的maks输出.

训练过程:一个真实标签为k的RoI,对应mask 损失LmaskL_{mask}Lmask只由第k个mask 产生,其余mask不起作用.作者认为为每一类别产生mask避免了与其他类别产生竞争现象,使得他的模型比FCN的性能提升了5.5%的AP.

6.3{Mask-RCNN的实验效果}

任务:实例分割
数据集:coco,80k训练集,35k测试集,5k验证集
在这里插入图片描述
注 : MNC 2015冠军 , FCIS 2016冠军.\

通过实验作者表明Mask rcnn 能更好解决实例分割中的难题:实例重叠场景下的分割.
在这里插入图片描述


语义分割中大多数方法都依赖于大量带有像素级标注的图像,然而,手工标注相当费时费力。因此,一些弱监督方法被提出。就个人而言,我一直觉得半监督的方法不太靠谱。下面就介绍一个吧,是2015ICCV 的一个方法。

7.{弱监督语义分割}

7.1{BoxSup}

[8]Dai J , He K , Sun J . BoxSup: Exploiting Bounding Boxes to Supervise Convolutional Networks for Semantic Segmentation[J]. 2015.

参考博文:论文阅读笔记 | (ICCV 2015) BoxSup
https://blog.csdn.net/qq_16525279/article/details/79812057

7.1.1{BoxSup的训练流程}

在这里插入图片描述

(1)对图片的bounding box ground-truth使用,Multiscale Combinatorial Grouping (MCG)生成分割mask的候选,并优化label选一个与bounding box平均交集最大的mask作为监督信息。

(2)利用上述标签信息更新分割网络(FCN)的参数

(3)基于训练出的语义分割网络对物体框中的前景区域进行预测,提升前景mask 的准确度,再循环训练FCN.

BoxSup的核心思想就是通过这种迭代过程不断提升网络的语义分割能力。

BoxSup 实验结果}
在这里插入图片描述

参考资料:
https://perper.site/2019/02/11/RCNN%E8%AF%A6%E8%A7%A3/?nsukey=OzE2MLcBB2GYybpl4cS%2BPGz6N9r7FRNQ02hQVzYylRq3Z1oF9nPap1k0yfBVdjTHXR8tXFih88F6WoVIegQ8uuHEjEQ7%2F1MNLmO23AVmQae5uPFs9su9Xi11UmIUFJRUpfF945J0bnucf6QVcqeuoyqy1dANjcWPRjv1Te4Mdsb5Itfu1H4%2FjsTHwlULqrUCYAeRrpKTau%2Bx%2FTbjfZ5L7w%3D%3D

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python模块(3)--PIL 简易使用教程

PIL模块-用与记1.图片导入Image.open()2.图像显示.show()4.查看图片属性.format,.size,.mode3.图像格式转换.convert()4.图像模式“L”&#xff0c;“RGB”,"CYMK"5. 图片旋转.rotate()旋转方式1&#xff1a;旋转不扩展旋转方式2&#xff1a;旋转扩展旋转方式3&#…

输入输出系统

I/O设备&#xff1a;输入输出和存储功能的设备 I/O设备的分类 按传输的速度&#xff1a; 低速设备&#xff08;如键盘、鼠标、语音输入输出设备&#xff09; 中速设备&#xff08;如行式打印机、激光打印机等&#xff09; 高速设备&#xff08;如磁带机、磁盘机、光盘机等&…

模拟银行家算法

介绍 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h>#define ElemType PCB #define Status int #define true 1 #define false 0 #define OK 1 #define ERROR 0 #define RESOURCE_NUM …

js知识点汇总

1.本门课的作用&#xff08;JavaScript的作用&#xff09;所有基于Web的程序开发基础 2.一种计算机客户端脚本语言&#xff0c;主要在Web浏览器解释执行。 3.浏览器中Javascript&#xff0c;用于与用户交互&#xff0c;以及实现页面中各种动态特效 4.在HTML文件中&#xff0…

关于Java中String的问题

String 对象的两种创建方式&#xff1a; String str1 "abcd";//先检查字符串常量池中有没有"abcd"&#xff0c;如果字符串常量池中没有&#xff0c;则创建一个&#xff0c;然后 str1 指向字符串常量池中的对象&#xff0c;如果有&#xff0c;则直接将 st…

如何判断对象已经死亡

引用计数 给对象中添加一个引用计数器&#xff0c;每当有一个地方引用它&#xff0c;计数器就加 1&#xff1b;当引用失效&#xff0c;计数器就减 1&#xff1b;任何时候计数器为 0 的对象就是不可能再被使用的。 这个方法实现简单&#xff0c;效率高&#xff0c;但是目前主流…

算法(2)-二叉树的遍历(递归/迭代)python实现

二叉树的遍历1.深度优先DFS1.1 DFS 递归解法1.1.1先序遍历1.1.2中序遍历1.1.3后序遍历1.2 DFS迭代解法1.2.1先序遍历1.2.2中序遍历1.2.3后序遍历2.广度优先BFS3.二叉树的最大深度3.1递归3.2迭代4.翻转二叉树4.1递归4.1迭代5.合并两棵二叉树5.1递归5.2迭代有两种通用的遍历树的策…

利用posix_fadvise清理系统中的文件缓存

利用posix_fadvise清理系统中的文件缓存leoncom c/c,unix2011-08-03当我们需要对某段读写文件并进行处理的程序进行性能测试时&#xff0c;文件会被系统cache住从而影响I/O的效率&#xff0c;必须清理cache中的对应文件的才能正确的进行性能测试。通常清理内存可以采用下面的这…

空间分配

目前主流的垃圾收集器都会采用分代回收算法&#xff0c;因此需要将堆内存分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 大多数情况下&#xff0c;对象在新生代中 eden 区分配。当 eden 区没有足够空间进行分配时&#xff0c;虚拟…

创建与打开IPC通道的POSIX和SYSTEM V方法

先说&#xff30;&#xff2f;&#xff33;&#xff29;&#xff38;的吧&#xff1a; mq_open&#xff0c;sem_open&#xff0c;shm_open着三个函数用于创建或者打开一个IPC通道。 由此可见&#xff0c;消息队列的读写权限是任意的&#xff0c;然而信号灯就没有&#xff0c;…

软件测试基础知识

第一章 1.1 软件测试背景知识和发展史 互联网公司职位架构&#xff1a;产品 运营 技术 市场 行政软件测试&#xff1a;使用人工或自动化手段&#xff0c;来运行或测试某个系统的过程&#xff0c;其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别&#…

Jmeter-基础篇

常用压力测试工具对比 1、loadrunner 性能稳定&#xff0c;压测结果及细粒度大&#xff0c;可以自定义脚本进行压测&#xff0c;但是太过于重大&#xff0c;功能比较繁多 2、apache ab(单接口压测最方便) 模拟多线程并发请求,ab命令对发出负载的计算机…

shell一文入门通

简单来说“Shell编程就是对一堆Linux命令的逻辑化处理”。 W3Cschool 上的一篇文章是这样介绍 Shell的 hello world 学习任何一门编程语言第一件事就是输出HelloWord了&#xff01;下面我会从新建文件到shell代码编写来说下Shell 编程如何输出Hello World。 (1)新建一个文件…

RPC编程

图 3 说明在客户机和服务器之间完成 RPC 涉及的步骤。 图 3. 在客户机和服务器之间完成 RPC 涉及的步骤服务器 RPC 应用程序初始化期间它会向 RPC 运行时库注册接口。需要注册接口是因为&#xff0c;客户机在向服务器发出远程过程调用时&#xff0c;要检查它是否与服务器兼容。…

synchronized使用和原理全解

synchronized是Java中的关键字&#xff0c;是一种同步锁。它修饰的对象有以下几种&#xff1a; 修饰一个方法 被修饰的方法称为同步方法&#xff0c;其作用的范围是整个方法&#xff0c;作用的对象是调用这个方法的对象&#xff1b; 修饰一个静态的方法 其作用的范围是整个…

算法(11)-leetcode-explore-learn-数据结构-链表的经典问题

leetcode-explore-learn-数据结构-链表31.反转一个链表2.移除链表元素3.奇偶链表4.回文链表5.小结本系列博文为leetcode-explore-learn子栏目学习笔记&#xff0c;如有不详之处&#xff0c;请参考leetcode官网&#xff1a;https://leetcode-cn.com/explore/learn/card/linked-l…

Linux线程池的设计

我设计这个线程池的初衷是为了与socket对接的。线程池的实现千变万化&#xff0c;我得这个并不一定是最好的&#xff0c;但却是否和我心目中需求模型的。现把部分设计思路和代码贴出&#xff0c;以期抛砖引玉。个人比较喜欢搞开源&#xff0c;所以大家如果觉得有什么需要改善的…

leetcode121买卖股票的最佳时机

给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易&#xff08;即买入和卖出一支股票&#xff09;&#xff0c;设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,…

epoll的内核实现

epoll是由一组系统调用组成。 int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout); select/poll的缺点在于&#xff1…

leetcode322 零钱兑换

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1。 示例 1: 输入: coins [1, 2, 5], amount 11 输出: 3 解释: 11 5 5 1 示例 2: 输入: coins [2],…