当前位置: 首页 > news >正文

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

最近专栏来了很多的新手小白,对科研实验的过程感到困惑和无从下手,这篇文章就来讲解一下整体的科研流程,从选择数据集到发表论文的各个步骤,并针对大家在实验中常犯的错误进行解答。并且为大家提供通向我其他相关博客的指引,这里面很多内容我都在其他博客单独讲过。

还有什么疑问欢迎大家提出来,这个文章会不停的更新下去~

请添加图片描述


文章目录

    • 准备工作
      • 明确改进场景/数据集
      • 明确改进任务
      • 明确改进基线
      • 实验设备准备
      • 改进答疑队友
    • Q1:训练集,验证集,测试集怎么分?
    • Q2:用一个小数据集测试效果,再换大数据集?
    • Q3:预训练权重到底用不用,怎么用?
    • Q4:训练结果图怎么看?怎么看收敛和过拟合?
    • Q5:订阅了专栏后,怎么开始
    • Q6:训练技巧


准备工作

请添加图片描述

明确改进场景/数据集

首先,我们应选择一个具体的细分场景进行实验,这样更容易取得成果;而不是直接选择COCO数据集来开发通用的检测算法(像 YOLOv5/6/7/8/9/10 那样),因为这对新手而言难度较大,成本也很高。

目前,检测场景的应用非常非常广泛。以下是一些常见的场景。我建议选择较为冷门的场景,因为这些通常更容易出成果。像烟雾、绝缘子、安全帽和火焰这类常见的检测对象,我并不推荐,因为相关研究已经非常丰富,知网随便一搜便能找到大量文献,水文还就喜欢做这些场景。

下面是一些智慧城市的场景,大家可以参考下,寻找一个自己感兴趣的方向:

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

其实这部分最重要的就是数据集问题,很多同学选择场景其实就是看自己能搞到什么数据集,一般常见的获取数据集方法有四种:

  • 开源数据集
  • 私有数据集
  • 自制数据集
  • 购买数据集

四种方法中我最推荐用前两种方法。首先说开源数据集,这其实是最好的选则,一方面可以增加你论文的说服力,另一方面这样的数据集用的人多,起码不会出现标注上的问题,标注质量能得到保证;还有些同学从开源的大数据集中抽一部分或者一类,这样其实也行的,论文交代清楚就行;这种开源的数据集很多很多,各种比赛都会开源,当然COCO数据集,Object365啥的就没必要尝试了。VOC还是可以试试的。

私有数据集指的是你自己个人有的,或者你们实验室私有的,这种数据集只有你有,你不开源其他人是用不了的。所以,你懂的。

至于自制数据集,除非必要,尽量避免自行制作。整个过程包括拍摄照片、数据清洗、标注和核对,非常耗时耗力。

如果你就是想自制数据集,那我这里也给你点思路,数据量少直接上在线的标注网站,推荐 makesense,简单易上手,不用配环境,这篇文章讲过用法。数据量大就自己本地搭建一个,比较稳定,常见的就是 labelImg ;除此之外还有很多半自动标注的,比如 GroundingDINO 系列;另外我个人推荐一个项目:X-AnyLabeling,据说还不错。

在这里插入图片描述

购买数据集当成私有数据集是我最不推荐的方式,很多时候还不如自制数据集,主要是无良奸商太多了,数据集质量参差不齐,有些商家甚至会从开源数据集中提取数据后声称是自行标注的,或者将开源数据集冒充为私有数据集出售,如果这种情况在论文中被发现,怎么解释。相比之下,自制数据集虽然比较耗时,但至少能确保数据的来源和质量。

这里我强烈推荐大家看我这篇文章,完整的数据集处理、训练、验证、推理 我都详细讲过了。

下面是另外一些常见的场景:

编号常见场景
1行人检测
2布匹缺陷检测
3PCB(印刷电路板)缺陷检测
4船舶检测
5摔倒行为检测
6驾驶员疲劳检测
7烟雾检测
8火焰检测
9电力系统中绝缘子的损坏检测
10水下目标检测
11细胞检测
12番茄成熟度检测
13农作物病虫害检测
14水稻生长情况检测
15动物种类识别
16植物病害检测
17车辆检测与识别
18交通标志识别
19无人机检测
20体育运动员动作分析
21安全帽佩戴检测
22商品识别与分类
23表情识别
24药品包装检查
25果蔬分类和质量评估
26垃圾分类
27食品安全监控
28历史文物识别保护
29海洋生物研究
30遗迹探索
31夜视监控
32肺部疾病X光分析
33手势识别
34机场行李安全检查

明确改进任务

在这里插入图片描述

目前 YOLOv8 框架支持五大主要视觉任务:分类、检测、分割、关键点识别和旋转框检测,订阅我专栏的同学们,你们可以在这五种任务中任选一个做改进,我的改进专栏会涵盖这五种任务,并且我写的 YOLO-Magic 系列框架 也给大家提供了上百种 yaml 文件,覆盖所有的任务(分类没写,这个过于简单),大家可以直接上手实验,对代码能力差的同学非常友好!直接喂到你嘴边了,求你张嘴吃点吧!

下面给大家简单介绍下这几种任务,我一般推荐大家选择检测任务,检测日常应用最广泛,而且我博客也是主讲的检测。

  1. 分类(Classification)

    任务解释:分类是将输入的图像分配到预定义的类别的过程。比如,给你一张图,你给他分成"🐱"或"🐕",这是最基础的计算机视觉任务,也是最简单的任务,在图片内容复杂时,单标签的分类没有什么应用价值。

    常见应用场景

    • 动物识别:在野生动物监控中,自动识别图像中的动物种类。
    • 车辆分类:在交通监控系统中,区分不同类型的车辆,如卡车、轿车、摩托车等。
    • 表情识别:在社交软件或安全监控中,识别人脸表情,如快乐、悲伤、惊讶等。
  2. 检测(Detection)

    任务解释:检测不仅识别图像中的对象,还确定其位置,通常表示为矩形边界框。比如图片中有个🐕,用矩形框给🐕框起来。

    常见应用场景

    • 行人检测:在城市监控和自动驾驶系统中,检测街道上的行人以预防事故。
    • 安全帽检测:在建筑工地监控安全规范,检测工人是否佩戴安全帽。
    • 火焰和烟雾检测:在安全监控系统中,快速检测起火点或烟雾,以早期预防火灾。
  3. 分割(Segmentation)

    任务解释:分割是在像素级别上识别和分类图像中的每个部分,可以是语义分割(识别不同的语义区域)或实例分割(区分不同的对象实例)。

    常见应用场景

    • 医学图像分割:在医学成像中,如MRI或CT扫描,精确分割不同的组织和器官,用于更好的疾病诊断。
    • 道路分割:在自动驾驶技术中,分割和识别道路、人行道、障碍物等,以安全导航。
    • 农田分析:在农业监控中,分割不同的作物区域,监测作物健康和生长状况。
  4. 关键点(Keypoint Detection)

    任务解释:关键点检测涉及识别图像中的特定点,这些点通常是对象的重要部分,如人体的关节面部关键点。

    常见应用场景

    • 人体姿态估计:在体育分析或人机交互中,检测人体各关节的位置,分析人体姿态。
    • 面部关键点检测:在面部识别或动画制作中,识别面部的关键点如眼睛、鼻子、嘴巴等,用于进一步的表情分析或面部动画。
  5. 旋转框定向目标检测(OBB)

    任务解释:方向有界框检测是在检测任务中的一个变体,不仅识别对象的位置还包括其方向,其实就是可以旋转的矩形框。

    常见应用场景

    • 船舶检测:在海上交通监控中,检测船只的位置及其航向,用于交通管理和避免碰撞。
    • 停车位监控:在停车场管理系统中,检测车辆的精确位置和停放角度,优化停车资源分配。
    • 航拍图像分析:在城市规划或军事侦察中,通过航拍图像检测目标物体的方向和位置。

明确改进基线

既然大家都订阅了我的专栏,那这个问题就不用你们考虑了,YOLOv8 的框架叫做 ultralytics ,这个框架就可以理解为代码基线,里面不仅有 YOLOv8 算法,还有完整的 RT-DETRYOLOv10

你们唯一要选的就是初始一次实验选择 yolov8n 还是 yolov8s,这里就根据数据集的类别和数量选,一般情况小于3000张,n足够了;但是你选 s 也行,这没什么太多的讲究,这两个尺寸一般情况下在对比实验时都会跑一次的。选太大尺寸的模型没啥必要了,模型越大占用显存越多,训练越慢,收敛越难。

这里回答一个大家经常担心的问题,比如经常有老师说:“你这个太老了,YOLO已经更新到v10了”

实际上,对于这种担心是没有必要的。首先,需要明确的一点就是,YOLOv9 是在 YOLOv5 的框架上开发的,而 YOLOv10 则是基于 YOLOv8 的框架。因此,我们不能武断地说一个版本“老了”。关键在于你如何撰写和展示你的成果,也就是我们常说的讲故事。即使你的工作是在 YOLOv5 框架上进行的改进,也完全可以将其描述为你提出的一个新变体,例如 “xxYOLO/YOLOxx”。你们订阅我的专栏不仅仅学会的是改进的 v8,而是整个框架,未来我把 v10 集中进来,你们依然也会直接上手改进。所以你选择了这个专栏就意味着你永远不用担心框架过时,我会让他保持最新!你们只管实验,代码我来解决!

总的来说就是,基线的选择并不能决定你的工作“老不老”,基线代码只会影响你改进的效率和难度。


实验设备准备

首先要明确一点,如果你没有显卡想用 CPU 来进行实验,建议你放弃这个想法!

至少应配备一块显卡,因为 CPUGPU 在性能上的差距实在太大。当别人完成 100 100 100次实验时,你可能连 1 1 1次都未完成,等你做完实验,YOLO 可能已经更新到 YOLOv99 了。即便大家自己的笔记本有显卡我也不太推荐,一方面是因为显存较小,运行速度慢;另一方面,长时间满负荷运行会严重损害机器,但主要还是因为显存小速度慢。

那么,怎么办呢?答案是租! AutoDL 现在租48G显存的A40显卡的机器每小时的费用仅需两块多,能极大地加快实验速度,因为你可以设置非常大的batch size。我建议大家至少上一个 RTX 3090 显卡。

另外,关于 IDE 的选择,虽然 Pycharm 很好用,但我个人更推荐 VScode ,尤其是在远程连接云服务器时,VScode的用户体验远胜于 Pycharm 。后续我会分享一些我常用的 VScode 插件和配置。

有关 AutoDL 云服务器训练 YOLOv8 的手把手视频教程,大家请看:我的哔哩哔哩

在这里插入图片描述


改进答疑队友

这其实是你必备的,一群志同道合的伙伴会解决你很多问题,而且也可以在学习路上给到很多的帮助,订阅了 YOLOv8 改进实战的同学记得进群,除了有答疑外还有一些博客的相关代码,YOLOv8-Magic 框架就是进来才能获取的,本人亲自维护!

在这里插入图片描述


Q1:训练集,验证集,测试集怎么分?

首先说三个集合是干啥的,举一个通俗的例子:

  1. 训练集(Training Set)
    训练集就像是你在驾校练习时所驾驶的那部分道路。你在这些路段上一遍又一遍地练习,通过不断的重复,你的驾驶技能逐渐提升。在机器学习中,训练集用来训练或者“教育”你的模型。模型通过分析这些数据,尝试学习到数据中的模式和规律,从而做出准确的预测。

  2. 验证集(Validation Set)
    验证集好比是你在不同的驾驶场景下进行模拟考试的路段。这些路段用来检测你的驾驶技能是否真的达标,以及你是否准备好去参加真正的驾驶考试。在机器学习中,验证集用来测试模型在训练过程中的表现。开发者利用这些数据来调整模型设置(如调整模型参数),以便模型能更好地学习和预测。

  3. 测试集(Test Set)
    测试集则相当于你的实际驾驶考试,是在完全未知的路段进行的。你之前没有在这些路段上练习过,因此,它能准确地反映出你的驾驶技能。在机器学习中,测试集用来评估模型在完全未知数据上的表现。这帮助你了解模型在实际应用中能达到怎样的效果。

在划分数据集的问题上,网络上确实有许多不同的建议,如 8:1:17:2:1等。其实关键在于确保你的训练集足够大,足以支持模型的训练。在这种情况下,你可以根据自己的需要自由划分,2:1:1 的比例也是完全没问题的。

关于数据集应该分成几个部分,上面的解释大家也看到了,三个数据集——训练集、验证集和测试集,各有其独特的功能。最理想的做法是分为三部分:这样可以在论文中准确地报告测试集上的精度,这是最标准的做法。

但是现在很多论文就划分为两个数据集,一个用于训练,另一个用于测试。这种方法也是可行的,取决于你的数据量。如果大家不想在数据处理上审稿人指出问题,建议直接采用三个数据集的划分方法。这样既符合标准,也能更有效地评估模型性能。


Q2:用一个小数据集测试效果,再换大数据集?

“我先用一个小数据集测试一下这个改进的效果,然后再在我的大数据集上实验,这样岂不是节省了资源,又加快了实验进度,我真实个天才!”

经典的错误,标准的零分!首先,我给大家提供的改进点都是已发表论文里面的,有效性人家已经验证过了,不需要你验证了,理论上每个模块都是正确的。其次,深度学习模型在不同数据上的泛化能力是不一样的!!

举一个最简单的例子,你在A数据集涨点的改进,在BC数据集都可能不涨点。反过来也是,ABC数据集都不涨点的改进,在你的Z数据集上就涨点了!

所以,给你提供A数据集上的实验结果(特别还是那种自己的小数据集),对你改进你自己的数据集没有任何意义!

但是,说到这里,其实有一个技巧,不一定有效,上面的做法肯定是错的,但是我们可以从自己的数据集再抽一部分,形成一个小的,用这个小的实验,有效的改进点再换到自己的大数据集。切记,不到万不得已,别用这个技巧,可能让你走弯路!


Q3:预训练权重到底用不用,怎么用?

请添加图片描述

先说结论,看情况。这次我回答的详细点。

举个简单的例子,模型就像一把锁,而预训练权重则类似于这把锁的钥匙。每把锁都有自己独特的内部结构,决定了只有特定形状的钥匙才能打开它。

深度学习中的模型是指由多层神经网络构成的特定结构,这些结构定义了数据如何被处理和传递。就像锁的机械结构,决定了钥匙需要什么样的形状和尺寸才能匹配。

预训练权重则是这把锁专用的钥匙,它包含了所有必要的细节和形状,以适应锁的内部结构。这些权重通过在大量数据上的训练获得,已经被优化,可以很好地解决特定类型的问题。

预训练权重应用于一个模型,就像是使用钥匙来开锁。如果钥匙和锁是为彼此设计的,那么锁就能被顺利打开,模型就能有效地完成任务。但如果你拿着一把钥匙去尝试开一个完全不同设计的锁,那么无论你怎么尝试,锁都不会打开。

这种情况在深度学习中也是类似的。如果一个模型的结构(锁的设计)和预训练权重(钥匙)不匹配,那么权重将无法在这个模型上发挥作用,模型也无法正确执行任务。所以说,选择正确匹配的模型和预训练权重就像是为特定的锁挑选合适的钥匙。

再引申到YOLO算法,你官方项目下载的那个 yolov5s.pt 就是预训练的权重(🔑钥匙),yolov5s.yaml 就是模型的结构(锁🔒);只有yolov5s.pt 才能打开 yolov5s.yaml。也就是说,只有 yolov5s.pt 才能完美的匹配 yolov5s.yamlyolov5s.pt 是没办法匹配上你的 mobilenet-yolov5.yaml 的!

再说一个细节,YOLO 项目的匹配机制有点特殊,权重和模型从第一层开始匹配,按顺序尽可能多地匹配,这就像是钥匙插入锁孔,相当于钥匙插进锁孔,即便只插入一半也能发挥点作用。

所以说,当你改了模型的后面几层,只要是不改第一层,加载权重时仍然能匹配上部分层,理论上权重也会发挥点正向作用。

但是,这里需要注意控制实验中的变量!很多同学在基线模型中使用了预训练权重,相当于给基线加上了蓝BUFF
自己的模型也加载官方给的那个权重,而如果你的模型结构与官方提供的权重不匹配,相当于你的模型吃不到蓝BUFF,这对你改进是不利的!

我建议直接统一都不加!那什么时候才加载预训练权重呢?

如果你的数据集很少,那么权重可能对你的模型精度影响很大,加了权重90%,不加30%;那这个时候你就得考虑加载预训练权重了!

怎么加载预训练权重,两种思路:

  1. 如果你不想改主干,那简单,基线模型和改进模型都加载官方的权重,误差也差不太多(其实不是很严谨);
  2. 如果你想改主干,那你改进的模型得先去大数据集预训练一个权重,再加载这个权重训练你的小数据集。

怎么冻结主干训练?

这篇文章 我给了大家训练脚本,里面有个 freeze 参数,主干网络 0-9一共十层,想冻结整个主干网络就让 freeze=9 ,冻结主干的意思就是,主干这部分使用预训练权重的参数,训练时只更新主干外的层的参数,冻结可以让你训练的更快,搞清楚自己的需求和情况,别乱用。

在这里插入图片描述


Q4:训练结果图怎么看?怎么看收敛和过拟合?

啥叫过拟合?
请添加图片描述

简单来说就是模型对于训练数据学得“太好了”,以至于它在处理新的、未见过的数据时表现得不好。

简单例子:如果你准备考试只死记硬背书本上的题目和答案,而不去理解其中的概念和原理,那么在考试中如果遇到稍微变化一点的题目,你可能就答不出来了。这就像过拟合,在训练过程中,模型学会了训练数据的每一个小细节,甚至包括其中的噪声和错误,但这种“过度学习”却使得它失去了泛化能力,也就是处理新情况的能力。

过拟合的模型在训练集上的表现可能非常好,准确率很高,但在新的或未知的数据集(测试集)上表现往往不佳。这是因为模型已经将训练数据中的特定特征和随机噪声学习得太彻底,而这些特征并不适用于其他数据。

防止过拟合的方法有很多,例如增加数据量,使用数据增强技术,简化模型的结构,或者使用正则化技术等,我们一般在YOLO里面就是通过训练结果的 result.png 判断,或者看 tensorboard 的结果。YOLO 一般有三个损失,只要 valloss 翘起来了就是发生了过拟合。

怎么判断过拟合?

拿下面这张图来说,训练集的损失是持续下降的验证集的 box_losscls_loss 也是持续下降的但是 obj_loss 不降反升这就是典型的过拟合,也就是我们俗称的 “翘起来了” ;

过拟合要不要处理?

这个展示的还算是比较轻微的情况,一般单 obj_loss 升了不处理影响也不大;

但三个 val_loss 都翘起来了,那绝对是严重过拟合,一定要处理下,最简单的方法就是减小你模型的参数量,早停机制什么的调参技巧你们搞不明白,减少参数量是非常简单粗暴的处理方式。

在这里插入图片描述

怎么判断收敛?
每次跑完实验会在你的文件夹生成一个 results.png ,这个必须跑完整了才会生成,比如你设置300轮,跑到200轮你手动停止是不会生成的,这篇只说 results.png ,其他的文件都是干啥的,后面单出一篇文章。

在这里插入图片描述

我们通过这个图来分析模型的收敛情况,像我这个图就收敛的很好,由于我的这个mAP50很高了,其实加大epoch也没太大意义了,但是从图像看 mAP50-95 还是有上升趋势的,也就是说,加大 epoch 的情况下, mAP50-95 可能还会提升,

平时判断收敛怎么看?

直接看 val lossval loss 平缓了就是收敛;或者直接看 mAP涨不动了就是收敛,就这么简单。

在这里插入图片描述
有时候还有这种情况,先跳到了很高,然后又降低了,这个其实也不用理会,可能初始化的参数刚好拟合你的部分数据,忽略就好了,看整体的趋势。
在这里插入图片描述
最差的情况大概就是这种,首先检查你的数据集标签是否正确,然后考虑下自己的网络结构,是否合理,是否过度设计,遇到这种情况,只能重开,换个结构继续跑。

在这里插入图片描述

第一次实验时建议直接跑300轮,同时关闭早停机制,然后分析我们的结果,这一步很重要,可以决定后面我们实验要跑多少轮!
假如你的数据集收敛很快,100轮就收敛了,后面你可以将基线和改进都设置 200 轮对比;如果你的300轮还没收敛,你可能得考虑加大epoch,或者稍微增加学习率。

在这里插入图片描述


Q5:订阅了专栏后,怎么开始

先把基础篇认认真真的看一遍,我不怕你们不会,就怕你们不学!专栏订阅都订阅了,一定要珍惜每一篇文章,特别是非改进类的文章,像我现在这篇,写一次耗费我大量的时间,且看且珍惜~

后面的改进,其实你从哪里入手都行,我个人建议新手先做模块级别的改进,也就是先加个注意力啥的练练手,先适应下流程和思路,后面大家自己就有想法了。

在这里插入图片描述
这部分其实是给大论文用的,可以增加算法级别的工作量:

在这里插入图片描述
这些脚本需要的时候来找就行了,基本满足大家的需求,我也在不断地增加中:

在这里插入图片描述


Q6:训练技巧

有个训练的小技巧,总有些同学反应,训练完了最终的精度没截图,不知道怎么看了,其实没存的话可以用 val.py 再验证一次的,但这我给大家一个小技巧,使用 nohup 指令,这个指令既可以保证终端关闭后进程不中断,也会将你终端打印的所有的信息存下来,你运行下面的指令后就会在你的路径下看到一个 nohup.out 文件,实时的在写入本来终端应该打印的内容,这样就算你出去玩了,回来时依然能看到最终打印出来的结果。

nohup python train.py & 

相关文章:

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

最近专栏来了很多的新手小白,对科研实验的过程感到困惑和无从下手,这篇文章就来讲解一下整体的科研流程,从选择数据集到发表论文的各个步骤,并针对大家在实验中常犯的错误进行解答。并且为大家提供通向我其他相关博客的指引&#…...

MDR-1A用什么前端:深度解析与实用指南

MDR-1A用什么前端:深度解析与实用指南 索尼MDR-1A作为一款备受瞩目的音乐耳机,其音质表现与前端设备的搭配息息相关。那么,MDR-1A用什么前端才能达到最佳的音效体验呢?本文将从四个方面、五个方面、六个方面和七个方面进行深入探…...

01Linux以及操作系统概述

课程目标 1.了解现代操作系统的整体构成及发展历史 2.了解Linux操作系统及其分支版本 3.直观上理解服务器端与桌面端版本的区别 课程实验 1.通过对CentOS和Ubuntu的演示,直观理解Linux与Windows的异同 课堂引入 本章内容主要为大家详细讲解Linux操作系统(以下简…...

华为OD刷题C卷 - 每日刷题 1

1、(两数之和): 这段代码是针对力扣(LeetCode)上的“两数之和”问题。它提供了一个Java类Solution,其中包含一个方法twoSum,该方法接收一个整数数组nums和一个整数目标值target。目的是找出数组…...

基于ELK的日志管理【开发实践】

文章目录 一、ELK简介1.1 ELK的作用与应用1.2 ELK的组成1.3 Elasticsearch1.4 Logstash1.5 Kibana1.6 ELK架构简述1.7 基础知识1.7.1 数据格式1.7.2 正排索引和倒排索引1.7.3 全文搜索 二、ES入门---基于HTTP的使用方式(了解)2.1 索引操作2.1.1 创建索引…...

音视频开发—音频相关概念:数模转换、PCM数据与WAV文件详解

文章目录 前言1.模拟数字转换(ADC)1.1ADC的关键步骤: 2.数字模拟转换(DAC)2.1DAC 的基本流程包括: 3.PCM数据3.1PCM 数据的关键要素包括: 4.WAV文件4.1 WAV的构成4.2WAV文件的标准块结构4.3WAV的…...

Elasticsearch 8.1官网文档梳理 - 十三、Search your data(数据搜索)

Search your data 这里有两个比较有用的参数需要注意一下 Search timeout:设置每个分片的搜索超时时间。从集群级别可以通过 search.default_search_timeout 来设置超时时间。如果在 search.default_search_timeout 设置的时间段内未完成搜索请求,就会…...

笔墨挥毫如游龙 最是经典铁线篆——记著名书法家王子彬

真正的书法大家,必是经历了日积月累的求索磨炼,毕竟书法从来都不是一蹴而就的艺术,因此但凡是急功近利者,其人也是远远无法达到书入臻境的创作高度。而纵观当代书坛界内,其中王子彬先生的艺术声誉可谓是广为人知,作为一名深具传统功底的实力派书法大家,王子彬先生的取法历途无疑…...

智慧校园有哪些特征

随着科技的飞速进步,教育领域正经历着一场深刻的变革。智慧校园,作为这场变革的前沿代表,正在逐步重塑我们的教育理念和实践方式。它不仅仅是一个概念,而是一个集成了物联网、大数据、人工智能等先进技术的综合生态系统&#xff0…...

day25回溯算法part02| 216.组合总和III 17.电话号码的字母组合

216.组合总和III 题目链接/文章讲解 | 视频讲解 class Solution { public:vector<vector<int>> result;vector<int> path;int sum;void backtracking(int n, int k, int startindex) {// int sum accumulate(path.begin(), path.end(), 0);if (sum n &am…...

AWS联网和内容分发服务

概况 VPC Amazon Virtual Private Cloud (Amazon VPC) 让您能够全面地控制自己的虚拟网络环境&#xff0c;包括资源放置、连接性和安全性。首先在 AWS 服务控制台中设置 VPC。然后&#xff0c;向其中添加资源&#xff0c;例如 Amazon Elastic Compute Cloud (EC2) 和 Amazon …...

vscode设置编辑器文件自动保存

步骤 1.打开vscode的设置 2.在搜索栏输入关键字“保存”&#xff1b; 在 Files: Auto Save 设置项&#xff0c;选择自动保存的模式...

SJ705C安全帽高温预处理箱

一、仪器用途 安全帽高温预处理箱是我公司根据安全帽新国家标准检测试验要求而自主设计研发制造。是安全帽检测前做高温预处理的专用设备。 二、仪器特征 1、有PID自整定温度控制仪&#xff0c;控制准确。 2、数显计时、计温器。 3、石英灯管加热系统;。 …...

AI盒子在智慧加油站的应用

方案背景 为规范加油站作业&#xff0c;保障人民生命财产安全&#xff0c;《加油站作业安全规范》&#xff08;AQ 3010-2007&#xff09;中第五条规定&#xff1a;卸油作业基本要求&#xff0c;明确防静电、防雷电、防火、人员值守、禁止其他车辆及非工作人员进入卸油区。 痛点…...

IC开发——VCS基本用法

1. 简介 VCS是编译型verilog仿真器&#xff0c;处理verilog的源码过程如下&#xff1a; VCS先将verilog/systemverilog文件转化为C文件&#xff0c;在linux下编译链接生成可执行文件&#xff0c;在linux下运行simv即可得到仿真结果。 VCS使用步骤&#xff0c;先编译verilog源…...

MongoDB~存储引擎了解

存储引擎 存储引擎是一个数据库的核心&#xff0c;主要负责内存、磁盘里数据的管理和维护。 MongoBD的优势&#xff0c;在于其数据模型定义的灵活性、以及可拓展性。但不要忽略&#xff0c;其存储引擎也是插件式的存在&#xff0c;支持不同类型的存储引擎&#xff0c;使用不同…...

JavaScript实现粒子数字倒计时效果附完整注释

<!DOCTYPE html> <html lang="en"><head><meta charset...

Dubbo SPI(Service Provider Interface)机制深度解析

Dubbo SPI&#xff08;Service Provider Interface&#xff09;机制是Apache Dubbo框架中一项核心的技术组件&#xff0c;它超越了传统Java SPI的范畴&#xff0c;为Dubbo带来了高度的可扩展性和灵活性。在分布式服务架构日益复杂多变的今天&#xff0c;Dubbo SPI机制通过巧妙的…...

常用中间件各版本下载

常用中间件下载地址 前言分布式中间件负载均衡中间件缓存中间件数据库中间件其他中间件1、Maven下载地址2、Git下载地址2、JDK下载地址3、MySQL下载地址4、Redis下载地址5、Nacos下载地址6、Tomcat下载地址7、Nginx下载地址8、RocketMQ下载地址8、RabbitMQ下载地址8、Erlang下载…...

VsCode SSH远程设置不用重复输入密码

winR输入cmd&#xff0c;回车&#xff0c;输入 C:\Users\Administrator> ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (C:\Users\Administrator/.ssh/id_rsa): Enter passphrase (empty for no passphrase): …...

【Linux】:进程切换

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux进程切换的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精…...

MongoDB CRUD操作:删除文档

MongoDB CRUD操作&#xff1a;删除文档 文章目录 MongoDB CRUD操作&#xff1a;删除文档删除集合的所有文档删除符合条件的所有文件删除第一个符合条件的文档## 在MongoDB Atlas中删除文档删除行为索引 原子性写确认 可以使用下面的方式删除MongoDB集合的文档&#xff1a; 使用…...

SpringBoot集成腾讯COS流程

1.pom.xml中添加cos配置 <!--腾讯cos --> <dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.28</version> </dependency> 2.application.yaml中添加cos配置 # 腾讯云存储cos…...

中高级前端开发岗

定位&#xff1a; 日常迭代任务的核心研发&#xff0c;具备高质、高效完成迭代任务的能力。 素质要求&#xff1a; 业务专家或擅长某一方向技术&#xff1b;有较丰富的开发经验&#xff1b;需要具备良好的沟通和协作能力&#xff0c;能够与其他部门和团队进行有效的沟通和协…...

idea常用配置

文章目录 I 常见问题1.1 取消maven忽略文件清单1.2 源根之外的java文件1.3 idea取消所有断点1.4 idea使用非模式提交界面1.5 用Service窗口展示所有服务及端口1.6 idea编码问题(加载配置文件失败)II idea 换行后自动缩进4个空格,怎么取消?I 常见问题 1.1 取消maven忽略文件…...

Spring AOP 切面按照一定规则切片并行查询Mapper并返回

需求&#xff1a; 有时候我们在查询mapper层时&#xff0c;有时候可能由于入参数据过大或者查询的范围较大&#xff0c;导致查询性能较慢&#xff0c;此时 我们需要将原本的查询按照一定规则将查询范围进行切面&#xff0c;然后分片查询&#xff0c;最后将查询结果进行组装合并…...

【vue3|第4期】Vue3的选项式与组合式

日期&#xff1a;2024年5月30日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…...

算法训练营第四十五天 | LeetCode 1049 最后一块石头的重量II、LeetCode 494 目标和、LeetCode 474 一和零

LeetCode 1049 最后一块石头的重量 继续昨天没有详细说的01背包问题往下继续说。01背包问题是将dp从一维问题升维到二维之后会遇到的一类典型问题。dp数组自然而然地是一个横坐标表示物品序号-1&#xff0c;纵坐标表示背包重量的二维数组。01背包由一个背包是否放该物品并比照后…...

【数据结构与算法(C 语言)】栈的基本操作函数(动图演示) 及 栈的实际应用之一:进制转换

目录 1. 前言2. 结构及基本操作函数&#xff1a;2.1 栈的结构类型 Stack2.2 初始化栈 InitStack2.3 销毁栈 DestroyStack2.4 清空栈 ClearStack2.5 判断栈是否为空 StackEmpty2.6 获取stack的长度 StackLength2.7 获取栈顶元素 GetTop2.8 入栈 Push2.9 出栈 Pop2.10 访问元素2.…...

[原创]C++ 11的thread_local线程局部变量与Lambda表达式配合使用, 却引发致命的, 难以发现的冲突.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…...

C语言-单精度和双精度浮点型

文章目录 一、遇到的问题二、解决方案三、问题根因float和double的区别&#xff1a; 总结-浮点数 一、遇到的问题 将NXP项目的代码移植到RH850F1K的项目上时&#xff0c;程序运行异常&#xff1a; u16Volt (uint16)((double)u16ADVal * (double)6.3) 执行到这一行程序就跑飞了…...

STM32学习问题总结(2)—CubeMX生成项目后串口没效果和Microlib

检查完所有的硬件和软件部分&#xff0c;最后发现&#xff0c;又是Keil的设置问题&#xff0c;啊啊啊啊 打开Keil的魔术棒&#xff0c;勾选Target的Use Microlib选项即可&#xff0c;但这并不是最佳方案 最终解决方案&#xff1a; 参考&#xff1a;http://t.csdnimg.cn/2Tjfc…...

【数据结构与算法 | 二叉树篇】二叉树的前中后序遍历(递归版本)

1. 二叉树的概念 (1). 二叉树的结构 借用了一下力扣的模板 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.righ…...

Python exp用法:深入探索指数函数的奥秘

Python exp用法&#xff1a;深入探索指数函数的奥秘 在Python中&#xff0c;exp是一个非常重要的数学函数&#xff0c;它属于math模块的一部分&#xff0c;用于计算自然数e的指数。自然数e是一个无理数&#xff0c;约等于2.71828&#xff0c;它在数学、物理和工程等领域有着广…...

[有监督学习] 8.详细图解神经网络

神经网络 一直以来&#xff0c;人们都认为神经网络&#xff08;Neural Network&#xff0c;NN&#xff09;是模仿生物体的神经网络设计而成的。神经网络既可以用于回归&#xff0c;也可以用于分类&#xff0c;但在实际应用中常用于分类。基于神经网络的深 度学习因在图像识别和…...

我给线程池管理框架hippo4j找bug

1 虚拟机参数不生效 hippo4j的docker启动脚本位于 docker/docker-startup.sh 。从下图可以看到 JAVA_OPT放在了jar包名 hippo4j-server.jar之后&#xff0c;而只有项目参数才放在jar包名之后。 实际上这里JAVA_OPT中包含虚拟机参数&#xff0c;而虚拟机参数要放在jar包名之前…...

win10键盘按乱了,如何恢复?

今天键盘被宝宝给按乱了&#xff0c;好不容易给重新调整回来&#xff0c;记录备忘&#xff1a; 1、win10的asdw和方向键互换了&#xff1a; 使用Fnw键来回切换&#xff0c;OK&#xff01; 2、键盘的win键失效&#xff0c;例如&#xff1a;按winD无法显示桌面。此时&#xf…...

5.29工效学-人因工程人机交互

对于工效学这门课&#xff0c;一直都感觉很有意思&#xff0c;是一个值得再认真一点的课。可惜上课的时候效率不高&#xff0c;有感兴趣的东西课后也没有自行去拓展开来&#xff0c;前面的课我感觉还讲了比较重要的东西&#xff0c;但是&#xff0c;全忘了呢&#xff08;真的对…...

头歌数据结构与算法课程设计中-硬币找零

给定n种不同面值的硬币k_i和每种硬币的数量x_i以及一个总金额k,请编写一个程序计算最少需要几枚硬币凑出这个金额k,凑出的方案是什么? 如果凑不出则输出“凑不出” 输入描述: 第一行两个正整数,n和k 然后n行每行两个数k_i和x_i 表示k_i面值的硬币有x_i个,中间以空格分隔 输…...

Golang的内存关系

1.Page Golang的Page,在操作系统对虚拟内存管理的MMU定义的物理页有相似的定义,默认的Page为8KB 2.mSpan 多个连续的Page称之为是一个Span&#xff0c;其定义含义有操作系统的管理的页表相似 3.Size Class Size Class: 相当于 一个等级和刻度, 比如 第二等级 就代表 一个Pag…...

VRTK4.0学习——(二)

手柄绑定以及显示 1.导入CameraRigs.UnityXRPluginFramework 和 CameraRigs.TrackedAlias 预设&#xff0c;将CameraRigs.UnityXRPluginFramework拖入CameraRigs.TrackedAlias的Elements中即可&#xff0c;运行软件后即可看到手柄了 注&#xff1a;如果无法看到手柄&#xff…...

体验Photoshop:无需下载,直接在浏览器编辑图片

搜索Photoshop时&#xff0c;映入眼帘的是PS软件下载&#xff0c;自学PS软件需要多长时间&#xff0c;学PS软件有必要报班吗...PS软件的设计功能很多&#xff0c;除了常见的图像处理功能外&#xff0c;还涉及图形、文本、视频、出版等。不管你是平面设计师&#xff0c;UI/UX设计…...

Codeforces Round 895 (Div. 3)(A,B,C)题解(自己VP的,没有参加这场比赛)

A. Two Vessels 题解&#xff1a; 这题直接计算两个杯子之间的差值&#xff0c;然后直接除以2倍杯子的容量直接过&#xff0c;没有任何难度 #include<bits/stdc.h> using namespace std;int t; int a,b,c;int main() {cin>>t;while(t--){cin>>a>>b>…...

9秒爬取庆余年2分集剧情

版本一: 要创建一个Python爬虫程序来爬取指定网站的分集剧情,我们需要使用requests库来发送HTTP请求,以及BeautifulSoup库来解析HTML内容。以下是一个简单的示例,展示了如何爬取你提供的网站的分集剧情,并将每集剧情保存到本地的.txt文件中。 首先,确保你已经安装了req…...

阿里云布置net core 项目

一、 创建镜像 给镜像添加触发器&#xff0c;编译的时候会触发k8s集群里的taget链接&#xff0c;从而更新项目 二&#xff0c;创建k8s集群 使用镜像创建 添加基本信息 镜像名称&#xff1a;镜像仓库》基本信息公网地址镜像Tag:创建镜像时的镜像版本镜像配置为&#xff1a;总…...

两整数之和 ---- 位运算

题目链接 题目: 分析: 题目中要求不能使用-, 考虑到我们的位运算异或^, 是无进位加法, 可以使用如果是无进位加法, 那么我们就要找到进位, 并进行计算, 进位只有1和1相加时才会产生进位1, 而0和1相加无进位, 进位为0, 那么我们就想到了&运算, 1&1 1, 0&1 0, 所…...

长城电脑压缩文件丢失了怎么办?怎么解决

在数字化时代&#xff0c;电脑已成为我们日常生活和工作中不可或缺的设备。长城电脑作为国内知名品牌&#xff0c;以其稳定可靠的性能赢得了广大用户的信赖。然而&#xff0c;即便是可靠的电脑&#xff0c;也难免会遇到一些问题。其中&#xff0c;压缩文件丢失无疑是一个令人头…...

论文笔记《基于深度学习模型的药物-靶标结合亲和力预测》

基于深度学习模型的药物-靶标结合亲和力预测 这是一篇二区的文章&#xff0c;算是一个综述&#xff0c;记录一下在阅读过程中遇到的问题。 文章目录 基于深度学习模型的药物-靶标结合亲和力预测前言一、蛋白质接触图谱二、为什么蛋白质图谱的准确性对DTA模型预测结果没有影响1…...

ArrayList和LinkedList对比,ArrayList使用注意事项

ArrayList和LinkedList对比&#xff0c;ArrayList使用注意事项 ArrayList 和 LinkedList 是 Java 中常用的两种集合类&#xff0c;它们在内部实现和性能上有一些重要的区别。 ArrayList: ArrayList 是基于动态数组实现的。它内部使用一个数组来存储元素&#xff0c;当数组空间…...

小熊家务帮day5-day7 客户管理模块1 (小程序认证,手机验证码认证,账号密码认证,修改密码,找回密码等)

客户管理模块 1.认证模块1.1 认证方式介绍1.1.1 小程序认证1.1.2 手机验证码登录1.1.3 账号密码认证 1.2 小程序认证1.2.1 小程序申请1.2.2 创建客户后端工程jzo2o-customer1.2.3 开发部署前端1.2.4 小程序认证流程1.2.4.1 customer小程序认证接口设计Controller层Service层调用…...