最新要闻
- 奥赛康:股东拟减持公司不超1%股份|环球焦点
- 每日看点!李蓓回应基金封盘:宁肯选择维持第二梯队的规模并争取维持一流的业绩
- 小伙日行三万步逛杭州 “特种兵式旅游”致半月板损伤
- 国内一集装箱惊现三辆特斯拉新跑车:被遗弃13年-全球讯息
- 凌晨四点的淄博什么样?烧烤店老板凌晨抢肉:热闹非凡_今日聚焦
- 自媒体称4月份接2笔理想商单共计30万 李想:造谣、法务部出来干活|每日消息
- 官方晒蒂法8岁、13岁美术设定图 身着连衣裙天真烂漫
- 烟台高新区不断推进工程建设项目审批“应享尽享”水平 世界速看料
- 不愧是高端旗舰 RTX 4090游戏本性能爆棚:前提不差钱
- 高达12种!小米13成为史上颜色最多的小米手机
- 掀翻OLED!苹果自研MicroLED屏幕:进展顺利-每日速看
- 咋回事?董明珠1150万股格力股份遭冻结 市值约4亿元
- 对标拼多多?抖音推出“超便宜的小店”:试水低价电商|全球快看点
- 无锡市举办纪念五四运动 104周年主题团日活动
- 深圳:港澳青年在深创业个人最高可贷60万元
- 苹果联合创始人炮轰马斯克自动驾驶画饼:想死就买特斯拉!
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天百事通!绘画手残党的福音:涂鸦线稿秒变绝美图像
摘要:涂鸦线稿秒变绝美图像,ControlNet-Scribble2Img适配华为云ModelArts,提供更加便利和创新的图像生成体验,将你的想象变为真实的图像。
本文分享自华为云社区《AIGC拯救手残党:涂鸦线稿秒变绝美图像》,作者:Emma_Liu 。
ControlNet
什么是ControlNet?简而言之,文本到图像的生成涉及使用预训练的扩散模型来生成基于某些文本的图像。
(相关资料图)
从输入图像中提取特定信息的过程称为注释(在paper中)或预处理(在 ControlNet extension中)。这个扩散模型是在数十亿张图片上预训练的,当我们输入文字时,模型会根据输入的内容生成一张图片。然而,有时输出结果与我们的意图并不完全一致。这就是ControlNet的作用…
ControlNet最早是在L.Zhang等人的论文《Adding Conditional Control to Text-to-Image Diffusion Model》中提出的,目的是提高预训练的扩散模型的性能。特别是,在预训练的扩散模型中加入另一个神经网络模型(ControlNet),使我们对输出有更多的控制。
ControlNet 的工作原理是将可训练的网络模块附加到稳定扩散模型的U-Net (噪声预测器)的各个部分。Stable Diffusion 模型的权重是锁定的,在训练过程中它们是不变的。在训练期间仅修改附加模块。
研究论文中的模型图很好地总结了这一点。最初,附加网络模块的权重全部为零,使新模型能够利用经过训练和锁定的模型。
训练 ControlNet 包括以下步骤:
- 克隆扩散模型的预训练参数,如Stable Diffusion的潜在UNet,(称为 “可训练副本”),同时也单独保留预训练的参数(“锁定副本”)。这样做是为了使锁定的参数副本能够保留从大型数据集中学习到的大量知识,而可训练的副本则用于学习特定的任务方面。
- 参数的可训练副本和锁定副本通过 "零卷积 "层连接,该层作为ControlNet框架的一部分被优化。这是一个训练技巧,在训练新的条件时,保留冻结模型已经学会的语义。从图上看,训练ControlNet是这样的:
ControlNet提供了八个扩展,每个扩展都可以对扩散模型进行不同的控制。这些扩展是Canny, Depth, HED, M-LSD, Normal, Openpose,Scribble, and Semantic Segmentation.
ControlNet-Scribble2img
Scribble 用于预处理用户绘制的涂鸦, 这个预处理程序不应该用在真实的图像上。由于它能够根据简单的草图生成令人惊叹、逼真或改进的图像。理想情况下,不需要任何提示。通过输入一个基本的图画,模型可以推断出细节和纹理,从而产生一个更高质量的图像。
下面是用ModelArts的Notebook适配Scribble2img生成的几幅图,一起来看看吧。
浮世绘风格的海浪 || 满天繁星 || 小兔子和萝卜
发光水母||一筐橙子||小花喵||微笑的太阳
尝试用自己画的素描生成,效果也不错
接下来让我们从零开始,在ModelArts上一起来体验Scribble2img涂鸦生图的乐趣吧。
涂鸦生成图像 ControlNet-Scribble2img
本文介绍如何在ModelArts来实现 ControlNet-Scribble2img 涂鸦生成图像。
AI Gallery - Notebook链接:拯救手残党:AI涂鸦一键成图 (huaweicloud.com)
前言
ModelArts 是面向开发者的一站式 AI 开发平台,为机器学习与深度学习提供海量数据预处理及交互式智能标注、大规模分布式训练、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期 AI 工作流。
前期准备
在使用ModelArts之前,需要进入华为云官网https://www.huaweicloud.com/,然后注册华为云账号,再进行实名认证。主要分为3步(注册–>实名认证–>服务授权)(如有已完成部分,请忽略)
点去完成实名认证,账号类型选"个人",个人认证类型推荐使用"扫码认证"。
进入ModelArts 控制台数据管理页面,上方会提示访问授权,点击【服务授权】按钮,按下图顺序操作:
注意事项
- 本案例需使用Pytorch-1.8 GPU-P100及以上规格运行;
- 点击Run in ModelArts,将会进入到ModelArts CodeLab中,如果您没有登录需要进行登录。 登录之后,等待片刻,即可进入到CodeLab的运行环境;
- 出现Out Of Memory,请检查是否为您的参数配置过高导致,修改参数配置,重启kernel或更换更高规格资源进行规避;
- 运行代码方法:点击本页面顶部菜单栏的三角运行按钮或按Ctrl+Enter或cell左侧三角按钮运行每个方块中的代码;
- 如果您是第一次使用 JupyterLab,请查看《ModelArts JupyterLab使用指导》了解使用方法;
- 如果您在使用 JupyterLab 过程中碰到报错,请参考《ModelArts JupyterLab常见问题解决办法》尝试解决问题。
1.环境设置
check GPU & 拷贝代码及数据
为了更快的准备数据和模型,将其转存在了华为云OBS中,方便大家使用。
!nvidia-smiimport osimport moxing as moxparent = "/home/ma-user/work/ControlNet"bfp = "/home/ma-user/work/ControlNet/openai/clip-vit-large-patch14/pytorch_model.bin"sfp = "/home/ma-user/work/ControlNet/models/control_sd15_scribble.pth"if not os.path.exists(parent): mox.file.copy_parallel("obs://modelarts-labs-bj4-v2/case_zoo/scribble2img/ControlNet",parent) if os.path.exists(parent): print("Download success") else: raise Exception("Download Failed")elif os.path.exists(bfp)==False or os.path.getsize(bfp)!=1710671599: mox.file.copy_parallel("obs://modelarts-labs-bj4-v2/case_zoo/scribble2img/ControlNet/openai/clip-vit-large-patch14/pytorch_model.bin", bfp)elif os.path.exists(sfp)==False or os.path.getsize(sfp)!=5710757851: mox.file.copy_parallel("obs://modelarts-labs-bj4-v2/case_zoo/scribble2img/ControlNet/models/control_sd15_scribble.pth", sfp)else: print("Model Package already exists!")
安装库,大约耗时1min,请耐心等待。
%cd /home/ma-user/work/ControlNet!pip uninstall torch torchtext -y!pip install torch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 !pip install omegaconf==2.1.1 einops==0.3.0!pip install pytorch-lightning==1.5.0!pip install transformers==4.19.2 open_clip_torch==2.0.2!pip install gradio==3.24.1!pip install translate==3.6.1
2. 加载模型
导包并加载模型,加载约40s,请耐心等待。
import numpy as npfrom PIL import Image as PilImageimport cv2import einopsimport matplotlib.pyplot as pltfrom IPython.display import HTML, Imagefrom base64 import b64decodefrom translate import Translatorimport torchfrom pytorch_lightning import seed_everythingimport configfrom cldm.model import create_model, load_state_dictfrom ldm.models.diffusion.ddim import DDIMSamplerfrom annotator.util import resize_image, HWC3model = create_model("./models/cldm_v15.yaml")model.load_state_dict(load_state_dict("./models/control_sd15_scribble.pth", location="cuda"))model = model.cuda()ddim_sampler = DDIMSampler(model)
3. 涂鸦生成图像
涂鸦生成图像函数定义
def process(input_image, prompt, a_prompt, n_prompt, num_samples, image_resolution, ddim_steps, strength, scale, seed, eta): trans = Translator(from_lang="ZH",to_lang="EN-US") prompt = trans.translate(prompt) a_prompt = trans.translate(a_prompt) n_prompt = trans.translate(n_prompt) guess_mode = False # 图像预处理 with torch.no_grad(): if type(input_image) is str: input_image = np.array(PilImage.open(input_image)) img = resize_image(HWC3(input_image), image_resolution) else: img = resize_image(HWC3(input_image["mask"][:, :, 0]), image_resolution) # scribble H, W, C = img.shape # 初始化检测映射 detected_map = np.zeros_like(img, dtype=np.uint8) detected_map[np.min(img, axis=2) > 127] = 255 control = torch.from_numpy(detected_map.copy()).float().cuda() / 255.0 control = torch.stack([control for _ in range(num_samples)], dim=0) control = einops.rearrange(control, "b h w c -> b c h w").clone() # 设置随机种子 if seed == -1: seed = random.randint(0, 65535) seed_everything(seed) if config.save_memory: model.low_vram_shift(is_diffusing=False) cond = {"c_concat": [control], "c_crossattn": [model.get_learned_conditioning([prompt + ", " + a_prompt] * num_samples)]} un_cond = {"c_concat": None if guess_mode else [control], "c_crossattn": [model.get_learned_conditioning([n_prompt] * num_samples)]} shape = (4, H // 8, W // 8) if config.save_memory: model.low_vram_shift(is_diffusing=True) # 采样 model.control_scales = [strength * (0.825 ** float(12 - i)) for i in range(13)] if guess_mode else ([strength] * 13) # Magic number. samples, intermediates = ddim_sampler.sample(ddim_steps, num_samples, shape, cond, verbose=False, eta=eta, unconditional_guidance_scale=scale, unconditional_conditioning=un_cond) if config.save_memory: model.low_vram_shift(is_diffusing=False) # 后处理 x_samples = model.decode_first_stage(samples) x_samples = (einops.rearrange(x_samples, "b c h w -> b h w c") * 127.5 + 127.5).cpu().numpy().clip(0, 255).astype(np.uint8) results = [x_samples[i] for i in range(num_samples)] return [255 - detected_map] + results
3.1设置参数,生成图像
在/home/ma-user/work/ControlNet/test_imgs/ 此路径下,我们预置了一些线稿供您测试。当然您可以自己上传您的涂鸦画至此路径下,然后更改图像路径及其他参数后,点击运行。
参数说明
images:生成图像张数
img_path:输入图像路径,黑白稿
prompt:提示词(建议填写)
a_prompt:正面提示(可选,要附加到提示的其他文本)
n_prompt: 负面提示(可选)
image_resolution: 对输入的图片进行最长边等比resize
scale:classifier-free引导比例
seed: 随机种子
ddim_steps: 采样步数,一般15-30,值越大越精细,耗时越长
eta: 控制在去噪扩散过程中添加到输入数据的噪声量。0表示无噪音,1.0表示更多噪音。eta对图像有微妙的、不可预测的影响,所以您需要尝试一下这如何影响您的项目。
strength: 这是应用 ControlNet 的步骤数。它类似于图像到图像中的去噪强度。如果指导强度为 1,则 ControlNet 应用于 100% 的采样步骤。如果引导强度为 0.7 并且您正在执行 50 个步骤,则 ControlNet 将应用于前 70% 的采样步骤,即前 35 个步骤。
#@title Scribble2img img_path = "test_imgs/cat.jpg" #@param {type:"string"}prompt = "小花猫" #@param {type:"string"}num_samples = 1# Added Prompta_prompt = "质量最好,非常详细" #@param {type:"string"}# Negative Promptn_prompt = "裁剪,质量最差,质量低" #@param {type:"string"}image_resolution = 512 #@param {type:"raw", dropdown}scale = 4.3 #@param {type:"slider", min:0.1, max:30, step:0.1}seed = 1773327477 #@param {type:"slider", min:-1, max:2147483647, step:1}eta = 0.02 #@param {type:"slider", min:-1.00, max:3.00, step:0.01}ddim_steps = 15 #@param {type:"slider", min:1, max:100, step:1}guess_mode = Falsestrength = 1.0np_imgs = process(img_path, prompt, a_prompt, n_prompt, num_samples, image_resolution, ddim_steps, strength, scale, seed, eta)src = PilImage.fromarray(~np_imgs[0])dst = PilImage.fromarray(np_imgs[1])fig = plt.figure(figsize=(25, 10))ax1 = fig.add_subplot(1, 2, 1)plt.title("Scribble image", fontsize=16)ax1.axis("off")ax1.imshow(src)ax2 = fig.add_subplot(1, 2, 2)plt.title("Generate image", fontsize=16)ax2.axis("off")ax2.imshow(dst)plt.show()
在右侧有交互式控件,可以简单调整参数,然后运行即可,等待生成。
3.2模型局限性以及可能的偏差
- Prompt只支持中英文输入。
- 所提供的图像或简笔画过于简单或意义不明确时,模型可能生成与上传图像相关度低的物体或是一些无意义的前景物体,可以修改上传图像重新尝试。
- 在一些场景下,描述Prompt不够明确时,模型可能生成错误的前景物体,可以更改Prompt并生成多次,取效果较好的结果。
当所提供的图像或简笔画与描述Prompt相关度低或无关时,模型可能生成偏向图像或偏向Prompt的内容,也可能生成无意义的内容;因此建议描述Prompt与所上传的图像紧密相关并且尽可能详细。
4. Gradio可视化部署
如果想进行可视化部署,可以继续以下步骤: Gradio应用启动后可在下方页面进行涂鸦生成图像,您也可以分享public url在手机端,PC端进行访问生成图像。
4.1 ControlNet扩展说明
- 图像画布:您可以拖动设置画布宽度和画布高度,然后点击开启画布!来创建一张空白画布。
- 调整笔刷进行绘画
- 输入描述词(推荐),点击Run
- 高级选项(可选),您可点击此选项卡,打开折叠部分,按照上述参数说明进行设置,设置完成后点击Run
import gradio as gr# 画布生成函数def create_canvas(w, h): img = np.zeros(shape=(h-2, w-2, 3), dtype=np.uint8) + 255 im = cv2.copyMakeBorder(img,1,1,1,1,cv2.BORDER_CONSTANT) return imblock = gr.Blocks().queue()with block: with gr.Row(): gr.Markdown("## 涂鸦生成图像 ") with gr.Row(): with gr.Column(): canvas_width = gr.Slider(label="画布宽度", minimum=256, maximum=1024, value=512, step=1) canvas_height = gr.Slider(label="画布高度", minimum=256, maximum=1024, value=512, step=1) create_button = gr.Button(label="Start", value="开启画布!") gr.Markdown(value="点击下面右上角小铅笔图标,改变你的刷子宽度,让它变的更细 (Gradio不允许开发人员设置画笔宽度,因此需要手动设置) ") input_image = gr.Image(source="upload", type="numpy", tool="sketch") create_button.click(fn=create_canvas, inputs=[canvas_width, canvas_height], outputs=[input_image]) prompt = gr.Textbox(label="Prompt") run_button = gr.Button(label="运行") with gr.Accordion("高级选项", open=False): num_samples = gr.Slider(label="Images", minimum=1, maximum=12, value=1, step=1) image_resolution = gr.Slider(label="Image Resolution", minimum=256, maximum=768, value=512, step=64) strength = gr.Slider(label="Control Strength", minimum=0.0, maximum=2.0, value=1.0, step=0.01) ddim_steps = gr.Slider(label="Steps", minimum=1, maximum=100, value=20, step=1) scale = gr.Slider(label="Guidance Scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1) seed = gr.Slider(label="Seed", minimum=-1, maximum=2147483647, step=1, randomize=True) eta = gr.Number(label="eta (DDIM)", value=0.0) a_prompt = gr.Textbox(label="Added Prompt", value="质量最好,非常详细") n_prompt = gr.Textbox(label="Negative Prompt", value="裁剪,质量最差,质量低") with gr.Column(): result_gallery = gr.Gallery(label="Output", show_label=False, elem_id="gallery").style(grid=2, height="auto") ips = [input_image, prompt, a_prompt, n_prompt, num_samples, image_resolution, ddim_steps, strength, scale, seed, eta] run_button.click(fn=process, inputs=ips, outputs=[result_gallery])block.launch(share=True)
请注意: 图像生成消耗显存,您可以在左侧操作栏查看您的实时资源使用情况,点击GPU显存使用率即可查看,当显存不足时,您生成图像可能会报错,此时,您可以通过重启kernel的方式重置,然后重头运行即可规避。或更换更高规格的资源
点击关注,第一时间了解华为云新鲜技术~
关键词:
-
【光伏预报/太阳能预报】上海道宁与Solargi为您提供开发地理数据库模拟工具和网络服务 天天亮点
Solargis提供开发地理数据库模拟工具和网络服务用于太阳能发电的规划性能监控和管理推动全球经济转向可持续
来源: 天天百事通!绘画手残党的福音:涂鸦线稿秒变绝美图像
天天快播:保障用户买到限量版玩具,泡泡玛特用AIGC加持的验证码防范羊毛党
【光伏预报/太阳能预报】上海道宁与Solargi为您提供开发地理数据库模拟工具和网络服务 天天亮点
今日热门!Vue3项目(Vite+TS)使用Web Serial Api全记录
【快播报】抓住医院信息集成平台建设核心诉求
奥赛康:股东拟减持公司不超1%股份|环球焦点
世界黄金协会:一季度黄金总需求同比增长1% 央行购金仍可能成为今年支撑黄金需求的基石
每日看点!李蓓回应基金封盘:宁肯选择维持第二梯队的规模并争取维持一流的业绩
小伙日行三万步逛杭州 “特种兵式旅游”致半月板损伤
国内一集装箱惊现三辆特斯拉新跑车:被遗弃13年-全球讯息
凌晨四点的淄博什么样?烧烤店老板凌晨抢肉:热闹非凡_今日聚焦
自媒体称4月份接2笔理想商单共计30万 李想:造谣、法务部出来干活|每日消息
官方晒蒂法8岁、13岁美术设定图 身着连衣裙天真烂漫
网盘教育专享版,助力高校信息化和科研
环球信息:基于原子范数的深度展开网络实现
天天看热讯:Apache 配置https虚拟主机
世界快看点丨到底什么是小程序插件?
天天报道:如何不显示我的电脑、回收站等图标?
烟台高新区不断推进工程建设项目审批“应享尽享”水平 世界速看料
不愧是高端旗舰 RTX 4090游戏本性能爆棚:前提不差钱
高达12种!小米13成为史上颜色最多的小米手机
掀翻OLED!苹果自研MicroLED屏幕:进展顺利-每日速看
咋回事?董明珠1150万股格力股份遭冻结 市值约4亿元
对标拼多多?抖音推出“超便宜的小店”:试水低价电商|全球快看点
无锡市举办纪念五四运动 104周年主题团日活动
【天天速看料】Java基础学习之大数字处理相关的类有哪些?
将Windows系统设置NTP服务器-NetTime篇
金仓数据库字符串分割函数_天天速看料
深圳:港澳青年在深创业个人最高可贷60万元
苹果联合创始人炮轰马斯克自动驾驶画饼:想死就买特斯拉!
李佳琦面试75岁奶奶主播引围观:老人直呼为推广国货努力 这是国家自信
环球即时:调试器是个大骗子!
快速高效的C#FTP文件传输库FluentFTP|全球速讯
开心档之MySQL 导入数据-焦点报道
开封市通许县四所楼镇:让社情民意联络点当好民声传话筒|全球快讯
支持华为HMS服务!酷比魔方Pad 50Pro发布 首发899元
世界热点评!陌陌被苹果下架 官方回应:技术问题正解决 老用户不影响
这五一超20万人去淄博:鲁C变身网红旅游名城_快资讯
当前讯息:怎么看?老人欲插队被服务员严词拒绝:前有插队婆孙被网曝 还被做车贴很恶心
功能不成熟 马斯克推特直播秒变马赛克 网友吐槽:8-Bit埃隆_世界新要闻
今年全国快递业务量突破400亿件
常用的热门 API 汇总 环球热推荐
即时看!jasperreport开发手册--ireport教程
世界百事通!什么是EMR?为什么要以电子病历(EMR)为核心,建设医院信息集成平台?
安全验证必备——语音验证码短信 API 当前快看
火山引擎 DataTester 上线全新 MAB 智能调优实验
坎普斯boss怎么打_坎普斯怎么打_当前快讯
一机多用:劲能电钻/电动螺丝刀39元起(100元大额券) 每日速递
【天天热闻】向华为供货740万块硬盘 被重罚3亿美元!希捷:已和解并开始付罚金
当前观点:特斯拉公共充电桩功率仅23KW 比亚迪车主一度愧疚:把人家功率吸走了
又一五菱神车!宝骏悦也5月15日首发:车尾背个“大手表”
iPhone平均售价越来越高了!Pro和Pro Max最受果粉喜爱
当前短讯!浙江师范大学2023年硕士研究生复试录取办法
seventeen是哪个公司?seventeen在韩国是几线?seventeen有几个人?
冰淇淋和冰激凌区别是什么?明胶在冰淇淋中的作用是什么?
厨师的高帽子叫什么?为什么厨师要戴白色高帽子?
梦华录里的西京是哪里?梦华录是在哪些地方取景?
富士山在日本的哪里?富士山是私人的吗?富士山为什么是私人的?
boot priority是什么意思?boot priority怎么设置?
小米3s什么时候上市的?小米3s参数配置
百度网盘邀请码怎么使用?百度网盘邀请码大全
辽篮回沈阳!全员餐厅吃饭,张镇麟狂笑,莫兰德搞怪,回去仍加练-今亮点
centos7安装oracle11g11.2.0.4.0
【解决办法】三层交换机通过静态路由和接口互联,实现不同VLAN间通信的两种方法
ES全文检索,Neo4J,activiti审批流的知识库管理系统
thinkpad扩展坞接口怎么用?thinkpad的扩展坞有什么用?
移动磁盘无法写入文件怎么回事?移动磁盘无法写入文件怎么解决?
调查显示:电影“五一”档女性观众购票用户首次突破六成
699元 70迈4K旗舰行车记录仪A810发布:首发索尼IMX678_环球热头条
祝融号有重大发现:火星低纬度存在液态水
联想小新K3机械键盘发布:199元 91键小而全
天天头条:国内油价有望怒跌超3毛!基本抵消掉第八轮的微涨4毛
热血又感人!海外影迷评《长空之王》:5岁儿子非常喜欢
有景区免费发冰棍,有景区一盘炒鸡蛋48元——记者调查五一小长假山西景区旅游现状
当前关注:Zabbix“专家坐诊”第190期问答汇总
Linux IMX6ULL RTC掉电不保存问题解决|全球快报
苏宁零钱宝在哪里查看_苏宁零钱宝 环球看点
小记者手抄报 赛场小记者手抄报
放心买吧!最新研究:电动车电池比车本身更耐用|天天微资讯
真我11系列来了:2亿新影像 支持多焦段无损变焦
视点!小米13 Ultra全新限量定制色成了!雷军称特别多人喜欢 非常意外
赔钱卖车?福特汽车加入价格战 电动车利润率-102%
7人吃自助4小时炫300多个螃蟹 还有四五十盒榴莲等:网友直呼厉害_环球热讯
『徐州味·旅游季』料足滋味长 天天热头条
ios证书免费分享
滚动:【财经分析】清洁能源基础设施REITs发展空间广阔 应高度重视项目前期培育
天天快看:3699元起!联想小新mini主机上市:13代酷睿标压处理器加持
全球快报:全球多地出现罕见高温!厄尔尼诺或将带来全球变暖新高峰
秒杀安卓所有!苹果发财报:iPhone全球卖爆 营收历史新高 库克感谢国人|全球焦点
环球即时:演员张智霖在线求华为Mate X3息屏显示长开 华为李小龙回应
世界今热点:政策多管齐下撬动农村大市场
工银国际对美联储5月FOMC点评:加息“暂停” 降息“未定” 环球实时
【财经分析】欧洲央行最激进的货币紧缩周期将进入尾声_焦点信息
今热点:厂里不签合同还扣工资
欧盟警告苹果不准加密USB-C接口:必须兼容安卓数据线/充电器 否则禁售-快报
vivo X90S曝光:处理器升级为天玑9200+ 安卓最强芯-新要闻
男子误把每月汇款当捐款 4年收到24万竟是工资引热议:专家喊话薪酬透明化
世界看点:学系统集成项目管理工程师(中项)系列17b_范围管理(下)
淄博鸭头小哥直播中气到落泪:被女粉骚扰 1天18万人逛仅卖6千元-观察
当前关注:孝敬父母事迹(关于孝敬父母的名言)