当前位置: 首页 > news >正文

【深度学习的灵魂】图片布局生成模型LayoutPrompt(1)

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光

目录

1. 前言

2. LayoutPrompt介绍

3. LayoutPrompt · 布局序列化模块

3.1 固定化Prompt

3.2 父类序列化模块

3.3 子类序列化模块

4. 总结


1. 前言

        猫猫不知道大家有没有思考过图片布局生成模型,这算是生成模型的一个非常小的子任务了。前面带大家学习过生成模型,包括GAN、Diffusion等。这些都算是生成模型的研究子领域,利用这些子领域的知识,我们可以来研究具体的任务,例如生成图片、按照语言提示生成图片、按照布局提示生成图片等。

        同样生成布局也是生成模型中的一个具体任务,其实思路也是非常简单。生成图片这个任务中更具体的任务是生成海报、生成照片、生成动漫图片等。因为直接生成一个海报难度太大,我们就先去生成布局,然后在具体布局的约束下去具体生成完整图片。可以简单给大家看一下布局是什么:

        猫猫研究这个呢,主要还是因为创新实训和软件创新大赛两个需要。同时由于猫猫也研究过一点生成模型,因此这个学期就研究一下这个领域啦~~如果大家也对这个领域感兴趣,可以关注我们团队的专栏(布局生成模型是我们海报生成系统中的一个子模块,希望更多猫友参与到我们的开发当中哦):大模型实战训练营_十二月的猫的博客-CSDN博客

2. LayoutPrompt介绍

总的来说,为了完成LayoutPrompt模型,我们需要完成的子模块有:

  • 数据预处理模块:该模块主要就是利用基础数据预处理方法对数据集中的所有数据样本进行预处理。
  • 动态样本选择模块:从训练集中检索最相关的样本,然后作为最直接的上下文(约束信息)送给大语言模型。
  • 布局序列化模块:用于将上面所选的样本布局转化为序列表述(因为大语言模型对序列化输入有更好的效果)。序列化数据就是类似 自然语言、代码等
  • 大语言模型模块:将序列化处理后的所有样本一起送给大语言模型,让大语言模型参考的情况下给出自己的答案。
  • 大语言模型解析模块:用于将大语言模型给出的布局结果解析为标准化的输出。
  • 布局排序模块(布局评价模块):评价大语言模型生成的布局的质量分数,并做一个排序。 

具体的模型图如下:

模型运行具体流程如下:

  1. 用户输入前导信息,例如画布大小,任务类型等,数据预处理模块预处理数据库(用户根据自己的任务可以选择数据库,如海报布局数据库、手机UI设计数据库)中的所有数据。
  2. 动态样本选择模块得到处理后的数据库数据,然后根据用户输入的前导信息选择合适的example样本。
  3. 将样本+前导信息+测试样本送给大语言模型。
  4. 由大语言模型生成最终的layout,送给Rank模块。
  5. Rank模块排序后分数最高的就是最终输出。

3. LayoutPrompt · 布局序列化模块

布局序列化模块:本质就是序列化+Prompt。两者核心都是固定

序列化:将输入输出按照固定序列格式调整。

        例如输出固定如下:

  • "标题 0 0.1 0.2 0.3 0.4 | 正文 1 0.5 0.6 0.7 0.8"
  • # < html >
    # < body >
    # < div
    # style = "..." > 标题_0 < / div >
    # < div
    # style = "..." > 正文_1 < / div >
    # < / body >
    # < / html 

Prompt:根据不同任务,输入需要不同Prompt,同时序列化格式。

        例如输入固定如下:

一句话来说,布局序列化模块准备的就是模型中的这一部分:

  • 前导部分(PREAMBLE):固定Prompt,用户输入画布大小高度等。
  • 输入限制(INPUT CONSTRAINT) :会有两种表示形式1.如上图的seq形式;2.html形式。
  • 输出布局(OUTPUT LAYOUT):得到布局的坐标data后(由其他模块负责),序列化输出上图结果。

从代码角度来说分为三个部分:

  • 固定化Prompt。
  • 父类序列化模块(固定输出序列结构,输入序列留接口给子类实现)
  • 子类序列化模块(一个子类对应一个具体的任务,不同任务输入结构不一样)

从任务角度存在以下七种:

  • 元素类型任务(限制layout中的元素)
  • 元素类型,元素尺寸限制任务
  • 元素类型,元素之间位置关系
  • 元素补全(根据部分已知布局元素,生成完整布局结构)
  • 元素尺寸修正(给出类型和尺寸,模型自己修正尺寸)
  • 防止遮挡的布局生成
  • 文本描述下的布局生成

3.1 固定化Prompt

PREAMBLE = ("Please generate a layout based on the given information. ""You need to ensure that the generated layout looks realistic, with elements well aligned and avoiding unnecessary overlap.\n""Task Description: {}\n""Layout Domain: {} layout\n""Canvas Size: canvas width is {}px, canvas height is {}px"
)
# html的头部
HTML_PREFIX = """<html>
<body>
<div class="canvas" style="left: 0px; top: 0px; width: {}px; height: {}px"></div>
"""
# html的结尾
HTML_SUFFIX = """</body>
</html>"""# html的body
HTML_TEMPLATE = """<div class="{}" style="left: {}px; top: {}px; width: {}px; height: {}px"></div>
"""HTML_TEMPLATE_WITH_INDEX = """<div class="{}" style="index: {}; left: {}px; top: {}px; width: {}px; height: {}px"></div>
"""
  • 本部分主要是为了固定输入输出的一些序列化格式,同时固定前导部分
  • 用户在这里通过前端输入自己想要的画布大小高度等信息。

3.2 父类序列化模块

# 序列化的父类,后面有具体任务不同的序列化
# 所谓序列化本质就是固定输入的prompt形式,同时固定输出的一个形式。
class Serializer:def __init__(self,input_format: str,output_format: str,index2label: dict,canvas_width: int,canvas_height: int,add_index_token: bool = True,add_sep_token: bool = True,sep_token: str = "|",add_unk_token: bool = False,unk_token: str = "<unk>",):self.input_format = input_formatself.output_format = output_formatself.index2label = index2labelself.canvas_width = canvas_widthself.canvas_height = canvas_heightself.add_index_token = add_index_tokenself.add_sep_token = add_sep_tokenself.sep_token = sep_tokenself.add_unk_token = add_unk_tokenself.unk_token = unk_tokendef build_input(self, data):if self.input_format == "seq":return self._build_seq_input(data)elif self.input_format == "html":return self._build_html_input(data)else:raise ValueError(f"Unsupported input format: {self.input_format}")# check value is not nulldef _build_seq_input(self, data):raise NotImplementedErrordef _build_html_input(self, data):raise NotImplementedErrordef build_output(self, data, label_key="labels", bbox_key="discrete_gold_bboxes"):if self.output_format == "seq":return self._build_seq_output(data, label_key, bbox_key)elif self.output_format == "html":return self._build_html_output(data, label_key, bbox_key)# # 输入数据结构示例# data = {#     "labels": [0, 1],  # 标签索引#     "discrete_gold_bboxes": [  # 坐标列表(假设已离散化)#         [0.1, 0.2, 0.3, 0.4],#         [0.5, 0.6, 0.7, 0.8]#     ]# }# "标题 0 0.1 0.2 0.3 0.4 | 正文 1 0.5 0.6 0.7 0.8"def _build_seq_output(self, data, label_key, bbox_key):# 在字典中存储的标签信息,和边框信息(不是存储具体字,而是存储信息)labels = data[label_key]bboxes = data[bbox_key]tokens = []for idx in range(len(labels)):label = self.index2label[int(labels[idx])]bbox = bboxes[idx].tolist()tokens.append(label)if self.add_index_token:tokens.append(str(idx))tokens.extend(map(str, bbox)) # extend一次性添加很多值,append一次添加一个值。map(function,list):把function作用在list上。str():将其他类型转为str类型。if self.add_sep_token and idx < len(labels) - 1:tokens.append(self.sep_token) # 添加隔离符号return " ".join(tokens)# # 输出结构# < html ># < body ># < div# style = "..." > 标题_0 < / div ># < div# style = "..." > 正文_1 < / div ># < / body ># < / html >def _build_html_output(self, data, label_key, bbox_key):labels = data[label_key]bboxes = data[bbox_key]htmls = [HTML_PREFIX.format(self.canvas_width, self.canvas_height)]  # 使用 HTML_PREFIX 作为 HTML 页面的开头,并将画布宽度和高度传递进去。_TEMPLATE = HTML_TEMPLATE_WITH_INDEX if self.add_index_token else HTML_TEMPLATE # 根据 add_index_token 决定使用哪种模板:带索引的模板或普通模板。for idx in range(len(labels)):label = self.index2label[int(labels[idx])]bbox = bboxes[idx].tolist()element = [label]if self.add_index_token:element.append(str(idx))element.extend(map(str, bbox))htmls.append(_TEMPLATE.format(*element))htmls.append(HTML_SUFFIX)return "".join(htmls)
  • 主要定义两种输出方式的序列化。第一种是以seq的形式输出;第二种是以html的形式输出。
  • 输入形式的序列化(prompt+序列化)仅仅定义了模板交给子类(具体任务)来实现。
  • expand和append都是列表后追加,但expand一次追加很多个元素,append一次加一个。
  • map(function,list):将function作用在所有的list元素上。
  • 作用:1. 得到其他模块给的Layout坐标data后,将其转化为html或seq的固定序列化格式输出。2.作为父类将输入序列化交给子类实现。

3.3 子类序列化模块

        前面也说了,子类序列化模块需要根据不同的任务要求给出不同的prompt以及序列化输入。因此有多少个任务就会有多少个子类序列化模块。在这里,猫猫仅仅展示两个模块的代码,完整的代码等专栏更新结束后,会同步放在Gitee以及CSDN账号下。

任务一:限制元素类型的布局生成

class GenTypeSerializer(Serializer):task_type = "generation conditioned on given element types"constraint_type = ["Element Type Constraint: "]HTML_TEMPLATE_WITHOUT_ANK = '<div class="{}"></div>\n'HTML_TEMPLATE_WITHOUT_ANK_WITH_INDEX = '<div class="{}" style="index: {}"></div>\n'def _build_seq_input(self, data):labels = data["labels"]tokens = []for idx in range(len(labels)):label = self.index2label[int(labels[idx])]tokens.append(label)if self.add_index_token:tokens.append(str(idx))if self.add_unk_token:tokens += [self.unk_token] * 4if self.add_sep_token and idx < len(labels) - 1:tokens.append(self.sep_token)return " ".join(tokens)def _build_html_input(self, data):labels = data["labels"]htmls = [HTML_PREFIX.format(self.canvas_width, self.canvas_height)]if self.add_index_token and self.add_unk_token:_TEMPLATE = HTML_TEMPLATE_WITH_INDEXelif self.add_index_token and not self.add_unk_token:_TEMPLATE = self.HTML_TEMPLATE_WITHOUT_ANK_WITH_INDEXelif not self.add_index_token and self.add_unk_token:_TEMPLATE = HTML_TEMPLATEelse:_TEMPLATE = self.HTML_TEMPLATE_WITHOUT_ANKfor idx in range(len(labels)):label = self.index2label[int(labels[idx])]element = [label]if self.add_index_token:element.append(str(idx))if self.add_unk_token:element += [self.unk_token] * 4htmls.append(_TEMPLATE.format(*element))htmls.append(HTML_SUFFIX)return "".join(htmls)def build_input(self, data):return self.constraint_type[0] + super().build_input(data)

任务二:限制元素类型,以及元素关系的布局生成

class GenRelationSerializer(Serializer):task_type = ("generation conditioned on given element relationships\n""'A left B' means that the center coordinate of A is to the left of the center coordinate of B. ""'A right B' means that the center coordinate of A is to the right of the center coordinate of B. ""'A top B' means that the center coordinate of A is above the center coordinate of B. ""'A bottom B' means that the center coordinate of A is below the center coordinate of B. ""'A center B' means that the center coordinate of A and the center coordinate of B are very close. ""'A smaller B' means that the area of A is smaller than the ares of B. ""'A larger B' means that the area of A is larger than the ares of B. ""'A equal B' means that the area of A and the ares of B are very close. ""Here, center coordinate = (left + width / 2, top + height / 2), ""area = width * height")constraint_type = ["Element Type Constraint: ", "Element Relationship Constraint: "]HTML_TEMPLATE_WITHOUT_ANK = '<div class="{}"></div>\n'HTML_TEMPLATE_WITHOUT_ANK_WITH_INDEX = '<div class="{}" style="index: {}"></div>\n'def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.index2type = RelationTypes.index2type()def _build_seq_input(self, data):labels = data["labels"]relations = data["relations"]tokens = []for idx in range(len(labels)):label = self.index2label[int(labels[idx])]tokens.append(label)if self.add_index_token:tokens.append(str(idx))if self.add_unk_token:tokens += [self.unk_token] * 4if self.add_sep_token and idx < len(labels) - 1:tokens.append(self.sep_token)type_cons = " ".join(tokens)if len(relations) == 0:return self.constraint_type[0] + type_constokens = []for idx in range(len(relations)):label_i = relations[idx][2]index_i = relations[idx][3]if label_i != 0:tokens.append("{} {}".format(self.index2label[int(label_i)], index_i))else:tokens.append("canvas")tokens.append(self.index2type[int(relations[idx][4])])label_j = relations[idx][0]index_j = relations[idx][1]if label_j != 0:tokens.append("{} {}".format(self.index2label[int(label_j)], index_j))else:tokens.append("canvas")if self.add_sep_token and idx < len(relations) - 1:tokens.append(self.sep_token)relation_cons = " ".join(tokens)return (self.constraint_type[0]+ type_cons+ "\n"+ self.constraint_type[1]+ relation_cons)def _build_html_input(self, data):labels = data["labels"]relations = data["relations"]htmls = [HTML_PREFIX.format(self.canvas_width, self.canvas_height)]if self.add_index_token and self.add_unk_token:_TEMPLATE = HTML_TEMPLATE_WITH_INDEXelif self.add_index_token and not self.add_unk_token:_TEMPLATE = self.HTML_TEMPLATE_WITHOUT_ANK_WITH_INDEXelif not self.add_index_token and self.add_unk_token:_TEMPLATE = HTML_TEMPLATEelse:_TEMPLATE = self.HTML_TEMPLATE_WITHOUT_ANKfor idx in range(len(labels)):label = self.index2label[int(labels[idx])]element = [label]if self.add_index_token:element.append(str(idx))if self.add_unk_token:element += [self.unk_token] * 4htmls.append(_TEMPLATE.format(*element))htmls.append(HTML_SUFFIX)type_cons = "".join(htmls)if len(relations) == 0:return self.constraint_type[0] + type_constokens = []for idx in range(len(relations)):label_i = relations[idx][2]index_i = relations[idx][3]if label_i != 0:tokens.append("{} {}".format(self.index2label[int(label_i)], index_i))else:tokens.append("canvas")tokens.append(self.index2type[int(relations[idx][4])])label_j = relations[idx][0]index_j = relations[idx][1]if label_j != 0:tokens.append("{} {}".format(self.index2label[int(label_j)], index_j))else:tokens.append("canvas")if self.add_sep_token and idx < len(relations) - 1:tokens.append(self.sep_token)relation_cons = " ".join(tokens)return (self.constraint_type[0]+ type_cons+ "\n"+ self.constraint_type[1]+ relation_cons)
  • 针对此任务设计了具体的Prompt形式。
  • 输入数据序列化有两个部分:1、seq序列化;2、html序列化
  • seq序列化:用户输入限制后,需要结合Prompt序列化到INPUT_CONSTRAINT(
  • (注意:这个seq并不是完整的,仅仅是将用户的限制要求填入):
  • html序列化:根据用户输入限制生成对应的html格式(注意:这个html并不是完整的,仅仅是将用户的限制要求填入)
  • 作用:1.将用户输入的限制转化为某种序列化(seq序列化 或 html序列化)。2.结合固定Prompt包装成完整的INPUT CONSTRAINT

4. 总结

本篇文章带大家深入了解了PosterGenius项目的Layout生成部分的第一篇,后续将更新Layout系列的第二篇。欢迎大家继续支持猫猫呀!!

 【如果想学习更多深度学习文章,可以订阅一下热门专栏】

  • 《PyTorch科研加速指南:即插即用式模块开发》_十二月的猫的博客-CSDN博客
  • 《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客
  • 《AI认知筑基三十讲》_十二月的猫的博客-CSDN博客

如果想要学习更多pyTorch/python编程的知识,大家可以点个关注并订阅,持续学习、天天进步你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

相关文章:

【深度学习的灵魂】图片布局生成模型LayoutPrompt(1)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目…...

BG开发者日志429:故事模式的思路

1、故事模式已有的一关试验关中&#xff0c;直接揭示了一些重要真相&#xff0c;白给了。 /原设计思路是玩家可以直接玩故事模式&#xff0c;很快就能通关本模式的所有关卡&#xff0c;知道所有真相。 /原表现方式是步行模拟&#xff0c;到地点看对话。 &#xff08;现在看来…...

Linux批量管理:Ansible自动化运维指南

引言 在服务器规模化的时代&#xff0c;Ansible就像一位"自动化指挥官"&#x1f396;️&#xff0c;让你轻松管理成百上千台Linux主机&#xff01;本文将带你全面掌握Ansible的核心用法&#xff0c;从基础架构到高级Playbook&#xff0c;从主机管理到应用部署。无论…...

【AI提示词】第一性原理

提示说明 擅长运用第一性原理思维进行深度问题分析与创新解决方案构建的专家。 提示词 # Role: 第一性原理思考导师## Profile - language: 中文 - description: 擅长运用第一性原理思维进行深度问题分析与创新解决方案构建的专家 - background: 具备理论物理学与哲学复合背…...

【LeetCode】螺旋矩阵

题目 题目链接 请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素&#xff0c;示例如下&#xff1a; 思路 整体思路为模拟。具体地&#xff0c;可以采用“减而治之”的思想&#xff0c;将整个遍历过程拆分为一次次对每一行和每一列的遍历&#xff0c;每次只考虑一行/…...

给 BBRv2/3 火上浇油的 drain-to-target

最近彻底跟 BBR 杠上了&#xff0c;再读一篇落实性论文 Promises and Potential of BBRv3&#xff0c;结论依然是 BBRv3 并未如声称的那般优化公平性&#xff0c;反而可能更糟糕&#xff0c;不得不说又是任重而道远。 说一个我遇到的&#xff0c;讲理之外顺带吐槽。 BBRv1 在…...

后端id类型为long类型时,返回给前端浏览器四舍五入,导致id精度缺失问题

背景 今天在代码里&#xff0c;掉了别人写的接口&#xff0c;有个id的字段是long类型的&#xff0c;我这边加点参数返回给前端&#xff0c;然后前端根据id修改&#xff0c;结果修改的数据记录有&#xff0c;但是没起作用&#xff0c;后来发现根据他传给我的id在后台数据库查不…...

《云原生》核心内容梳理和分阶段学习计划

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息文章目录 云原生核心内容梳理和分阶段学习计划一、云原生核心技术栈(2025年重点方向)二、分阶段学习计划(6-12个月系统性进阶)**阶段1:基础入…...

跟我学C++中级篇——控制死锁

一、同步和死锁 在前面学习多线程和网络编程时&#xff0c;都对线程中数据的同步和数据结构多线程访问的安全问题进行了分析和说明。其实&#xff0c;多线程编程之所以难&#xff0c;难点之一就在这里&#xff0c;数据同步意味着效率和安全的平衡&#xff0c;而这里的安全有一…...

「Mac畅玩AIGC与多模态08」开发篇04 - 基于 OpenAPI Schema 开发专用 Agent 插件

一、概述 本篇介绍如何在 macOS 环境下,通过编写 OpenAPI Schema,开发自定义的专用插件,让智能体可以调用外部 API,扩展功能至任意在线服务。实践内容基于 Dify 平台,适配 macOS 开发环境。 二、环境准备 1. 确认本地开发环境 macOS 系统Dify 平台已完成部署并可访问本…...

“兴火·燎原”总冠军诞生,云宏信息《金融高算力轻量云平台》登顶

“兴火燎原”创新马拉松公开赛2024年度全国总决赛于4月18日在福州举办&#xff0c;云宏科技股份有限公司&#xff08;以下简称&#xff1a;云宏&#xff09;的《金融高算力轻量云平台》项目脱颖而出&#xff0c;夺得全国总冠军。 作为数字中国创新大赛金融领域的核心赛事&…...

MySQL 索引与事务详解

MySQL 索引与事务详解 一、索引&#xff08;Index&#xff09; 1. 索引的作用与原理 索引是数据库的"目录"&#xff0c;能够大幅提高查询速度&#xff0c;但会增加写入开销。MySQL 使用 BTree 作为主要索引结构。 2. 索引类型 (1) 普通索引 CREATE INDEX idx_n…...

洛谷题解 | CF111C Petya and Spiders

目录 题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 输入输出样例 #2输入 #2输出 #2 说明/提示题目简化题目思路AC 代码 题目描述 Little Petya loves training spiders. Petya has a board $ nm $ in size. Each cell of the board initially has a spider sitting…...

【深度对比】Google Play与IOS 马甲包处理差异分析

在移动应用发布与推广过程中&#xff0c;马甲包&#xff08;Cloned App / Alternate Version&#xff09; 曾被广泛用于流量测试、风险隔离、多品牌运营等场景中。随着 Google Play 与 Apple App Store 审核政策不断收紧&#xff0c;开发者们越来越关注两个平台对“马甲包”的态…...

【C++】C++11新特性(二)

目录 完美转发 引用折叠&#xff1a; lambda表达式 完美转发 引用折叠&#xff1a; 引用折叠是 C的类型系统规则&#xff0c;用于处理“引用的引用”&#xff08;如 T& &&#xff09;。 在推导过程中&#xff0c;必须折叠成有效的单一引用类型。直接声明引用的引用…...

高等数学-第七版-下册 选做记录 习题9-4

1. 3. 4. 8....

特殊权限管理

特殊权限的类型 SUID&#xff08;Set User ID&#xff09;&#xff1a;当一个可执行文件设置了 SUID 权限后&#xff0c;在执行该文件时&#xff0c;进程会以文件所有者的身份运行&#xff0c;而不是以执行用户的身份。例如&#xff0c;/usr/bin/passwd文件用于修改用户密码&a…...

最新的30个Android Kotlin面试题

以下是2025年最新的30个Android Kotlin面试题及其核心解析&#xff0c;综合了协程、密封类、高阶函数、扩展函数等高频考点&#xff0c;并附有相关引用来源&#xff1a; 一、协程与并发编程 协程与线程的核心区别是什么&#xff1f; 协程是轻量级线程&#xff0c;通过挂起而非阻…...

牛客周赛 Round 91

赛时成绩如下&#xff1a; A. while 题目描述 小歪找到了一个由五个字符构成的字符串&#xff0c;它一次可以选择任意一个字符&#xff0c;将其修改为另一个字符&#xff0c;他想要知道&#xff0c;将这个字符串修改为 "while" 需要的最少操作次数。 解题思路&#x…...

Kafka 的服务端的物理存储架构是什么?零拷贝,mmap,sendfile、DMA gather又是什么?

Kafka 服务端的物理存储架构 Kafka 的物理存储架构设计旨在支持高吞吐、低延迟的数据处理&#xff0c;其核心特点包括&#xff1a; 1. 分区与日志段 主题&#xff08;Topic&#xff09;与分区&#xff08;Partition&#xff09;&#xff1a; Kafka 将每个主题划分为多个分区&…...

1.7 点云数据获取方式——视觉SLAM

图1-7-1 Visual SLAM生成的点...

双向流热固耦合的收敛

1 收敛性 如果想把流固耦合计算过程的收敛性弄清楚&#xff0c;必须理解流固耦合的求解过程和对流场与固体场的定义设置&#xff1a; -这个与其他的真实物理场可能有所不同 -例如你的初始条件可能是不同的当遇到收敛困难时&#xff0c;需要看一下的求解过程用户使用监测点和…...

C++之类和对象:构造函数,析构函数,拷贝构造,赋值运算符重载

前提&#xff1a;如果一个类是空类&#xff0c;C中空类中真的什么都没有吗&#xff0c;不是的&#xff0c;编译器会自动生成6个默认成员函数。默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成的成员函数称为默认成员函数。 默认成员函数&#xff1a;构造函…...

Vue2 相关知识点整理

一、Vue2 核心机制 1. Vue2 的响应式原理是什么&#xff1f; 答案&#xff1a; Vue2 通过 Object.defineProperty 给对象的每个属性添加 getter 和 setter&#xff0c;当数据被访问或修改时&#xff0c;自动触发视图更新。通俗解释&#xff1a; 就像给每个数据绑了一个“监控…...

CSS:编写位置分类及优先级

文章目录 一、行内样式二、内部样式三、外部样式&#xff08;推荐&#xff09;四、优先级五、编码风格 一、行内样式 最好不这样写 二、内部样式 可以使用 三、外部样式&#xff08;推荐&#xff09; 四、优先级 行内样式 > 内部样式 外部样式 五、编码风格...

Tauri 跨平台开发指南及实战:用前端技术征服桌面应用(合集-万字长文)

厌倦了笨重的Electron应用&#xff1f;想要构建体积小、性能高、安全可靠的跨平台桌面应用&#xff1f;Tauri将是你的不二之选&#xff01;本教程带你从入门到精通&#xff0c;掌握这个下一代桌面应用开发框架&#xff0c;并通过实战APK分析工具项目&#xff0c;将理论知识转化…...

深入解析 Linux 进程池:原理、实现与高并发优化

引言 当你的服务器需要同时处理 10,000 个客户端请求时&#xff0c;传统的"来一个请求创建一个进程"模式会导致严重的性能瓶颈。此时&#xff0c;进程池&#xff08;Process Pool&#xff09; 便成为关键解决方案。它像一支训练有素的特种部队&#xff0c;通过预先创…...

[Python]非零基础的快速上手

从js转的python&#xff0c;没有从初学者阶段开始&#xff0c;主打一个快速上手能写再说. pycharm:一种编辑器 数据类型 基本数据类型:整型(整数)、浮点型、字符型、布尔型 复杂数据类型:列表(数组)、集合区{1,2,3}、元组(1,3.4)字典{n’:2,b:1} 模板字符串 输出模板字符串…...

《算法笔记》10.5小节——图算法专题->最小生成树 问题 E: Jungle Roads

题目描述 The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago. But the jungle overtakes roads relentlessly, so the large road network is too expensive to mai…...

数据中心网络架构:高效规划与自动化设计实践

在数据中心网络架构规划设计中&#xff0c;面临如下难点&#xff1a; 设备数量庞大&#xff1a; 服务器、交换机等设备数量多&#xff0c;如何合理规划机柜布局和空间分配&#xff0c;避免资源浪费或密度超标&#xff0c;成为设计难点。 线缆设计复杂&#xff1a; 海量线缆…...

Mysql存储引擎、锁机制

Mysql存储引擎 InnoDB​&#xff08;MySQL 5.5 及以后版本中的默认存储引擎&#xff09; ​​事务支持​​&#xff1a;支持 ​​ACID 事务​​&#xff0c;适合需要高可靠性的场景&#xff08;如支付、订单&#xff09;。 ​​锁机制​​&#xff1a;默认使用 ​​行级锁​​…...

UVA1537 Picnic Planning

目录 题目算法标签: 最小生成树, k r u s k a l kruskal kruskal重构树, 树形 d p dp dp思路重构树代码 题目 UVA1537 Picnic Planning 算法标签: 最小生成树, k r u s k a l kruskal kruskal重构树, 树形 d p dp dp 思路 将 1 1 1号点设置为终点, 然后执行重构树计算度数…...

通过AWS Console连接服务器,简化运维过程

简单通过AWS Console连接您的Linux服务器 本文作者: 封磊 Eclicktech SA | AWS Community Builder DevTool | AWS UGL | 亚马逊云科技云博主 阿里云&InfoQ&CSDN签约作者 文章目录 简单通过AWS Console连接您的Linux服务器本文作者: 封磊Eclicktech SA | AWS Community …...

公交实时查询小程序功能点开发

线路查询&#xff1a;用户可输入公交线路号码&#xff0c;小程序实时显示该线路车辆位置与发车信息&#xff0c;能一键切换行驶方向&#xff0c;助用户依实时情况选合适候车站点。站点查询&#xff1a;输入车站信息&#xff0c;小程序呈现经过该站所有公交线路及公交信息&#…...

nginx配置集群服务器中的tcp负载均衡器

文章目录 前言1. Ubuntu下nginx安装2. nginx的tcp负载配置 前言 假设一台机器支持两万的并发量&#xff0c;现在我们需要保证八万的并发量。首先想到的是升级服务器的配置&#xff0c;比如提高 CPU 执行频率&#xff0c;加大内存等提高机器的物理性能来解决此问题。但是单台机…...

Qt/C++开发监控GB28181系统/获取设备信息/设备配置参数/通道信息/设备状态

一、前言 设备注册成功后&#xff0c;接下来要做的就是获取设备的信息&#xff0c;尤其是通道信息&#xff0c;根据国标协议&#xff0c;永远只有两个层级&#xff0c;一个是设备&#xff0c;然后就是设备下面多个通道&#xff0c;设备编码在整个系统中唯一&#xff0c;通道编…...

Linux系统基础:基础指令简介(网络概念部分)

简介&#xff1a;Linux 是一种开源的类 Unix 操作系统内核&#xff0c;由 Linus Torvalds 于 1991 年首次发布。经过多年发展&#xff0c;它已成为服务器、嵌入式设备和个人计算机领域的重要操作系统。 网络基础概念 初始协议 简单来说&#xff0c;协议是一种约定&#xff0…...

labview项目文件架构

为了使 LabVIEW 项目更具可扩展性和易于维护&#xff0c;合理规划和设计项目文件结构是非常重要的。 以下是一些基于行业经验和最佳实践的建议&#xff1a; 1. ### 文件夹层次划分 将不同的功能模块分开存储在一个清晰的分层目录结构中是一个常见的做法。通常情况下&#xff…...

nuxt项目中引入并配置 iview

安装iview npm install iview --save注&#xff1a;想要加入其它的配置&#xff0c;可以在 nuxt.config.js 的 plugins 配置项中加入&#xff0c;同时在 plugins 文件夹下加入引入逻辑。 在nuxt.config.js文件中写&#xff1a; {src: ~plugins/iview, ssr: true}同时新建 plugi…...

Origin绘图操作:点线图符号显示不全解决方法

一、问题说明 在用origin绘制点线图时&#xff0c;图表刻度线处的点符号显示不完全&#xff0c;如图所示&#xff1a; 二、解决方法 方法一&#xff1a;调整坐标轴刻度&#xff0c;使其能够显示全部数据点。 方法二&#xff1a;有时为了图表美观&#xff0c;则不对坐标轴刻…...

【进程与线程】

文章目录 一、实验目的二、实验内容与设计思想实验内容设计思路 三、实验代码实现四、总结 一、实验目的 1.深刻理解进程和线程的概念&#xff0c;掌握线程与进程在组成成分上的差别&#xff1b; 2.进一步认识并发执行的实质。 二、实验内容与设计思想 实验内容 用pipe()创…...

项目实战-飞机大战【补档】

和项目实战-贪吃蛇大作战【补档】-CSDN博客一样&#xff0c;这也是一个我在大一和网友完成的项目的补档。Dont waste your youth—time flies. 目录 1.工具&环境 2.项目简介 3.需求文档 4.流程图 5.产品原型图 6.可行性分析 7.源代码 8.实战效果 ​编辑 9.心得…...

算法基础学习|02归并排序——分治

一、思路 &#xff08;1&#xff09;确定分界点&#xff1a;mid(lr)/2 ——这里和快排不同 &#xff08;2&#xff09;递归排序&#xff08;left right&#xff09; &#xff08;3&#xff09;归并——合二为一 时间复杂度nlogn 二、题目练习 三、模板 归并排序 …...

测试基础笔记第十六天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、UI自动化介绍1.认识UI自动化测试2.实施UI自动化测试前置条件3.UI自动化测试执行时机4.UI自动化测试核心作用和劣势 二、认识Web自动化测试工具-Selenium021.Sel…...

Android项目中使用ComposeUI

首先确认项目环境kotlin版本&#xff0c;以下是本机的版本 使用命令 ./gradlew -version 这里kotlin 版本是1.5.31 然后查看build.gradle sdk版本 这里是32 属于低版本 然后需要添加以下配置 buildFeatures {compose true}composeOptions {kotlinCompilerExtensionVersio…...

springboot中有关数据库信息转换的处理

现代项目一般都是前后端分离的&#xff0c;前端只负责展示数据&#xff0c;不负责对数据处理&#xff0c;所以所有数据处理工作都由后端进行 比如在仿京东中的status&#xff0c;审核信息展示&#xff0c;数据库中是以0/1显示&#xff0c;但是前端需要以"审核/未审核&quo…...

HHsuite同源序列搜索数据库构建

HHsuite 可用的数据库格式简介 HHsuite 是用于蛋白质序列比对和同源性检测的工具套件,它使用特定的数据库格式以实现高效的数据存储和快速的检索。HHsuite 常用的数据库格式主要基于 FFINDEX(Flat-File Index),这是一种简单而高效的文件索引系统,它将数据文件(如蛋白质序…...

大模型推理:Qwen3 32B vLLM Docker本地部署

Qwen3基础知识 此次Qwen3开源8个模型&#xff08;MOE架构&#xff1a;Qwen3-235B-A22B、Qwen3-30B-A3B&#xff0c;Dense架构&#xff1a;Qwen3 0.6B/1.7B/4B/8B/14B/32B&#xff09;&#xff0c;新版本的Qwen3特性包括&#xff1a; 支持混合思维模式&#xff0c;即推理/非推…...

第十六届蓝桥杯 2025 C/C++B组 第二轮省赛 全部题解(未完结)

目录 前言&#xff1a; 试题A&#xff1a;密密摆放 试题B&#xff1a;脉冲强度之和 试题C&#xff1a;25之和 试题D&#xff1a;旗帜 试题H&#xff1a;破解信息 前言&#xff1a; 这是我后续刷到的第二轮省赛的题目&#xff0c;我自己也做了一下&#xff0c;和第一轮省赛…...

域名转移:什么是转移码/EPP码/授权码?

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…...