Microsoft的PromptBench可以做啥?

目录

PromptBench简介

PromptBench的快速模型性能评估

PromptBench数据集介绍

PromptBench模型介绍

PromptBench模型加载遇到的问题

第一次在M1 Mac上加载模型

vicuna和llama系列模型

PromptBench各个模型加载情况总结

PromptBench的Prompt快速工程

chain of thought

emotion prompt

expert prompt

generated knowledge

least to most

PromptBench对抗性Prompt评估

PromptBench的动态评估

PromptBench总结


大语言模型真是火啊,火到每次我跟别人提到prompt(prangpt)这个单词,都有人纠正我的读法(promout),真讨厌(你看懂我怎么读的了么,不过不重要)。prompt又叫做提示语,在用大语言模型的过程中,是必不可少的输入,它可以是一个问题、一段描述或者一些格式化的文本组合。优化prompt的目的通常是希望模型可以返回更加准确或者有针对性的输出。不知道你有没有听过prompt工程师😳,大概就是要通过各种方式,整一个好的prompt让结果一级棒。不过很多大能们都提到说,prompt engineering只是生成式AI的一个临时状态,毕竟大家还是希望最终形式是跟模型用自然语言沟通,不加条条框框的那种。

不过目前,在大语言模型应用的过程中,prompt工程师还是扮演着一定重要的角色。为了得到更好的结果,如果没办法改变LLM的性能,那只能从Prompt入手,并且需要系统性得在不同模型和数据集上测试其效果和鲁棒性。

23年底的时候,微软出了一个叫做PromptBench的GitHub项目(GitHub - microsoft/promptbench: A unified evaluation framework for large language models),一看就能猜出来这可能是要测prompt的bench mark,也就是看看这个prompt写的好不好(这是一件关于evaluation的事情),项目有关论文:https://arxiv.org/abs/2312.07910。微盘链接:文件分享。本人主要是在家没事干,翻paper的时候看到了这个东西,决定体验一下。看完这篇文章,你不仅能了解一些LLM测试任务中常常使用的数据集,已成为历史LLM的一些模型介绍,Prompt engineers的门门道道。

PromptBench简介

首先,GitHub上作者们是这么描述PromptBench所能提供的功能:

1. 快速模型性能评估:可以快速构建模型、加载数据集和评估模型性能。

2. 快速工程:多种快速工程方法,例如:Few-shot Chain-of-Thought、情绪提示、专家提示等。

3. 评估对抗性提示:集成了提示攻击,使研究人员能够模拟对模型的黑盒对抗性提示攻击并评估其鲁棒性。

4. 动态评估:以减轻潜在的测试数据污染:集成了动态评估框架 DyVal ,动态生成具有受控复杂性的评估样本。

简单看看论文里描述Prompt Bench的框架图(具体如下),可以发现,这个Prompt Bench给大家提供了一些benchmark所需的数据集和模型,看起来是可以直接调用的。

然后我们依次看看这些都是什么东西,以及怎么用。

Promptbench使用python3.9以上的版本,pip安装即可:

pip install promptbench

PromptBench的快速模型性能评估

大家可以直接看这个promptbench的调用方式(model加载part报错了不少):https://github.com/microsoft/promptbench/blob/main/examples/basic.ipynb

import promptbench as pb
print('All supported datasets: ')
print(pb.SUPPORTED_DATASETS)
print('All supported models: ')
print(pb.SUPPORTED_MODELS)

可以看到目前可以做测试的数据集和模型有

PromptBench数据集介绍

首先,PromptBench里数据集加载代码如下:

dataset = pb.DatasetLoader.load_dataset("name of the dataset you want to load")

数据集列表打印:['sst2', 'cola', 'qqp', 'mnli', 'mnli_matched', 'mnli_mismatched', 'qnli', 'wnli', 'rte', 'mrpc', 'mmlu', 'squad_v2', 'un_multi', 'iwslt2017', 'math', 'bool_logic', 'valid_parentheses', 'gsm8k', 'csqa', 'bigbench_date', 'bigbench_object_tracking', 'last_letter_concat', 'numersense', 'qasc']

简单扫了一下,主要包括以下三类任务(框架图里也有提及):

  • SST-2:二分类情感分析任务,https://huggingface.co/datasets/sst2,标签0,1
  • CoLA:判断句子语法正确性,The Corpus of Linguistic Acceptability (CoLA),23种语言学出版物的10657个句子
  • QQP:识别两个句子是否语义相似,https://huggingface.co/datasets/merve/qqp
  • MRPC:识别两个句子是否语义相似,MRPC Dataset | Papers With Code
  • MultiNLI(MNLI):自然语言推理,MultiNLI,433k个句子对(mnli_matched, mnli_mismatched in pb)
  • Question-answering NLI(QNLI):自然语言推理,QNLI Dataset | Papers With Code,取自斯坦福问答数据集(SQuAD),由问题-段落对组成,其中段落中的一个句子包含相应问题的答案。
  • Winograd NLI(WNLI):自然语言推理,WNLI Dataset | Papers With Code,包含成对的句子,任务是确定第二个句子是否是第一个句子的蕴涵。 该数据集用于训练和评估模型理解句子之间关系的能力。
  • Recognizing Textual Entailment(RTE):自然语言推理,RTE Dataset | Papers With Code,识别文本蕴含。

插播. 文本蕴含定义为一对文本之间的有向推理关系,如果人们依据自己的常识认为一个句子A的语义能够由另一个句子B的语义推理得出的话,那么称A蕴含B。

  • Massive Multitask Language Understanding(MMLU):阅读理解(选择题),MMLU Dataset | Papers With Code,旨在通过仅在零样本和少样本设置中评估模型来衡量预训练期间获取的知识,更类似于评估人类的方式。 该基准涵盖 STEM、人文、社会科学等领域的 57 个学科。
  • SQuAD V2:阅读理解,https://huggingface.co/datasets/squad_v2,段落、问题和答案,模型不仅需要根据问题和段落(上下文信息)回答问题,而且还要确定何时该段落不支持答案并放弃回答。
  • Multilingual Corpus from United Nation Documents(UN Multi):多语言平行数据,联合国网站平行语料库,United Nations Parallel Corpus
  • IWSLT 2017:多语言平行数据,https://www.tensorflow.org/datasets/community_catalog/huggingface/iwslt2017,["ar-en", "de-en", "en-ar"] in pb
  • Math:数学问题答案对,GitHub - hendrycks/math: The MATH Dataset (NeurIPS 2021),包含 12,500 个具有挑战性的竞赛数学问题的新数据集。 每个问题都有完整的分步解决方案,可用于训练模型生成答案推导和解释。
  • GSM8K:数学问题答案对,GitHub - openai/grade-school-math,小学数学应用题数据集
  • CommonsenseQA(csqa):多项选择题回答数据集,https://huggingface.co/datasets/tau/commonsense_qa
  • NummerSense:数值常识推理任务,https://huggingface.co/datasets/numer_sense,屏蔽从常识语料库中挖掘的句子中0-10之间的数字,并评估语言模型是否可以正确预测屏蔽值。
  • QASC:问答数据集,Question Answering via Sentence Composition (QASC) Dataset — Allen Institute for AI,9,980个有关小学科学的 8 向多项选择题
  • Last letter concat:合并多个单词的最后一个字母,https://huggingface.co/datasets/ChilleD/LastLetterConcat
  • BIG-Bench:多任务,GitHub - google/BIG-bench: Beyond the Imitation Game collaborative benchmark for measuring and extrapolating the capabilities of language models,200多个任务,包括传统自然语言处理任务,问答,解答数学,写代码等,具体可以看https://github.com/google/BIG-bench/blob/main/bigbench/benchmark_tasks/keywords_to_tasks.md#summary-table,bool logic & valid parentheses & bigbench_date & bigbench_object_tracking in pb

PromptBench模型介绍

PromptBench里模型加载代码如下(直接跑的话实际上没load出来好几个):

model = pb.LLMModel(model='name of the model you want to load', some parameters)

模型列表打印:['google/flan-t5-large', 'llama2-7b', 'llama2-7b-chat', 'llama2-13b', 'llama2-13b-chat', 'llama2-70b', 'llama2-70b-chat', 'phi-1.5', 'palm', 'gpt-3.5-turbo', 'gpt-4', 'gpt-4-1106-preview', 'gpt-3.5-turbo-1106', 'vicuna-7b', 'vicuna-13b', 'vicuna-13b-v1.3', 'google/flan-ul2']

我们先来看看这些模型有什么:

  • Google Flan系列

google/flan-t5-large:论文链接,https://arxiv.org/pdf/2210.11416.pdf;模型地址,https://huggingface.co/google/flan-t5-large。T5模型是2019年Google发布的语言模型,这个flan-t5可以看作是加了基于指令微调的T5,且这里的微调方案是多任务的。文章摘要里是这么描述的:

In this paper we explore instruction finetuning with a particular focus on (1) scaling the number of tasks, (2) scaling the model size, and (3) finetuning on chain-of-thought data. We find that instruction finetuning with the above aspects dramatically improves performance on a variety of model classes (PaLM, T5, U-PaLM), prompting setups (zero-shot, few-shot, CoT), and evaluation benchmarks (MMLU, BBH, TyDiQA, MGSM, open-ended generation, RealToxicityPrompts).

简而言之:任务变多,模型变大,在思维链数据(chain-of-thought data)上微调。

google/flan-ul2:论文链接,https://arxiv.org/pdf/2205.05131.pdf。ul2,指的是Unifying Language Learning Paradigms,即统一语言学习范式,具体看文章,回头出讲解。

  • llama系列:论文链接:https://arxiv.org/pdf/2302.13971v1.pdf
  • gpt系列:论文链接:https://www.mikecaptain.com/resources/pdf/GPT-1.pdf,这个大家肯定很熟悉了。
  • vicuna系列:文章链接:Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90%* ChatGPT Quality | LMSYS Org
  • Google PaLM:Pathways Language Model (PaLM),文章链接:https://blog.research.google/2022/04/pathways-language-model-palm-scaling-to.html。最近出到PaLM2了,https://ai.google/static/documents/palm2techreport.pdf。
  • 微软的phi:模型地址,https://huggingface.co/microsoft/phi-1_5。

PromptBench模型加载遇到的问题

第一次在M1 Mac上加载模型

首先,本人用的是M1 Mac机器,与NVIDIA GPU不兼容,无法使用CUDA加速。于是我的device cuda这种命令是nonono,不过可以放在mps(Metal Performance Shaders)上加速。如果调用模型,除了删掉参数: device='cuda',还需要把promptbench/models/models.py文件中的代码,如果有cuda的地方改成mps。比如:

input_ids = self.tokenizer(input_text, return_tensors="pt").input_ids.to("cuda")

cuda改成mps,即

input_ids = self.tokenizer(input_text, return_tensors="pt").input_ids.to("mps")

另外,由于我的硬盘没那么大,下载模型的时候可能会说没空间,如果要删除之前的模型,模型位置在:~/.cache/huggingface/hub/。

vicuna和llama系列模型

'llama2-7b', 'llama2-7b-chat', 'llama2-13b', 'llama2-13b-chat', 'llama2-70b', 'llama2-70b-chat', 'vicuna-7b', 'vicuna-13b', 'vicuna-13b-v1.3'如果直接填进去加载都失败了,然后看了promptbench/models/__init__.py的代码,目测要调用llama或者vicuna模型都需要提前下载的样子。大家可以再多试试!!!万一我说的是错的呢😑。

if model_class == LlamaModel or model_class == VicunaModel:return model_class(self.model, max_new_tokens, temperature, system_prompt, model_dir)

然后我就去下载llama和vicuna了,然后首先你需要下载git-lfs(Git Large File Storage | Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server like GitHub.com or GitHub Enterprise.),下载了homebrew的朋友可以直接运行下面的代码brew install git-lfs,然后运行git lfs install,如果显示Git LFS initialized说明安装成功。接着,俺下载了一个vicuna项目:https://huggingface.co/lmsys/vicuna-7b-v1.5/tree/main。

llama模型下载现在需要申请许可,就是点files and version,你要申请一下,然后还要去meta官网(https://llama.meta.com/llama-downloads/)上填写一些信息,然后会给你发个邮件告诉你可以用了。

邮件大概长这个样子:

然后我就去下载了Llama-2-7b-hf模型(不要问我为什么meta-llama/Llama-2-7b不可以加载,少了一个config.json文件)

git clone https://huggingface.co/meta-llama/Llama-2-7b-hf

如果你在这一步发现,你没办法下载,就算是输入了你的huggingface的username和密码。因为它说password authentication已经不管用了,那你就试试这个huggingface-cli login

登陆以后记得还需要输入access token,要提前申请哦!在你的hugging face账户信息里的Access Tokens(如下图)。

加载代码:model = pb.LLMModel(model="model name", model_dir='the file path of your vicuna or llama')

PromptBench各个模型加载情况总结

✅ google/flan-t5-large、google/flan-ul2、phi的调用,改完了mps后,直接修改model name即可

✅ llama系列和vicuna的调用,下载完了模型文件后,修改model name,加入model_dir参数即可

✅ palm模型,需要参数palm_key,申请地址:https://ai.google.dev/tutorials/setup

✅ gpt系列,需要参数openai_key,申请地址:https://platform.openai.com/api-keys

这个key的申请,或多或少需要翻墙之类的。

PromptBench的Prompt快速工程

大家可以直接看prompt engineering的示例代码:https://github.com/microsoft/promptbench/blob/main/examples/prompt_engineering.ipynb

具体有五类:chain of thought,emotion prompt,expert prompt,generated knowledge和least to most。源码的话在这里:https://github.com/microsoft/promptbench/tree/main/promptbench/prompt_engineering。本章节的话大概就是带着大家过一遍这几种工程方式。

chain of thought

chain of thought:简称Cot,文章链接,https://arxiv.org/pdf/2201.11903.pdf。为了提高LLM的推理能力,将推理步骤的内容喂给模型,下图中高亮的部分就是咱们的chains of thought。

chain of thought prompting指在给出从开始到结束的step by step的步骤,而不是给出多个例子让语言模型去理解,更多的是希望帮助“推理”。当任务涉及需要算术、常识和符号推理的复杂推理时,试试CoT, 此时模型需要理解并遵循中间步骤才能得出正确的答案。

emotion prompt

emotion prompt:文章链接,https://arxiv.org/pdf/2307.11760.pdf。大概意思就是你在告诉模型要做什么的时候,还要给它一些Psychology上的提示词,比如,“这个问题对我来说很重要啊。”,“我相信你可以做得很好!”,“这件事情很紧急!”研究人员发现,给出这样的一些emotion以后,LLM的效果有一定的提升。简而言之,咱们需要PUA那个 LLM!!!

expert prompt

expert prompt:看了源代码以后PromptBench里的expert prompt不太像角色扮演,一般提到expert prompt可能指的是告诉LLM你的专长是什么,引导其返回该领域的信息。比如在开始的时候说“我希望你是XX专家”,“我希望你扮演XX角色”,继续PUA那个 LLM!!!

generated knowledge

generate knowledge:文章链接,https://arxiv.org/pdf/2110.08387.pdf。大概就是在回答问题时提供知识(其中包括从语言模型生成知识)作为prompt的附加输入。比如在问答的情景下,除了Question这个输入,Prompt里还有Knowledge这一项。

least to most

least to most:文章链接,https://arxiv.org/pdf/2205.10625.pdf。这个idea来自教育心理学,用于表示使用渐进的提示来帮助学生学习新知识的方式。 然后咱就是应用这种least to most来喂语言模型。 我觉得这个有一些子类似CoT,看起来是CoT的进阶版,因为需要先拆分问题,然后再逐一解决。

PromptBench对抗性Prompt评估

原文还是说的很清楚的,主要分成了character-level,word-level,sentence-level和semantic-level。具体如下图,看了下代码,Semantic就用了textattack包里的wordembeddingdistance来做的。大概是做啥呢,就是大家之前发现如果我们对输入样本做了轻微的改动,模型就可能会犯错,鲁棒性就是有些差了。因此以textbugger为例,通过改变字母,生成稍微有改变的文本,且保留原来的语义信息,虽然不是百分百正确了,但是要的就是这个味儿。

  • Textbugger:论文链接,https://arxiv.org/pdf/1812.05271.pdf。

  • Deepwordbug:论文链接,https://arxiv.org/pdf/1801.04354.pdf。

  • BertAttack:论文链接,https://arxiv.org/pdf/2004.09984.pdf。
  • TextFooler:论文链接,https://arxiv.org/pdf/1907.11932.pdf。
  • StressTest:论文链接,https://aclanthology.org/C18-1198.pdf。

  • StressTest:PromptBench是用的length mismatch来做的stress test。texts = [" and true is true ", " and false is not true ", " and true is true "*5]
  • CheckList:论文链接,https://aclanthology.org/2020.acl-main.442.pdf。

PromptBench的动态评估

这里的动态评估部分,主要是文章https://arxiv.org/pdf/2309.17167.pdf提出的Dyval的应用,相比于固定的数据来做测试,Dyval是动态实时生成评估样本的。原文是这么描述Dyval的:

DYVAL consists of three components: 1) the generation algorithm G to generate test samples with diversities; 2) the constraint C to modulate sample complexity and validity; and 3) the description function F to translate the generated samples into natural languages.

具体步骤大家去看原文吧!

PromptBench总结

反正我整个用下来,就觉得好像不是那么好用。我的电脑硬盘没那么大,下载模型的时候时常没空间,因此能跑起来就主动暂停,删模型换下一个尝试了,更不用说本人还没有GPU。LLM可真的有够大的,自己玩玩,是玩不动的。总的来说,bench越来越多,model越来越大,prompt也是各种花样。怀念传统NLP,或者说不用LLM的NLP。

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

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

相关文章

WebService学习,wsdl文件详解

目录 第一章、起因1.1)学习原因1.2)提问的过程(逐步提出问题)1、?wsdl链接的含义,有什么作用?2、什么是wsdl文档?3、如何阅读wsdl文件?4、wsdl文件有什么作用&#xff1f…

基于springboot+vue的智慧社区系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

(十四)【Jmeter】线程(Threads(Users))之开放模型线程组(Open Model Thread Group)

简述 操作路径如下: 开放模型线程组(Open Model Thread Group) 是 JMeter 5.5 版本中引入的一个新特性,它允许用户创建具有可变负载的负载配置文件。相较于传统的线程组,开放模型线程组提供了更多的灵活性和动态调整的能力。 优点: 灵活性:允许测试人员根据测试需求动…

python 提取PDF文字

使用pdfplumber,不能提取扫描的pdf和插入的图片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文档\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…

Verilog刷题笔记33

题目: You are given a four-bit input vector in[3:0]. We want to know some relationships between each bit and its neighbour: out_both: Each bit of this output vector should indicate whether both the corresponding input bit and its neighbour to t…

Kafka3.x进阶

来源:B站 目录 Kafka生产者生产经验——生产者如何提高吞吐量生产经验——数据可靠性生产经验——数据去重数据传递语义幂等性生产者事务 生产经验——数据有序生产经验——数据乱序 Kafka BrokerKafka Broker 工作流程Zookeeper 存储的 Kafka 信息Kafka Broker 总…

戏曲文化苑|戏曲文化苑小程序|基于微信小程序的戏曲文化苑系统设计与实现(源码+数据库+文档)

戏曲文化苑小程序目录 目录 基于微信小程序的戏曲文化苑系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 (1)戏曲管理 (2)公告信息管理 (3)公告类型管理…

PostgreSQL 的实体化视图介绍

PostgreSQL 实体化视图提供一个强大的机制,通过预先计算并将查询结果集存储为物理表来提高查询性能。本教程将使用 DVD Rental Database 数据库作为演示例子,指导你在 PostgreSQL中创建实体化视图。 了解实体化视图 实体化视图是查询结果集的快照&…

【高德地图】Android高德地图初始化定位并显示小蓝点

&#x1f4d6;第3章 初始化定位并显示小蓝点 ✅第1步&#xff1a;配置AndroidManifest.xml✅第2步&#xff1a;设置定位蓝点✅第3步&#xff1a;初始化定位✅完整代码 ✅第1步&#xff1a;配置AndroidManifest.xml 在application标签下声明Service组件 <service android:n…

Aigtek高压放大器是什么东西做的

在许多电子应用中&#xff0c;需要将低电压信号放大到较高电压以满足特定的需求。为了实现这个目标&#xff0c;高压放大器被广泛采用。高压放大器是一种专用电子设备&#xff0c;使用特定的电路和器件来增益输入信号的电压。它通常由以下几个主要组成部分构成。 电源供应 高压…

Linux编译器---gcc/g++使用详解

目录 前言 gcc/g介绍 gcc/g的编译指令&#xff08;以gcc为例&#xff09; ​编辑 gcc选项 预处理(进行宏替换) 编译&#xff08;生成汇编&#xff09; 汇编&#xff08;生成机器可识别代码&#xff09; 链接&#xff08;生成可执行文件或库文件&#xff09; 函数库 概念 …

stable diffusion官方版本复现

踩了一些坑&#xff0c;来记录下 环境 CentOS Linux release 7.5.1804 (Core) 服务器RTX 3090 复现流程 按照Stable Diffusion的readme下载模型权重、我下载的是stable-diffusion-v1-4 版本的 1 因为服务器没法上huggingface&#xff0c;所以得把权重下载到本地&#xff…

初识表及什么是数据表

一、了解表 1.1.概述 表是处理数据和建立关系型数据库及应用程序的基本单元&#xff0c;是构成数据库的基本元素之一&#xff0c;是数据库中数据组织并储存的单元&#xff0c;所有的数据都能以表格的形式组织&#xff0c;目的是可读性强。 1.2.表结构简述 一个表中包括行和列…

当项目经理的一定要考PMP嘛?

PMP资格认证并不是强制性要求&#xff0c;但强烈建议考虑获取该资格&#xff01;首先让我们来了解一下PMP是什么&#xff0c;然后再谈谈为什么建议考取PMP资格的理由。 PMP&#xff08;Project Management Professional&#xff09;是项目管理专业人员的资格认证。该认证由全球…

SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测

SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测 目录 SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实…

老子云3D资源服务与应用平台详解

老子云平台定位 老子云目标客群 老子云平台架构 老子云平台价值 核心优势 -AMRT标准格式 -自动模型轻量化 -持续精进的底层技术算法 -千万级轻量化3D资源素材市场 功能服务 -格式转换 -蒙皮动画轻量化 -倾斜摄影轻量化 -效果编辑器 -应用编辑器 -3D OFD应用 -A3D PPT -3D资源…

力扣日记2.22-【回溯算法篇】47. 全排列 II

力扣日记&#xff1a;【回溯算法篇】47. 全排列 II 日期&#xff1a;2023.2.22 参考&#xff1a;代码随想录、力扣 47. 全排列 II 题目描述 难度&#xff1a;中等 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输…

十八、图像像素类型转换和归一化操作

项目功能实现&#xff1a;对一张图像进行类型转换和归一化操作 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 norm.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class NORM { public:void norm(Mat& image); };#pragma once二…

智慧公厕是什么?智慧公厕是构建智慧城市的环境卫生基石

随着城市化进程的不断加速&#xff0c;城市人口密度和流动性也逐渐增大&#xff0c;对城市公共设施的需求与日俱增。而在这些公共设施中&#xff0c;公厕作为城市基础设施中不可或缺的一环&#xff0c;对城市的环境卫生和市民生活质量起着举足轻重的作用。如何提高公厕的管理效…

MacOs 围炉夜话

文章目录 一、安装 Mac 一、安装 Mac macOS是一套由苹果开发的运行于Macintosh系列电脑上的操作系统。macOS是首个在商用领域成功的图形用户界面操作系统。 VM虚拟机怎么安装mac os&#xff1f;&#xff08;全教程&#xff09; 虚拟机&#xff1a;VMware Workstation 17 pro W…