GPT-SoVITS学习01

news2025/1/12 21:26:21

1.什么是TTS

TTS(Text-To-Speech)这是一种文字转语音的语音合成。类似的还有SVC(歌声转换)、SVS(歌声合成)等。

2.配置要求

GPT-SoVITS对电脑配置有较高的要求。

训练:对于Windows电脑:

  • 支持CUDA的nVIDIA显卡,每张拥有至少6G以上显存。
  • 常见的不能使用的显卡:10系以前的所有卡、1060以下,1660以下,2060以下、3050 4G
  • Windows10/11 系统
  • 如果没显卡会自动识别使用CPU训练,但速度非常缓慢。

推理:对于Windows电脑:

  • 支持CUDA的nVIDIA显卡,每张拥有至少4G以上显存。
  • Windows 10/11 系统
  • 没显卡会自动识别使用CPU推理

基础知识

1.常见的英文

1.error。这个单词会在所有报错的时候出现。它一般前面会有一个定语来修饰这个报错,后面跟着报错原因。例如:OutOfMemoryError: CUDA out of memory。前面的OutOfMemory说明是内存不足的报错,后面的CUDA out of memory说明是显存不足。

2.CUDA。这是N卡的统一计算架构,所有在N卡进行的Ai计算都需要它。安装了显卡驱动的话都会安装上CUDA,推荐使用11.8版本的CUDA。

3.GPU。 GPU是图形处理器,显卡是GPU但GPU不一定是显卡。台式机的显卡是很大的一个硬件。笔记本只有游戏本才有显卡。其他的GPU都是核显!核显不是显卡!

4.module。模块。模块就是一个脚本,缺少某个脚本,对应的程序就无法运行。可能会遇到No module的报错,这种情况只需安装对应的模块就好了。 例如:ModuleNotFoundError: No module named ‘jieba_fast' , 这里没有jieba_fast这个模块,那么只要python -m pip install jieba_fast装上这个模块即可。

5.WebUI。 web是网络的意思,ui是使用界面的意思,合在一起就是一个网页,一个以网页呈现的操作界面。网页是用来控制操作程序的,真正的运行程序是你点开的那个go-webui.bat的程序。

6.weights。weights:模型权重。也就是模型,GPT_weights就是GPT模型,SOVITS_weights就是SoVITS模型。weight指的是神经网络中的参数,这些参数被存储在称为“权重”的数组中,所以weights叫做模型权重。

7.output。 output:输出。程序输出的文件一般都会在output文件夹,有时候output会缩写成opt,例如uvr5_opt就代表这个文件夹是uvr5输出的文件的存放位置。

8.found。found:找到。一般出现在路径不对的报错中,not found是没有找到的意思。如果路径中没有某个需要的文件的时候就会报错NotFound:xxx。也有可能是没有找到某个模块,模块就是Moudle,ModuleNotFoundError。

9.pretrained。预先训练的,常见的有pretrained_models这个文件夹里放的是底膜,并不是微调后的最终模型。找模型的时候别找错了。

2.什么是显存

显存是显卡的专用内存,ctrl+shift+esc打开任务管理器看,专用GPU内存就是显存,其他的内存都是共享的,并不是真正的显存。

3.什么是数据集 

数据集是指一组数据样本,包括音频,文本等数据。数据集的质量指的是音频的质量和标注的正确率,数据集的大小指的是音频的长度。

4.什么是音频质量

1.响度: 响度就是俗称的音量,常见的计数方式是dB,也就是分贝。生活中常见的分贝都为正数,例如60分贝是正常说话的声音。但dB作为一个对数单位是不能直接拿来描述一个物理量的大小或多少的。 在描述音频的音量时一般使用电平这个词,音频电平就是输入信号的电压大小,和人耳听见的分贝数是不同的。一般来说正常说话的电平要保持在-9dB~6dB这个区间。推荐在训练前用软件做下响度统一。因为db是一个对数单位,相差3dB那么就意味着相差10的0.3次方倍,大约2倍,如果相差10db就是10倍。所以不要觉得大了几dB差距不大没关系。如果在正常电平下你觉得听起来声音小,那么是你的音响问题,请调整你的音响,不要乱动电平。

                                dB = 10lg\frac{P1}{P2}

这是同样一段音频不同响度在AU中的样子

2.混响

混响是后期反射声,可以简单的理解为回声。你可能觉得正常录的声音能有什么回声,但实际上无论什么情况都会有混响,只是有大小和多少的区分罢了。最基础的看混响的方法是看频谱图,很明显第一张图就显得干净不拖沓。第二张图就是混响严重的。有混响的话就要用UVTR5去混响。

3.音质 

这里的音质是对音频准确性、保真度或清晰度的评估。一般情况下采样率,位深和码率都不会太低的。现在的麦克风都是44.1k,16bit以上了。但清晰度就不好说了,如果要自己录音的话最好买个单独的麦克风。再贵的耳机麦克风都不如一个独立麦克风。当然清晰度也可以通过频谱图看出一点点。图一是音质好的,图二是音质差的。至于采样率,位深和码率不用太高,会进行重采样的。

整合包教程

在开始之前

为了避免在之后的使用中出现各种意料之外的问题,请务必对照下面的 Checklist 检查本机环境。

  • 关闭全局梯子/绕过局域网
  • 使用推荐的浏览器(Chrome/Edge/Firefox)
  • 关闭浏览器自带的网页翻译功能
  • 关闭所有第三方杀毒软件/安全卫士等
  • 如果内存吃紧,将系统虚拟内存设置为自动
  • 建议关闭共享内存
  • win11关闭GPU加速,貌似有占用不满的bug

1.下载

这里请自行找下载资源,这里不再提供。

2.解压并打开

请使用7-zip解压!其他解压工具可能会吞文件。解压后打开文件来到根目录,双击go-webui.bat打开,不要以管理员身份运行!

这就是正常打开了,稍后等待就会弹出网页。如果没有弹出网页可以复制http://0.0.0.0:9874到浏览器打开。

这是网页端

在开始使用前提醒一下:打开的bat不可以关闭!这个黑色的bat框就是控制台,所有的日志都会在这上面呈现,所有的信息以控制台为准。所有的报错都在控制台上!

3.数据集处理

请认真准备数据集!以免出现各种报错,和炼出不理想的模型!好的数据集是炼出好的模型的基础!

使用UVR5处理原音频(如果原音频足够干净可以跳过这步,比如游戏里提取的干声)

方法1:用自带的UVR5处理音频

点击开启UVR5-WebUI稍加等待就会自动弹出下图的网页,如果没有弹出复制http://0.0.0.0:9873到浏览器打开

 首先输入音频文件夹路径或直接选择文件(2选1),文件夹上面那个地址框就是文件夹路径。

如果要复制文件路径就是这样:

 先用model_bs_roformer_ep_317_sdr_12.9755模型处理一遍(提取人声),然后将输出的干声音频再用onnx——dereverb最后再用DeEcho-Aggressive(去混响),输出格式选wav。输出的默认路径在GPT-SoVITS-beta\output\uvr5_opt这个文件夹下。处理完的音频(vocal)是人声,(instrument)是伴奏,(_vocal_main_vocal)是没混响的,(others)的是混响。(voval)(_vocal_main_vocal)才是要用的文件,其他都可以删除。结束后记得到WebUI关闭UVR5节省内存。

例如:

这里有两端素材,点击一下目录,就是路径名了,将其复制。

 粘贴到输入路径里,下拉选择model_bs_roformer_ep_317_sdr_12.9755模型,然后点击转换,稍等片刻后输出信息就会显示xxxx-> Success

在状态栏点击黑窗口可以打开bat控制台,在这里可以查看进度。

然后打开GPT-SoVITS整合包文件夹的output文件夹,打开uvr5_opt文件夹。

这里会有输入文件数两倍的文件,其中instrumental文件是不需要的,都必须删掉,否则会影响最终效果。再新建一个文件夹把这两个文件移过去。

然后输入路径改成上面那个新的文件夹,下拉选择onnx_dereverb_By_FoxJoy模型,点击转换。然后要等待比较长一段时间。同样可以再bat控制台看进度,如果等待的时间太长可以跳过这个模型。输入的文件还是在uvr5_opt文件夹,其中others是不需要的,删掉。上一步的vocal也不需要了可以删掉。再新建 一个文件夹把_vocal_main_vocal这两个文件移过去

然后输入路径改成上面那个新建文件夹,下拉选择VR-DeEchoAggressive模型(如果混响很重选DeReverb,比较轻选Normal,中间选Aggressive),点击转换。稍微等待一段时间,再打开uvr5_opt文件夹,把instrument开头的删掉就好了。

如果没有成功输出,那么推荐使用UVR5客户端。 

方法2:使用UVR5客户端(没有bug,模型更多)

这个之后深入学习时再使用。

切割音频

在切割音频前建议把所有音频拖进音频软件(如au、剪映)调整音量,最大音量调整至-9dB到-6dB,过高的删除。

首先输入原音频的文件夹路径(不要有中文),如果刚刚经过了UVR5处理那么就是uvr5_opt这个文件夹。然后建议可以调整的参数有min_length、min_interval 和 max_sil_kept 单位都是ms。 

min_length根据显存大小调整,显存越小调越小。 min_interval根据音频的平均间隔调整,如果音频太密集可以适当调低。 max_sil_kept会影响句子的连贯性,不同音频不同调整,不会调的话保持默认。其他参数不建议调整。点击开启语音分割,马上就分割好了。默认输出路径在output/slicer_opt。当然也可以使用其他切分工具切分。

 切分完后文件在output\slicer_opt。打开切分文件夹,排序方式选大小,将时长超过显存数秒的音频手动切分至显存数秒以下。比如显卡是4090显存是24g,那么就要将超过24秒的音频手动切分至24s以下,音频时长太长的会爆显存。如果语音切割后还是一个文件,那是引文音频太密集了。可以调低min_interval,从300调到100基本能解决这问题。实在不行用au手动切分。

3.3音频降噪(如果原音频足够干净可以跳过这步,比如游戏中提取的干声)

如果你觉得音频足够清晰可以跳过这步,降噪对音质的破坏挺大的,谨慎使用。输入刚才切割玩的音频的文件夹,默认是output/slicer_opt文件夹。然后点击开启语音降噪。默认输出路径在output/denoise_opt。

3.4打标

为什么要打标:打标就是给每个音频配上文字,这样才能让AI学习到每个字该怎么读。这里的标指的是标注。

如果你上一步切分了或者降噪了,那么已经自动帮你填充好路径了。然后选择达摩ASR或者fast whisper。达摩ASR只能用于识别汉语和粤语,效果也最好。 fast whisper可以标注99种语言,是目前最好的英语和日语识别,模型尺寸选large V3,语种选auto自动。whisper 可以选择精度,建议选float 16,float 16比float32块,int8速度几乎和float16一样。然后点开启离线批量ASR就好了,默认输出是output/asr_opt这个路径。ASR需要一些时间,看看控制台有没有报错就好了。

如果有字幕的可以用字幕标注,准确多了。内嵌字幕或者外挂字母都可以。这个以后的学习中会进行讲解。

3.5校对标注(这步比较费时间,如果不追求极致效果可以跳过)

上一步打标会自动填写list路径,你只需要点击开启打标webui,打开后就是SubFix,从左往右从上到下依次意思是:跳转页码、保存修改、合并音频、删除音频、上一页、下一页、分割音频、保存文件、反向选择。每一页修改完都要点以下保存修改(Submit Text),如果没保存就翻页那么会重置文本,在完成退出前要点保存文件(Save File),做任何其他操作前最好先点一下保存修改(Submit Text)。合并音频和分割音频不建议使用,精度非常差。删除音频先要点击要删除的音频右边的yes,再点删除音频(Delete Audio)。删除完成后文件夹中的音频不会删除但标注已经删除了,不会加入训练集的。

4.训练

1.输出logs 

来到第二个页面

 先设置实验名也就是模型名,理论上可以是中文!打标结束后会自动填写路径,只要点下一键三连就可以了。

如果是英文,日语,粤语或韩语的话logs里的3-bert文件夹是空的,是正常的不用管。

 

2.微调训练

首先设置batch_size,sovits训练建议batch_size设置为显存的一半以下,高了会爆显存。bs并不是越高越快! batch_size也需要根据数据集大小调整,也并不是严格按照显存数一半来设置,比如6g显存需要设置为1。如果爆显存就调低。 当显卡3D占用100%的时候就是bs太高了,使用到了共享显存,速度会慢好几倍。

以下是切片长度为10s时实测的不同显存的sovits训练最大batch_size,可以对照这个设置。如果切片更长、数据集更大的话要适当减少。

在0213版本之后添加了dpo训练。dpo大幅提升了模型的效果,几乎不会吞字和复读,能够推理的字数也翻了几倍。但同时训练时显存占用多了2倍多,训练速度慢了4倍,12g以下显卡无法训练。 数据集质量要求也高了很多,如果数据集有杂音,有混响,音质差,不校对标注,那么会有负面效果。

如果你的显卡大于12g,且数据集质量较好,且愿意等待漫长的训练时间,那么可以开启dpo训练。否则请不要开启,下面是切片长度为10s时实测的不同显存的gpt训练最大batch_size。如果切片更长、数据集更大的话要适当减少。

接着设置轮数,相比V1,V2对训练集的还原更好,但也更容易学习到训练集中的负面内容。所以如果你的素材中有底噪、混响、喷麦、响度不统一、电流声、口水音、口齿不清、音质差等情况那么请不要调高SoVITS模型轮数,否则会有负面效果。GPT模型数一半情况下不高于20,建议设置10.然后先点开启SoVITS训练,训练完成后再点开GPT训练,不可以一起训练(除非你有两张卡)!如果中途中断了,直接再点开始训练就好了,会从最近的保存点开始训练。

训练的时候请ctrl+shift+esc打开任务管理器看,下拉打开选项,选择cuda。如果cuda占用为0那么就不在训练。专用GPU内存就是显存,其他的内存都是共享的,并不是真正的显存。爆显存就调低bs。或者存在过长的音频,需要重新制作数据集。

win11没有cuda打开设置--系统--显示--显示卡--默认图形设置, 关闭硬件加速GPU计划,并重启电脑。

训练完成后会显示训练完成,并且控制台显示的轮数停在设置的(总轮数-1)的轮数上。

看cuda占用需要下拉选择cuda,如果win11找不到cuda界面需要关闭硬件加速GPU计划并重启

关于学习率权重: 

可以调低但不建议调高。

关于高训练轮数:

你可能会看见有人说训练了几百轮,几千轮的。但高轮数并不就是好。如果要训练高轮数请先保证数据集质量极好,标记全都经过手动校对,时长至少超过1小时才有必要拉高轮数。否则默认的十几轮效果已经很好了。

关于数据集长度:

请先保证质量!音频千万不能有杂音,要口齿清晰,响度统一,没有混响,每句话尽量完整,全部手动校对标注。30分钟内有明显提升,不建议再增加数据集长度。

情感分类

如果有超过1小时的数据集的话,可以先用Emotion2Vec或ColorSplitter情感分类后再训练。会获得更稳定更丰富的情感,不过标注一定要手动校对。

5.推理

开启推理界面

先点一下刷新模型,下拉选择模型推理,e代表轮数,s代表步数。不是轮数越高越好。选择好模型点开启TTS推理,自动弹出推理界面。如果没有弹出,复制http://0.0.0.0:9872到浏览器打开。

请严格区分轮数(Epoch)和步数(Step):1个Epoch代表训练集中的所有样本都参与了一次学习,1 Step代表进行了一次学习,由于batch size的存在,没步学习可以含有数条样本,因此,Epoch 和 Step 的换算如下:

开始推理 

最上面可以切换模型,在刚练完挑模型的时候很重要

然后上传一段参考音频,建议是数据集中的音频。最好5秒。参考音频很重要!会学习语速和语气,请认真选择。参考音频的文本是参考音频说什么就填什么,语种也要对应。 在0217版本之后可以选择无参考文本模式,但非常不建议使用。

右上角有个融合音色的可选项,先将要融合的音频放在一个文件夹中然后一起拖进去(没有什么实用性的功能)

接着就是输入要合成的文本了,注意语种要对应。目前可以中英混合,日英混合和中日混合。切分建议选择四句一切,低于四句的不会切。如果凑四句一切报错就是显存太小可以按句号切。如果不切,显存越大能合成的越多。合成的过长很容易胡言乱语。

0213版本加入了top_p,top_k和temperature,保持默认就可以。这些控制的都是随机性,拉大数值,随机性会变大,建议使用默认。

关于top_p,top_k和temperature

这三个值都是用来控制采样的。在推理的时候要挑出一个最好的token,但机器并不知道哪个是最好的。于是先按照top_k挑出前几个token,top_p在top_k的基础上筛选token。最后temperature控制随机性输出。

比如总共有100个token,top_k设置5,top_p设置0.6,temperature设置为0.5。那么就会从100个token中先挑出5个概率最大的token,这五个token的概率分别是(0.3,0.3,0.2,0.2,0.1),那么再挑出累加概率不超过0.6的token(0.3和0.3),再从这两个token中随机挑出一个token输出,其中前一个token被挑选到的几率更大。以此类推。

关于重复惩罚

=1 不惩罚重复, >1时开始惩罚重复, <1时鼓励重复。 一般都设置为 >1。

如果出现吞字,重复,参考音频混入的情况,这是正常现象。改善的方法有使用较低轮数的GPT模型、合成文本再短点、换参考音频。如果一直复读估计是标注不准确的问题,手动校对后重炼即可。

6.分享模型

分享需要的模型都在SoVITS_weights_v2GPT_weights_v2这两个文件夹。选择合适轮数的模型,记得带上参考音频一起打包成压缩文件,就可以分享了。别人只要将GPT模型(ckpt后缀)放入GPT_weights_v2文件夹,SoVITS模型(pth后缀)放入SoVITS_weights_v2文件夹就可以推理了。

7.使用别人分享的模型

将GPT模型(ckpt后缀)放入GPT_weights_v2文件夹。SoVITS模型(pth后缀)放入SoVITS_weights_v2文件夹,刷新下模型就能选择模型推理了。

8.训练第二个模型

记得把之前切片文件夹里的音频和asr文件夹里的标注文件移走,否则会一起加入训练集。训练的时候记得更换模型名!其他步骤都一样。模型还在GPT_weights_v2文件夹和SoVITS_weights_v2文件夹。

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

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

相关文章

计算机网络 (36)TCP可靠传输的实现

前言 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过多种机制实现可靠传输&#xff0c;这些机制主要包括连接管理、序列号和确认应答机制、重传机制、流量控制、拥塞控制等。 一、连接管理 TCP使用三次握手&#xff0…

视频编辑最新SOTA!港中文Adobe等发布统一视频生成传播框架——GenProp

文章链接&#xff1a;https://arxiv.org/pdf/2412.19761 项目链接&#xff1a;https://genprop.github.io 亮点直击 定义了一个新的生成视频传播问题&#xff0c;目标是利用 I2V 模型的生成能力&#xff0c;将视频第一帧的各种变化传播到整个视频中。 精心设计了模型 GenProp&…

make工程管理器与Makefile

目录 一、介绍 1、make工程管理器 2、Makefile 二、Makefile语法规则 1、Makefile语法格式 2、Makefile中特殊处理与伪目标 3、变量、规则与函数 (1)自定义变量使用示例 (2)自动变量使用示例 一、介绍 1、make工程管理器 定义&#xff1a; make是一个命令工具&…

【git】-2 分支管理

目录 一、分支的概念 二、查看、创建、切换分支 1、查看分支-git branch 2、创建分支- git branch 分支名 3、切换分支- git checkout 分支名 三、git指针 -实现分支和版本间的切换 四、普通合并分支 git merge 文件名 五、冲突分支合并 ​​​​​​【git】-初始gi…

3DGabor滤波器实现人脸特征提取

import cv2 import numpy as np# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # 相位偏移# 生成 Gabor 滤…

接口项目架构流程图-thinkphp6-rabbitmq

一、整个系统流程 第一步&#xff1a;平台在创建好后开启消息队列&#xff1b; 第二步&#xff1a;平台为需要服务的客户开好账号并传输对应的公私钥文件&#xff1b; 第三步&#xff1a;客户通过平台分享的接口连接地址采用开户时的手机号查看&#xff1b; 第四步&#xff1a;…

Vue3初学之组件通信

一起进行学习&#xff1a; 在 Vue 3 中&#xff0c;组件通信是一个非常重要的概念&#xff0c;它决定了如何在父子组件之间、兄弟组件之间以及跨层级组件之间传递数据和事件。以下是 Vue 3 中常见的组件通信方式&#xff1a; 父子组件通信 1.1 父组件向子组件传递数据&#x…

2025年第三届“华数杯”国际大学生数学建模竞赛【A题】Problem A: Can He Swim Faster

问题1&#xff1a;运动员的出色比赛表现通常得益于艰苦且持续的专业训练&#xff0c;这不仅提升了游泳技能&#xff0c;也增强了生理储备。比赛中&#xff0c;科学控制游泳速度是关键&#xff0c;包括保持个人节奏、寻求最佳身体状态节奏和合理分配体力。针对自由泳项目&#x…

【计算机网络】lab4 Ipv4(IPV4的研究)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…

ELFK日志采集实战

一、日志分析概述 日志分析是运维工程师解决系统故障&#xff0c;发现问题的主要手段 日志主要包括系统日志、应用程序日志和安全日志 系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因 经常分析日志可以了解服务器的负荷&#x…

辅助--Inspector

辅助–Inspector 1.Introduction This manual explains how to use the Inspector. 1.1.Overview Inspector is a Qt-based library that provides functionality to interactively inspect low-level content of the OCAF data model, OCCT viewer and Modeling Data. Thi…

如何播放视频文件

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节3. 示例代码4. 内容总结我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用的功能,不过Flutter官方…

R数据分析:多分类问题预测模型的ROC做法及解释

有同学做了个多分类的预测模型,结局有三个类别,做的模型包括多分类逻辑回归、随机森林和决策树,多分类逻辑回归是用ROC曲线并报告AUC作为模型评估的,后面两种模型报告了混淆矩阵,审稿人就提出要统一模型评估指标。那么肯定是统一成ROC了,刚好借这个机会给大家讲讲ROC在多…

【数据库】四、数据库管理与维护

文章目录 四、数据库管理与维护1 安全性管理2 事务概述3 并发控制4 备份与恢复管理 四、数据库管理与维护 1 安全性管理 安全性管理是指保护数据库&#xff0c;以避免非法用户进行窃取数据、篡改数据、删除数据和破坏数据库结构等操作 三个级别认证&#xff1a; 服务器级别…

C语言gdb调试

目录 1.gdb介绍 2.设置断点 2.1.测试代码 2.2.设置函数断点 2.3.设置文件行号断点 2.4.设置条件断点 2.5.多线程调试 3.删除断点 3.1.删除指定断点 3.2.删除全部断点 4.查看变量信息 4.1.p命令 4.2.display命令 4.3.watch命令 5.coredump日志 6.总结 1.gdb介绍…

winform第三方界面开源库AntdUI的使用教程保姆级环境设置篇

1. AntdUI 1.1. 导入项目 1.1.1. 首先新建一个空白的基于.net的Winfrom项目1.1.2. 复制AntdUI中src目录到我们的解决方案下面1.1.3. 解决方案下添加现有项目1.1.4. 添加项目引用 1.2. 编写代码 1.2.1. 改写Form1类&#xff0c;让其继承自public partial class Form1 : AntdUI.W…

记录一下vue2项目优化,虚拟列表vue-virtual-scroll-list处理10万条数据

文章目录 封装BrandPickerVirtual.vue组件页面使用组件属性 select下拉接口一次性返回10万条数据&#xff0c;页面卡死&#xff0c;如何优化&#xff1f;&#xff1f;这里使用 分页 虚拟列表&#xff08;vue-virtual-scroll-list&#xff09;&#xff0c;去模拟一个下拉的内容…

企业开通部署 Azure OpenAI 流程:如何创建一个AI聊天机器人

由于众所周知的原因&#xff0c;国内没法直接调用 OpenAI 接口。 下面我将演示企业如何开通 Azure OpenAI 服务&#xff0c;以及如何使用 C# 调用 Azure OpenAI 接口创建一个 Console 应用程序并实现聊天机器人功能。 1开通 Azure OpenAI 服务 要开通 Azure OpenAI 服务&…

CNN Test Data

由于数据量过大&#xff0c;打不开了 搞一组小的吧。收工睡觉 https://download.csdn.net/download/spencer_tseng/90256048

STM32使用ITM调试_通过仿真器实现串口打印

IDE&#xff1a;CLion MCU: STM32F407VET6 工具&#xff1a;OpenOCD Telnet 一、简介 调试单片机时&#xff0c;如果要打印数据往往需要另接一根线通过USB转TTL接到电脑上。但这样做往往并不方便&#xff0c;尤其是身边没有USB转TTL工具时。这时可以使用单片机自带的ITM单元…