【AI面试】目标检测中one-stage、two-stage算法的内容和优缺点对比汇总

在深度学习领域中,图像分类,目标检测和目标分割是三个相对来说较为基础的任务了。再加上图像生成(GAN,VAE,扩散模型),keypoints关键点检测等等,基本上涵盖了图像领域大部分场景了。

尤其是在目标检测,一直是各大比赛(Pascal VOC, COCO, ImageNet)的主要任务。与此同时,检测任务中的两大流派:one-stage、two-stage一直是热议的话题。同时,也是面试官最喜欢问的话题。

早期的物体检测多使用滑动窗口与分类器配合行动。在两步方案中,R-CNN首先在第二阶段使用卷积神经网络极大的提升了准确率,开启了物体检测的新纪元。RPN的出现则将两步方案统一在一个神经网络中,得名Faster R-CNN。单步检测器的出现极大的提升了检测速度,但是却以准确率下降为代价。

单步检测器面临的最大问题:在于训练过程中正负(positive and negative)样本的极端不均衡。每张图像成千上万个待检对象中,只有数个包含了有效物体(positive)。这造成两个不利后果:

  1. 训练的效率下降。大部分位置极易被归为负样本,对有效的学习没有帮助。
  2. 大量的容易负样本主导了训练过程,造成模型退化。

稳健的损失函数一直是研究的热点之一。例如Huber loss降低异常样本(困难样本)的权重。而Focal loss则注重降低常规样本(简单样本)的权重,集中精力在困难样本上。

针对本文的这个问题,我也帮你们提前问了chatGPT,也给出了一个较为总结性的回答,如下所示。你们觉得它回答的如何呢?

chatGPT
chatGPT已经对本节的内容,给出了一个大体的概括,总结下,包括

算法模型呢:

  1. one stage的算法包括SSD、yolo、Retina Net等等
  2. two stage的算法包括fast RCNN系列,和用于分割的Mask RCNN系列

优点呢:

1. one stage的算法速度非常快,适合做实时检测的任务,比如视频;
2. two stage的算法速度慢,但是检测效果更佳;

缺点呢?

  1. one stage的算法通常相比于two stage的算法,效果不太好
  2. two stage的算法经过了一步初筛,通常效果会更好,更准确

目标检测算法综述截图,展示了随时间发展,one- stagetwo- stage的发展分枝。从2014年RCNN开始,再到后来SSD和YOLO的横空出世,基本上奠定了两条路的主基调。

在这里插入图片描述

一、two stage

two stage的代表faster RCNN的模型结构图。稍微简述下:

  1. 特征提取模块backbone,主要用于对输入图像进行特征抽取,输出特征图Feature Map,一般会采用resnet、VGG,GoogLeNet的主干部分(去掉全连接层)作为backbone.
  2. 第一阶段的RPN(region proposal network)区域推荐网络,主要就是基于backbone输出的Feature Map,筛选目标候选框,给出进一步判断的Proposal
  3. RPN完成后,得到的候选框还只是区分出它是前景positive和背景negative,还不能区分是猫,还是狗
  4. 于是,就有了第二阶段,对第一阶段提议的阳性positive候选框Proposal,与backbone输出的Feature Map,裁剪出区域,经过ROI Pooling,统一到一致的尺寸,进入到ROI Head阶段。
  5. 经过卷积和全连接层,区分出具体的类别cls和bbox coor(cx, cy, pw, ph)的偏移量(tx, ty, tw, th),进一步修正目标框,得到最终的位置(bx=σ(tx)+cx, by=σ(ty)+cy, bw=pw*tw, bh=ph*th)

如下图所示,这样看,是不是真的把预测目标检测的任务,给拆分成两个阶段分段的来进行预测的呢?更多内容推荐阅读这里:一文读懂Faster RCNN
fasterrcnn

1.1、训练和验证阶段

其实,要理解faster RCNN的整理工作方式,需要区分成训练阶段train 推理阶段inference,区别对待。

先说简单的推理阶段inference

推理阶段与训练阶段最大的不同,就是推理阶段没有金标准target, 也就没有计算损失,更没有办法更新网络模型:

  1. backbone的特征提取阶段,接触不到target,所以这个阶段没有损失值,两个阶段都是一样的,就是负责把输入图像,转成特征图;
  2. RPN阶段就不同了,因为这个阶段是要为最后的分类,提供proposal的。这个proposal需要引入anchor box,所有的proposal都会被传入ROI Pooling层进行分类和回归;
  3. ROI Head阶段,RPN推荐的proposal会经过ROI Pooling层,调整到统一大小,例如7x7。经过两个fc层,输出具体的类别+背景,和坐标框。
  4. RPN阶段返回的proposal相互之间是高度重叠的,采用了NMS降低数量。

然后是训练阶段train

训练阶段就要计算损失了,就要更新模型了,这块都是与推理阶段不一样的:

  1. backbone的特征提取阶段,一样;
  2. RPN阶段就不同了,因为这个阶段,需要区分positive还是negative。咋知道这个anchor是阳性,还是阴性呢?那就需要使用标记target进行区分。在这个阶段,有了IOU,就是PD与GT计算IOU。如何区分阳性还是阴性呢?
  • IOU值大于0.7的是阳性,
  • IOU值小于0.3的是阴性,
  • 其他丢弃掉;

we randomly sample 256 anchors in an image to compute the loss function of a mini-batch, where the sampled positive and negative anchors have a ratio of up to 1:1. If there are fewer than 128 positive samples in an image, we pad the mini-batch with negative ones.

上段部分来自于论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 的Training RPNs部分。

翻译过来的意思就是:在RPN阶段计算一个mini batch的loss function时候,我们随机的在一张图片中选择256个anchor,阳性和阴性的样本比例1:1。如果一种图片中的阳性anchor少于128个,就用negative补上。

  1. 此时,RPN阶段的损失,也是由2分之一(0.5)的positive和2分之1的negative组成的,参与损失计算,包括阳性or阴性类别损失和位置偏移损失;
  2. 最后,在ROI Head阶段,输出具体的类别,和坐标框,这两块都要参与到损失的计算,比较的好理解。
  3. NMS在训练阶段,不参与。(我理解是因为在训练阶段,NMS会去除掉很多的正样本,使得正负样本就更加的不均衡了)

:在训练train阶段,会有哪些损失值?(面试中常被提及的问题

  1. RPN 损失函数:在 RPN 阶段,会使用 RPN 模型生成一系列 anchor,并根据这些 anchor 来进行目标检测。RPN 损失函数一般包括两个部分:

    • 分类损失(交叉熵损失):分类损失用于判断 anchor 是否为前景(即是否包含目标)
    • 回归损失(Smooth L1 ):回归损失用于计算anchor和gt bounding box的误差。
  2. Fast R-CNN (ROI Head)损失函数:在 Fast R-CNN 阶段,会使用 RoI Pooling 对 RPN 生成的 proposal 进行特征提取,并对提取的特征进行分类和回归。Fast R-CNN 损失函数同样包括分类损失和回归损失:

    • 分类损失(交叉熵损失):经过softmax后,各个类别对应的损失;
    • 回归损失(Smooth L1 ):回归损失用于计算roi和gt bounding box的误差。
  3. 总损失函数:在训练过程中,RPN 和 Fast R-CNN 的损失函数需要同时进行优化。因此,一般会将 RPN 和 Fast R-CNN 的损失函数合并为一个总损失函数(当然,也可以分别进行回归调整),并使用反向传播算法来进行优化。

损失图;

两个阶段的位置损失都是 Smooth L1,同样一个位置,为啥需要计算两次损失呢?然后回归两次位置呢?

  • RPN 阶段和 Fast R-CNN 阶段中的位置都是反映在原图上的同一块像素区域,都是表示物体的位置偏移量。

  • 对于RPN阶段,先对anchor进行一次位置回归,得到一组粗略的预测框,再利用这些预测框去RoI pooling得到RoI,最后对RoI进行第二次位置回归,得到最终的目标框位置。

  • 在 RPN 阶段中,每个 anchor 与其对应的 ground-truth bbox 之间的位置偏移量会被计算,并通过 Smooth L1 损失函数来度量它们之间的差异。这个损失函数的计算仅涉及到对 anchor 的位置回归。

  • 在 Fast R-CNN 阶段中,由于每个 RoI 的形状都是不同的,所以每个 RoI 与其对应的 ground-truth bbox 之间的位置偏移量也需要被计算,并通过 Smooth L1 损失函数来度量它们之间的差异。这个损失函数的计算涉及到对 RoI 的位置回归。

  • 因此,Faster R-CNN 中需要计算两次位置损失,是因为两个阶段都需要对物体的位置进行回归。需要注意的是,这两个阶段的位置回归所针对的对象是不同的

    • RPN 阶段中的位置回归是针对 anchor 的
    • 而 Fast R-CNN 阶段中的位置回归是针对 RoI 的
  • 两次位置回归的目的都是为了使目标框的位置预测更加准确

1.2、RCNN、fast RCNN、faster RCNN横评

3

1.2.1、RCNN(Region-based Convolutional Neutal Network)

  • 目标框的获取方式:select search(选择性搜索算法)来生成候选区域,从原图裁剪出ROIs
  • 分类方式:SVM
  • 目标位置:bounding-box regressor

缺点:

  • 训练是多阶段的:先fine tunes目标proposal;再训练SVM分类器;再训练bounding box回归器
  • 训练再内存空间和时间上开销大:分阶段训练,不同阶段的输出需要写入内存
  • 目标检测很慢

1.2.2、 fast RCNN

  • 目标框的获取方式:input image和region of interest(ROIs)在特征层阶段相遇、裁剪,经过RoI max pooling,调整成一致尺寸(学习了SPP Net,例如7x7大小),送入fully convolutional network.
  • 分类方式:分类分支,经过softmax输出类别,
  • 目标位置:Bbox regressor输出位置偏移

缺点:候选区域的生成仍然采用选择性搜索算法,速度仍有提升空间

1.2.3、faster RCNN

  • 目标框的获取方式:基于anchor base的RPN阶段,用于输出候选的proposal,和特征层相遇、经过RoI max pooling,调整成一致尺寸,送入fully convolutional network.
  • 分类方式:分类分支,经过softmax输出类别,
  • 目标位置:Bbox regressor输出位置偏移

1.3、mask RCNN

maskrcnn
mask RCNN是在faster RCNN的基础上,增加了一个mask预测分值。其中为了得到更好的mask精细分割结果,在fast rcnn head阶段,将之前目标检测的roi pooling,替换成roi align

在分类和Bbox预测,均和faster RCNN是一样的,在mask预测有差别,其中:

  1. 在分类部分,输出的shape为(N, num_classes),其中N为RoI的数量,num_classes为类别数量(包括背景类)。每个RoI对应着num_classes个概率值,分别表示该RoI属于不同类别的概率。
  2. 在Bbox回归部分,输出的shape也为(N, 4 x num_classes),其中每个RoI对应着4 x num_classes个偏移量,分别表示该RoI相对于目标框的水平偏移量、垂直偏移量、宽度缩放比例和高度缩放比例
  3. binary mask预测部分,每个RoI对应的特征图块上应用一个全卷积网络(Fully Conv Network, FCN),输出的shape为(N, mask_height, mask_width, num_classes),其中:
    • N为RoI的数量
    • mask_height和mask_width为输出mask的高度和宽度,
    • num_classes为类别数量,
    • 输出的每个元素表示该RoI属于对应类别时,每个像素点经过per-pixel sigmoid操作,输出为前景(即目标物体)的概率,
    • mask 采用binary cross-entropy loss(only defined on the k-th mask ,other mask outputs do not contribute to the loss.)

问:为什么在分类阶段,已经对roi的类别进行了预测,在mask预测阶段,还要对每一个classes进行mask预测呢?

答:在传统的目标检测中,通常是先使用分类器对目标进行分类,然后使用回归器对目标的位置进行精确定位,最后再使用分割模型对目标进行像素级别的分割。这种做法将分类、定位和分割三个任务放在了不同的阶段进行,每个任务都需要单独地训练模型,而且彼此之间存在一定的耦合关系。

相比之下,Mask R-CNN 将分类、定位和分割三个任务整合到了同一个网络中进行联合训练,通过共享网络层来解耦三个任务之间的关系。

具体来说,Mask R-CNN 在 RoI pooling 的基础上增加了一个分割分支,该分支由一个全卷积网络组成,负责对每个 RoI 中的像素进行分类,并生成相应的掩码。因此,分类、定位和分割三个任务可以在同一个网络中共享特征,同时也能够互相影响和优化。

Mask R-CNN 的这种设计方式可以使不同任务之间的关系更加松散,同时也能够提高网络的训练效率和泛化能力,使得网络更加容易学习到目标的语义信息,从而提高目标检测和分割的准确率

二、one stage

one stage的开山之作yolo v1(论文地址:you only look once)。其中下面是一张网络模型的简图,可以看到:

  1. 输入图像,经过一连串的卷积层操作(24 convolutional layers),得到了一个channel=1024维的向量;
  2. 得到下采样特征图后,连接2个 fully connected layers
  3. 直接得到预测输出的output,大小是:7x7x30,S ×S×(B∗5+C) tensor。For evaluating YOLO on PASCAL VOC, we use S = 7, B =2. PASCAL VOC has 20 labelled classes so C = 20. Our final prediction is a 7 × 7 × 30 tensor.

v1
可以看出来,yolo v1将目标检测问题,转化为了回归问题。把中间网络模型学习做的事情,都当做了一个黑箱,就是输入图像,输出目标。具体中间网络是如何办到的?这个不管,全部交由网络模型的监督信号,自己拟合。

2.1、训练和验证阶段

要理解单阶段YOLO V1的整体工作方式,需要区分成训练阶段train推理阶段inference,区别对待。

训练阶段train:损失函数定义如下:
loss
要想要看到上面的损失函数公式,首先要了解这些字母,都表示是什么?其中:

  1. S, grid cell size,论文里面是7
  2. B, bounding box个数,论文里面是2
  3. x, y, w, h, 分别表示bounding box的中心点坐标,和宽、高
  4. C, Confidence,是否有目标的概率
  5. p, Pr(Classi|Object),有目标下类别的条件概率
  6. obj,noobj,表示有物体的权重和没有物体
  7. λcoord = 5 ,λnoobj = .5,有物体的权重和没有物体的权重

每两项之间,都是算距离的,都是按照回归的方式进行求损失的。其他的建议参考这里:YOLO(You Only Look Once)算法详解。那包括了哪些损失呢?

YOLO V1损失函数,包括(面试中常被提及的问题):

  1. confidence loss(C) 目标置信度损失,框内是有目标的损失;
  2. classification loss(pc) 在有目标下,分类的损失
  3. localization loss(x, y, w, h) 定位损失,预测框和真实框之间的误差

(在YOLO系列的损失函数中,经过被忘记的就是目标置信度损失,表示有目标的置信度;因为后面预测具体类别的概率,其实是一个条件概率,也就是有目标情况下的概率,这块后面会展开)

:在yolo系列中,为什么要把分类任务,给拆分为是否有目标的概率,和目标下类别的条件概率呢?为什么不能像其他目标检测任务一样,直接对类别进行预测呢?

在YOLO系列中,将分类任务拆分为是否有目标的概率和目标下类别的条件概率是为了解决两个问题:

  1. 目标检测中的类别不平衡问题具体的各个类,数量不等,不是有目标和无目标的数量):在目标检测任务中,不同类别的目标可能具有不同的频率。如果直接对类别进行预测,那些出现频率较低的类别可能会被忽视或预测不准确。通过将分类任务拆分为是否有目标的概率和目标下类别的条件概率,可以更好地处理类别不平衡问题。模型可以更容易地学习到是否存在目标的信息,并独立地预测每个类别的条件概率。

  2. 目标多样性问题:目标检测任务中的目标可能具有不同的尺寸、形状和外观。将分类任务拆分为是否有目标的概率和目标下类别的条件概率可以更好地适应目标的多样性。通过预测是否有目标的概率,模型可以快速过滤掉图像中没有目标的区域,从而减少计算量。而目标下类别的条件概率可以更准确地预测每个目标的类别,而不受其他类别的干扰

怎么理解呢?

  1. 模型通过预测每个anchor是否包含目标的概率来确定感兴趣的区域。
  2. 对于那些被预测为没有目标的anchor,可以忽略它们,无需进行进一步的处理和计算。这样做可以减少对这些区域的特征提取、分类和回归等计算步骤,从而降低整体的计算量。
  3. 通过减少对没有目标的区域的处理,模型可以更高效地进行目标检测,并在处理大量候选区域时提高速度。这对于处理大尺寸图像或在实时场景中进行目标检测尤为重要,可以提升模型的实用性和效率

因此,将分类任务拆分为是否有目标的概率和目标下类别的条件概率,可以提高目标检测的准确性和鲁棒性,同时解决类别不平衡和目标多样性等问题。

在inference阶段,步骤如下:

  1. 对于输入图像,resize为一个正方形(416x416)
  2. split the image into grid,大小为7x7
  3. 每一个grid cell 都预测B各bounding box框,论文里面B=2
  4. 每一个grid cell 只预测一个类。B=2两个网格,那一个grid cell就是2个网格,两个类
  5. 每一个bounding box框,有4个位置参数(x_c,y_c,w,h)1个置信度P(Object),表示有物体的概率,用于区分存在目标物体,还是背景
  6. 到这里,就有了7x7x2=98个bounding box框,每一个框都包含5个参数(x_c,y_c,w,h,confidence)
  7. 每个bounding box框的中心点,都在对应的grid cell像素内。一个grid cell预测2个bounding box,就是10个参数,再加上目标条件概率20个类,每一个类都有一个条件概率P(Car|Object)。在该阶段,最后对应类的概率=P(Car|Object) x P(Object)
  8. 这样一个grid cell对应的输出向量就是2x5+20=30个。再加上一张输入图像被划分为7x7个grid cell,最后的输出就是7x7x30个张量大小。
  9. 至此,我们就预测得到了一堆框框,个数是7x7x2=98。最后经过NMS,去掉用于的框,得到最终的预测结果。

yolo

(在没有理解清楚这段之前,我一直在疑惑:
为什么2个bounding box已经有了一个概率,这个概率是什么?后面20个类,是可以区分具体这个bounding
box属于哪个类的,他们之间又是什么关系。不知道你到这里,是否理解清楚了)

这块视频详解,参考这里:【精读AI论文】YOLO V1目标检测,看我就够了-同济子豪兄

一步到位,没有two stage的先预测出前景还是背景,然后在预测具体类别的过程,简化了很多,端到端的过程。

YOLO v1算法的缺点:

1、位置精确性差,对于小目标物体以及物体比较密集的也检测不好(grid cell的原因,因为只能预测98个框),比如一群小鸟。
2、YOLO虽然可以降低将背景检测为物体的概率,但同时导致召回率较低。

2.2、YOLOv1、 YOLOv2、 YOLOv3、横评

YOLOv2 进行了许多改进,包括以下几个方面:

  1. 使用 batch normalization:YOLOv2 在卷积层后加入 Batch Normalization,可以加速训练,提高模型的精度和鲁棒性。
  2. 改进网络结构:YOLOv2 采用了更深的网络结构,引入了残差网络(ResNet)的结构,和NIN结构,增加了网络层数
  3. anchor boxes: 替代了之前的固定网格grid cell来提高物体检测的精度,kmean聚类确定anchor尺寸。
  4. passthrough layer 细粒度特征
  5. 采用了多尺度训练和预测: 引入了多尺度训练方法,可以提高模型对不同尺度物体的检测能力。(不同于FPN,他是在训练阶段每10个batch,会重新选择一个新的图像尺寸,包括{320,352,…,608}等等32倍数的尺寸)

YOLOv3 的改进主要集中在以下几个方面:

  1. 使用了更深的 Darknet-53 网络:YOLOv3 使用了一个名为 Darknet-53 的更深的卷积神经网络,相较于之前的 Darknet-19 网络,它具有更强的特征提取能力,可以提高目标检测的准确性。
  2. 引入了 FPN 特征金字塔:YOLOv3 引入了 FPN(Feature Pyramid Network)特征金字塔,可以利用不同层级的特征信息进行目标检测(predicts boxes at 3 different scales. predict 3 boxes at each scale),从而提高检测的准确性。
  3. 使用更多的 Anchor Boxes:YOLOv3 使用了更多的 Anchor Boxes,可以更好地适应不同大小和形状的目标物体,依旧使用 k-means clustering。
  4. 首次binary cross-entropy loss 用于分类

yolo v3之后,作者就不在更新YOLO系列了,再之后的改版,都是其他人或者团队继续更新的。YOLOv5再YOLOv4更新的没多久就出来了,且是pytorch的开源代码,所以相比于YOLOv4的C版本,受众更多。

YOLOv5 (没有论文)的改进主要集中在以下几个方面:

  1. 自适应anchor:在训练模型时,YOLOv5 会自己学习数据集中的最佳 anchor boxes,而不再需要先离线运行 K-means 算法聚类得到 k 个 anchor box 并修改 head 网络参数。总的来说,YOLOv5 流程简单且自动化了。
  2. 自适应图片缩放(letterBox)
  3. Focus结构

结构图:

v5
Focus结构中:

  1. 原始的640 × 640 × 3的图像输入Focus结构,采用切片操作。
  2. 具体操作是在一张图片中每隔一个像素拿到一个值,类似于邻近下采样。
  3. 将一个channel上,W、H信息就集中到了通道空间,输入通道扩充了4倍RGB 3个通道,就变成了12个channel
  4. 先变成320 × 320 × 12的特征图,再经过一次卷积操作,最终变成320 × 320 × 32的特征图。
  5. 最终得到了没有信息丢失情况下的二倍下采样特征图
  6. 目的是:减少传统下采样带来的信息损失
  7. 切片操作如下:
    focus

详尽内容建议参考这里:yolov5中的Focus模块的理解

YOLOv5 4个大结构,分别是:

  1. 输入端:Mosaic数据增强(对于小目标的检测效果好)、cutMix、MixUP。自适应锚框计算、自适应图片缩放
  2. Backbone:Focus结构(slice切片操作,把高分辨率的图片(特征图)拆分成多个低分辨率的图片/特征图,即隔列采样+拼接,可以减少下采样带来的信息损失),CSP结构
  3. Neck:FPN+PAN结构
  4. Prediction:GIOU_Loss

YOLOv5 不分给的创新点,很多是在YOLOv4阶段就有的,这里就没有分开说了,细节的可以参考下面这个文章)

更多详细的部分,建议参考这里:深入浅出Yolo系列之Yolov3&Yolov4&Yolov5&Yolox核心基础知识完整讲解

问:了解为什么要进行Mosaic数据增强呢?
答:在平时项目训练时,小目标的AP一般比中目标和大目标低很多。而Coco数据集中也包含大量的小目标,但比较麻烦的是小目标的分布并不均匀。主要有几个优点:

Mosaic

  1. 丰富数据集:随机使用4张图片,随机缩放,再随机分布进行拼接,大大丰富了检测数据集,特别是随机缩放增加了很多小目标,让网络的鲁棒性更好。
  2. 减少GPU:可能会有人说,随机缩放,普通的数据增强也可以做,但作者考虑到很多人可能只有一个GPU,因此Mosaic增强训练时,可以直接计算4张图片的数据,使得Mini-batch大小并不需要很大,一个GPU就可以达到比较好的效果。

三、性能对比

下面是在论文centerNet中,作者对普遍常用的目标检测、分割模型做了次系统的测试。其中,上部分是two stage的主要算法,下部分是one stage的主要算法。可以发现:

  • FPS帧率这块,one stage都是相对比较快的,尤其是yolo系列。two stage就慢了很多。
  • two stage的AP就比较的高,最高能到48.4,低的也有46,而one stage的就比较低,最高才45。尤其是TridentNet,几乎是这些里面,各个领域都是最佳的。
    在这里插入图片描述

四、总结

到这里,目标检测中one-stage、two-stage算法的内容基本上就结束了。但是,面试官是不会罢休的,他会沿着目标检测算法,继续深入展开,比如:

  1. anchor base(anchor boxes)和anchor free分别是什么?有什么区别和优缺点?直达链接:【AI面试】Anchor based 、 Anchor free 和 no anchor 的辨析
  2. faster RCNNROI Poolingmask RCNNROI Align分别是什么?有什么有缺点?
  3. yolo的损失函数式什么?faster RCNN的损失函数又是什么?
  4. 等等

所以说,目标检测是深度学习领域的一个重点,能够考察的内容很多,主要还是因为在各个企业里面,这块的内容,是真实可以落地的。所以,这块内容是真要吃透。

(上文内容,比较的丰富,和比较的杂。是根据论文和一些网络资料综合记录的。如果你对其中的内容,存在异议或需要纠正的地方,欢迎评论区留言,一起进步,谢谢)

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

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

相关文章

Python入门数据分析资料笔记-自用(纯小白入门级)

1.软件和环境安装 (1)Anaconda安装(装Anaconda的话,就不用再单独装Python了,方便小白) ① 下载与安装 参考(建议非C盘安装) 史上最全最详细的Anaconda安装教程_OSurer的博客-CSDN博客_anaco…

python中\t无法对齐问题原理解释(自用)

敲了很多字母当例子,首先要知道一个\t占4位,如果前面的字符位数不够4位就补到4位,刚好够4位就多加一个\t,这个用图表解释最清晰 字符最好不要太多,太多了,会冲出当前\t,到下一个\t了,暂时没找到…

最新商业版ChatGPT源码V4.7.1+用户付费+支付系统+AI绘画+卡密系统+推广系统

AI付费创作系统: 程序完美运行无BUG,独家开发,支持6种会员开通模式,有:"购买提问次数"或者"开通月付会员"套餐等等 套餐次数和价格可以自定义在后台进行修改 支付直接对接易支付或码支付就可以了,每个IP均…

EPLAN中如何画屏蔽双绞线

如何在EPLAN中画出如下的双绞屏蔽电缆 先画两条导线 选择对角连接线 画出双绞线 选择屏蔽 为了让屏蔽线的连接点在右边,从双绞线右边的中间点开始向左画出入图所示的屏蔽线。如果希望屏蔽线的连接点在左边,则从左边开始往右边画。这样屏蔽线的连接点…

html禁止查看图片,强看被屏蔽微信朋友圈

微信朋友圈被屏蔽了和没发朋友圈的区别是什么 区别主要从朋友圈的个人资料里是否存在个人相册这一选项: 1,朋友圈被屏蔽了是这样的(有”个人相册“但看不见照片): 2,没发朋友圈是这样的(没有“个人相册”这一栏): 扩展…

屏蔽图片的chrome插件

有时候觉得CSDN博客的广告好烦啊,还有有些看小说的网站,于是找了个屏蔽图片的插件。 效果如图: 之前博客的广告 之后: CSDN的广告有字,所以不会完全不显示,但是有很多小说网站都可以直接全部屏蔽掉…

MiniGPT-4 笔记

目录 简介 实现方法 效果及局限 参考资料 简介 MiniGPT-4 是前段时间由KAUST(沙特阿卜杜拉国王科技大学)开源的多模态大模型,去网站上体验了一下功能,把论文粗略的看了一遍,也做个记录。 论文摘要翻译&#xff1…

MOOC_AI | C01人工智能概述

00 | 写在前面 大多数课程的第一课,都会对课程内容做一个基本的介绍,其核心离不开三个方面:为什么学?学什么?怎么学?根据不同老师教学风格,可能会补充介绍发展态势,引出未来挑战与期…

普通人如何不被AI取代

今天试了试 OpenAI 的一些功能,通过主题来记录一下使用场景,发现了不少他强于普通人的地方,那么我们怎么在认知和能力方面不被他取代呢? 经验能力强于普通人 首先这两天最火的是 ChatGPT ,这个能力很适合我这种不太会…

红酒炖电线、西红柿炒冰箱,AI人工智能做菜哪家强?结果很意外

2023年人工智能大模型大爆发,短短两个多月国内外就有大量AI大模型涌现,国外的有ChatGPT、Claude、Bard、New Bing,国内的有文心一言、通义千问、天工、紫东太初、星火、360慧脑、序列猴子等,他们都有一个共同特点,就是…

OpenAI 强大吗?能干嘛?

今天试了试OpenAI的一些功能,通过主题来记录一下使用场景,发现了不少它强于普通人的地方,那么我们怎么在认知和能力方面不被他取代呢?一定要看到文末(狗头) 经验能力强于普通人 首先这两天最火的是 ChatG…

AI 工具 22个使用场景、500个通用提问技巧说明

AI 工具22个使用场景500个提问技巧说明 🪧:新福利:登录后可以直接将该知识库拷贝到你自己的空间,点击上方🔝按钮,如下方图所示 ✏️ 「提问技巧—重点摘要」 「写作」:AI写作提问技巧 「制作视…

想交易期权要怎么买卖?

想要交易期权怎么操作? 首先,你要交易的是个股期权、商品期权还是50ETF期权?今天就拿50ETF期权来举例,毕竟是当下最火热,并且多少钱都可以交易的品种。从下图就可以看出,交易50ETF期权其实非常简单&#xf…

追涨行为因子:基于上交所投资者账户数据的散户交易行为量化策略

量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W关注者,荣获2021年度AMMA优秀品牌力、优秀洞察力大奖,连续…

期权量化策略:如何利用期权捕捉期现套利机会?

做期权的朋友请看过来!当前与掘金量化合作的特定券商已经能够支持期权数据和交易接口啦~如需开展期权量化,请联系我了解更多详情。 本期我们将和大家分享一个策略,介绍如何利用期权进行自动化套利。 期现套利是指某种期货合约,当…

期权-期权交易策略

1.单腿策略 就是只买卖一种认购或认沽的期权策略。 由于期权分为认购期权和认沽期权,买卖方向又有两个。 所以,单腿期权策略一共由四个: 买入认购期权、买入认沽期权、卖出认购期权、卖出认沽期权 看涨型策略:买入认购、卖出…

chatgpt赋能python:Python中Key的作用及使用方法

Python中Key的作用及使用方法 在Python中,key是一个十分重要的概念。它在数据结构中经常被使用,例如list、dict、set、tuple等等。本文将重点介绍Python中key的作用和使用方法,帮助读者更好地理解和应用它。 什么是Key 首先,我…

chatgpt赋能python:Python中的Key怎么用

Python中的Key怎么用 什么是Key? 在Python中,Key是指字典(dictionary)中用于访问值的标识符。字典是一种可变容器模型,其中每个键值对用冒号(:)分隔,每个键值对之间用逗号(,)分隔,整个字典包括…

ChatGpt Key API官方例程

官方例程的网址:https://platform.openai.com/examples 例如 chat 模块的demo代码: import os import openaiopenai.api_key os.getenv("OPENAI_API_KEY")response openai.Completion.create(model"text-davinci-003",prompt&quo…