DeTikZify:基于多模态大模型的草图转TikZ代码工具详解

news2026/5/6 5:43:59
1. 项目概述从草图到矢量图形的智能转换在科研绘图和学术写作中我们常常面临一个经典困境脑海中的设计草图或手边的参考图如何快速、精准地转化为高质量的矢量图形以便在LaTeX文档中直接使用传统流程要么依赖复杂的专业绘图软件要么需要手动编写冗长且易错的TikZ代码这个过程既耗时又容易出错尤其对于非计算机背景的研究者而言门槛颇高。DeTikZify的出现正是为了解决这个痛点。它是一个基于多模态大语言模型的开源项目核心功能是将手绘草图或现有的位图科学图表自动转换为语义保持的TikZ图形程序。简单来说你给它一张图无论是手绘的电路图、函数曲线草图还是从论文PDF里截取的图表它就能生成对应的、可直接编译的LaTeX TikZ代码。这不仅极大地提升了绘图效率更重要的是它生成的矢量图形是“活的”代码你可以无限次地编辑、缩放、修改样式而不会像位图那样失真。对于需要频繁迭代图表、或希望图表风格与论文整体LaTeX排版完美统一的研究者、工程师和学生来说这无疑是一个革命性的工具。2. 核心设计思路与技术架构解析2.1 为什么选择TikZ作为输出目标在深入DeTikZify内部之前首先要理解它为什么执着于生成TikZ代码而不是SVG或PDF。这背后有几个关键考量学术界的“事实标准”在数学、物理、计算机科学等领域的顶级会议和期刊中LaTeX是主流的排版工具。TikZ作为LaTeX生态中最强大、最灵活的绘图包能够无缝集成确保图表与文档的字体、公式、引用风格完全一致。生成TikZ代码意味着输出结果能直接嵌入到研究者的工作流中无需格式转换。语义的精确表达TikZ是一种声明式的图形描述语言。一个简单的圆在TikZ中可能是\draw (0,0) circle (1cm);。这行代码不仅定义了图形还隐含了“在坐标(0,0)处画一个半径为1cm的圆”的语义。这种代码形式比SVG的XML路径或PDF的绘制指令更接近人类对图形结构的抽象理解也更容易被大语言模型学习和生成。无限的可编程性与复用性TikZ支持定义样式、函数和循环可以参数化地生成复杂图形。DeTikZify生成的代码可以作为更复杂绘图的基础模块被研究者进一步定制和扩展。因此项目的目标并非简单的“图像转矢量”而是**“视觉理解并代码化”**这比单纯的轮廓矢量化要复杂得多也更有价值。2.2 模型选型从LLaVA到IDEFICS3的演进DeTikZify的模型架构并非从零构建而是站在了巨人肩膀上并根据图形生成的特定任务进行了深度改造。DeTikZify v1 架构早期版本基于LLaVA。其核心是一个“视觉编码器-语言模型”的架构。视觉编码器如CLIP-ViT负责将输入图像编码成一系列视觉特征token。这些视觉token与一个经过特殊设计的文本提示例如“将以下图像转换为TikZ代码”一起输入到一个预训练好的大型语言模型如LLaMA中。LLM的任务是根据视觉上下文自回归地生成接下来的TikZ代码token。这种架构简单有效但存在局限性LLM最初是为纯文本训练的对密集的视觉特征对齐不够好在生成长序列、结构复杂的TikZ代码时容易在细节上出错或失去整体结构一致性。DeTikZify v2 架构的重大升级v2版本转向了基于IDEFICS 3的架构。IDEFICS 3本身就是一个为多模态任务设计的模型它在预训练阶段就深度融合了图像和文本信息。这对于DeTikZify来说是一个质的飞跃更好的多模态理解IDEFICS 3的视觉编码器与语言模型在预训练时就是协同优化的因此对图像中物体的空间关系、层次结构有更强的理解能力。这对于解析图表中的图例、坐标轴、数据点关系至关重要。更强大的代码生成能力基于Llama 3的IDEFICS 3拥有更强的推理和长序列生成能力。TikZ代码往往很长且具有严格的嵌套结构如\begin{scope}...\end{scope}v2模型在这方面表现更稳定。训练效率基于一个已经理解多模态的模型进行微调比从头对齐一个纯文本LLM要高效得多需要的指令微调数据也更少。TikZero的文本引导创新这是项目另一个亮点。单纯的“图生代码”有时不够用户可能想生成一个“带有两个隐藏层的多层感知机示意图”。TikZero通过在DeTikZify v2模型上插入适配器Adapter实现了零样本的文本条件控制。你可以只输入文字描述模型就能生成对应的TikZ图形。其原理是适配器学习将文本描述映射到模型内部的多模态表示空间中引导模型生成与文本语义匹配的视觉结构。而TikZero则进行了端到端的进一步微调效果更佳。实操心得模型选择指南对于大多数用户DeTikZify v2.5 (8B)是当前的最佳选择它在v2的基础上通过自反馈强化学习进一步优化了代码质量。如果你的任务是“根据文字描述生成图表”则应选择TikZero (10B)。如果计算资源有限但想尝试文本引导功能可以使用TikZero适配器 DeTikZify v2 (8B)的组合。对于简单的草图转换较小的1B模型在Colab免费版上也能跑但生成复杂图形的能力有限。2.3 推理引擎蒙特卡洛树搜索的妙用生成代码只是第一步生成的代码是否能正确编译、是否忠实于原图是关键挑战。DeTikZify没有采用常见的“生成-测试”简单循环而是引入了一个基于蒙特卡洛树搜索MCTS的推理算法这是项目在工程上的核心创新。传统方法的弊端让模型生成一段代码然后调用LaTeX编译器去编译。如果编译失败或结果不对就调整提示词让模型重生成。这种方法效率低下且无法利用上一次失败的教训。MCTS如何工作你可以把生成TikZ代码想象成在下棋。每一步模型需要决定下一个token是什么例如是写\draw还是\node。MCTS为这个过程建立了一棵搜索树选择从根节点当前已生成的部分代码开始根据一个权衡“探索”和“利用”的公式如UCT算法选择一条最有希望的路径即接下来生成哪些token序列。扩展与仿真当走到一个未完全评估的节点时让模型“模拟”完成剩下的代码生成得到一段完整的TikZ程序。编译与评估调用后台的LaTeX引擎编译这段代码将其渲染成图片。然后使用一个评估函数将渲染结果与原始输入图像进行对比。这个评估函数可能结合了像素级的相似度如SSIM、结构相似性以及编译过程本身是否成功。得到一个反馈分数。回溯更新将这个分数沿着搜索路径回溯更新路径上所有节点的统计信息如访问次数、平均得分。通过反复迭代这个过程MCTS能够引导模型避开那些会导致编译错误或图形失真的“臭棋”最终找到一条能生成高质量、可编译代码的路径。这相当于给模型配备了一个“试错与反思”的机制显著提升了输出结果的可靠性和质量。注意事项MCTS的耗时与配置MCTS虽然强大但非常耗时因为它需要多次调用模型生成和LaTeX编译。在官方Web UI或代码中simulate函数通常可以设置一个超时时间如timeout600秒。对于快速原型直接用sample函数生成单次结果即可。对于追求最高质量的最终输出再开启MCTS进行迭代优化。同时确保你的系统安装了完整的TeX Live 2023因为MCTS会频繁调用pdflatex进行编译缺少任何宏包都可能导致搜索中断。3. 环境部署与核心工具链详解要让DeTikZify在本地跑起来需要搭建一个包含深度学习推理、LaTeX编译和图像处理的混合环境。下面我们拆解每一步。3.1 依赖安装超越pip install官方的安装命令pip install detikzify[legacy] githttps://github.com/potamides/DeTikZify只是安装了Python包本身。要让它真正工作必须准备好三大系统级依赖TeX Live 2023 (完整版)为什么必须是2023DeTikZify在训练和测试时使用了特定版本的TikZ宏包和字体。不同年份的TeX Live发行版在宏包版本和默认行为上可能有细微差别为保证编译结果的可复现性强烈建议使用指定的2023版。如何安装Linux (Ubuntu/Debian) 从TeX Live官网下载install-tl-unx.tar.gz使用脚本安装是最稳妥的方式。不推荐直接使用apt安装的texlive-full因为其版本可能不是精确的2023且包含的宏包集合可能有差异。macOS 推荐使用MacTeX 2023发行版它是一个完整的TeX Live 2023打包。Windows 使用TeX Live 2023的安装程序。验证安装安装后在终端运行pdflatex --version确认其基于TeX Live 2023。Ghostscript作用在将LaTeX生成的PDF文件转换为最终预览的位图如PNG时pdftoppm或pdf2image等库底层会调用Ghostscript。它负责PDF的解释和光栅化。安装通常可通过系统包管理器安装如apt install ghostscript,brew install ghostscript。Poppler作用提供pdftocairo、pdftoppm等命令行工具是另一个高效处理PDF特别是转换为图像的工具集。DeTikZify的代码可能依赖其中某个工具。安装同样通过包管理器如apt install poppler-utils,brew install poppler。避坑指南Docker是最佳选择如果你在配置上述系统依赖时遇到困难或者需要在不同机器间保持环境一致强烈推荐使用项目提供的Docker方案。通过docker run命令可以一键获取一个包含了所有依赖的、隔离的、可复现的运行环境彻底避免“在我机器上是好的”这类问题。这对于在服务器上部署或团队协作尤为重要。3.2 模型下载与加载策略安装好环境后运行代码的第一步是加载模型。这里有几个关键参数需要理解from detikzify.model import load from detikzify.infer import DetikzifyPipeline pipeline DetikzifyPipeline(*load( model_name_or_pathnllg/detikzify-v2.5-8b, device_mapauto, torch_dtypebfloat16, ))model_name_or_path可以是Hugging Face Hub上的模型ID如nllg/detikzify-v2.5-8b也可以是下载到本地的文件夹路径。首次运行时会从Hub下载模型速度取决于网络。对于8B参数模型下载量约16GB。device_mapauto这是Hugging Faceaccelerate库的功能。它会自动分析你的硬件CPU、GPU内存尝试将模型的不同层智能地分配到可用的设备上。例如如果GPU内存不够放下整个模型它会把一部分层留在CPU上在计算时再移动这对消费级显卡用户非常友好。torch_dtypebfloat16指定模型权重加载的数据类型。bfloat16是一种在深度学习中常用的半精度浮点数格式它能将GPU内存占用减半8B模型约需8GB显存同时相比float16有更好的数值稳定性。如果你的GPU不支持bfloat16如某些较老的卡可以尝试torch_dtypefloat16但需注意潜在的精度风险。显存估算与优化 一个8B参数的模型以bfloat16加载基础显存占用约为8 * 10^9 * 2 bytes 16 GB。但这只是模型权重。在推理时还需要为输入序列图像特征提示词、中间激活和输出序列分配显存。因此实际需要20-24GB的GPU显存才能流畅运行。如果显存不足可以尝试使用更小的模型如1B参数版本。启用CPU卸载更激进地使用device_map配合offload_folder参数将更多层卸载到CPU内存。使用量化如果模型提供了4-bit或8-bit的量化版本GGUF格式可以使用llama.cpp或bitsandbytes库加载能大幅降低显存需求但可能会轻微影响生成质量。3.3 Web UI与编程接口使用对比项目提供了两种主要的使用方式命令行Web界面和Python编程接口。Web UI (python -m detikzify.webui)优点交互式无需编写代码。提供图形化界面可以拖拽上传图片实时调整参数如MCTS超时时间、采样温度并排查看输入图、渲染结果和生成的TikZ代码。非常适合快速测试、演示和一次性转换任务。启动参数--light模式使用更轻量级的Gradio主题。--share可以生成一个临时公网链接用于分享。--model-path可以指定本地模型路径。适用场景个人探索、教学演示、处理零散的图片转换需求。Python 编程接口优点灵活、可编程、可集成。你可以将DeTikZify作为你自动化流水线的一部分。例如批量处理一个文件夹里的所有图表将生成的TikZ代码自动插入到你的LaTeX文档模板中或者根据特定规则对生成的代码进行后处理。核心类DetikzifyPipeline是主要的接口类。sample()方法用于单次生成simulate()方法用于启动MCTS优化。适用场景需要批量处理、集成到CI/CD流程、进行二次开发如训练自己的适配器、或构建更复杂应用如论文图表自动重绘工具的场景。4. 实战从一张草图到可编译的TikZ代码让我们通过一个完整的例子来看看如何利用DeTikZify解决一个实际问题。4.1 场景与输入准备假设你正在撰写一篇关于机器学习的论文需要绘制一个“卷积神经网络CNN特征提取示意图”。你手头只有一张在纸上画的简单草图或者从别人PPT里截的模糊图片。输入图像的要求格式支持常见的PNG、JPG等格式。Web UI也支持直接粘贴图片URL。内容尽量清晰。虽然模型有一定抗噪能力但清晰的线条、明确的文字标注会极大提升转换准确率。对于草图可以用手机扫描APP如Adobe Scan处理一下增强对比度去除阴影。复杂度对于v2.5 8B模型能够处理包含数十个基本图形元素圆形、矩形、箭头、文字的中等复杂度图表。过于密集的电路图或极其复杂的3D示意图可能会超出其能力。我们将使用项目README中提供的示例URL进行演示image https://w.wiki/A7Cc这是一张简单的网络结构图。4.2 单次生成与结果评估首先我们尝试最基本的单次生成from detikzify.model import load from detikzify.infer import DetikzifyPipeline import requests from PIL import Image from io import BytesIO # 1. 加载模型和管道 print(正在加载模型这可能需要几分钟...) pipeline DetikzifyPipeline(*load( model_name_or_pathnllg/detikzify-v2.5-8b, device_mapauto, torch_dtypebfloat16, )) print(模型加载完成。) # 2. 准备输入图像 image_url https://w.wiki/A7Cc response requests.get(image_url) input_image Image.open(BytesIO(response.content)) input_image.save(input_sketch.png) print(f已下载输入图像: input_sketch.png) # 3. 单次采样生成 print(开始生成Ti*k*Z代码...) fig pipeline.sample(imageimage_url) # 也可以直接传PIL.Image对象 print(代码生成完成。) # 4. 保存生成的代码 with open(generated_fig.tex, w) as f: f.write(fig.code) print(fTi*k*Z代码已保存至: generated_fig.tex) # 5. 尝试编译和渲染 if fig.is_rasterizable: print(正在编译Ti*k*Z代码并渲染为图片...) rendered_img fig.rasterize() rendered_img.save(rendered_output.png) print(f渲染结果已保存至: rendered_output.png) # 可以打开图片查看 # rendered_img.show() else: print(警告生成的代码可能无法编译。) # 可以查看编译错误信息 if fig.compilation_log: print(编译日志:, fig.compilation_log[-500:]) # 打印最后500字符关键步骤解析pipeline.sample(): 这是核心生成函数。内部流程是视觉编码器处理图像 - 与提示词拼接 - LLM自回归生成代码 - 返回一个Figure对象。fig.code: 属性存储生成的原始TikZ代码字符串。fig.is_rasterizable: 属性指示这段代码是否被尝试过编译且成功。fig.rasterize(): 方法内部调用pdflatex编译.tex文件生成PDF再调用pdftoppm或类似工具将PDF转换为PIL Image对象。这个过程可能会因为缺少LaTeX宏包而失败。fig.compilation_log: 属性存储了最近一次编译尝试的完整日志对于调试编译错误至关重要。首次运行可能遇到的问题LaTeX宏包缺失这是最常见的问题。生成的TikZ代码可能会使用\usetikzlibrary{arrows.meta, positioning, shapes.geometric}等命令。如果你的TeX Live安装不完整就会报错File pgflibraryarrows.meta.code.tex not found.。解决方案是使用tlmgr安装缺失的宏包tlmgr install pgf。字体缺失如果代码中指定了某种字体如\setmainfont{...}而你的系统中没有也会编译失败。可以考虑在生成前通过提示词约束模型使用更通用的字体或者在系统中安装相应字体包。4.3 使用MCTS进行迭代优化单次生成的结果可能不完美。这时可以启动MCTS进行迭代优化import time from operator import itemgetter print(启动MCTS优化将持续10分钟...) start_time time.time() timeout 600 # 10分钟 figs set() # simulate函数是一个生成器每次yield一个(分数, Figure)元组 for score, fig in pipeline.simulate(imageinput_image, timeouttimeout): figs.add((score, fig)) elapsed time.time() - start_time print(f[{elapsed:.1f}s] 找到新候选当前分数: {score:.4f}, 可编译: {fig.is_rasterizable}) print(fMCTS结束共探索了 {len(figs)} 个候选程序。) # 找出分数最高的可编译程序 viable_figs [(s, f) for s, f in figs if f.is_rasterizable] if viable_figs: best_score, best_fig sorted(viable_figs, keyitemgetter(0))[-1] print(f最佳候选分数: {best_score:.4f}) best_fig.save(optimized_fig.tex) best_img best_fig.rasterize() best_img.save(optimized_output.png) print(优化后的代码和渲染图已保存。) else: print(未找到可成功编译的候选程序。)MCTS参数解读timeout: 总搜索时间。设置越长探索越充分找到更好解的概率越大但耗时也越长。score: 评估函数返回的分数。这个分数综合了编译成功与否、渲染图与输入图的相似度等因素。分数越高代表结果越好。MCTS的代价与收益代价在10分钟的搜索中模型可能会生成并编译数十甚至上百个候选程序对CPU/GPU和LaTeX编译服务造成较大负载。收益最终得到的代码通常在结构正确性和细节还原度上远高于单次生成的结果。MCTS尤其擅长修复那些“差一点就对了”的代码比如调整一个节点的位置、修正一个箭头样式。4.4 文本引导生成TikZero实战如果你没有参考图只有文字描述TikZero就派上用场了。from detikzify.model import load from detikzify.infer import DetikzifyPipeline caption A convolutional neural network diagram with two convolutional layers, each followed by a pooling layer, and then two fully connected layers. Use blocks to represent layers, and arrows to show data flow. pipeline DetikzifyPipeline(*load( model_name_or_pathnllg/tikzero-plus-10b, # 注意使用Ti*k*Zero模型 device_mapauto, torch_dtypebfloat16, )) print(f根据描述生成图表: {caption}) fig pipeline.sample(textcaption) # 这里传入的是text参数 with open(cnn_from_text.tex, w) as f: f.write(fig.code) if fig.is_rasterizable: fig.rasterize().save(cnn_from_text.png) print(生成完成) else: print(生成失败请检查描述或尝试调整提示词。)文本描述技巧具体化“一个神经网络图”太模糊。“一个有三层输入、隐藏、输出的感知机每层用矩形表示层与层之间用箭头连接”就具体得多。结构化描述元素的类型矩形、圆形、箭头、关系连接、包含、并列和布局水平排列、垂直排列。使用领域术语“卷积层”、“池化层”、“全连接层”、“数据流”这些术语模型在训练数据中见过能更好地理解。迭代调整如果第一次生成不理想可以细化描述例如加上“在每层下方标注其维度”或“使用不同的填充颜色区分不同类型的层”。5. 常见问题排查与性能优化指南在实际使用中你可能会遇到各种问题。下面是一个快速排查清单和优化建议。5.1 编译失败问题排查表问题现象可能原因解决方案! LaTeX Error: File pgfcore... not found.TeX Live安装不完整缺少PGF/TikZ核心包。运行tlmgr install pgf安装完整PGF包。确保安装的是完整版TeX Live 2023。! Undefined control sequence. \usetikzlibrary{...}生成的代码使用了你的TikZ版本中没有的库。1. 检查库名是否拼写错误罕见。2. 使用tlmgr install pgf更新到最新PGF版本它包含大多数库。3. 如果库确实不存在可以在提示词中要求模型避免使用该库或手动编辑生成的代码移除或替换该\usetikzlibrary行。! Package fontspec Error: The font ... cannot be found.代码指定了系统中不存在的字体。1. 安装对应字体包如texlive-fonts-extra。2. 在生成前通过系统提示词约束模型使用通用字体如Please use only standard LaTeX fonts like \textrm{} or \mathbf{}.编译过程卡住或无响应LaTeX引擎遇到复杂图形或死循环。1. MCTS搜索中可以设置单个编译任务的超时如compile_timeout30。2. 检查生成的代码中是否有无限循环或极其复杂的计算。渲染出的图片是空白或只有一部分图形元素可能被画在了“画布”之外。TikZ的默认画布很大。检查代码中是否有巨大的坐标值如(1000,1000)。可以尝试在TikZ环境开始时添加\useasboundingbox (-2,-2) rectangle (2,2);来限定可视区域或者要求模型“将图形绘制在原点附近”。生成的代码语法正确但图形与输入差异大模型理解或生成有偏差。这是模型能力的边界。最佳策略是使用MCTS。MCTS的评估函数会惩罚与输入图差异大的输出引导搜索向更相似的结果发展。5.2 性能与资源优化显存不足CUDA Out Of Memory首选使用更小的模型1B。启用4-bit量化如果模型提供了GGUF格式使用llama.cpp的Python绑定进行加载和推理。这可以将8B模型的显存需求降到6GB以下。使用CPU推理将device_map设置为cpu。速度会很慢但不需要GPU。梯度检查点与激活卸载对于非常长的序列可以在加载模型时设置model.gradient_checkpointing_enable()和model.enable_input_require_grads()并结合accelerate的dispatch_model进行更精细的显存卸载。推理速度慢调整生成参数降低max_new_tokens生成的最大token数但注意不能低于典型TikZ代码的长度通常几百到上千。提高temperature如调到0.8可能让模型更快做出决定但会增加随机性。使用Flash Attention确保你的PyTorch和transformers库版本支持Flash Attention 2并在加载模型时传入attn_implementationflash_attention_2。这能显著加速注意力计算尤其对于长序列。批处理如果你需要处理大量图片可以尝试将多张图片的编码和生成过程批处理但要注意每张图片的生成序列是独立的无法像传统NLP那样做真正的批生成。MCTS搜索效率低设置合理的超时对于简单图形2-3分钟可能就够了。复杂图形再设置10分钟或更长。调整探索参数MCTS中的c_puct参数平衡探索与利用。增大它鼓励探索新路径可能找到更优解但更慢减小它则更倾向于利用当前已知的好路径。项目通常提供了默认值除非你非常了解MCTS否则不建议修改。并行编译MCTS的瓶颈之一在于串行编译。你可以修改源码将候选代码的编译过程放到一个进程池中并行执行但这需要对项目代码有较深理解。5.3 模型训练与自定义数据对于高级用户如果想在自己的图表数据集上微调模型或者训练一个针对特定领域如有机化学分子式、电路图的专用版本项目也提供了可能性。数据准备你需要一个(图像, Ti*k*Z代码)配对的数据集。项目提供了创建DaTikZ数据集的脚本你可以仿照其流程从你的PDF文档或SVG资源中提取配对数据。训练脚本参考examples/目录下的训练脚本。核心步骤包括使用指定的视觉编码器和语言模型初始化一个DeTikZify模型。准备数据加载器将图像通过编码器将代码token化。通常进行指令微调损失函数是标准的下一个token预测损失。训练时需要大量的GPU资源多卡A100/H100和较长时间。注意事项训练多模态大模型是一项资源密集型任务。除非你有明确的领域需求、充足的数据和计算资源否则直接使用预训练模型是更经济高效的选择。微调时通常建议冻结视觉编码器只训练连接器和语言模型的部分参数LoRA或QLoRA以节省显存和防止过拟合。通过以上五个部分的详细拆解你应该对DeTikZify从原理到实践有了全面的认识。它不仅仅是一个工具更代表了一种思路将复杂的、依赖专业技能的图形创作过程转化为一个可学习、可优化、可自动化的程序生成问题。无论是快速将草图转化为论文插图还是批量重建老旧文献中的图表亦或是探索文本到图形的创造性应用DeTikZify都为你打开了一扇新的大门。在实际操作中多尝试不同的输入、善用MCTS、并耐心处理LaTeX环境问题你将能越来越得心应手地驾驭这个强大的科研辅助工具。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…