从零上手CV竞赛:YOLO方案 # Datawhale AI夏令营

news2024/11/14 20:23:35

文章目录

  • 平台
    • 参赛平台
    • 云平台
  • Task 1 从零上手CV竞赛
    • 下载baseline相关文件
    • 一键运行baseline!(大约需要25分钟)
      • 赛题解析
        • 数据集
        • 提交结果
        • 违法标准
        • 注意事项
      • 下载生成的文件
      • 结果如图
      • 最后要记得关机 不然一直消耗算力
  • Task 2 建模方案解读与进阶
    • 物体检测
      • 物体检测的一些关键概念和步骤
      • 物体检测算法
        • One-Stage模型
        • Two-Stage模型
        • 选择One-Stage还是Two-Stage模型?
        • 小结:
      • YOLO
        • YOLO算法的特点
        • YOLO算法的网络结构
        • YOLO 数据集格式
        • YOLO 训练日志
          • 查看训练日志
    • Baseline 进阶思路
      • 增加训练的数据集,可以增加更多的视频到训练集中进行训练。
      • 切换不同的模型预训练权
  • Task3:上分思路——数据集增强与模型预测
    • 上分点一:数据集增强
    • 上分点二:设置 YOLO 模型训练参数
    • 上分点三:设置 YOLO 模型预测行为和性能

平台

参赛平台

MARS大数据服务平台
在这里插入图片描述

云平台

厚德云

在这里插入图片描述

Task 1 从零上手CV竞赛

通关 Baseline

下载baseline相关文件

apt install git-lfs
git lfs install
git clone https://www.modelscope.cn/datasets/Datawhale/AI_Camp5_baseline_CV.git

下载ing

在这里插入图片描述

一键运行baseline!(大约需要25分钟)

一键运行
在这里插入图片描述

在这里插入图片描述

趁着训练的时间了解一下赛题

赛题解析

【初赛】

初赛提供城管视频监控数据与对应违规行为标注。违规行为包括垃圾桶满溢、机动车违停、非机动车违停等。

数据集

视频数据为mp4格式,标注文件为json格式,每个视频对应一个json文件。
json文件的内容是每帧检测到的违规行为,包括以下字段:

frame_id:违规行为出现的帧编号
event_id:违规行为ID
category:违规行为类别
bbox:检测到的违规行为矩形框的坐标,[xmin,ymin,xmax,ymax]形式

标注示例如下:

[
    {
      "frame_id": 20,
      "event_id": 1,
      "category": "机动车违停",
      "bbox": [200, 300, 280, 400]
    },
    {
      "frame_id": 20,
      "event_id": 2,
      "category": "机动车违停",
      "bbox": [600, 500, 720, 560]
    },
    {
      "frame_id": 30,
      "event_id": 3,
      "category": "垃圾桶满溢",
      "bbox": [400, 500, 600, 660]
    }
  ]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

提交结果

选手需要生成result文件夹,文件夹中包含每个视频对应的json结果文件,文件名与视频名对应。选手需要将文件夹打包成result.zip进行上传。
json文件中包含了检测到的违规行为列表,若未检测到违规行为,则列表为空。

每个违规行为包含的字段如下:
frame_id:违规行为出现的帧编号
event_id:违规行为ID
category:违规行为类别
bbox:检测到的违规行为矩形框的坐标,[xmin,ymin,xmax,ymax]形式 confidence:置信度

提交的json示例如下:

[
    {
      "frame_id": 20,
      "event_id": 1,
      "category": "机动车违停",
      "bbox": [200, 300, 280, 500],
      "confidence": 0.85
    },
    {
      "frame_id": 20,
      "event_id": 2,
      "category": "垃圾桶满溢",
      "bbox": [600, 500,720, 560],
      "confidence": 0.90
    },
    {
      "frame_id": 30,
      "event_id": 3,
      "category": "垃圾桶满溢",
      "bbox": [400, 500, 500, 560],
      "confidence": 0.78
    }
  ]
违法标准

【机动车违停】

机动车在设有禁止停车标志、标线的路段停车,或在非机动车道、人行横道、施工地段等禁止停车的地方停车。具体包含以下:

1、无论有无禁停标志,机动车道禁止车辆停放;

2、距路口、桥梁50米以内禁止车辆停放;

3、距公交车站、消防栓、消防队、医院30米以内禁止使用上述设施以外的车辆停放;

4、禁止车辆双排停放、靠左侧停放、横向停放、逆向停放;

5、人行道仅允许在已设置的停车泊位内停车,禁止在停车泊位外停车;

6、在设有禁停标志、标线的路段,人行横道、施工路段,不得停车。

【非机动车违停】

非机动车(如自行车、‌电动车等)‌未按照规定停放在指定的非机动车停车泊位或停车线内,‌而是在非机动车禁停区域或未划定的区域(消防通道、盲道、非机动车停车区线外、机动车停车区等)随意停放。

【垃圾满溢】

生活垃圾收集容器内垃圾超过三分之二以上即为满溢。垃圾桶无法封闭、脏污且周边有纸屑、污渍、塑料、生活垃圾及杂物堆放。

【占道经营】

经营者占用城市道路、桥梁、城市广场等公共场所进行盈利性买卖商品或服务的行为。

注:赛题禁止对测试集数据进行人工标注,用于训练或结果提交。初赛审核阶段,会对此类情况严格审核,一经发现,即取消复赛晋级资格。

注意事项
  1. 评审失败也会消耗次数
  2. 每天只有三次机会啊

下载生成的文件

result.zip

在这里插入图片描述

结果如图

在这里插入图片描述

最后要记得关机 不然一直消耗算力

Task 2 建模方案解读与进阶

物体检测

物体检测是计算机视觉领域的一个重要任务,它的目标是在图像或视频帧中识别和定位感兴趣的物体。物体检测算法不仅要识别图像中的对象属于哪个类别,还要确定它们在图像中的具体位置,通常以边界框(bounding box)的形式表示。

总结就是识别物体类别 位置 用边界框框起来

物体检测的一些关键概念和步骤

以下是物体检测的一些关键概念和步骤:

  1. 输入: 物体检测算法的输入通常是一张图像或视频帧
  2. 特征提取: 算法使用深度学习模型(如卷积神经网络CNN)来提取图像的特征。这些特征捕捉了图像中的视觉信息,为后续的物体识别和定位提供基础。
  3. 候选区域生成: 在某些检测算法中,如基于区域的卷积神经网络(R-CNN)及其变体,首先需要生成图像中的候选区域,这些区域可能包含感兴趣的物体
  4. 区域分类和边界框回归: 对于每个候选区域,算法需要判断它是否包含特定类别的物体,并预测物体的边界框。这通常涉及到分类任务和回归任务的结合
  5. 非极大值抑制(NMS): 在检测过程中,可能会产生多个重叠的边界框,用于表示同一物体。NMS是一种常用的技术,用于选择最佳的边界框并去除多余的框
    在这里插入图片描述

基本步骤: 输入 →特征提取 → 候选区域生成 →区域分类和边界框回归→非极大值抑制(NMS)

物体检测算法

物体检测算法主要分为两类:One-Stage(一阶段)和Two-Stage(两阶段)模型。
在这里插入图片描述

One-Stage模型

如YOLO(You Only Look Once)和SSD(Single Shot Detection)

直接在单次网络评估中预测图像中所有物体的类别和位置信息。这种方法的优点是速度快,适合实时应用,但可能在精度上不如Two-Stage模型 。

Two-Stage模型

如Faster R-CNN

首先使用区域提议网络(Region Proposal Network, RPN)生成候选区域,然后对这些区域进行分类和边界框的精细调整。这种方法的优点是精度高,但速度相对较慢

选择One-Stage还是Two-Stage模型?

One-Stage模型通常在单个卷积网络中同时预测类别和位置,而Two-Stage模型则将检测任务分解为两个阶段:区域提议和候选区域的分类与定位。

One-Stage模型因为省略了区域提议步骤,所以能够实现更快的检测速度,但这可能会以牺牲一些精度为代价。
Two-Stage模型通过两步过程提高了检测的准确性,但同时也增加了计算的复杂性和时间消耗

小结:

如果对速度有较高要求,如视频流处理或实时监控,One-Stage模型可能更合适。
如果对精度有更高要求,如在需要高精度识别的科研或专业领域,Two-Stage模型可能更加适用 。

YOLO

YOLO 是 You Only Live Once 的缩写,意思是人生只有一次,用来表达珍惜生命、大胆尝试的态度。[doge]
YOLO,全称为"You Only Look Once",是一种流行的实时目标检测算法,由Joseph Redmon等人于2015年首次提出。

YOLO的核心思想是将目标检测任务视为一个单一的回归问题,直接从图像像素到边界框坐标和类别概率的映射。这种设计使得YOLO能够以非常快的速度进行目标检测,同时保持较高的精度,特别适合需要实时处理的应用场景

YOLO算法的特点
  1. 显著特点是在单个网络评估中同时预测多个边界框和类别概率,而不是像传统的滑动窗口方法那样多次评估。
  2. YOLO用一个卷积神经网络(CNN)来提取图像特征,然后使用这些特征来预测边界框和类别概率
YOLO算法的网络结构

YOLO的网络结构通常包括多个卷积层和池化层
YOLO 为每个边界框预测一个置信度,这个置信度反映了边界框包含目标的概率以及预测的类别

置信度的计算公式是:Pr(Object) * IOU(pred, truth)
其中Pr(Object)表示格子中存在目标的概率,IOU(pred, truth)表示预测框和真实框的交并比。

YOLO 数据集格式

YOLO算法的标注格式主要使用.txt文件来存储图像中物体的标注信息。每个图像都有一个对应的.txt文件,文件中的每行表示一个物体的标注,包括物体的类别索引和边界框(bounding box)的坐标。

YOLO数据集格式是一种常用的目标检测数据集格式。它包含了每个图像中的目标的位置和类别信息。每个图像的标注信息存储在一个文本文件中,文件的每一行对应一个目标的标注。

信息格式
类别索引整数索引,表示每个物体的类别。索引对应于预先定义的类别列表。
边界框坐标边界框由中心点坐标(x_center, y_center)和宽度width、高度height组成。这些值通常是归一化到图像宽度和高度的比例值,范围在0到1之间。
坐标格式边界框坐标通常按照 [class_index x_center y_center width height] 的格式记录
其中class_index是类别索引,x_center和y_center是边界框中心点的x和y坐标,width和height是边界框的宽度和高度

每行格式如下:

<class_id> <x> <y> <width> <height>
其中:

- `class_id`是目标的类别标签,用数字表示。
- `(x, y)`是目标框的中心坐标。
- `width`和`height`是目标框的宽度和高度。

示例:

0 0.35 0.49 0.15 0.30
1 0.75 0.60 0.20 0.40

表示两个目标:
第一个目标的类别标签是0,中心坐标是(0.35, 0.49),宽度为0.15,高度为0.30。
第二个目标的类别标签是1,中心坐标是(0.75, 0.60),宽度为0.20,高度为0.40。

需要注意的是,坐标和尺寸是相对于图像宽度和高度的比例,取值范围通常在0到1之间。
在这里插入图片描述
在YOLO的训练过程中,这样的配置文件允许用户轻松地指定数据集的位置和类别信息,从而无需硬编码在训练脚本中。

参数描述
path指定数据集的根目录路径,即所有数据子文件夹的上级目录。这里的路径是相对于当前配置文件的路径或者相对于执行训练脚本的工作目录。
train定义训练集图像的相对路径。在训练模型时,程序会在指定的路径下查找图像文件。
val定义验证集图像的相对路径。验证集用于在训练过程中评估模型性能,避免过拟合。
nc表示类别的数量,这里设置为2,意味着数据集中有两类物体需要被识别。
names是一个列表,包含了每个类别的名称。这里有两个类别,名称分别是"0"和"1"。这些名称在训练和测试过程中用于引用特定的类别。
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../dataset/  # dataset root dir
train: images/train/  # train images (relative to 'path') 128 images
val: images/val/  # train images (relative to 'path') 128 images

# Classes
nc: 2  # number of classes
names: ["0", '1']  # class names
YOLO 训练日志

在使用YOLO进行训练时,生成的exp/detect/train类型的文件夹是训练过程中的一个关键组成部分。

文件类型描述
模型权重训练过程中保存的模型权重,可用于后续的测试或继续训练。
日志文件包含训练过程中的所有输出信息,如损失值、精度、速度等。
配置文件训练时使用的配置文件副本,记录了数据路径、类别名、模型架构等设置。
图表和可视化可能生成训练过程中的性能图表,如损失曲线、精度曲线等。
测试结果如果训练过程中包括了测试阶段,可能会保存测试结果,如检测结果的图片或统计数据。

在这里插入图片描述

文件名说明
F1_curve.pngF1分数曲线图
PR_curve.png精确率-召回率曲线图
P_curve.png精确率曲线图
R_curve.png召回率曲线图
results.csv模型训练或测试结果数据的CSV文件
results.png包含训练结果汇总图表或图像
train_batch*.jpg不同训练批次的图像和标注
val_batch0_labels.jpg验证集批次的图像的真实标签可视化
val_batch0_pred.jpg验证集批次的图像的模型预测可视化
weights/保存模型训练过程中的权重文件的目录
查看训练日志

在训练过程中和训练完成后,都可以查看训练日志。
可以优先查看results.png,图像的内容类似如下。
在这里插入图片描述

验证集上的损失 (val/box_loss, val/cls_loss, val/dfl_loss) 和性能指标可以评估模型在未见数据上的泛化能力
在下面的训练日志中,我们发现模型在验证集发生了过拟合。

名称描述
epoch表示模型在整个训练数据集上进行了一次前向和后向传播的完整周期
train/box_loss衡量模型预测的边界框与真实边界框之间差异的损失值
train/cls_loss衡量模型预测的类别与真实类别之间差异的损失值
train/dfl_loss衡量模型对难分类样本的关注程度,减少易分类样本的影响
metrics/precision(B)在训练过程中,预测为正类别中实际为正类别的比例
metrics/recall(B)在训练过程中,所有实际正类别中被模型正确预测为正类别的比例
metrics/mAP50(B)在50%的IoU阈值下计算,衡量模型的整体性能
metrics/mAP50-95(B)在0.5到0.95的IoU阈值范围内计算,提供更全面的模型性能评估
val/box_loss模型在未见过的验证集上的边界框损失,用于监控模型的泛化能力
val/cls_loss模型在验证集上的分类损失,用于监控模型的泛化能力
val/dfl_loss模型在验证集上的难易样本平衡损失

Baseline 进阶思路

如果想要在原有代码上提高模型思路,可以有如下操作:

增加训练的数据集,可以增加更多的视频到训练集中进行训练。

在这里插入图片描述
貌似效果甚微
在这里插入图片描述

切换不同的模型预训练权

!wget http://mirror.coggle.club/yolo/yolov8s-v8.2.0.pt -O yolov8s.pt

在这里插入图片描述

在这里插入图片描述

🤔好像这两个方案分数都没有提升呢

Task3:上分思路——数据集增强与模型预测

上分点一:数据集增强

数据增强是机器学习和深度学习中常用的技巧,能够通过扩充现有数据集以生成新的训练样本,从而提升模型的泛化能力。在构建性能良好的模型时,干净一致的数据非常重要。常见的数据增强技术包括翻转、旋转、缩放和颜色调整等。
许多库,如Albumentations、Imgaug和TensorFlow的ImageDataGenerator,提供了实现这些增强技术的功能。

# 数据增强配置 2024年9月1日03点06分
augment:
  - type: HSV
    hsv_h: 0.05  # 色调变化范围,增加到0.05
    hsv_s: 0.5    # 饱和度变化范围,减少到0.5
    hsv_v: 0.3    # 亮度变化范围,减少到0.3
  - type: Affine
    rotate: [ -15, 15 ]  # 随机旋转角度范围,增加到-15到15度
    translate: [ -0.15, 0.15 ]  # 随机平移范围,增加到相对于图像宽度和高度的15%
    scale: [ 0.8, 1.2 ]  # 随机缩放范围,调整到0.8到1.2之间
    shear: [ -20, 20 ]  # 剪切变换角度范围,增加到-20到20度
  - type: HorizontalFlip
    prob: 0.6  # 水平翻转的概率增加到0.6
  - type: VerticalFlip
    prob: 0.4  # 垂直翻转的概率增加到0.4
  - type: Perspective
    perspective: 0.002  # 透视变换的强度,增加到0.002
  - type: MixUp
    mixup: 0.3  # MixUp增强的概率增加到0.3
  - type: CutOut
    cutout: 0.6  # CutOut增强的概率增加到0.6
  - type: RandomBrightnessContrast
    brightness: [ 0.6, 1.4 ]  # 随机亮度调整的范围,扩大到0.6到1.4之间
    contrast: [ 0.6, 1.4 ]  # 随机对比度调整的范围,扩大到0.6到1.4之间

已尝试未有明显变化。

上分点二:设置 YOLO 模型训练参数

在YOLO中,大部分参数可以使用默认值。

参数名描述
imgsz训练时的目标图像尺寸,所有图像将在此尺寸下缩放
save_period保存模型检查点的频率(周期数),-1表示禁用
device用于训练的计算设备,可以是单个或多个GPU,CPU或苹果硅的MPS
optimizer训练中使用的优化器,如SGD、Adam等,或者设置为’auto’以自动选择根据模型配置
momentumSGD的动量因子或Adam优化器的beta1
weight_decayL2正则化项
warmup_epochs学习率预热的周期数
warmup_momentum预热阶段的初始动量
warmup_bias_lr预热阶段偏置参数的学习率
box、cls、dfl损失函数中边界框、分类和分布焦点损失的权重

上分点三:设置 YOLO 模型预测行为和性能

主要提分点应该在这

YOLO模型的预测结果通常包括多个组成部分,每个部分提供关于检测到的对象的不同信息。同时 YOLO 能够处理包括单独图像、图像集合、视频文件或实时视频流在内的多种数据源,也能够一次性处理多个图像或视频帧,进一步提高推理速度。

YOLOv8模型的使用者提供了灵活性,允许根据特定应用场景的需求调整模型的行为和性能。

例如,如果需要减少误报,可以提高conf阈值;如果需要提高模型的执行速度,可以在支持的硬件上使用half精度;如果需要处理视频数据并希望加快处理速度,可以调整vid_stride来跳过某些帧

参数名类型默认值描述
conffloat0.25置信度阈值,用于设置检测对象的最小置信度。低于此阈值的检测对象将被忽略。调整此值有助于减少误报。
ioufloat0.7非最大值抑制(NMS)的交并比(IoU)阈值。较低的值通过消除重叠的边界框来减少检测数量,有助于减少重复项。
imgszint或tuple640推理时定义图像的大小。可以是单个整数(如640),用于将图像大小调整为正方形,或(height, width)元组。合适的尺寸可以提高检测精度和处理速度。
augmentboolFALSE启用预测时的数据增强(TTA),可能通过牺牲推理速度来提高检测的鲁棒性。

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

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

相关文章

【大数据算法】时间亚线性算法之:串相等判定算法。

串相等判定算法 1、引言2、串相等判定算法2.1 定义2.2 核心原理2.3 应用场景2.4 算法公式2.4.1 Rabin-Karp算法2.4.2 哈希函数 2.5 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 啥是串相等判定算法啊 小鱼&#xff1a;这个… en…en… 小屌丝&#xff1a;咋…

ai免费生成ppt软件有哪些?我推荐秒出PPT

现在市面上的ai生成PPT软件非常的多。有收费的&#xff0c;也有不收费的&#xff0c;生成的效果也各不相同。要选择一个性价比高的确实难度不小。 我在使用了不少的产品之后&#xff0c;说一说我的心得。 首先就是&#xff0c;大部分免费的ai生成ppt产品并不好用。我怕不排除…

解决Selenium已安装,在pycharm导入时报错

搭建设selenium环境时&#xff0c;selenium已安装&#xff0c;但是在pycharm中使用“from selenium import webdriver”语句时红线报错 解决方案&#xff1a; 1.file->settings进入设置 2.点击加号&#xff0c;搜索‘selenium’安装 3&#xff0c;等待安装完成&#xff0…

windows 上安装 Anaconda

下载 立即下载 |蟒蛇 (anaconda.com) 安装

Nginx: 高可用和与虚拟路由冗余协议VRRP原理以及KeepAlived软件架构

Nginx 服务的高可用 1 &#xff09;服务可用 假定是这样一个最传统的一个CS模式的一个客户服务器模式 这里有用户和一台服务器服务器可能是mysql, 也可能是webserver, 或其他服务器 想实现服务可用的一个三要素 1.1 ) server 需要公网的ip地址以及申请一个域名1.2 ) 需要服务软…

MIG IP核详解

1.MIG IP核简介 MIG(Memory Interface Generators) IP 核是Xilinx公司针对DDR存储器开发的 IP&#xff0c;里面集成存储器控制模块&#xff0c;实现DDR读写操作的控制流程&#xff0c;下图是7系列的 MIG IP 核结构框图。MIG IP 核对外分出了两组接口。左侧是用户接口&#xff…

自制实战吃鸡手柄原理

在前面的讨论中&#xff0c;通过类似物理点击的方式来实现了声控触发射击键的点击 【Arduino】自制声控点击器&#xff08;吼叫吃鸡助手&#xff09;_辅助机械臂物理物理键盘点击器神器-CSDN博客 为了更有实战效果&#xff0c;我们可以把玩具枪改造为一个手柄&#xff0c;这样…

2024年Java最新面试题总结(三年经验)

目录 第一章、基础技术栈1.1&#xff09;集合&#xff0c;string等基础问题1、arraylist &#xff0c;linkedlist的区别&#xff0c;为啥集合有的快有的慢2、字符串倒叙输出2.1、字符串常用方法2.2、字符串号拼接的底层原理3、讲一下Java的集合框架4、定义线程安全的map&#x…

进制数基础知识 与 位运算(基础版)

目录 1. 计算机常用进制类别 2. 10进制转各种进制&#xff08;取余倒置法&#xff09; 3. 二进制转8进制、16进制 3.1 二进制转8进制 3.2 二进制转16进制 4. 原码、反码、补码 5. 整型提升 与 算术转换 5.1 整型提升 5.2 算术转换 6. 移位操作符 6.1 左移操作符( &l…

【spring】学习笔记2:sample、boot功能和组件设计

Spring自带了一个强大的Web框架,名为Spring MVC。Spring MVC的核心 是控制器(controller)的理念。控制器是处理请求并以某种方式进行信息 响应的类。在面向浏览器的应用中,控制器会填充可选的数据模型并将请求 传递给一个视图,以便于生成返回给浏览器的HTML。在pom.xml文件…

前端开发——熟悉WebSocket(包含示例)

最近在开发中需要调用第三方API&#xff0c;现在大家的API基本上都是使用WebSocket来进行的&#xff0c;前端也必须来学一手了 什么是WebSocket 参考&#xff1a;https://blog.csdn.net/L2043524156/article/details/139271715 有如下四个好处&#xff1a; 双向通信&#x…

C# .Net 条码批量自动打印框架 基于Bartender 10.1 V1.0

调用Bartender打印模板&#xff0c;批量打印条码。 需要有一定的C#开发能力。 非常适合工厂中从ERP拿取信息后&#xff0c;批量打印出货条码。 提供全部源代码&#xff0c;毫无保留。 Winform程序&#xff0c;使用了依赖注入(微软DI)&#xff0c;数据库访问的ORM为Dapper。…

位图 —— 哈希思想的产物

目录 1.学习位图的前置知识 计算机中数据存储的单位 C中数据类型的大小 2.位图的讲解 位图的引出 位图的使用 位图的实现 位图完整代码 3.位图的总结 位图的优缺点 优点 缺点 1.学习位图的前置知识 计算机中数据存储的单位 想要学习位图&#xff0c;首先要明白什…

在Windows10系统快速启用telnet功能

打开Windows控制面板 → 程序 → 启用或关闭Windows功能 勾选Telnet客户端 然后确定 启用后windowR 打开运行&#xff0c;输入cmd回车 使用telnet命令回车 可以直接使用telnet命令&#xff08;如果提示telnet是外部命令需要重启电脑&#xff09; 输入 ?/help 可查看帮助 到…

排序算法:

冒泡排序&#xff1a; 从列表的第一个数字开始进行比较&#xff0c;判断该数和下一个数之间的大小关系&#xff0c;如果该数比右边的数大&#xff0c;则交换位置&#xff1b;否则不变。一般一轮可以确定最大的数字&#xff0c;在列表的最后一位。 代码&#xff1a; 注意&…

开源 AI 智能名片 S2B2C 商城小程序在现代商业中的创新与启示

摘要&#xff1a;本文通过分析一种以 9.9 元裙子为代表的独特商业模式&#xff0c;探讨了其背后的现金流、产品和渠道组合策略&#xff0c;以及开源 AI 智能名片 S2B2C 商城小程序在其中可能发挥的作用和带来的启示。 一、引言 在当今竞争激烈的商业环境中&#xff0c;企业不断…

Redis数据结构与连接

1 基本的数据结构 1.1 string string的实现有多种 int&#xff1a;字符串长度小于等于20且能转成整数raw&#xff1a;字符串长度大于44embstr&#xff1a;字符串长度小于等于44 字符串长度小于1M 时&#xff0c;加倍扩容&#xff1b;超过 1M 每次只多扩1M&#xff1b;字符串…

【如何在Mac电脑和示波器之间共享文件】

如何在Mac电脑和示波器&#xff08;Tektronix OSC&#xff09;之间共享文件 Tektronix Lan&#xff1a; Mac Lan&#xff1a; 按下Utility,開始設定&#xff1b; 按下Utility Page,選至I/O&#xff1b; Network Configuration選至Manual,再Set IP Adresses Manually&am…

tailwindcss

什么是Tailwind CSS Tailwind CSS 是一个可定制化的 CSS 框架&#xff0c;最大的特点是功能类优先&#xff0c;和我们知道的bootstrap&#xff0c;element ui&#xff0c;antd&#xff0c;veui等框架一样。将一些CSS样式封装好&#xff0c;用来加速我们开发的一个工具。 简单…

精选算法编程题

一、有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10]输出&#xff1a;[0,1,9,16,100]解释&#xff1a;平方后&am…