【ModelScope】从入门到进阶

计算机视觉任务

任务(Task)中文任务(Task)英文任务说明
单标签图像分类image-classification对图像中的不同特征根据类别进行区分
通用图像分割image-segmentation识别图像主体与图像背景进行分离
文字检测ocr-detection将图像中的文字检测出来并返回检测点坐标位置
人像美肤skin-retouching对图像中的人像皮肤进行细节美化
风格迁移image-style-transfer对图像或视频的色彩风格进行另一种风格转化
图像翻译image-to-image-translation将一张图片上的文字翻译成目标语言并生成新的图片
以图生图image-to-image-generation根据输入图像生成新的类似图像
搜索推荐image-search根据输入图像进行范围匹配
审核评估image-evaluation对图像进行解析并自动给出一个评估信息
视频处理video-processing对视频信息进行自动运算处理
视频检测video-detection对视频信息进行内容解析
视频分割video-segmentation对视频信息进行背景和主体分离
视频生成video-generation对视频进行解析匹配视频信息进行生成
视频编辑video-editing对视频进行解析转化为可编辑状态
视频表征video-embedding对视频特征进行多模态匹配
视频检索video-search对视频解析根据规则提取部分信息
视频审核评估video-evaluation根据规则对视频解析并给出评估结果
视频文本识别video-ocr对视频中的文字内容进行识别
视频到文本video-captioning将视频中的音频转化为文本信息
三维重建3d-reconstruction对三维模型解析并重新构建
三维识别3d-recognition对三维模型进行识别并进行标注
三维编辑3d-editing对三维模型解析转化为可编辑状态
驱动交互3d-driven对三维模型解析转为为动态效果
渲染呈现3d-rendering对三维模型进行渲染并以图像展示
虚拟试衣virtual-try-on给定模特图片和衣服图片,合成模特穿上给定衣服的图片
文字识别ocr-recognition将图像中的文字识别出来并返回文本内容
人脸检测face-detection对图像中的人脸进行检测并返回人脸坐标位置
人脸识别face-recognition对矫正对齐后的人脸图像提取特征向量
人体检测human-detection对图像中的人体关键点进行检测并返回关键点标签与坐标位置
人物交互关系human-object-interaction对图像中的肢体关键点和物品进行检测和识别对坐标信息进行处理
人脸生成face-image-generation对图像中的人脸进行区域位置检测并生成虚拟人脸
多标签图像分类image-multilabel-classification解析图像特征支持多个类别区分
通用目标检测image-object-detection对输入图像中的较通用物体定位及类别判断
目标检测-自动驾驶场景(行人、车辆、交通标注等)image-object-detection-autopilot对自动驾驶中的场景进行目标检测,图像中的人、车辆及交通信息等进行实时解析并进行标注(行人、车辆、交通标注)
目标检测-自动驾驶场景(车道线)image-object-detection-laneline对自动驾驶中的场景进行目标检测,图像中的人、车辆及交通信息等进行实时解析并进行标注(车道线)
人像抠图portrait-matting对输入的图像将人体部分抠出并对背景进行透明化处理
人像增强image-portrait-enhancement对图像中的人像主体进行细节增强
图像超分辨image-super-resolution对图像进行倍数放大且不丢失画面质量
图像上色image-colorization对黑白图像进行区域解析并对其进行类别上色
图像颜色增强image-color-enhancement对图像中色彩值进行解析并对其进行规则处理
图像降噪image-denoising对图像中的噪点进行处理降低
人像卡通化image-portrait-stylization对输入的图像进行卡通化处理,实现风格变化
图像表征image-embedding对输入图像特征进行多模态匹配
直播商品类目识别live-category实时解析识别直播画面中的商品类别进行信息展示
行为识别action-recognition对视频中的动作行为进行识别并返回类型
短视频内容分类video-category解析短视频语义进行场景分类
目标跟踪及重识别reid-and-tracking可对图片和视频进行目标识别可重复识别
增强/虚拟现实ar-vr对vr图像信息进行画面增强
人体2D关键点body-2d-keypoints检测图像中人体2D关键点位置
商品图片特征product-retrieval-embedding对商品图像进行表征向量提取
视频场景分割movie-scene-segmentation输入一段长视频,算法将其分割成不同的场景子视频
人脸表情识别facial-expression-recognition识别图像中人脸的表情
手部2D关键点hand-2d-keypoints检测图像中手部21点关键点坐标
视频摘要video-summarization输入一段长视频,算法找出其中的一些关键片段进行拼接,输出拼接的短的摘要视频
人脸2D关键点face-2d-keypoints检测图像中人脸106点关键点坐标和人脸朝向姿态角
行人重识别image-reid-person输入包含人的图片,输出图片的特征向量
3D人体关键点body-3d-keypoints检测视频中人体姿态的3D关键点坐标
视频单目标跟踪video-single-object-tracking输入视频和第一帧目标位置,在所有视频帧中预测该目标位置
行为检测action-detection检测视频中发生的行为动作,并给出动作的时空位置
人群密度估计crowd-counting输入一张图片,输出图片内有多少人
卡证检测矫正card-detection检测输入图片中是否存在卡证,并定位其角点,根据角点将卡证矫正为正视图
全身关键点检测human-wholebody-keypoint检测图片中全身关键点坐标,包括人脸关键点,骨骼关键点、脚步关键点和手势关键点,共计133点
视频目标检测video-object-detection任务的输入输出类型及数据格式
语义分割semantic-segmentation图像显著性,预测图中每个像素的重要程度
人体美型image-body-reshaping给定一张人物图像(半身或全身),无需任何额外输入,端到端地实现对人物身体区域(肩部,腰部,腿部等)的自动化美型处理
目标检测-自动驾驶场景image-object-detection-auto检测自动驾驶场景图片的目标,包括车辆,行人等
图像填充image-inpainting输入一张图片;同时用户根据该图片,自定义地可以进行在线绘制任意形状的mask;最终输出恢复、补全后的图像
视频修复video-inpainting对视频中指定的区域和帧范围,进行视频修复
2D手势语义识别hand-static对图片中的人手动作的语义进行识别
人脸情绪识别face-emotion对图片中的人的情绪进行识别
人脸人体人手三合一检测face-human-hand-detection对图片中的人脸、人体、人手进行检测
通用商品分割product-segmentation对图片中的商品进行分割
商品显著性分割shop-segmentation对商品图像进行显著性分割
文本指导的图像分割text-driven-segmentation根据文本对图像进行分割
动物识别animal-recognition对图片中的动物主体的进行识别
视频文本表征video-multi-modal-embedding输入任意视频和文本pair,输出相应的视频-文本pair特征,和相应得分
自然语言引导的视频摘要language-guided-video-summarization输入一段长视频和N句英文描述,算法找出其中和英文描述相关的一些关键片段进行拼接,输出拼接的短的摘要视频
文本指导的视频目标分割referring-video-object-segmentation通过用户输入的文本描述(英文)从输入视频中分割出指定的物体,支持一次性输入两个物体描述
万物识别general-recognition对图片中的物体主体的进行识别

模型加载

加载模型需要两个关键信息:1.模型id 2.模型版本

from modelscope.models import Model

model = Model.from_pretrained('damo/nlp_structbert_word-segmentation_chinese-base', revision='v1.0.1')

 如果想下载大本地指定目录的话,使用下面这行代码

from modelscope.hub.snapshot_download import snapshot_download

model_dir = snapshot_download('damo/nlp_structbert_word-segmentation_chinese-base', cache_dir='path/to/local/dir')

 模型推理

使用pipeline方法加载模型进行推理

pipeline构造函数

task: 任务名称,必填
model: 模型名称或模型实例,可选。不填时使用该任务默认模型
preprocessor: 预处理器实例,可选。不填时使用模型配置文件中的预处理器
device: 运行设备,可选。值为cpu, cuda, gpu, gpu:X or cuda:X,默认gpu
device_map: 模型参数到运行设备的映射,可选,不可与device同时配置。值为auto, balance, balanced_low_0, sequential或映射dict

pipeline调用时参数

batch_size: 批量推理的mini-batch大小,可选。不传时不进行批量推理

pipeline基本用法

创建pipeline对象

from modelscope.pipelines import pipeline
word_segmentation = pipeline('word-segmentation')

 输入推理数据

input_str = '今天天气不错,适合出去游玩'
print(word_segmentation(input_str))

结果

# 输出
{'output': '今天 天气 不错 , 适合 出去 游玩'}

输入多条推理数据

 pipeline对象也支持传入多个样本列表输入,返回对应输出列表,每个元素对应输入样本的返回结果。多条文本的推理方式是输入data在pipeline内部用迭代器单条处理后append到同一个返回List中

inputs =  ['今天天气不错,适合出去游玩','这本书很好,建议你看看']
print(word_segmentation(inputs))

# 输出
[{'output': ['今天', '天气', '不错', ',', '适合', '出去', '游玩']}, {'output': ['这', '本', '书', '很', '好', ',', '建议', '你', '看看']}]

 模型训练

 

ModelScope的模型训练步骤如下:

  1. 使用MsDataset加载数据集
  2. 编写cfg_modify_fn方法,按需修改部分参数
  3. 构造trainer,开始训练
  4. 【训练后步骤】进行模型评估
  5. 【训练后步骤】使用训练后的模型进行推理

 PyTorch模型的训练使用EpochBasedTrainer(及其子类),该类会根据配置文件实例化模型、预处理器、优化器、指标等模块。因此训练模型的重点在于修改出合理的配置,其中用到的各组件都是ModelScope的标准模块。

 trainer的重要构造参数

model: 模型id、模型本地路径或模型实例,必填
cfg_file: 额外的配置文件,可选。如果填写,trainer会使用这个配置进行训练
cfg_modify_fn: 读取配置后trainer调用这个回调方法修改配置项,可选。如果不传就使用原始配置
train_dataset: 训练用的数据集,调用训练时必传
eval_dataset: 评估用的数据集,调用评估时必传
optimizers: 自定义的(optimizer、lr_scheduler),可选,如果传入就不会使用配置文件中的
seed: 随机种子
launcher: 支持使用pytorch/mpi/slurm开启分布式训练
device: 训练用设备。可选,值为cpu, gpu, gpu:0, cuda:0等,默认gpu

 模型训练示例

文本分类

# structbert的backbone,该模型没有有效分类器,因此使用前需要finetune(微调)
model_id = 'damo/nlp_structbert_backbone_base_std'

使用MsDataset加载数据集

加载官方数据集

from modelscope.msdatasets import MsDataset
# 载入训练数据,数据格式类似于{'sentence1': 'some content here', 'sentence2': 'other content here', 'label': 0}
train_dataset = MsDataset.load('clue',  subset_name='afqmc', split='train')
# 载入评估数据
eval_dataset = MsDataset.load('clue',  subset_name='afqmc', split='validation')

 加载自己的数据集

from modelscope.msdatasets import MsDataset 
# 载入训练数据 
train_dataset = MsDataset.load('/path/to/my_train_file.txt') 
# 载入评估数据 
eval_dataset = MsDataset.load('/path/to/my_eval_file.txt')

更多方法参考:数据集使用指南

编写cfg_modify_fn方法,按需修改部分参数

 建议首先查看模型的配置文件,并查看需要额外修改的参数:

from modelscope.utils.hub import read_config
# 上面的model_id
config = read_config(model_id)
print(config.pretty_text)

 一般的配置文件中,在训练时需要修改的参数一般分为:

1.预处理器参数

# 使用该模型适配的预处理器sen-sim-tokenizer
cfg.preprocessor.type='sen-sim-tokenizer'
# 预处理器输入的dict中,句子1的key,参考上文加载数据集中的afqmc的格式
cfg.preprocessor.first_sequence = 'sentence1'
# 预处理器输入的dict中,句子2的key
cfg.preprocessor.second_sequence = 'sentence2'
# 预处理器输入的dict中,label的key
cfg.preprocessor.label = 'label'
# 预处理器需要的label和id的mapping
cfg.preprocessor.label2id = {'0': 0, '1': 1}

 某些模态中,预处理的参数需要根据数据集修改(比如NLP一般需要修改,而CV一般不需要修改),后续可以查看ModelCard或各任务最佳实践中各任务训练的详细描述。

2.模型参数

# num_labels是该模型分类数
cfg.model.num_labels = 2

 3.任务参数

# 修改task类型为'text-classification'
cfg.task = 'text-classification'
# 修改pipeline名称,用于后续推理
cfg.pipeline = {'type': 'text-classification'}

 4.训练参数

# 设置训练epoch
cfg.train.max_epochs = 5
# 工作目录
cfg.train.work_dir = '/tmp'
# 设置batch_size
cfg.train.dataloader.batch_size_per_gpu = 32
cfg.evaluation.dataloader.batch_size_per_gpu = 32
# 设置learning rate
cfg.train.optimizer.lr = 2e-5
# 设置LinearLR的total_iters,这项和数据集大小相关
cfg.train.lr_scheduler.total_iters = int(len(train_dataset) / cfg.train.dataloader.batch_size_per_gpu) * cfg.train.max_epochs
# 设置评估metric类
cfg.evaluation.metrics = 'seq-cls-metric'

 使用cfg_modify_fn将上述配置修改应用起来:

# 这个方法在trainer读取configuration.json后立即执行,先于构造模型、预处理器等组件
def cfg_modify_fn(cfg):
  cfg.preprocessor.type='sen-sim-tokenizer'
  cfg.preprocessor.first_sequence = 'sentence1'
  cfg.preprocessor.second_sequence = 'sentence2'
  cfg.preprocessor.label = 'label'
  cfg.preprocessor.label2id = {'0': 0, '1': 1}
  cfg.model.num_labels = 2
  cfg.task = 'text-classification'
  cfg.pipeline = {'type': 'text-classification'}
  cfg.train.max_epochs = 5
  cfg.train.work_dir = '/tmp'
  cfg.train.dataloader.batch_size_per_gpu = 32
  cfg.evaluation.dataloader.batch_size_per_gpu = 32
  cfg.train.dataloader.workers_per_gpu = 0
  cfg.evaluation.dataloader.workers_per_gpu = 0
  cfg.train.optimizer.lr = 2e-5
  cfg.train.lr_scheduler.total_iters = int(len(train_dataset) / cfg.train.dataloader.batch_size_per_gpu) * cfg.train.max_epochs
  cfg.evaluation.metrics = 'seq-cls-metric'
  # 注意这里需要返回修改后的cfg
  return cfg

构造trainer,开始训练

首先,配置训练所需参数:

from modelscope.trainers import build_trainer

# 配置参数
kwargs = dict(
        model=model_id,
        train_dataset=train_dataset,
        eval_dataset=eval_dataset,
        cfg_modify_fn=cfg_modify_fn)
trainer = build_trainer(default_args=kwargs)
trainer.train()

 需要注意,数据由trainer从dataloader取数据的时候调用预处理器进行处理。

进行模型评估

可选地,在训练后可以进行额外数据集的评估。用户可以单独调用evaluate方法对模型进行评估:

from modelscope.msdatasets import MsDataset
# 载入评估数据
eval_dataset = MsDataset.load('clue',  subset_name='afqmc', split='validation')

from modelscope.trainers import build_trainer

# 配置参数
kwargs = dict(
        # 由于使用的模型训练后的目录,因此不需要传入cfg_modify_fn
        model='/tmp/output',
        eval_dataset=eval_dataset)
trainer = build_trainer(default_args=kwargs)
trainer.evaluate()

 或者,也可以调用predict方法将预测结果保存下来,以供后续打榜:

from modelscope.msdatasets import MsDataset
import numpy as np

# 载入评估数据
eval_dataset = MsDataset.load('clue', subset_name='afqmc', split='test').to_hf_dataset()

from modelscope.trainers import build_trainer


def cfg_modify_fn(cfg):
    # 预处理器在mini-batch中留存冗余字段
    cfg.preprocessor.val.keep_original_columns = ['sentence1', 'sentence2']
    # 预测数据集没有label,将对应key置空
    cfg.preprocessor.val.label = None
    return cfg


kwargs = dict(
    model='damo/nlp_structbert_sentence-similarity_chinese-tiny',
    work_dir='/tmp',
    cfg_modify_fn=cfg_modify_fn,
    # remove_unused_data会将上述keep_original_columns的列转为attributes
    remove_unused_data=True)

trainer = build_trainer(default_args=kwargs)


def saving_fn(inputs, outputs):
    with open(f'/tmp/predicts.txt', 'a') as f:
        # 通过attribute取冗余值
        sentence1 = inputs.sentence1
        sentence2 = inputs.sentence2
        predictions = np.argmax(outputs['logits'].cpu().numpy(), axis=1)
        for sent1, sent2, pred in zip(sentence1, sentence2, predictions):
            f.writelines(f'{sent1}, {sent2}, {pred}\n')


trainer.predict(predict_datasets=eval_dataset,
                saving_fn=saving_fn)

使用训练后的模型进行推理

训练完成以后,文件夹中会生成推理用的模型配置,可以直接用于pipeline:

  • {work_dir}/output:训练完成后,存储模型配置文件,及最后一个epoch/iter的模型参数(配置中需要指定CheckpointHook)
  • {work_dir}/output_best:最佳模型参数时,存储模型配置文件,及最佳的模型参数(配置中需要指定BestCkptSaverHook)
from modelscope.pipelines import pipeline
pipeline_ins = pipeline('text-classification', model='/tmp/output')
pipeline_ins(('这个功能可用吗', '这个功能现在可用吗'))

此外,ModelScope也会存储*.pth文件,用于后续继续训练、训练后验证、训练后推理。一般一次存储会存储两个pth文件:

  • epoch_*.pth 存储模型的state_dict,output/output_best的bin文件是此文件的硬链接
  • epoch_*_trainer_state.pth,存储trainer的state_dict

在继续训练场景时,只需要加载模型的pth文件,trainer的pth文件会被同时读取。

用户也可以手动link某个pth文件到output/output_best,实现使用任意一个存储节点的推理

pth的文件名格式如下:

  • epoch_{n}/iter_{n}.pth(如epoch_3.pth): 每interval个epoch/iter周期存储(配置中需要指定CheckpointHook)
  • best_epoch{n}_{metricname}{m}.pth(如best_iter13_accuracy22.pth):取得最佳模型参数时存储(配置中需要指定BestCkptSaverHook)
# 用于继续训练
trainer.train(checkpoint_path=os.path.join(self.tmp_dir, 'iter_3.pth'))
# 用于训练后评估
trainer.evaluate(checkpoint_path=os.path.join(self.tmp_dir, 'iter_3.pth'))
# 用于训练后推理并通过saving_fn存储预测的label为文件
trainer.predict(checkpoint_path=os.path.join(self.tmp_dir, 'iter_3.pth'), 
                predict_datasets=some_dataset,
                saving_fn=some-saving-fn)

参考链接:

模型的训练Train

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ansible自动化运维(一)简介及部署、清单

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

python设计模式:模板方法模式

更多Python学习内容:ipengtao.com 软件设计和编程中,设计模式是一种有助于解决常见问题的强大工具。其中之一是"模板方法模式",它是一种行为型设计模式,允许你定义一个算法的骨架,但将一些步骤的具体实现延迟…

微功遥测终端机RTU:守护城市生命线的智能卫士

在城市的繁华背后,隐藏着一套高效运转的“生命线”——排水系统。而在这条生命线上,微功遥测终端机RTU(MGTR-W4131U)发挥着不可或缺的作用,为城市的正常运转提供了坚实保障。 微功遥测终端机RTU(MGTR-W4131U),顾名思义&#xff0…

Redis双写一致性

文章目录 Redis双写一致性1. 延迟双删(有脏数据风险)2. 异步通知(保证数据最终一致性)3. 分布式锁(数据的强一致,性能低) Redis双写一致性 当修改了数据库的数据也要同时更新缓存的数据&#xf…

云计算:OpenStack 分布式架构添加NFS存储(单控制节点与多计算节点)

目录 一、实验 1.环境 2.安装并配置NFS节点 3.安装并配置存储节点storage02 4.使用NFS存储 一、实验 1.环境 (1) 主机 表1 主机 主机架构IP备注controller控制节点192.168.204.210已部署compute01计算节点1192.168.204.211 已部署compute02计算节点2192.168.204.212已部…

【AIGC-图片生成视频系列-5】I2V-Adapter:一种用于视频扩散模型的通用图像生成视频适配器

目录 一. 项目与贡献概述 二. 方法详解 a. 整体框架图 b. 帧相似性先验 三. 一般化图像生成动画结果 四. 基于个性化 T2I 模型的动画结果 五. 结合ControlNet动画结果 六. 项目论文和代码 七. 个人思考与总结 在快速发展的数字内容生成领域,焦点已从文本到…

[DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]

文章目录 概要I Introduction小结 概要 提出的架构,双注意力U-Net与特征融合(DAU-FI Net),解决了语义分割中的挑战,特别是在多类不平衡数据集上,这些数据集具有有限的样本。DAU-FI Net 整合了多尺度空间-通…

数据流的中位数

题目链接 数据流的中位数 题目描述 注意点 在调用 findMedian 之前,数据结构中至少有一个元素如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值 解答思路 使用两个优先队列存储数据流,其中一个优先队列队首为最…

webrtc中的接口代理框架

文章目录 接口代理框架Proxy体系类结构导出接口 webrtc的实际运用PeerConnectionFactoyPeerConnection使用 接口代理框架 webrtc体系庞大,模块化极好,大多数模块都可以独立使用。模块提供接口,外部代码通过接口来使用模块功能。 在webrtc中通…

面向对象基础-析构函数-this-static-const

析构函数 析构函数是与构造函数对立的函数。 构造函数 析构函数 创建对象时手动调用 当对象销毁时,自动调用 函数名称与类名相同 函数名称是~类名 构造函数可以重载 析构函数没有参数,不能重载 用于创建对象时并初始化 用于销毁对象时释放资源 …

webRTC实时通信demo

参考文档: https://www.jianshu.com/p/f439ce5cc0be https://www.w3cschool.cn/socket demo流程示意图(用户A向用户B推送视频): #mermaid-svg-0KZaDQ5DBl28zjmZ {font-family:"trebuchet ms",verdana,arial,sans-seri…

影视后期:PR 调色处理,灰片还原,校色偏色素材

灰片还原 确定拍摄灰片的相机型号品牌官网下载专用log文件LUT-浏览-导入slog3分析亮部波形-增加画面对比分析矢量示波器-提高整体饱和 校正LUT可以将前期拍摄的log色彩模式的视频转换为成709色彩模式,即将灰度视频转换为正常效果(灰片还原) 各个相机有对应的校正L…

链路层、网络层、传输层、应用层长度

参考:链路层、网络层、传输层、应用层长度 链接:https://blog.csdn.net/qq_41658597/article/details/120683870 目录 1、概述2、TCP、UDP数据包最大值的确定3、TCP、UDP数据包最小值的确定4、实际应用IP层 1、概述 首先要看TCP/IP协议,涉及到…

PyTorch中常用的工具(4)Visdom

文章目录 前言3.2 Visdom 前言 在训练神经网络的过程中需要用到很多的工具,最重要的是数据处理、可视化和GPU加速。本章主要介绍PyTorch在这些方面常用的工具模块,合理使用这些工具可以极大地提高编程效率。 由于内容较多,本文分成了五篇文…

李宏毅机器学习第二十三周周报 Flow-based model

文章目录 week 23 Flow-based model摘要Abstract一、李宏毅机器学习1.引言2.数学背景2.1Jacobian2.2Determinant2.3Change of Variable Theorem 3.Flow-based Model4.GLOW 二、文献阅读1. 题目2. abstract3. 网络架构3.1 change of variable formula3.2 Coupling layers3.3Prop…

http——https实现指南

第一部分:HTTPS安全证书简介 什么是HTTPS安全证书? 在网络通信中,HTTPS安全证书是一种由可信任的证书颁发机构(CA)签发的数字证书,用于保障网站与用户之间的数据传输安全。通过加密和身份验证&#xff0c…

nginx安装和配置

目录 1.安装 2.配置 3.最小配置说明 4. nginx 默认访问路径 1.安装 使用 epel 源安装 先安装 yum 的扩展包 yum install epel-release -y 再安装 nginx yum install nginx -y 在启动nginx 前先关闭防火墙 systemctl stop firewalld 取消防火墙开机自启 systemctl di…

idea中java maven程序打JAR包的方式

JAR包是一种文件格式,用于将Java类、资源和元数据打包到一个文件中。它通常用于将Java库、应用程序或模块分发给其他开发人员或部署到不同的环境中。JAR包可以包含许多不同类型的文件,包括.class文件(编译后的Java类)、.java文件&…

oracle-SCN系统改变号

SCN system change number 我们看到的SCN是一串数字,由时间经过函数算出的,其实就是时间。但时间的比较复杂,不如转换成数字比较。 给一个日志加scn号,其实就是给日志加上时间点。 2常见的SCN 对于scn的理解 控制文件中有两个sc…

TDD-LTE TAU流程

目录 1. TAU成功流程 1.1 空闲态TAU 1.2 连接态TAU 2. TAU失败流程 当UE进入一个小区,该小区所属TAI不在UE保存的TAI list内时,UE发起正常TAU流程,分为IDLE和CONNECTED(即切换时)下。如果TAU accept分配了一个新的…