-
前言在软件开发领域,AI工具越来越流行。去年GitHub发布报告称,有了AI辅助工具,开发者编程速度提高55%。但是,AI工具辅助编写的代码是不是更好呢?GitClear对2020年1月至2023年12月间编写的1.53亿行代码进行检查发现,相比以前,编写之后修改的代码行数明显增加,2024年相比2021年增加了一倍。换言之,有了AI工具,虽然编程速度加快了,但在第一次编写时错误也大大增加了。形象地说,用AI辅助编写代码,就像聘请一名短期合同工为你工作,他关心的是如何编写冗长的代码,而不是保证代码的可维护性。AI会复制原有代码的错误开发者安全公司Snyk在报告中指出,GitHub AI编程辅助工具Copilot并不安全,如果已有代码库本身存在安全问题,工具编写的代码同样也会不安全。Snyk在2月22日的报告中指出,Copilot会复制代码中存在的安全问题,如此一来,已有安全隐患会让Copilot代码更加不安全。市场上已经出现不少生成式AI编程工具,比如亚马逊CodeWhisperer,ChatGPT等。现有工具的最大问题在于:它无法理解语义,所以无法对代码作出评判。GitHub Copilot从海量过往代码中学习,形成特定模式和结构,然后生成代码片段。这套学习方法有一定优势,但也有一个缺陷。Copilot代码可能会复制已有安全漏洞,或者复制相邻文件中的不良案例。如何降低影响呢?Snyk给出一些建议:包括开发者手动检查代码;安全团队应该设立SAST护栏;开发者应该遵守安全编程指南;安全团队应该给开发团队培训,将每个团队的积压问题分类,按优先级排序;执行团队应该强制设置安全护栏。一般来说,平均每个商务软件项目的第一手代码都会有40个漏洞,当中约三分之一都是高危漏洞。AI生成工具会复制这些漏洞,影响恶劣。跨站脚本攻击(cross-site scripting,XSS)、路径穿越(Path Traversal)、SQL注入、硬编码加密密钥等安全问题比较常见。所以,行业几乎有一个共识:就眼下来看,AI辅助编程还没有迎来黄金时代,AI还不够好。但AI辅助编程未来可期GitHub CEO Thomas Dohmke不久前接受采访时表示:“开发者已经进入AI时代。现在的问题已经很明确,你准备以多快的速度上船?你是不是准备继续沉醉于过去,站在历史错误的一边,忽视生产力提升的大好机遇?”GitHub Copilot实际上归微软所有,最新财报显示,最近一个季度Copilot付费用户数已经突破130万,相比前一个季度猛增30%,已经有5万家企业使用Copilot。Thomas Dohmke称,平台上用户编写的代码约有一半是AI生成的。Thomas Dohmke认为,社区已经普遍接受一个观点,即AI生成代码需要人类程序员监督审核。值得一提的是,新手程序员特别喜欢使用Copilot,因为它能协助解决编程难题。随着编程自动化程度的增加,代码中的错误可能会越来越多,这点其实已经引起争论。Thomas Dohmke称,自Copilot引入之后错误增加数量比较“正常”,没有证据证明AI导致错误猛增。真是这样吗?未必。新手程序员大规模使用AI,一旦出现错误,新手可能无法发现,整个代码的质量可能会下降。微软对AI工具充满期待,除了编程,它还希望Copilot能帮助用户写邮件、制作电子表格、分析Office文档。微软甚至还为Windows PC键盘增加一个“Copilot”按键。谷歌也在开发类似工具。微软CEO纳德拉在最近的财报会议上表示,围绕GitHub Copilot和它的生产力问题,我们已经看到很多的证据和数据,结果不错。纳德拉预计其它Copilot应用也会带来良好效果。总之,目前Copilot还是新生事物,相信再过一段时间,当我们拥有更多数据,就能对上述问题有更深刻理解。(小刀)
-
前言今天,给大家推荐一个最近十分火热的开源项目,一个支持使用 Sora 模型将文本生成视频的 Web 客户端。项目介绍SoraWebui —— 一个开源的项目,允许用户使用 OpenAI 的 Sora 模型使用文本在线生成视频,支持一键部署。 SoraWebui 项目创建不到两个礼拜,就斩获了 1000 多个 Star! 由于 OpenAI 还未开放 Sora 的 API,因此 SoraWebui 目前只是一个空壳框架。等待后续 API 开发,即可快速集成 Sora.此外,SoraWebui 需要 FakeSoraAPI 服务提供的接口支持。快速开始SoraWebui1、克隆项目git clone https://github.com/SoraWebui/SoraWebui.git2、安装依赖cd SoraWebui && yarn #or cd SoraWebui && npm install #or cd SoraWebui && pnpm install3、修改配置文件 复制 .env.example 并将其重命名为 .env.local# website URL NEXT_PUBLIC_SITE_URL=cid:link_2 # openai config OPENAI_API_KEY=sk-XXXXXX OPENAI_API_BASE_URL=cid:link_1 OPENAI_API_MODEL=sora-1.0-turbo4、运行yarn dev #or npm run dev #or pnpm dev5、在浏览器中打开 cid:link_2 6、或者使用 Vercel 一键部署https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FSoraWebui%2FSoraWebui&project-name=SoraWebui&repository-name=SoraWebui&external-id=https%3A%2F%2Fgithub.com%2FSoraWebui%2FSoraWebui%2Ftree%2FmainFakeSoraAPI1、克隆项目git clone https://github.com/SoraWebui/FakeSoraAPI.git2、安装依赖cd FakeSoraAPI && yarn #or cd FakeSoraAPI && npm install #or cd FakeSoraAPI && pnpm install3、运行yarn dev #or npm run dev #or pnpm dev4、在浏览器打开 cid:link_15、或者使用 Vercel 一键部署https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FSoraWebui%2FFakeSoraAPI&project-name=FakeSoraAPI&repository-name=FakeSoraAPI&external-id=https%3A%2F%2Fgithub.com%2FSoraWebui%2FFakeSoraAPI%2Ftree%2Fmain总结 Open AI 目前只是发布了 Sora 模型的预告视频,就引起了巨大的浪潮。想必等后续开放了 API,更是会引起热烈的反响。SoraWebui 帮我们提供了一个快速搭建使用 Sora 文本生成视频的网站,一旦拥有了 Sora 的 API Token,就可以快速迭代出一个文本生成视频的网站。最后,贴上项目地址:https://github.com/SoraWebui/SoraWebui转载自:cid:link_0
-
一、简介目前整个业界都希望经过优化的模型能够表现出卓越的性能,这一追求不断推动着自然语言理解(natural language understanding)的发展。Mixtral-8x7B Mixture of Experts(MoE)模型就是其中之一,该模型在各种基准测试(benchmarks)中表现出优于同类产品的性能,尤其是优于 Llama 2 70B。本教程采用一种名为 QLoRA 的创新方法对 Mixtral-8x7B 模型进行微调,该方法结合了量化(quantization)和 LoRA(Local Representation Adaptation)技术。期望通过这两种技术的结合来进一步增强Mixtral-8x7B模型的能力。二、相关定义● Mixtral 8x7B:一种混合专家模型,因其架构设计在自然语言处理任务中表现出色而闻名。● QLoRA:Quantization 和 LoRA 技术相结合的缩写。量化涉及降低模型权重的精度,从而优化内存使用并加快计算速度。LoRA 可调整模型中的局部表征,增强模型对特定上下文的理解。三、优势● 增强性能:使用 QLoRA 对 Mixtral 8x7B 进行微调,可提高其性能,从而更好地理解和生成各种领域的文本。● 能效比高:量化的整合降低了内存需求和计算复杂度,使模型更节省资源。● 针对垂直领域进行微调:通过微调,该模型可针对特定任务进行定制,从而提高其在特定领域的准确性和相关性。四、代码实现说明本教程在 Notebook 环境中(译者注:使用Jupyter notebook 或白海IDP自研notebook)使用 Python。整个过程包括使用 "bitsandbytes "库加载 4 位精度的大型 Mixtral 模型。随后,在训练阶段使用 Hugging Face 的 PEFT 库实现 LoRA。4.1 步骤 1:安装相关库# You only need to run this once per machine, even if you stop/restart it !pip install --upgrade pip !pip install -q -U bitsandbytes !pip install -q -U git+https://github.com/huggingface/transformers.git !pip install -q -U git+https://github.com/huggingface/peft.git !pip install -q -U git+https://github.com/huggingface/accelerate.git !pip install -q -U datasets scipy ipywidgets matplotlib4.2 步骤 2:设置 Acceleratorfrom accelerate import FullyShardedDataParallelPlugin, Accelerator from torch.distributed.fsdp.fully_sharded_data_parallel import FullOptimStateDictConfig, FullStateDictConfig fsdp_plugin = FullyShardedDataParallelPlugin( state_dict_config=FullStateDictConfig(offload_to_cpu=True, rank0_only=False), optim_state_dict_config=FullOptimStateDictConfig(offload_to_cpu=True, rank0_only=False), ) accelerator = Accelerator(fsdp_plugin=fsdp_plugin)4.3 步骤 3:使用Weights & Biases追踪性能指标!pip install -q wandb -U import wandb, os wandb.login() wandb_project = "viggo-finetune" if len(wandb_project) > 0: os.environ["WANDB_PROJECT"] = wandb_project4.4 步骤 4:加载数据集from datasets import load_dataset dataset_name = "databricks/databricks-dolly-15k" train_dataset = load_dataset(dataset_name, split="train[0:800]") eval_dataset = load_dataset(dataset_name, split="train[800:1000]")4.5 步骤 5:加载基础模型import torch from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig base_model_id = "mistralai/Mixtral-8x7B-v0.1" bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.bfloat16 ) model = AutoModelForCausalLM.from_pretrained(base_model_id, quantization_config=bnb_config, device_map="auto") # Tokenization tokenizer = AutoTokenizer.from_pretrained( base_model_id, padding_side="left", add_eos_token=True, add_bos_token=True, ) tokenizer.pad_token = tokenizer.eos_token def tokenize(prompt): result = tokenizer(prompt) result["labels"] = result["input_ids"].copy() return result def generate_and_tokenize_prompt(data_point): full_prompt = f"""Given a question and some additional context, provide an answer ### Target sentence: Question: {data_point['instruction']} Additional Context: {f"Here is some context: {data_point['context']}" if len(data_point["context"]) > 0 else ""} Response: [/INST] {data_point['response']}</s>""" tokenized_prompt = tokenizer(full_prompt) return tokenized_prompt tokenized_train_dataset = train_dataset.map(generate_and_tokenize_prompt) tokenized_val_dataset = eval_dataset.map(generate_and_tokenize_prompt) untokenized_text = tokenizer.decode(tokenized_train_dataset[1]['input_ids']) print(untokenized_text) # Output <s> Given a question and some additional context, provide an answer ### Target sentence: Question: Alice's parents have three daughters: Amy, Jessy, and what’s the name of the third daughter? Additional Context: Response: [/INST] The name of the third daughter is Alice</s></s>4.6 步骤 6:获取数据集中各个样本长度的分布情况import matplotlib.pyplot as plt def plot_data_lengths(tokenized_train_dataset, tokenized_val_dataset): lengths = [len(x['input_ids']) for x in tokenized_train_dataset] lengths += [len(x['input_ids']) for x in tokenized_val_dataset] print(len(lengths)) # Plotting the histogram plt.figure(figsize=(10, 6)) plt.hist(lengths, bins=20, alpha=0.7, color='blue') plt.xlabel('Length of input_ids') plt.ylabel('Frequency') plt.title('Distribution of Lengths of input_ids') plt.show() plot_data_lengths(tokenized_train_dataset, tokenized_val_dataset)4.7 步骤 7:在数据的左侧添加 padding ,以减少内存的使用max_length = 320 # This was an appropriate max length for my dataset # redefine the tokenize function and tokenizer tokenizer = AutoTokenizer.from_pretrained( base_model_id, padding_side="left", add_eos_token=True, add_bos_token=True, ) tokenizer.pad_token = tokenizer.eos_token def tokenize(prompt): result = tokenizer( prompt, truncation=True, max_length=max_length, padding="max_length", ) result["labels"] = result["input_ids"].copy() return result tokenized_train_dataset = train_dataset.map(generate_and_tokenize_prompt) tokenized_val_dataset = eval_dataset.map(generate_and_tokenize_prompt) untokenized_text = tokenizer.decode(tokenized_train_dataset[4]['input_ids']) print(untokenized_text) # Output <s> Given a target sentence construct the underlying meaning representation of the input sentence as a single function with attributes and attribute values. This function should describe the target string accurately and the function must be one of the following ['inform', 'request', 'give_opinion', 'confirm', 'verify_attribute', 'suggest', 'request_explanation', 'recommend', 'request_attribute']. The attributes must be one of the following: ['name', 'exp_release_date', 'release_year', 'developer', 'esrb', 'rating', 'genres', 'player_perspective', 'has_multiplayer', 'platforms', 'available_on_steam', 'has_linux_release', 'has_mac_release', 'specifier'] ### Target sentence: When did Virgin Australia start operating? Here is some context: Virgin Australia, the trading name of Virgin Australia Airlines Pty Ltd, is an Australian-based airline. It is the largest airline by fleet size to use the Virgin brand. It commenced services on 31 August 2000 as Virgin Blue, with two aircraft on a single route. It suddenly found itself as a major airline in Australia's domestic market after the collapse of Ansett Australia in September 2001. The airline has since grown to directly serve 32 cities in Australia, from hubs in Brisbane, Melbourne and Sydney. [/INST] Virgin Australia commenced services on 31 August 2000 as Virgin Blue, with two aircraft on a single route.</s></s>plot_data_lengths(tokenized_train_dataset, tokenized_val_dataset)4.8 步骤 8:设置 LoRAfrom peft import prepare_model_for_kbit_training model.gradient_checkpointing_enable() model = prepare_model_for_kbit_training(model) def print_trainable_parameters(model): """ Prints the number of trainable parameters in the model. """ trainable_params = 0 all_param = 0 for _, param in model.named_parameters(): all_param += param.numel() if param.requires_grad: trainable_params += param.numel() print( f"trainable params: {trainable_params} || all params: {all_param} || trainable%: {100 * trainable_params / all_param}" ) from peft import LoraConfig, get_peft_model config = LoraConfig( r=8, lora_alpha=16, target_modules=[ "q_proj", "k_proj", "v_proj", "o_proj", "w1", "w2", "w3", "lm_head", ], bias="none", lora_dropout=0.05, # Conventional task_type="CAUSAL_LM", ) model = get_peft_model(model, config) print_trainable_parameters(model) # Apply the accelerator. You can comment this out to remove the accelerator. model = accelerator.prepare_model(model) # Output trainable params: 120350720 || all params: 23602952192 || trainable%: 0.50989689349450014.9 步骤 9:进行训练import transformers from datetime import datetime if torch.cuda.device_count() > 1: # If more than 1 GPU model.is_parallelizable = True model.model_parallel = True project = "databricks-dolly-finetune" base_model_name = "mixtral" run_name = base_model_name + "-" + project output_dir = "./" + run_name tokenizer.pad_token = tokenizer.eos_token trainer = transformers.Trainer( model=model, train_dataset=tokenized_train_dataset, eval_dataset=tokenized_val_dataset, args=transformers.TrainingArguments( output_dir=output_dir, warmup_steps=5, per_device_train_batch_size=1, gradient_checkpointing=True, gradient_accumulation_steps=4, max_steps=500, learning_rate=2.5e-5, logging_steps=25, fp16=True, optim="paged_adamw_8bit", logging_dir="./logs", # Directory for storing logs save_strategy="steps", # Save the model checkpoint every logging step save_steps=50, # Save checkpoints every 50 steps evaluation_strategy="steps", # Evaluate the model every logging step eval_steps=50, # Evaluate and save checkpoints every 50 steps do_eval=True, # Perform evaluation at the end of training report_to="wandb", # Comment this out if you don't want to use weights & baises run_name=f"{run_name}-{datetime.now().strftime('%Y-%m-%d-%H-%M')}" # Name of the W&B run (optional) ), data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False), ) model.config.use_cache = False # silence the warnings. Please re-enable for inference! trainer.train()4.10 步骤 10:使用训练完毕的模型import torch from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig base_model_id = "mistralai/Mixtral-8x7B-v0.1" bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.bfloat16 ) base_model = AutoModelForCausalLM.from_pretrained( base_model_id, # Mixtral, same as before quantization_config=bnb_config, # Same quantization config as before device_map="auto", trust_remote_code=True, use_auth_token=True ) eval_tokenizer = AutoTokenizer.from_pretrained( base_model_id, add_bos_token=True, trust_remote_code=True, )from peft import PeftModel ft_model = PeftModel.from_pretrained(base_model, "mixtral-databricks-dolly-finetune/checkpoint-100"eval_prompt = """Given a question and some additional context, provide an answer ### Target sentence: Question: When was Tomoaki Komorida born? Here is some context: Komorida was born in Kumamoto Prefecture on July 10, 1981. After graduating from high school, he joined the J1 League club Avispa Fukuoka in 2000. Although he debuted as a midfielder in 2001, he did not play much and the club was relegated to the J2 League at the end of the 2001 season. In 2002, he moved to the J2 club Oita Trinita. He became a regular player as a defensive midfielder and the club won the championship in 2002 and was promoted in 2003. He played many matches until 2005. In September 2005, he moved to the J2 club Montedio Yamagata. In 2006, he moved to the J2 club Vissel Kobe. Although he became a regular player as a defensive midfielder, his gradually was played less during the summer. In 2007, he moved to the Japan Football League club Rosso Kumamoto (later Roasso Kumamoto) based in his local region. He played as a regular player and the club was promoted to J2 in 2008. Although he did not play as much, he still played in many matches. In 2010, he moved to Indonesia and joined Persela Lamongan. In July 2010, he returned to Japan and joined the J2 club Giravanz Kitakyushu. He played often as a defensive midfielder and center back until 2012 when he retired. ### Response: """ model_input = eval_tokenizer(eval_prompt, return_tensors="pt").to("cuda") ft_model.eval() with torch.no_grad(): print(eval_tokenizer.decode(ft_model.generate(**model_input, max_new_tokens=100)[0], skip_special_tokens=True)) Given a question and some additional context, provide an answer ### Target sentence: Question: When was Tomoaki Komorida born? Here is some context: Komorida was born in Kumamoto Prefecture on July 10, 1981. After graduating from high school, he joined the J1 League club Avispa Fukuoka in 2000. Although he debuted as a midfielder in 2001, he did not play much and the club was relegated to the J2 League at the end of the 2001 season. In 2002, he moved to the J2 club Oita Trinita. He became a regular player as a defensive midfielder and the club won the championship in 2002 and was promoted in 2003. He played many matches until 2005. In September 2005, he moved to the J2 club Montedio Yamagata. In 2006, he moved to the J2 club Vissel Kobe. Although he became a regular player as a defensive midfielder, his gradually was played less during the summer. In 2007, he moved to the Japan Football League club Rosso Kumamoto (later Roasso Kumamoto) based in his local region. He played as a regular player and the club was promoted to J2 in 2008. Although he did not play as much, he still played in many matches. In 2010, he moved to Indonesia and joined Persela Lamongan. In July 2010, he returned to Japan and joined the J2 club Giravanz Kitakyushu. He played often as a defensive midfielder and center back until 2012 when he retired. ### Response: Tomoaki Komorida was born on July 10, 1981.五、结论利用 QLoRA 对 Mixtral-8x7B 模型进行微调是自然语言处理 (NLP) 领域的一个重要进展,它将模型性能提升到了新的高度。这一缜密的过程融合了量化和 LoRA 等前沿技术,为超越基准(benchmarks)提供了一条稳健的途径,甚至在各种评估指标上超越了强大的 Llama 2 70B 模型。本教程的核心在于使用QLoRA进行微调,利用bitsandbytes以4位精度实例化模型,并运用Hugging Face 🤗的PEFT库。该指南不仅概述了微调方法,还揭示了实践过程中可能遇到的问题,如OutOfMemory errors,为用户提供了精确的解决途径。从本质上讲,该教程并非是一个技术指南,更像一个倡导模型微调最佳实践的指引。它倡导协作式微调,请邀请其他研究人员和从业者一同踏上推动语言理解模型发展的旅程。前沿技术、详细的指导以及合作共赢的态度使得该教程对于NLP社区来说是一个非常重要且不可或缺的资源,期望能够引导 NLP 社区进一步提高模型性能,丰富理解能力。转载自:cid:link_0
-
前言在线欺诈是许多国家的严重问题,存在网络钓鱼攻击、身份盗窃和假冒电子商务网站等各种诈骗行为。一份报告显示,很大一部分欺诈交易发生在晚上10点至凌晨4点之间,其中60岁以上的信用卡持有者是主要受害者。机器学习有助于预防欺诈,使组织能够实时检测和防止可疑活动。传统的欺诈预防方法往往难以跟上诈骗者不断变化的策略。机器学习算法可以快速分析大量数据,帮助组织识别可能表明可疑行为的模式和异常。这些算法从过去的欺诈案例中学习,不断增强检测可疑活动的能力。通过将机器学习集成到欺诈预防策略中,组织可以领先于诈骗并有效保护其资产。机器学习在预防欺诈方面的一个关键优势是它能够在早期阶段检测可疑活动。通过分析历史数据和识别可疑行为模式,机器学习算法可以实时发现可疑交易,使组织能够迅速采取行动并防止财务损失。图数据库与机器学习一起成为欺诈检测的强大工具。图形数据库以高速率记录和分析网络交互,使其可用于各种应用,包括欺诈检测。他们可以识别大数据中的模式和关系,降低复杂性,以便检测算法可以有效地发现网络内的欺诈企图。机器学习如何提高欺诈预防能力机器学习在欺诈预防方面可以发挥重要作用,以下是一些提高欺诈预防能力的方法:数据分析和特征工程:使用机器学习技术对大量的交易数据进行分析和挖掘,发现欺诈模式和异常行为。通过特征工程,提取关键的特征用于建模。监督学习模型:使用监督学习算法,如决策树、逻辑回归、支持向量机(SVM)等,对历史数据进行建模,学习欺诈案例和正常交易之间的差异,并预测新的交易是否为欺诈。无监督学习模型:利用无监督学习算法,如聚类分析、异常检测等,发现数据中的潜在欺诈模式,识别与正常行为不同的异常交易。半监督学习:结合监督学习和无监督学习的优势,利用标记和未标记数据进行建模,提高模型的泛化能力和欺诈检测的效果。深度学习模型:使用深度学习技术,如神经网络,处理大规模数据,学习复杂的欺诈模式和特征表示,提高欺诈预测的准确性。模型集成:结合多个不同算法的预测结果,采用投票、加权平均等方法,提高模型的鲁棒性和预测性能。实时监测和反馈:建立实时监测系统,对交易进行及时监控和反馈,及时发现并阻止欺诈行为。持续优化:不断收集新数据,更新模型参数,优化模型性能,适应不断变化的欺诈手段和模式。总结总之,随着诈骗者不断发展其策略,组织必须调整其欺诈预防策略以有效应对这些威胁。机器学习和图形数据库是这场持续战斗中的强大武器。这些技术能够快速分析无数数据点,能够准确检测可疑活动,超越人类的能力。这类似于拥有一支超人欺诈侦探团队全天候不知疲倦地工作。转载自:cid:link_0
-
前言随着技术以前所未有的速度发展,移动计算的未来有望实现变革性的进步。从增强的连接性到突破性的硬件创新,下一代移动计算将重新定义我们与数字世界互动的方式。本文将探讨预测移动计算发展轨迹的预测,并提供一些令人兴奋的可能性。预测5G革命性的连接无处不在的高速连接:5G网络的广泛实施有望通过提供无处不在的高速连接来彻底改变移动计算。这将为无缝流媒体、低延迟应用和沉浸式增强现实(AR)体验铺平道路。可折叠和灵活的显示重新定义形式因素:下一代移动设备可能会以可折叠和柔性显示屏为特色,为用户提供多种形式因素。这些创新可能会导致设备无缝地从传统智能手机转变为更大的平板电脑,甚至可以折叠成更紧凑的尺寸,以方便携带。个性化体验的AI集成智能和自适应助手:人工智能(AI)将在塑造移动计算的未来方面发挥关键作用。由人工智能驱动的智能和自适应助手将了解用户偏好,预测需求,并提供个性化体验,使与设备的交互更加直观和高效。扩展现实(XR)成为主流AR和VR集成:扩展现实(XR),包括增强现实(AR)和虚拟现实(VR),预计将成为移动计算的主流。从交互式AR应用到沉浸式VR体验,移动设备将成为数字参与新维度的门户。量子计算对移动安全的影响增强的安全协议:量子计算的出现可能会对移动安全产生重大影响。将实施抗量子算法和加密技术,以加强移动设备抵御新出现的威胁,确保用户数据的隐私和安全。设备设计中的环境可持续性环保材料和实践:下一代移动设备将在设计中优先考虑环境的可持续性。从使用环保材料到节能组件,制造商将越来越关注减少移动计算的生态足迹。生物识别认证的进步安全和无缝访问:面部识别和指纹扫描等生物识别身份验证将在准确性和速度方面取得进步。这些技术将为用户提供安全而无缝的设备和敏感信息访问。总结下一个移动计算时代即将迎来一波创新浪潮,这将重新定义我们连接、互动和体验数字世界的方式。从5G革命到人工智能和XR的集成,对移动计算未来的预测描绘了一个技术丰富和互联的未来。随着这些进步的展开,用户可以期待一种超越当前限制的移动体验,并开辟新的可能性领域。转载链接:cid:link_0
-
前言卷积神经网络具有优秀的特征提取能力和模式识别能力。在艺术品瑕疵检测中,可以利用CNN对艺术品的图像进行高效的分析和判别。通过训练神经网络,能够学习到各种瑕症的特征,包括裂纹、褪色、污渍等,从而实现对艺术品图像的自动化检测。实战体验模型:import tensorflow as tf from tensorflow.keras import layers, models # 构建卷积神经网络模型 model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(img_height, img_width, img_channels))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(128, (3, 3), activation='relu')) # 在模型中添加全连接层和输出层 model.add(layers.Flatten()) model.add(layers.Dense(128, activation='relu')) model.add(layers.Dense(num_classes, activation='softmax')) # 编译模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(train_images, train_labels, epochs=num_epochs, validation_data=(val_images, val_labels))通过检测到的瑕疵信息,然后利用图像处理和深度学习技术实现对艺术品图像的瑕疵修复。例如,生成对抗网络(GAN)可以通过学习艺术品图像的分布,生成具有艺术品特征的新图像,从而实现对瑕的修复。以下是一个简单的案例代码,演示如何使用卷积神经网络(CNN)进行艺术品瑕疵检测。本案例很基础,实际应用中需要更多的数据、更复杂的模型和更多的训练才能满足需求。import tensorflow as tf from tensorflow.keras import layers, models from tensorflow.keras.preprocessing import image from tensorflow.keras.preprocessing.image import ImageDataGenerator import matplotlib.pyplot as plt import numpy as np # 数据准备 train_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( 'path_to_dataset', # 替换为你的数据集路径 target_size=(150, 150), batch_size=32, class_mode='binary' ) # 构建卷积神经网络模型 model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(128, (3, 3), activation='relu')) model.add(layers.Flatten()) model.add(layers.Dense(128, activation='relu')) model.add(layers.Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # 模型训练 history = model.fit(train_generator, epochs=10) # 可视化训练过程 acc = history.history['accuracy'] epochs = range(1, len(acc) + 1) plt.plot(epochs, acc, 'bo', label='Training accuracy') plt.title('Training accuracy') plt.xlabel('Epochs') plt.ylabel('Accuracy') plt.legend() plt.show() # 进行瑕疵检测 def predict_defect(image_path): img = image.load_img(image_path, target_size=(150, 150)) img_array = image.img_to_array(img) img_array = np.expand_dims(img_array, axis=0) img_array /= 255.0 prediction = model.predict(img_array) if prediction[0] < 0.5: print("艺术品存在瑕疵") else: print("艺术品正常") # 替换为测试图像的路径 test_image_path = 'path_to_test_image.jpg' predict_defect(test_image_path)path_to_dataset替换为你的训练数据集路径path_to_test_image.jpg替换为需要进行瑕疵检测的测试图像路径基于卷积神经网络的艺术品瑕疵检测:import numpy as np import matplotlib.pyplot as plt from tensorflow.keras.models import Sequential, Model from tensorflow.keras.layers import Conv2D, Input, UpSampling2D, concatenate from tensorflow.keras.preprocessing.image import load_img, img_to_array, array_to_img from tensorflow.keras.optimizers import Adam # 数据准备 def load_data(): # 在实际应用中,你需要准备一个包含正常和瑕疵图像的大型数据集 # 这里使用一个简化的例子,加载两张示意图像 img_normal = img_to_array(load_img('path_to_normal_image.jpg', target_size=(256, 256))) / 255.0 img_defective = img_to_array(load_img('path_to_defective_image.jpg', target_size=(256, 256))) / 255.0 return np.array([img_normal]), np.array([img_defective]) # 构建瑕疵检测模型 def build_detection_model(): model = Sequential() model.add(Conv2D(64, (3, 3), activation='relu', padding='same', input_shape=(256, 256, 3))) model.add(Conv2D(64, (3, 3), activation='relu', padding='same')) model.add(Conv2D(1, (3, 3), activation='sigmoid', padding='same')) return model # 构建瑕疵修复模型 def build_restoration_model(): input_layer = Input(shape=(256, 256, 3)) x = Conv2D(64, (3, 3), activation='relu', padding='same')(input_layer) x = Conv2D(64, (3, 3), activation='relu', padding='same')(x) encoded = Conv2D(3, (3, 3), activation='sigmoid', padding='same')(x) return Model(input_layer, encoded) # 构建完整的瑕疵检测与修复模型 def build_combined_model(detection_model, restoration_model): restoration_model.trainable = False combined_model = Sequential() combined_model.add(restoration_model) combined_model.add(detection_model) return combined_model # 训练模型 def train_models(detection_model, restoration_model, combined_model, img_normal, img_defective): detection_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) restoration_model.compile(optimizer='adam', loss='mse') # 训练瑕疵检测模型 detection_model.fit(img_defective, np.ones_like(img_defective), epochs=10) # 训练瑕疵修复模型 restoration_model.fit(img_normal, img_defective, epochs=10) # 训练整合模型 combined_model.compile(optimizer='adam', loss=['mse', 'binary_crossentropy']) combined_model.fit(img_normal, [img_defective, np.ones_like(img_defective)], epochs=10) # 测试模型 def test_model(combined_model, img_normal): restored_img, _ = combined_model.predict(img_normal) plt.figure(figsize=(10, 5)) plt.subplot(1, 2, 1) plt.title('Original Image') plt.imshow(array_to_img(img_normal[0])) plt.subplot(1, 2, 2) plt.title('Restored Image') plt.imshow(array_to_img(restored_img[0])) plt.show() # 主程序 img_normal, img_defective = load_data() detection_model = build_detection_model() restoration_model = build_restoration_model() combined_model = build_combined_model(detection_model, restoration_model) train_models(detection_model, restoration_model, combined_model, img_normal, img_defective) test_model(combined_model, img_normal)基于生成对抗网络(GAN)的方法进行艺术品瑕检测与修这个代码使用了 CIFAR-10数据集,通过生成对抗网络在图像上添加随机瑕疵,并尝试修复这些瑕疵。import numpy as np import matplotlib.pyplot as plt from tensorflow.keras.models import Sequential, Model from tensorflow.keras.layers import Input, Conv2D, LeakyReLU, BatchNormalization, Flatten, Dense, Reshape, Conv2DTranspose from tensorflow.keras.optimizers import Adam from tensorflow.keras.datasets import cifar10 # 加载并预处理数据集 def load_and_preprocess_data(): (x_train, _), (_, _) = cifar10.load_data() x_train = x_train / 255.0 return x_train[:5000] # 在图像上生成随机瑕疵 def add_random_defects(images): defect_mask = np.random.random(size=images.shape) < 0.05 images[defect_mask] = np.random.random(size=defect_mask.sum()) return images # 构建生成器模型 def build_generator(latent_dim): model = Sequential() model.add(Dense(4 * 4 * 256, input_dim=latent_dim)) model.add(Reshape((4, 4, 256))) model.add(Conv2DTranspose(128, kernel_size=4, strides=2, padding="same")) model.add(BatchNormalization()) model.add(LeakyReLU(alpha=0.2)) model.add(Conv2DTranspose(64, kernel_size=4, strides=2, padding="same")) model.add(BatchNormalization()) model.add(LeakyReLU(alpha=0.2)) model.add(Conv2DTranspose(3, kernel_size=4, strides=2, padding="same", activation="sigmoid")) return model # 构建判别器模型 def build_discriminator(input_shape): model = Sequential() model.add(Conv2D(64, kernel_size=4, strides=2, padding="same", input_shape=input_shape)) model.add(LeakyReLU(alpha=0.2)) model.add(Conv2D(128, kernel_size=4, strides=2, padding="same")) model.add(BatchNormalization()) model.add(LeakyReLU(alpha=0.2)) model.add(Flatten()) model.add(Dense(1, activation="sigmoid")) return model # 构建生成对抗网络模型 def build_gan(generator, discriminator): discriminator.trainable = False model = Sequential() model.add(generator) model.add(discriminator) return model # 编译判别器和生成对抗网络模型 def compile_models(generator, discriminator, gan): discriminator.compile(optimizer=Adam(lr=0.0002, beta_1=0.5), loss="binary_crossentropy", metrics=["accuracy"]) gan.compile(optimizer=Adam(lr=0.0002, beta_1=0.5), loss="binary_crossentropy") # 训练模型 def train_models(generator, discriminator, gan, data, latent_dim, epochs=10000, batch_size=64): batch_count = data.shape[0] // batch_size for epoch in range(epochs): for _ in range(batch_count): noise = np.random.normal(0, 1, size=(batch_size, latent_dim)) generated_images = generator.predict(noise) real_images = data[np.random.randint(0, data.shape[0], size=batch_size)] labels_real = np.ones((batch_size, 1)) labels_fake = np.zeros((batch_size, 1)) d_loss_real = discriminator.train_on_batch(real_images, labels_real) d_loss_fake = discriminator.train_on_batch(generated_images, labels_fake) d_loss = 0.5 * np.add(d_loss_real, d_loss_fake) noise = np.random.normal(0, 1, size=(batch_size, latent_dim)) labels_gan = np.ones((batch_size, 1)) g_loss = gan.train_on_batch(noise, labels_gan) # 打印损失 print(f"Epoch {epoch}/{epochs} [D loss: {d_loss[0]} | D accuracy: {100 * d_loss[1]}] [G loss: {g_loss}]") # 每 1000 次迭代保存并显示生成的图像 if epoch % 1000 == 0: save_generated_images(generator, epoch) # 保存生成的图像 def save_generated_images(generator, epoch, examples=10, dim=(1, 10), figsize=(10, 1)): noise = np.random.normal(0, 1, size=(examples, 100)) generated_images = generator.predict(noise) generated_images = generated_images.reshape(examples, 32, 32, 3) plt.figure(figsize=figsize) for i in range(generated_images.shape[0]): plt.subplot(dim[0], dim[1], i+1) plt.imshow(generated_images[i], interpolation="nearest") plt.axis("off") plt.tight_layout() plt.savefig(f"generated_image_epoch_{epoch}.png") # 主程序 latent_dim = 100 input_shape = (32, 32, 3) # 加载并预处理数据 data = load_and_preprocess_data() # 在图像上生成随机瑕疵 data_with_defects = add_random_defects(np.copy(data)) # 构建生成器、判别器和生成对抗网络模型 generator = build_generator(latent_dim) discriminator = build_discriminator(input_shape) gan = build_gan(generator, discriminator) # 编译模型 compile_models(generator, discriminator, gan) # 训练模型 train_models(generator, discriminator, gan, data_with_defects, latent_dim)总结深度学习技术在艺术品瑕疵检测与修复领域的应用为文化遗产保护带来了新的视角和可能性。通过生成对抗网络(GAN)等技术,能够实现更高精度的瑕疵检测和自动化的修复流程。这不仅提升了修复效率,还为文化遗产的数字化和数据驱动保存提供了新的途径。
-
前言随着数字技术的飞速进步,视频创作已经从专业领域的专属工具,逐渐转变为大众皆可参与的创意表达平台。而在这个变革的浪潮中,Sora文生视频凭借其独特的技术优势和创新的理念,正重新定义着视频创作的边界。Sora文生视频不仅仅是一个视频编辑工具,它更是一个集创意、协作与分享于一体的综合性平台。通过Sora,用户可以轻松地将自己的想法和故事转化为生动的视频作品,与全世界分享自己的创意和热情。一、技术驱动的创意表达Sora文生视频拥有强大的技术支撑,其基于深度学习的图像处理和语音识别技术,使得视频编辑变得更加智能化和高效。用户无需具备专业的视频制作技能,只需要通过简单的拖拽和选择,就能实现复杂的视频剪辑和特效制作。在Sora平台上,用户可以轻松调整视频的色彩、光线和构图,实现电影级的视觉效果。同时,平台还提供了丰富的音效库和背景音乐选择,让视频作品更加生动和感人。除了基础的编辑功能,Sora还支持AI驱动的自动化编辑。通过智能识别视频内容,Sora能够自动添加合适的特效、转场和字幕,大大提升了视频制作的效率和便捷性。二、协作与分享的社区精神Sora文生视频非常注重用户之间的协作与分享。平台提供了多人在线编辑功能,使得团队成员可以实时协作,共同完成一个视频项目。这种协作模式不仅提高了工作效率,也让创意的碰撞和融合成为可能。同时,Sora还建立了一个充满活力的创作者社区。在这个社区里,用户可以浏览和分享其他创作者的作品,互相学习、互相启发。这种分享和互动的精神,让Sora成为了一个创意的聚集地,吸引着越来越多的创作者加入其中。三、教育与培训的广阔应用除了个人创作者和团队协作,Sora文生视频在教育和培训领域也有着广泛的应用。教师可以利用Sora平台制作生动有趣的课件和教学视频,提高学生的学习兴趣和效果。学生也可以利用Sora平台自主创作学习视频,巩固和拓展学科知识。此外,Sora还可以作为企业和机构的内部培训工具。通过制作定制化的培训视频,企业可以更加高效地进行员工培训和能力提升。四、展望未来随着技术的不断发展和市场的不断拓展,Sora文生视频的未来充满了无限可能。首先,随着5G、云计算等技术的普及,视频创作和分享将变得更加便捷和高效。Sora平台将能够支持更高清、更流畅的视频制作和分享,为用户提供更加优质的视频体验。其次,随着AI技术的不断进步,Sora的自动化编辑功能将更加智能和精准。未来,我们甚至可以期待通过语音或文字描述,就能自动生成高质量的视频作品。最后,随着全球创作者社区的不断扩大和成熟,Sora将成为一个真正的全球创意交流平台。在这个平台上,不同文化、不同背景的创作者可以相互碰撞、相互学习,共同推动视频创作艺术的进步和发展。结语Sora文生视频以其独特的技术优势和创新的理念,正在重新定义视频创作的边界。它不仅提供了一个高效便捷的视频编辑工具,更建立了一个充满活力和创意的社区。在这个平台上,每个人都可以成为创作者,用视频表达自己的想法和故事。随着技术的不断进步和市场的不断拓展,我相信Sora文生视频将会在未来继续引领视频创作的新潮流,为我们带来更多惊喜和感动。
-
在ECS windows部署Llama2 尝试使用MLC运行,但出现以下报错,求助
-
一月问题总结如下:【1】用华为atlas300-3010 用于训练失败cid:link_3【2】如何展示这些图片呢cid:link_4【3】云平台第一次用,求助怎么导入transformers库啊?cid:link_0【4】 atlas 200 DK 制卡完成后启动不了cid:link_1【5】请问下,新人申请预测大模型一般几天可以通过申请。cid:link_2
-
了解一些该领域的常用工具开源工具Python – 由于其易用性,灵活性和开源特性,Python是当今行业数据科学中最主要的语言之一。它已经在ML社区中迅速普及并被广泛接受。 R – 它是数据科学中另一种非常常用且受人尊敬的语言。R有一个蓬勃发展且被极大支持的社区,附带了许多软件包和库,支持大多数的机器学习任务。Apache Spark – Spark由加州大学伯克利分校于2010年开源,此后已成为最大的大数据社区之一。它被称为大数据分析的“瑞士军刀”,因为它具有多种优势,例如灵活性、速度、计算能力等。Julia – 它是一种即将到来的语言,被捧为Python的继承者。目前它仍处于起步阶段,观察其在未来的表现将会是一件有趣的事。Jupyter Notebooks – 这些笔记本广泛用于Python编程。尽管它主要用于Python,但它也支持其他语言,Julia,R等。收费工具SAS – 这是一个非常受欢迎且功能强大的工具。在银行和金融部门中被普遍使用。它的使用在美国运通,摩根大通,西格玛,苏格兰皇家银行等私人组织中占有很高的份额。SPSS – SPSS是“社会科学统计软件包”的缩写,在2009年被IBM收购。它提供高级统计分析、庞大的机器学习算法库、文本分析等。Matlab – Matlab在组织机构的领域里确实被低估了,但在学术界和研究部门中得到了广泛的使用。最近相较于Python,R和SAS,Matlab已经阵地失守,但是大学(尤其在美国)仍在使用Matlab教授许多本科课程。
-
CLIPCLIP是OpenAI提出的连接图像和文本特征表示的对比学习方法。论文: https://arxiv.org/abs/2103.00020ViLBERTViLBERT修改BERT中query条件下的key-value注意力机制,将其发展成一个多模态共注意transformer模块。LXMERTcross-attention在cross操作后加入一个全连接层,同时融合了图片和文字的信息。增加了一些预训练任务目标,比如Masked Cross-Modality LM。增加图像问答任务到预训练任务中(引入vqa等数据集的训练集)。论文:https://arxiv.org/abs/1908.07490VL-BERT模型在BERT的基础上在输入中嵌入一种新的视觉特征来适应视觉的相关内容。与BERT类似,模型主要由多层双向Transformer编码器组成。但与BERT只处理句子单词不同,VL-BERT把视觉元素和语言元素都作为输入,模型分别在图像的感兴趣区域(RoIs)和输入句子中的单词上定义相应特征。UNITER创新点:a) 有文本的预训练任务比没有文本的预训练任务效果更好b) Vison+Language 组合的预训练效果要好于单独的 Vision/Languagec) 最好的预训练组合是:MLM+ITM+MRC-kl+MRFPd) 将上面提到的四个数据一起训练效果最好,这也证明数据越多效果越好e) 扩大的数据集任务:a) MLM(conditioned on image,遮字模型)b) MRM(Mask Region Model,预测图像,回归或分类,有三种变体)--MRC(Mask Region Cls),MRFR(Mask Regin Feature Regress),MRC-KL(MRC + KL divergency)c) ITM(Image Text Match,图文是否一致)d) WRA(Word Region Alignment,字和图像的对齐任务)论文:https://arxiv.org/pdf/1908.08530.pdfImageBERT主要在与数据量,作者从网络上收集了一个大型的弱监督图像-文本数据集LAIT,包含了 10M(1千万)的 Text-Image pairs,这也是目前最大的一个数据集。论文:https://arxiv.org/abs/2001.07966Pixel-BERT论文:https://arxiv.org/abs/2004.00849a) 句子编码:采用跟bert一样的编码方式。b) 图片编码:对图片进行卷积,池化,最后得到一个特征矩阵(元素为特征向量),对其进行采样后,每个元素与一个semantic embedding相加,相当于一种偏置。最后展平,得到最终的像素特征编码。c) 多模态编码:将两种表示拼接在一起,过TRM,得到最终的表示。d) 任务:MLM任务和图片-文本匹配任务。Oscar: Object-Semantics Aligned Pre-training for Vision-Language Tasks ECCV 2020 motivation:提出了一种新的学习方法Oscar,它用图像中检测到的对象标签作为锚点,在一个共享的语义空间中对齐图像和语言模态。在一个有650万个图像-文本对的公共语料库上对Oscar模型进行了预训练,验证了Oscar的有效性。method&task:将词符、对象标签、区域特征作为输入,增加mask token loss和contrastive loss。论文:https://arxiv.org/abs/2004.06165InterBERT提出跨度更大的mask和高阶交互特征后保持模态独立性方法。 论文:https://arxiv.org/abs/2003.13198ViLT文本特征输入部分,将文本看成一个词序列,通过word embedding matrix转化成word embedding,然后和position embedding进行相加,最后和modal-type embedding进行concate。图像特征输入部分,将图像切块看成一个图像块序列,通过linear projection转化成visual embedding,然后和postion embedding进行相加,最后和modal-type embedding进行concate。其中word embedding和visual embedding通过可学习的modal-type embedding标志位来区分,其中0标志位表示word embedding部分,1标志位表示visual embedding部分。word embedding和visual embedding分别都嵌入了一个额外的可学习[class] embedding,方便和下游任务对接。类似clip单流
-
中奖结果公示感谢各位小伙伴参与本次活动,本次活动获奖名单如下所示。请获奖的伙伴在1月14日之前点击此处填写收货地址,如逾期未填写视为弃奖。再次感谢各位小伙伴参与本次活动,欢迎关注华为云DTSE Tech Talk 技术直播更多活动~【报名转发抽奖】奖项名单华为云账号昵称奖品hw090512683yd_235942659华为云定制Polo衫hid_a0211e-bd-x__swyd_230717006华为云定制Polo衫hid_y_w9dg_leuhuf8o小云悠悠zZ华为云定制Polo衫hw71474994yd_267218756华为云定制Polo衫hw053453872yd_224714878华为云定制Polo衫【我与DTT的独家记忆】奖项名单(奖品:华为云云宝公仔一套) 点击链接查看【专家坐堂有奖】奖项名单(奖品:华为云定制长袖卫衣) 点击链接查看【有奖调研】奖项名单账号奖品xiaozhongy华为云无线鼠标hw008562287华为云无线鼠标hid__cn8cjapw6ba12c华为云无线鼠标jackie306华为云无线鼠标linghz666华为云无线鼠标
-
我想使用GAN实现指定一个粒径和棱角性(比如我指定粒径是4.75,棱角性是1200),然后它可以随意生成想要集料形状和棱角性大小,如下图所示:我设计的GAN在训练过程中生成器图像分类Loss很容易出现欠拟合,该如何优化呢?我使用了3600张图像用作训练,判别器的分类效果一直很好,生成器训练几十轮后就会出现欠拟合。我目前怀疑模型在反向传播过程中使用多个loss会互相干扰,但是不知道从哪方面下手,末尾附注Notebook链接。
-
人工智能服务的价格计费模式是怎样的?
-
如何使用人脸识别、语音识别、自然语言处理等人工智能服务?
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签