大家好,我是程序员晓晓。
提到降噪强度(denoising strength),大家一定不会陌生,这个参数是图生图中最关键的参数之一。今天在Stable Diffusion Art网站看到一篇介绍降噪强度(denoising strength)的文章(地址:https://stable-diffusion-art.com/denoising-strength/),个人觉得对大家理解降噪强度这个参数非常有帮助,所以这里整理出来,希望能帮助到大家。
在这里说一点题外话,不管是我们学习Stable Diffusion还是其他的AI绘画工具,个人认为有两点极为重要,第一点是基础知识的学习,需要我们不断强加和精进。第二点是亲自动手实践操作,只有多动手实践才能把自己看到想到的东西变成真正是自己的成果。后续关于Stable Diffusion的基础篇、进阶篇等我仍然会不定时保持更新。
一. 图生图实现原理
图生图方法首先是由 SDEdit 所提出的。SDEdit可以应用于任何的扩散模型。因此我们在Stable Diffusion中也有了图生图的功能。
图生图功能使用一张图片与一段文字指令共同作为输入。生成的图像将受到这两个输入的共同调节作用。比如,使用下面这张初级草图以及一段指令 ”photo of perfect green apple with stem, water droplets, dramatic lighting" 作为输入,图生图功能会将其转化为一张很专业的绘画。
下面介绍其具体生成的过程。
【第一步】:输入的图片会被编码至潜在空间中。
【第二步】:我们会向其添加噪声。通过在SD工具中设置降噪强度(Denoising strength)可以控制究竟要添加多少噪声到原始输入图像中去(潜在空间)。如果这个值设置为0,不会有任何噪声添加进去,如果是1则会向其添加最大量的噪声以使其成为一个潜在空间中完全随机的张量。
【第三步】噪声预测器将上一步处理后的潜在空间图像与文字指令作为输入传入其U-Net网络,并给出预测应减去的潜在空间噪声张量。
【第四步】将这个潜空间噪声从潜空间初始图像中减去,得到潜空间中新的图像。
第三步与第四步将根据你设置的采样步数(sampling steps)重复特定次数,比如20次。
【第五步】VAE解码器将最后得到的潜在空间图像恢复为像素空间的图像,这也是图生图中最终得到的图像。
现在我们知道图生图究竟是什么了,他所做的就是将初始的潜在空间图像设置为输入图片与一些噪声的混合。如果你将降噪强度(denoising strength)设置为1,那你获得的图片其实就等价于纯粹使用文本指令运行文本生成图片工具所得到的结果,因为此时这两种功能使用的初始潜在空间图像都是一个完全随机的噪声图。
我们了解了图生图的实现原理,对于降噪强度,我们有以下的认识。
(1)降噪强度决定在采样步骤之前向图像添加多少噪声。
(2)降噪强度的取值范围为0到1。0表示输入图像中不添加噪声。1表示输入图像完全被噪声替换。
(3)降噪强度可以理解为保留原始图像和创建全新图像之间的平衡。降噪强度越高,图像变化越大。
二. 图生图中降噪强度
在图生图模块上传一张图片到图像画布。
单击【生成】按钮旁边【CLIP反推】按钮。此功能会使用 CLIP 模型来反推图像的提示词填充到提示词区域。单击【生成】按钮生成新的图像。
我们通过更改降噪强度的值来调整变化量。降噪强度值越高,图片变化越大。
0:没有变化。
0.2:轻微变化。
0.6:大变化。
1.0:非常大的变化。
三. 局部重绘(Inpainting)中降噪强度
局部重绘(Inpainting)实际上只是图生图的一种特殊情况。噪点会添加到您想要修复的图像部分。噪声量同样由降噪强度控制。
局部重绘(Inpainting)中降噪强度的效果与图生图类似:值越高,图像变化越大。
假设您想重新生成上一张图像的脸部。
以下是改变降噪强度的效果。
局部重绘中降噪强度设置需要注意的几点
(1)局部重绘时不应将降噪强度设置得太高。否则,生成的图片重绘部分与图片的其余部分不连贯。
(2)有多种方法可以在局部重绘中使用高降噪强度。
使用修复检查点模型
使用 ControlNet
四. ComfyUI中降噪强度
ComfyUI中更改降噪强度的效果与SD Web UI 中相同。您可以更改 KSampler节点中的降噪强度。
前言 当应用程序支持多种语言或主题时,切换语言或主题通常需要重新启动 Activity 以重新加载配置。虽然 recreate 是一种常用的重建 Activity 方法,但它不支持像在 Activity 之间切换时那样使用过渡动画。特别是在切换 浅色/深色 主题时,由于缺乏过渡动画而显得很生硬。为了提升改善这一点,只能自己实现过渡动画以提供更流畅的用户体验。
一开始,我考虑在保存状态时使用 onSaveInstanceState 将 activity.window.decorView 绘制成位图并保存到 outState 中。然后在 onCreate 中读取该位图,并通过 WindowManager 在整个屏幕上显示一个铺满的 ImageView,将位图显示在 ImageView 上并执行动画。然而,我尝试后发现 WindowManager 的显示会比 Activity 晚一些,导致出现了闪屏的情况。
在我继续思考的过程中,偶然发现了一篇博客:Change Theme Dynamically with Circular Reveal Animation on Android。原来我与大佬的想法只有一步之差。该博客中的方法是在 Activity 的布局中添加一个铺满全屏的 ImageView,并将其 visibility 设置为 gone。这样,我们就可以在需要时将位图显示在 ImageView 上,而不需要使用 WindowManager。恍然大悟,我怎么没想到呢!🌟
效果 废话不多说,以下是 Demo 实现的效果
Demo源码放在了最下面
步骤 大致分为以下几步:
设置Activity为全屏显示
确保Activity占据整个屏幕空间,去除状态栏和导航栏的影响。添加隐藏的ImageView
在Activity原有的布局顶部添加一个占满全屏的ImageView,默认隐藏。
用于在主题切换后显示Activity重建前保存的Bitmap修改主题后保存状态并重建activity
当用户切换主题时,先将当前Activity的decorView绘制为Bitmap保存到状态
recreate重新创建Activity以更新主题activity重启后通过保存的状态执行动画
在Activity重建后,通过之前保存的状态恢复界面内容并执行揭露动画 将Activity设置为全屏 我这里使用一个BaseActivity来作为基础activity,实现了主题配置的加载和activity全屏的设置
/** * 基础 Activity * 实现了加载本地配置的主题和语言 * @author Thousand-Dust */ abstract class BaseActivity : AppCompatActivity() { override fun attachBaseContext(newBase: Context) { // 加载本地配置的主题 val theme = AppGlobals.
目录
1 引言
1.1 研究背景
1.2 研究目的
1.3 研究意义
2 相关技术介绍
2.1 Python语言及其应用领域
2.2 网络爬虫技术
2.3 数据可视化技术
2.4 PyCharm
2.5 Jupyter Notebook
3 数据爬取
4 数据预处理
5 数据分析及可视化
5.1数据分析背景
5.2从电影评分角度分析
5.3从评论人数与评分角度分析
5.4从电影年份角度分析
5.5从电影数量及类型分析
结 论
附 录
1 引言 1.1 研究背景 随着电影市场规模的不断扩大,越来越多的人开始关注电影市场和电影数据。然而,市面上的电影数据分析工具相对较少,而且大多需要付费,因此,自己使用Python编写爬虫程序爬取电影数据并进行可视化分析成为了一种较为便捷的方法。
1.2 研究目的 本报告旨在使用Python编写爬虫程序,爬取2016至2023年电影市场的相关数据,并进行可视化分析,以探讨电影市场的发展趋势、不同类型电影的受众群体以及电影市场的经济效益等问题。
1.3 研究意义 这个研究的意义在于,通过利用Python编程语言和网络爬虫技术,对电影信息进行爬取、清洗和存储,并利用数据可视化技术对数据进行分析和展示,从而揭示出电影市场的一些规律和趋势,为电影从业者和观众提供决策支持和参考。
具体来说,这个研究可以帮助电影从业者了解电影市场的竞争情况,找到更加有利的电影制作方向和策略,提高电影的票房和口碑;同时,观众可以通过分析和评估电影的评分、类型、时长、制片国家、发行时间等信息,更好地选择自己感兴趣的电影,提高观影体验和满意度。
此外,这个研究还可以为数据科学和数据可视化领域的研究提供一个具体的应用案例,拓展了相关领域的研究范围和深度,对于推动数据科学和数据可视化技术的发展和应用具有积极的促进作用。
2 相关技术介绍 2.1 Python语言及其应用领域 Python是一种高级编程语言,具有简单易学、优雅简洁、功能强大、可移植性好等特点,在科学计算、数据分析、人工智能、Web开发、自动化测试等领域广泛应用。
Python的应用领域包括但不限于以下几个方面:
1. 数据科学和数据分析:Python拥有丰富的数据处理和分析库,如NumPy、Pandas、SciPy、Matplotlib等,可以用于数据清洗、可视化和分析,被广泛应用于数据科学和数据分析领域。
2. 人工智能和机器学习:Python拥有强大的机器学习和深度学习库,如TensorFlow、PyTorch、Keras等,可以用于图像识别、自然语言处理、智能推荐等领域的开发和应用。
3. Web开发:Python拥有流行的Web框架,如Django、Flask等,可以用于Web应用的开发和部署。
4. 自动化测试:Python可以用于自动化测试,如Selenium、Pytest等,可以用于Web应用、移动应用、桌面应用等领域的自动化测试和持续集成。
5. 游戏开发:Python可以用于游戏开发,如Pygame等,可以用于2D/3D游戏的开发和制作。
总之,Python具有广泛的应用领域和优秀的生态系统,成为了现代编程语言中的热门选项之一。
2.2 网络爬虫技术 网络爬虫技术(Web scraping)是指利用计算机程序自动化地抓取互联网上的数据,通常是从网页中提取文本、图片、视频等信息。网络爬虫技术可以帮助我们快速地获取互联网上的大量数据,从而进行数据分析、挖掘和应用开发。
代码下载: 基于深度学习的舌苔检测毕设留档.zip资源-CSDN文库
1 研究背景 1.1.研究背景与意义 目前随着人们生活水平的不断提高,对于中医主张的理念越来越认可,对中医的需求也越来越多。在诊断中,中医通过观察人的舌头的舌质、苔质等舌象特征,了解人体内的体质信息从而对症下药。
传统中医的舌诊主要依赖于医生的肉眼观察,仅仅通过这种人工诊断不但需要消耗大量人力,而且诊断的结果往往受医生经验和主观判断影响,甚至受到周围客观环境的影响(如:光照、温度等)[1],通过10位中医专家对两百多例患者进行舌象诊断,发现仅仅有9例相同,为了减少主观判断和客观环境的影响,利用现代计算机技术结合传统中医的理论和中医专家的经验,使中医的舌诊客观化、数字化成为了目前十分热门研究方向。
利用机器学习实现对舌苔精确快捷的检测,结合中医经验智能化的给出体质信息判别不仅是对计算机技术应用领域的一大拓展,也对传统中医的传承、推广、创新和现代化具有重大意义。利用现代计算机技术使传统中医的应用更加广泛,诊断更加方便快捷,能一定程度上缓解医师人力不足的问题,减少医疗成本,辅助医师提高诊断的准确性,乃至推动中医走向全世界。
1.2.舌苔检测研究现状 目前中医通过舌诊辨识人体体质信息,主要依据中医千年发展累积的经验,使得舌象诊断需要十分丰富的专业知识才能准确无误,如何利用计算机技术实现这一复杂的诊断也是目前研究中的重点和难点。目前利用计算机技术实现的智能化舌诊项目虽然辨识较为精准,但是往往需要在特定的环境或者需要十分专业的设备进行辨识分析,使用专业的设备和环境使得检测门槛较高,检测的成本也随之提升,对舌诊的推广有一定的影响。
1.3.课题任务内容 本课题是基于机器学习的舌苔检测,目的是利用机器学习的方法实现对舌苔进行检测,对舌象信息进行识别,最后再结合传统中医的理论辨识出人体体质信息。
具体实现内容如下:
(1)因为 所使用的舌象数据集图片较少,在开始训练数据集前先使用图像增强和生成对抗网络扩充数据集。将数据集图片进行翻转、平移、加盐、亮度调整、模糊处理等,能将数据集扩充数十倍,以满足数据量的需求。除此之外还使用了生成对抗网络生成新的舌象图片扩充数据集使数据集多样化。
(2)本次课题主要使用的是机器学习中的深度学习方法实现,使用的是深度学习中的efficientNet网络实现对舌象图片的图像分类,同时还使用了其他网络进行了对比实验。训练网络efficientNet模型时使用的在其他图像分类数据集上训练得到的训练参数efficientnetb0作为网络模型的预训练参数,可以较快的实现收敛且能得到良好的效果。分类网络实现了舌象中的苔色、舌色、齿痕、裂纹信息分别进行分类,分类准确率能达到90%以上。
(3)上传舌象图片后,运行分类网络输出的舌象判断结果并展示,使用舌象结果对照传统中医的舌象诊断经验,对人体体质信息进行判断并展示给用户。
本次课题利用现代计算机的技术对舌苔进行检测,并辨识人体体质信息,实现了普通用户借助个人计算机就能对舌苔进行分析以及体质辨识,对计算机技术的发展、创新以及推广有重大意义。
2 舌苔检测需求分析 3.1 可行性分析 3.1.1.技术可行性 如今,机器学习经过了半个世纪的发展,利用机器学习解决现实中各行各业的需求已经变得十分的成熟和可靠,而传统中医的数千年发展积累下来的舌诊经验在观察舌象辨识人体体质的方面也已经十分准确。基于成熟的中医技术和新兴饿计算机技术,利用机器学习完成舌苔检测也变得较为容易的实现,所以在技术上是可行的。
3.1.2.经济可行性 市面上利用计算机技术实现的智能化舌诊项目虽然辨识较为精准,但是往往需要在特定的环境或者需要十分专业的设备进行辨识分析,使用专业的设备和环境使得检测门槛较高,专业性很强,检测的成本也随之提升。本课题的是利用机器学习开源库开发的,没有硬件资源的花费开销的舌苔检测项目,在普通的计算机上就可以运行,所以在经济上是可行的。
3.1.3.文化可行性 中医药学包含着中华民族几千年的健康养生理念及其实践经验,是中华文明的一个瑰宝,凝聚着中国人民和中华民族的博大智慧,向世界推广中医药学也是传播中华文化的一环[5]。利用机器学习实现对舌苔精确快捷的检测,结合中医经验智能化的给出体质信息判别。这不仅仅是对计算机技术应用领域的一大拓展,也对传统中医的传承、推广、创新和现代化具有重大意义。利用现代计算机技术使传统中医的应用更加广泛,推动中医文化走向全世界。所以在文化上是可行的。
3.1.4.社会可行性 本次课题利用现代计算机的技术对舌苔进行检测,并辨识人体体质信息,实现了普通无需掌握专业的中医舌诊知识也能对自己舌苔进行分析,了解自身体质信息,有利于普通人更多的享受到中医的作用。在配合医生进行诊断时,也能减少医生的诊病人工成本,对社会是有益的,具备社会可行性。
3.2 功能行需求 3.2.1.数据集构造 数据集是深度学习的灵魂部分,在深度学习中,数据集的质量越高、数量越多,训练出来的模型就能拥有更高的准确率和泛化的能力,本课题需要对高质量的舌象进行精确的分类,制作成舌象数据集。由于舌象的一些特征类型是不冲突的,一张舌象中包含多种特征类型(如舌色、苔色、齿痕和裂纹),所以数据集的制作应当按照不同舌象特征分别制作数据集,例如按舌色特征制作数据集中可以分成淡红舌,淡白舌和深红舌三类;而按照苔色特征制作数据集中可以分成白苔,黄苔和无苔三类。原始的舌象数据图片不足,需要利用图像增强和生成对抗网络进行扩充。
3.2.2.舌苔检测 舌苔检测模块能利用舌象数据集训练网络模型,并能够用训练完成的网络对输入图像的舌象特征做图像分类,准确的识别出舌象中所含有的舌象特征信息,并将预测的结果输出。由于舌象的一些特征类型不冲突,一张舌象中包含多种特征类型,所以需要对几类舌象特征数据集进行分别训练,分别保存不同的训练权重参数,用于检测不同的舌象特征。
3.2.3.体质辨识 当普通用户上传舌象照片时,通过对舌苔检测模块给出的舌象特征信息结合汇总,对照舌象特征结构和体质对应图,辨识该舌象所反映出的人体体质信息,并能够用用户交互页面将其展示出来,界面能够简单易操作,尽可能满足更大的用户群体的需要。
3.3 非功能性需求 本课题非功能性需求主要是对计算机性能的需求,性能越高模型训练时的速度越快。硬件要求:计算机要有1.0 GHz以上CPU,512M内存,1G硬盘,独立显卡;软件方面:对于系统软件方面,操作系统最优为Windows 10 操作系统。开发语言用的是Python。
3 舌苔检测网络设计与实现 3.1 网络模型介绍 EffcientNet是一个由谷歌团队研究的卷积神经网络,适用于图像分类领域。在2019年发布时,在ImageNet top-1上达到了当时的最高精确度84.3%,在参数数量方面也比当时其他的模型要少很多。是一个比较火的卷积神经网络模型,性能也十分优秀。
3.2 网络模型分析 网络通过混合参数对传统的卷积网络进行优化,同时改变网络的宽度、深度和输入图像大小提升网络性能,相比于传统的卷积神经网络,EffcientNet在效率上有一定优势。扩展网络深度今日也被广泛应用于神经网络的训练中,深度网络可以提取更复杂的特征值,以帮助提高对目标数据集的学习能力。然而,深层网络往往会出现消失梯度的问题。增加网络的宽能够使特征图获得更多通道数,同样得到广泛应用。通过在每个通道上进行卷积运算,这使得模型更具表现力。宽度大能让网络更好的学习各种特性,这使得训练网络变得容易。然而,也正是因为网络宽度足够导致网络深度是不够的。即使提取的特征丰富,但层次却不高,可以通过网络分辨率,丰富网络的感知区域来学习更加多的信息,网络的性能也可以得到提高。
综上所述,对网络的宽度、深度和输入图像分辨率的缩放需要找到一个合适的度,对其中的一方面进行盲目的缩放并不能达到最优的效果,EffcientNet则是非常成功的协调了上述三个方面的缩放,优化了网络性能。
3.3 网络模型搭建及功能实现 本课题是基于机器学习的舌苔检测,其实现主要包括以下几大模块:网络模型模块、数据模块、训练模块、检测模块、体质辨识模块。开发环境主要采用了PyCharm+Python3.6,工作环境主要为Windows10操作系统。舌苔检测程序设计的简要结构如图5.3所示:
本课题使用的是EffcientNet网络中的EffcientNet-B0网络模型,使用Python中的Pytorch库中的torch.nn方法实现神经网络的搭建,网络模型主要分为四个小模块:网络主模块、卷积+BN模块、注意力机制模块、MBConv模块。三个功能模块分别实现了上一节介绍的EffcientNet网络模型中的主要功能,主模块整合各个功能部分,实现EffcientNet-B0卷积神经网络的功能。
数据处理的主要功能是读取并处理舌象数据集,利用python中的os库中的path方法,遍历数据集目录,将舌象数据集中的80%划分为训练集输入到网络中进行训练,20%划分为验证集验证网络训练后的准确率,并在数据集图像训练前对输入图像进行预处理:使用torchvision中transforms的RandomResizedCrop方法,随机对数据图像裁剪为不同的大小和纵横比,然后将裁剪后的图像缩放到EffcientNet-B0网络输入图像的指定大小。使用transforms中Normalize方法对输入舌象数据集的数据集进行归一化操作。
训练模块的主要功能是使用数据处理模块读取舌象数据集,再调用网络模型模块中进行训练。将每一个batch的数据作为一个step,在训练模块的每一个step训练流程如下图5.4。
训练模块中预留有多个参数设置:学习率(lr)、批大小(batch_size)、迭代次数(epochs)、是否导入预训练权重、normalize参数等等,从而能在对比实验中不断调整参数,优化完拿过来模型的效果。
每一轮训练后都使用验证集对模型进行验证,并将训练和验证中得到的训练loss曲线以及验证准确率利用可视化工具Tensorboard在网页中展示出来,更直观的观察模型的训练情况,示例如图5.5,利用实验中对比模型优劣采用更加合适的训练参数设置。在完成训练后的将参数权重进行保存。
检测模块的主要功能是将待检测舌象图片输入后,将图像大小调整至224*224,利用训练模块当中保存好的训练权重参数,使用torch中的no_grad()方法对舌象图片进行分类并能预测其结果,给出各项分类预测的概率,如图5.6,并将预测概率最高的分类输出给体质辨识模块。
体质辨识界面模块的主要功能是利用用户交互界面,获取用户上传的个人舌象图片,并将其送到检测模块中检测,得到舌象特征信息,对照舌象特征结构和体质对应图,辨识该舌象所反映出的人体体质信息,并将其展示出来,体质辨识界面如图5.7所示,该模块采用pyqt5库实现了用户的交互功能。简单易操作,方便普通用户能够更方便的对舌象进行检测。
👀樊梓慕:个人主页
🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》《算法》
🌝每一个不曾起舞的日子,都是对生命的辜负
目录
前言
5.水果成篮(medium)
6.找到字符串中所有字母异位词
7.串联所有单词的子串(hard) 8.最小覆盖字串(hard)
前言 滑动窗口专题续作,本篇文章继续围绕滑动窗口进行讲解,并辅以实战OJ题帮助理解。
欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。 =========================================================================
GITEE相关代码:🌟樊飞 (fanfei_c) - Gitee.com🌟
=========================================================================
5.水果成篮(medium) 904. 水果成篮 - 力扣(LeetCode)https://leetcode.cn/problems/fruit-into-baskets/description/
你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。
你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:
你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。 给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。
阅读题目,其实就是找出一个最长的子数组的长度,要求子数组中不能超过两种元素。
思路:
如果大小超过2:说明窗口内水果种类超过了两种。那么就从左侧开始依次将水果划出窗口,直到哈希表的大小小于等于2,然后更新结果;如果没有超过2:说明当前窗口内水果的种类不超过两种,直接更新结果ret。
有了思路,画图独立完成代码,不要直接看博主的代码。
class Solution { public: int totalFruit(vector<int>& fruits) { unordered_map<int, int> hash; int left = 0, right = 0; int ret = 0; int n = fruits.
作为一位资深前端开发,我对npm(Node Package Manager)的使用有着深入的了解。npm是Node.js的包管理器,用于安装、管理和删除各种前端库和工具。现在,让我们深入了解npm在Vue、React、Angular和Vue 3项目中的一些基本使用方法和配置。
npm命令概述 npm提供了一系列命令,用于管理项目的依赖、运行脚本、发布包等。以下是一些常用的npm命令:
npm install:安装项目的依赖。npm start:运行项目。npm run:运行在package.json中定义的脚本。npm test:运行测试。npm run build:构建项目,通常用于生产环境。npm publish:发布包到npm仓库。 首先,在使用npm命令之前,确保你已经安装了Node.js和npm(Node.js的包管理器)。
Vue项目 在Vue项目中,package.json文件通常会包含如下脚本:
"scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint" } npm run serve:启动开发服务器,监听文件变化并自动刷新浏览器。npm run build:构建生产环境的静态资源。 步骤示例 1.你可以通过Vue CLI(Vue的命令行工具)来创建一个新的Vue项目。在命令行中运行以下命令:
# 安装Vue CLI(如果尚未安装) npm install -g @vue/cli # 创建一个新的Vue项目 vue create my-vue-project 接下来,Vue CLI会提示你选择预设或者手动选择特性。选择你需要的配置,或者手动选择并配置你想要的插件和特性。
2.一旦项目创建完成,进入项目目录:
cd my-vue-project 现在,你可以查看项目的package.json文件,它应该包含如下脚本:
"scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint" } 如你所见,serve脚本对应的是vue-cli-service serve命令,这就是用来启动开发服务器的命令。
文章目录 前言一、@Transactional 属性介绍1.事务的传播行为:propagation2.事务的隔离级别:isolation3.事务的超时时间:timeout4.事务的回滚类型:rollbackFor 二、@Transactional 失效场景1.同一个类中方法调用,注解失效2.异常被 catch “吃了”,注解失效3.@Transactional 应用在非 public 修饰的方法上4.@Transactional 注解属性 rollbackFor 设置错误5.@Transactional 注解属性 propagation 设置错误6.数据库引擎不支持事务 总结 前言 面试中经常会被问到事务失效的场景有哪些,其实在开发中,若是不了解事务失效的场景,当你觉得加了事务,就会回滚,就大错特错了,今天就来了解一下吧。
提示:以下是本篇文章正文内容,下面案例可供参考
一、@Transactional 属性介绍 1.事务的传播行为:propagation 这就是我们常说的事务的七种传播行为,默认值:Propagation.REQUIRED
属性解释Propagation.REQUIRED如果当前存在事务,则加入该事务,如果当前不存在事务,则创建一个新的事务。Propagation.SUPPORTS如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务的方式继续运行。Propagation.MANDATORY如果当前存在事务,则加入该事务;如果当前不存在事务,则抛出异常。Propagation.REQUIRES_NEW重新创建一个新的事务,如果当前存在事务,暂停当前的事务。Propagation.NOT_SUPPORTED以非事务的方式运行,如果当前存在事务,暂停当前的事务。Propagation.NEVER以非事务的方式运行,如果当前存在事务,则抛出异常。Propagation.NESTED嵌套事务。 2.事务的隔离级别:isolation 这就是我们常说的事务的隔离级别,默认值:Isolation.DEFAULT
属性解释Isolation.DEFAULT使用底层数据库默认的隔离级别Isolation.READ_UNCOMMITTED读未提交Isolation.READ_COMMITTED读已提交Isolation.REPEATABLE_READ可重复读Isolation.SERIALIZABLE串行化 3.事务的超时时间:timeout timeout :事务的超时时间,默认值为 -1。如果超过该时间限制但事务还没有完成,则自动回滚事务。 4.事务的回滚类型:rollbackFor rollbackFor :用于指定能够触发事务回滚的异常类型,可以指定多个异常类型。 二、@Transactional 失效场景 1.同一个类中方法调用,注解失效 场景重现:当调用 saveCabinet 方法时,save 方法中出异常不会回滚,如下代码
@Service public class CabinetServiceImpl implements CabinetService { @Autowired private CabinetMapper cabinetMapper; @Override public void saveCabinet(Cabinet cabinet) { save(cabinet); } @Transactional(rollbackFor = Exception.class) public void save(Cabinet cabinet) { cabinetMapper.
项目场景 有时候,遇到数据库重复数据,需要将数据进行分组,并取出其中一条来展示,这时就需要用到group by语句。
但是,如果mysql是高版本,当执行group by时,select的字段不属于group by的字段的话,sql语句就会报错。报错信息如下:
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘数据库名.表名.字段名’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 问题描述 1.表结构 CREATE TABLE `t_iov_help_feedback` ( `ID` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `USER_ID` INT(255) DEFAULT NULL COMMENT '用户ID', `problems` VARCHAR(255) DEFAULT NULL COMMENT '问题描述', `last_updated_date` DATETIME DEFAULT NULL COMMENT '最后更新时间', PRIMARY KEY (`ID`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; 2.
Nginx返回502错误提示问题原因和常用解决方法 1. 因网站的访问量大,而php-cgi的进程数偏少,导致nginx 返回502错误 解决方法:针对这种情况的502错误,需增加php-cgi的进程数。
一般一个php-cgi进程占20M内存,你可以自己计算下,适量增多max_children值
查看PHP当前fastcgi进程个数命令如下:
netstat -anpo | grep "php-cgi" | wc -l
具体就是修改/usr/local/php/etc/php-fpm.conf 文件配置
参考说明及调整如下
#php-fpm.conf配置文件参数优化选项。
pm.max_children = 1024 #子进程最大数
pm.start_servers = 10 #启动时的进程数 #保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.min_spare_servers = 5 #保证空闲进程数最大值,如果空闲进程大于此值,则进行清理
pm.max_spare_servers = 20
#进程的超时时间
pm.process_idle_timeout = 15s #设置每个子进程处理的最大请求数
pm.max_requests = 1000
#设置文件打开描述符的rlimit限制
rlimit_files = 1024
#当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'
request_slowlog_timeout = 10s
#慢请求的记录日志,配合request_slowlog_timeout使用
slowlog = log/$pool.log.slow
2. CPU占用率及内存占用率非常高,遭到CC攻击 解决方法:可以使用CDN加速产品或高防服务器来专业防护CC
3. CPU占用率不高,内存溢出了 检查一下网站程序有没有问题?
检查一下/var/log/目录下的日志,看看是不是有人爆破SSH和FTP端口?
SSH、FTP遭到穷举也会占用大量内存
根据错误日志排查
......
第一篇:SD安装和显卡要求 最近一段时间,AI绘画很火热,是不是感到对AI绘画很好奇,那么接下来介绍一下如何安装部署。让读者也能快速上手。进入AI绘画的世界。
最简单最容易入手的便是直接使用秋叶大佬的整合包,链接如下:
我用夸克网盘分享了「sd-webui-aki」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/a19039eac5cc
百度网盘:链接:https://pan.baidu.com/s/1v6lLEBUMoq9YiEx_LlmBhQ 提取码:r4zn --来自百度网盘超级会员V5的分享
该整合包解压即用,无需自己部署PYTHON,git等所需的环境,特别方便,而且秋叶大佬在整合包内,直接集成了Contronet、Tied diffusion等众多的插件。启动界面如下图所示
点击右下角的一键启动,便可以在本地的浏览器打开一个页面。
接下来说一下SD(Stable diffusion的简称)对电脑的要求,对CPU的要求不算高,但是对显卡的要求高,必须得是独显,且最好是英伟达的显卡,显存的话,4GB入门,但这只能玩分辨率比较低的,分辨率稍高的话,就不行,就会爆显存。所以推荐最低6GB。如果还想晚点更高阶一点的,比如生成视频,那么8GB就不够看了,得继续往上。如果想要一个显卡的型号作为参考,那么4060TI吧,16GB的显存,足够应付绝大多数场景了。生成的图片与显存之间的一个简单的对比。
6GB显存:可以生成1080p分辨率的图像。12GB显存:可以生成2K分辨率的图像。16GB显存:可以生成4K分辨率的图像。 显卡推荐:
20系:RTX 2060super(流畅运行) ,RTX 2070系列(流畅运行),RTX 2080 系列(流畅运行)
30系:RTX3060系(随心所欲,有一点压力),RTX3070系列(随心所欲,有一点压力),RTX 3080系列(随心所欲,有一点压力),RTX 3090 系列 (全部拉满,无压力)
40系:RTX4060系(随心所欲,有一点压力),4070系(随心所欲,有一点压力),4090系(全部拉满,无压力)
至于专业的H100,A100等,那更不在话下,随便跑。
台式或者笔记本都能跑,笔记本最好是带独显的游戏本。MAC应该也能跑,但是跑图速度比较慢。
当然,如果你的电脑没有独显,那么去AutoDL租用GPU,网址:AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL,只不过这就需要花钱了,不过也还好,租一个3080的显卡也才1元多一点一个小时,或者去Google Colab租用免费的,当然速度等,部署等难度肯定没有花钱的方便。
如果本篇文章对你有帮助请为我点个赞!!
接下来我会陆续发布SD的使用,即SD教程。敬请期待!
大家好,我是烤鸭:
最近ai火的狠,想聊聊代码里的copliot,最近几个月也使用了几款不同的copliot。
什么是copliot copliot 是ai助手,我们要说的是编程界的copliot。
先介绍几款我用过的:
github copliot(微软):https://github.com/features/copilot
codewhisper(aws):https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail
codegeex(清华大学):https://codegeex.cn/zh-CN
通灵义码(阿里):https://tongyi.aliyun.com/lingma/?utm_content=m_1000387927
codeium(开源组织):https://codeium.com/
选哪个 先聊点大家关心的,其实除了 github copliot 都是免费的(codeium 有个人版本,codewhisper 需要注册aws账号,绑credit card)、github copliot 收费我记得是 10刀/月。
这些都支持主流的编程语言和ide,vs code和idea。
再从用户体验比较下,其实 github copliot 我是用的比较多的。最开始接触的两个月把我震惊到了,原来编程还可以这样。只要tab -> tab 就行了。因为是在某宝的买的学生账号,可能那哥们毕业了,就用不了了。
后来的一段时间发现不会编程了,原来的tab成习惯了,现在自己敲有点陌生,效率反倒变低了,还是提醒大家慎用。中间试用过几天 codeium 和 codegeex,别的不说,在代码补写这块,都是弟弟,可能还是微软的库比较大吧。
但是使用 github copliot 有什么弊端,毕竟是老外的东西,网络真的是硬伤,而且价格感人。
所以现在强烈推荐阿里的通灵义码,趁着免费多薅薅羊毛。
我现在用的是 github copliot的代码补全,通灵义码的其他功能。
copliot 根据中文写代码已经是最基本的了,写个冒泡排序什么的。
补充注释和猜到你想写什么才是最狠的,质疑ai,理解ai,成为ai
比如写个方法计时场景,敲完换行就知道你想写什么,不过你得给他写层try-> finally
也许你会说,不就代码提醒么,有什么的,当你用起来就知道用tab代替 ctrl +cv 的日子有多爽。
当然,实际的编程工作也不只是敲代码,还得review、单元测试等等,这时候就要看阿里的通灵义码了。
通灵义码 我比较常用的是 生成注释、解释代码、优化代码:
生成注释
解释代码
优化代码(找出代码问题)
review代码是比较头疼和耗时的一件事,找到你觉得有问题的代码,选中 -> 生成优化建议,各种异常提前预判。
总结 有钱、网络还好的话,无脑冲 github copliot,其次冲 通灵义码。
建议个人搭配 github copliot 的补全+通灵义码的其他功能。
在Python编程中,next()函数是一个非常重要且常用的内置函数,用于迭代器对象中获取下一个元素。迭代器是一种可以逐个访问数据元素的对象,例如列表、元组、字典等。本文将深入探讨Python中的next()函数,包括基本用法、迭代器协议、StopIteration异常、实际应用场景,并提供丰富的示例代码来帮助更好地理解和使用next()函数。
什么是next()函数? next()函数是Python内置的函数之一,用于迭代器对象中获取下一个元素。它接受一个迭代器对象作为参数,并返回迭代器对象的下一个数据元素。如果迭代器对象已经到达末尾,则抛出StopIteration异常。
基本用法 从next()函数的基本用法开始,了解如何使用它来获取迭代器对象中的下一个元素。
1. 获取下一个元素 # 获取下一个元素 numbers = [1, 2, 3, 4, 5] numbers_iter = iter(numbers) print(next(numbers_iter)) # 输出:1 print(next(numbers_iter)) # 输出:2 在这个示例中,首先使用iter()函数生成了一个迭代器对象numbers_iter,然后使用next()函数逐个获取了迭代器对象中的数据元素。
2. 使用循环获取所有元素 # 使用循环获取所有元素 numbers = [1, 2, 3, 4, 5] numbers_iter = iter(numbers) while True: try: num = next(numbers_iter) print(num) except StopIteration: break 在这个示例中,使用循环和try-except语句来获取迭代器对象中的所有元素,直到抛出StopIteration异常为止。
迭代器协议 迭代器协议是一种Python语言规范,用于支持迭代器对象的实现。
迭代器对象必须实现两个方法:
__iter__()方法:返回迭代器对象本身。__next__()方法:返回迭代器对象的下一个数据元素,如果没有元素可迭代,则抛出StopIteration异常。 通过一个自定义迭代器的示例来深入了解迭代器协议。
class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __iter__(self): return self def __next__(self): if self.
一、时间和季节
Time and Season
1、时间描述
Time Description
比如,日出、黄昏、夜晚、清晨 / Sunrise, Sunset, Night, Early Morning
2、季节变化
Seasonal Changes
比如,春天、夏天、秋天、冬天 / Spring, Summer, Autumn, Winter
二、场景描述
Scene Description
1、自然景观
Natural Landscapes
比如,山脉、河流、森林、海滩 / Mountains, Rivers, Forests, Beaches
2、城市景观
Urban Landscapes
比如,天际线、街道、建筑、公园 / Skylines, Streets, Buildings, Parks
3、室内场景
Indoor Scenes
比如,家庭环境、办公室、咖啡馆 / Home Environment, Office, Café
4、抽象和概念性场景
Abstract and Conceptual Scenes
比如,梦境、虚拟空间、未来世界 / Dreams, Virtual Spaces, Future Worlds
三、物体和元素
Objects and Elements
美食推荐小程序目录
目录
基于微信小程序的美食推荐系统设计与实现
一、前言
二、系统功能设计
三、系统实现
1、前台功能模块
2、后台功能模块
(1)用户信息管理
(2)水果信息管理
(3)水果类型管理
(4)论坛信息管理
四、数据库设计
1、实体ER图
五、核心代码 六、论文参考
七、最新计算机毕设选题推荐
八、源码获取:
博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️
主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。
🍅文末获取源码联系🍅
基于微信小程序的美食推荐系统设计与实现 一、前言 采用美食推荐系统可以有效管理,使信息管理能够更加科学和规范。美食推荐系统使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理美食推荐系统信息,查看美食推荐系统信息,管理美食推荐系统。
总之,美食推荐系统集中管理信息,有着保密性强,效率高,存储空间大,成本低等诸多优点。它可以降低信息管理成本,实现信息管理计算机化。
关键词:美食推荐系统;Java语言;Mysql
二、系统功能设计 在前面分析的管理员功能的基础上,进行接下来的设计工作,最终展示设计的结构图(见下图)。
三、系统实现 1、前台功能模块 2、后台功能模块 (1)用户信息管理 如图5.1显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,还进行了对用户名称的模糊查询的条件
图5.1 用户信息管理页面
(2)水果信息管理 如图5.2显示的就是水果信息管理页面,此页面提供给管理员的功能有:查看已发布的水果信息数据,修改水果信息,水果信息作废,即可删除,还进行了对水果信息名称的模糊查询 水果信息信息的类型查询等等一些条件。
图5.2 水果信息管理页面
(3)水果类型管理 如图5.3显示的就是水果类型管理页面,此页面提供给管理员的功能有:根据水果类型进行条件查询,还可以对水果类型进行新增、修改、查询操作等等。
图5.3 水果类型管理页面
(4)论坛信息管理 如图5.4显示的就是论坛信息管理页面,此页面提供给管理员的功能有:根据论坛信息进行新增、修改、查询操作等等。
图5.4 论坛信息管理页面
四、数据库设计 1、实体ER图 美食推荐小程序的E-R图如下图所示:
(1)下图是用户实体和其具备的属性。
用户实体属性图
(2)下图是反馈与建议实体和其具备的属性。
反馈与建议实体属性图
(3)下图是公告信息实体和其具备的属性。
公告信息实体属性图
(4)下图是餐厅实体和其具备的属性。
餐厅实体属性图
(5)下图是购物车实体和其具备的属性。
购物车实体属性图
(6)下图是论坛实体和其具备的属性。
论坛实体属性图
(7)下图是商品实体和其具备的属性。
商品实体属性图
(8)下图是商品收藏实体和其具备的属性。
商品收藏实体属性图
(9)下图是商品评价实体和其具备的属性。
商品评价实体属性图
扶贫助农系统目录
目录
基于springboot的扶贫助农系统设计与实现
一、前言
二、系统功能设计
三、系统实现
1、用户信息管理
2、扶贫任务管理
3、论坛信息管理
4、扶贫公告管理
四、数据库设计
1、实体ER图
五、核心代码 六、论文参考
七、最新计算机毕设选题推荐
八、源码获取:
博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️
主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。
🍅文末获取源码联系🍅
基于springboot的扶贫助农系统设计与实现 一、前言 在计算机上安装扶贫助农系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,扶贫助农系统的有效运用可以帮助管理人员准确快速地处理信息。
扶贫助农系统在对开发工具的选择上也很慎重,为了便于开发实现,选择的开发工具为idea,选择的数据库工具为Mysql。以此搭建开发环境实现扶贫助农系统的功能。其中管理员管理用户,新闻公告。
扶贫助农系统是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和统计,以及数据查询等处理要求,扶贫助农系统都可以轻松应对。
关键词:扶贫助农系统;SpringBoot框架,系统分析,数据库设计
二、系统功能设计 为了让系统的编码可以顺利进行,特意对本系统功能进行细分设计,设计的系统功能结构见下图。
三、系统实现 1、用户信息管理 如图5.1显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,还进行了对用户名称的模糊查询的条件
图5.1 用户信息管理页面
2、扶贫任务管理 如图5.2显示的就是扶贫任务管理页面,此页面提供给管理员的功能有:查看已发布的扶贫任务数据,修改扶贫任务,扶贫任务作废,即可删除,还进行了对扶贫任务名称的模糊查询 扶贫任务信息的类型查询等等一些条件。
图5.2 扶贫任务管理页面
3、论坛信息管理 如图5.3显示的就是论坛信息管理页面,此页面提供给管理员的功能有:根据论坛信息进行条件查询,还可以对论坛信息进行新增、修改、查询操作等等。
图5.3 论坛信息管理页面
4、扶贫公告管理 如图5.4显示的就是扶贫公告管理页面,此页面提供给管理员的功能有:根据扶贫公告进行新增、修改、查询操作等等。
图5.4 扶贫公告管理页面
四、数据库设计 1、实体ER图 扶贫助农的E-R图如下图所示:
(1)下图是客服聊天实体和其具备的属性。
客服聊天实体属性图
(2)下图是论坛实体和其具备的属性。
论坛实体属性图
(3)下图是用户实体和其具备的属性。
用户实体属性图
(4)下图是任务信息实体和其具备的属性。
任务信息实体属性图
(5)下图是任务报名实体和其具备的属性。
任务报名实体属性图
(6)下图是新闻留言实体和其具备的属性。
新闻留言实体属性图
(7)下图是扶贫公告实体和其具备的属性。
扶贫公告实体属性图
(8)下图是新闻收藏实体和其具备的属性。
新闻收藏实体属性图
(9)下图是新闻信息实体和其具备的属性。
新闻信息实体属性图
五、核心代码 package com.service.impl; import com.
目录
1、简化配置
2、快速开发
3、微服务支持
4、内嵌服务器
5、健康监测
6、热部署
7、自动化管理
8、社区支持和生态系统
SpringBoot 是一个基于 Spring 框架的快速开发框架,它通过提供一系列的自动配置、约定优于配置、快速集成等功能,简化了 Spring 应用的开发过程。Spring Boot 具有以下几个显著的优点:
1、简化配置 Spring Boot 提供了大量的自动配置,减少了开发者对项目的繁琐配置,大部分情况下不需要手动配置。例如,Spring Boot 会根据项目中的依赖自动配置数据源、日志、Web 容器等。
2、快速开发 Spring Boot 的设计目标之一就是能够快速地进行应用开发。通过快速集成各种常用组件和框架,以及提供了便捷的开发工具和插件,开发者可以更快地搭建和开发应用。
3、微服务支持 Spring Boot 对微服务架构提供了良好的支持。它集成了 Spring Cloud 生态系统,提供了诸如服务注册与发现、负载均衡、断路器等微服务相关功能的支持,简化了微服务的开发和部署。
4、内嵌服务器 Spring Boot 内置了多种常用的服务器,如 Tomcat、Jetty、Undertow 等,使得应用可以打包成一个可执行的 JAR 文件,并且可以直接运行,无需额外部署服务器。
5、健康监测 Spring Boot 提供了健康检查功能,可以通过 HTTP 或 JMX 等方式查看应用的运行状态和性能指标,方便运维人员进行监控和管理。
6、热部署 Spring Boot 支持热部署(Hot Swap)功能,开发者可以在修改代码后不需要重新启动应用,即可立即生效,提高了开发效率。
7、自动化管理 Spring Boot 提供了一系列的启动器(Starter)和自动配置,同时配合 Maven 或 Gradle 等构建工具,可以方便地进行依赖管理和版本控制。
8、社区支持和生态系统 Spring Boot 作为 Spring Framework 的衍生项目,拥有庞大的社区支持和活跃的开发者社区,可以获取到大量的文档、教程和解决方案。同时,Spring Boot 还衍生了丰富的生态系统,如 Spring Cloud、Spring Data、Spring Security 等,可以方便地集成和扩展功能。
上一篇文章介绍了sd-webui的安装教程,但学习一下ComfyUI这种节点流程式的对理解AI绘画有较大帮助,而且后期排查错误会更加方便,熟练后用这种方式做AI绘画可玩性会更多。
文章目录 一、安装包说明二、安装文件介绍三、安装步骤四、汉化五、云主机外部访问六、学习路径 一、安装包说明 ComfyUI 开源地址如下:
https://github.com/comfyanonymous/ComfyUI
但国内github下载不稳定,一些汉化和管理插件下载也非常慢,这里还是建议直接用秋葉大神得整合包,依然是集成好了所有的环境插件,无需安装任何依赖,直接运行。
整合包算上一个大模型总计6G左右,可直接通过文章顶部下载资源链接进行下载。大模型已经下载过的可以不用下载大模型,可以通过配置,直接和webui的共享,节省硬盘资源。
二、安装文件介绍 网盘分享主要有两个
第一个,是一个大模型,已经下载过的可以忽略,通过配置可以和webui共享,也可以直接放入comfyui中直接使用。
第二个,是comfyui的整合安装包
三、安装步骤 下载解压到根目录后由于安装包没有放置大模型,启动后也无法使用,所以我们需要先设置下大模型路径,所以整体分两步:1、设置大模型共享路径;2、启动;
1.设置大模型共享路径
下载解压到根目录后,找到“extra_model_paths.yaml.example”这个文件
用txt直接打开,把下图中的路径替换为你自己已经安装的webui的路径(仅适用于你安装过webui且想共享大模型的情况,如果没安装webui,直接安装的comfyui,可以直接把大模型扔进ComfyUI安装目录中models/checkpoints/下面即可)
保存后,把此文件重命名,删掉“.example”这个后缀,如下图
2.启动
直接点击“A绘世启动器.exe”启动即可
启动后不用跳过更新,等待一会直接进入我们熟悉的启动器界面,点击右下角的一键启动即可。
启动后进入ui界面,可以玩耍了
四、汉化 1. 点击右边设置小按钮
弹出页面中把语言一栏选择中文即可(如果已经是中文但界面还是英文,可以选择英文后再切换回来,会刷新一下这样就没问题了)
五、云主机外部访问 使用云主机想外部访问的,同样设置启动器里的监听即可,参考上篇文章中监听设置(Stable Diffusion webui安装详细教程)。
六、学习路径 由于comfyui的特性,我们可以直接导入加载别人的工作流,可以通过工作流分享网站学习各种工作流,多看多实践。
ComfyUI官方示范
https://comfyanonymous.github.io/ComfyUI_examples/
别人的基础工作流示范
https://github.com/cubiq/ComfyUI_Workflows
https://github.com/wyrde/wyrde-comfyui-workflows
工作流分享网站
https://comfyworkflows.com/
https://openart.ai/workflows
一、究竟什么是函数栈帧 C语言的使用是面向过程的, 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。所以C语言的程序都是以函数作为基本单位的,如果能够深入理解函数,无疑对于c语言会有更深刻地理解,修炼自己的内功,那么函数是如何调用的?函数返回值是如何返回的?函数的形参是如何传递的…………等等的问题,其实都和函数栈帧有关系!
函数栈帧(stack frame):就是函数调用过程中在程序的调用栈(call stack)所开辟的空间,这些空间是用来存放:
1、函数参数和函数返回值 2、临时变量(包括函数的非静态的局部变量以及编译器自动生产的其他临时变量) 3、保存上下文信息(包括在函数调用前后需要保持不变的寄存器)。
二、理解函数栈帧能解决什么问题呢? 函数栈帧的创建和销毁,是函数调用的底层逻辑,通过学习这方面的内容可以解决以下问题:
1、局部变量是如何创建的?
2、为什么局部变量不初始化内容是随机的?
3、函数调用时形参是如何传递的,传递和调用的顺序又是怎样的?
4、为什么说形参是实参的一份临时拷贝,改变形参的值不会影响实参?
5、函数的返回值是如何带回去的?
三、函数栈帧的创建和销毁 3.1 什么是栈? 栈(stack)是现代计算机程序里最为重要的概念之一,几乎每一个程序都使用了栈,没有栈就没有函数,没有局部变量,也就没有我们如今看到的所有的计算机语言。
在经典的计算机科学中,栈被定义为一种特殊的容器,用户可以将数据压入栈中(入栈,push),也可 以将已经压入栈中的数据弹出(出栈,pop),但是栈这个容器必须遵守一条规则:先入栈的数据后出 栈(First In Last Out, FIFO)。就像叠成一叠的术,先叠上去的书在最下面,因此要最后才能取出。
在计算机系统中,栈则是一个具有以上属性的动态内存区域。程序可以将数据压入栈中,也可以将数据 从栈顶弹出。压栈操作使得栈增大,而弹出操作使得栈减小。
在经典的操作系统中,栈总是向下增长(由高地址向低地址)的。
在我们常见的i386或者x86-64下,栈顶由成为 esp 的寄存器进行定位的。 栈底有ebp的寄存器进行定位,而这次主要会在x86环境下进行演示。
值得注意的是:在不同的编译器中,函数调用过程中栈帧的创建是略有差异的,具体细节取决于编译器的实现,这次主要会在vs2022编译器上进行演示。
3.2 认识相关的寄存器和汇编指令 相关寄存器:
eax:通用寄存器,保留临时数据,常用于返回值
ebx:通用寄存器,保留临时数据
ebp:栈底寄存器
esp:栈顶寄存器
eip:指令寄存器,保存当前指令的下一条指令的地址
相关汇编命令:
mov:数据转移指令
push:数据入栈,同时esp栈顶寄存器也要发生改变
pop:数据弹出至指定位置,同时esp栈顶寄存器也要发生改变
sub:减法命令
add:加法命令
call:函数调用,1. 压入返回地址 2. 转入目标函数 jump:通过修改eip,转入目标函数,进行调用
ret:恢复返回地址,压入eip,类似pop eip命令
3.3 函数栈帧的创建与销毁解析 3.3.1 预备知识 1、每一次函数调用,都需要为本次函数调用开辟空间,就是函数栈帧的空间。
2、这块空间的维护是使用了两个寄存器:esp和ebp(也可以理解成两个指针),ebp记录的是栈底的地址,esp记录的是栈顶的地址,而这两个地址就是用来维护函数栈帧的。
3、栈区的使用一般都是从高地址到低地址。
3.3.2 函数调用堆栈 以下是本次演示的全部代码
#include <stdio.h> int Add(int x, int y) { int z = 0; z = x + y; return z; } int main() { int a = 10; int b = 20; int ret = 0; ret = Add(a, b); printf("
Midjourneys再次迎来更新,本次新增“风格一致”功能!用户期待已久的风格模仿功能终于实现了! --sref 虽然目前只是测试功能,但已经相当强大了,这篇文章我将带大家先睹为快! 别忘了,这个功能目前只能在v6和niji 6中使用哦!
下面我就将MidjourneyI(AIGF)的软件如何使用这个功能给大家做个详细的讲解,后期可能会固定在操作版面上,但是目前可以正常调用,
一、什么是风格一致性
我们先来看看Midjourney创始人大卫·霍尔茨对于此功能的介绍把
翻译:嘿,大家好,我们今天发布了第一个“一致风格”的测试算法。我们称之为"风格参考"它们的工作原理类似于图像提示,即你给一个或多个图像一个URL,这些图像“描述”了你想要修改的一致风格
此功能允许使用参考图像创建一致的样式。通过添加新参数,MidJourney 会分析这些图像,以在结果中模拟它们的美感。这项创新有望成为V5中风格调谐器的替代品,标志着在实现角色一致性方面取得了重大进展。-sref
二、如何使用
在提示词之后输入--sref以及图像的URL(--sref urlA)
我们的系统会将图像URL视为“样式参考”并尝试做出与其风格或美学“匹配”的东西
这个功能只适用于V6和NiiiV6
操作方式:
1.我们现在随意的绘制一张图片,比如:
提示词:The character name "Snoopy" in Charles Schultz's comic series "Peanuts" --ar 1:1 --v 6.0
中文翻译:查尔斯·舒尔茨漫画系列《花生》中的人物名字“史努比” --ar 1:1 --v 6.0
以上是出图展示
我们想要选取其中的一张风格做延续。作为示范,我们来选择第四张做i为我们后面漫画的一个风格一致性的参考图,然后单击放大第四张然后进行保存下载。
以上三种保存原图的方式方法我都在上方呈现,请大家不要在四宫格拆分后单独保存,或者直接右键单图直接保存,那样保存的是缩略图,画质必然是模糊不清的。除了点击下载原图按钮,在就是在点击单图后弹出内展页面后再次点击图片,待图片弹出后右键保存即可,手机移动端用户同理,点击图片弹出后再长按保存即可。
我随意输入了提示词出图后,
只为获取我们上传图片的链接,
<https://s.mj.run/ndBD9xHU89Q>
去除两端的<>符号
https://s.mj.run/ndBD9xHU89Q
此链接为
本张图片的链接
那么我们接下来想生成此风格的图片就可以进行相关的操作了。
添加图片注释,不超过 140 字(可选)
来大家看下有没有违和感,风格,化画风完全复刻,
提示词-sref(空格)获取的Midjourney网址信息
三、风格一致高级应用及注意事项
1、可以在风格一致参数后面加多个图像URL, 像这样输入!
--sref urlA urlB urlc
简单点说,你可以让Midiourney机器人去参考多个图的风格让它把这几个风格融合一下后给你出图。直接在--sref后面加多个图片URL就可以,中间一定要用空格隔开!
2、如果你添加多个图片URL的话可以像控制提示词权重一样使用英文输入法的双冒号:控制图像URL权重,像这样输入:
-sref urlA::2 urlB::3 urlc::5
与控制提示词权重一样,把每个图片URL想象成一整个提示词就OK了。
3、可以通过--sw 100设置风格样式化的总强度(100为默认值,0为关闭,1000为最大值)这个就跟我们垫图中使用的--iw用法一样,它是控制所有风格一致性的总强度!记住是总强度!范围在0-1000之间,默认值是100。
一、优化问题概述
1.优化问题概述
设计变量、目标函数、约束
2.优化问题求解步骤
3.优化问题分类
二、Optimization Toolbox---优化工具箱
可在MATLAB帮助中心进行查看
1.使用实时编辑器“优化”任务求解 (交互式)
示例:
实时编辑器任务:
执行特定操作的APP
缩短开发时间
缩短绘图时间
减少错误
可自动生成代码
操作步骤:
1.选择目标函数与约束类型
2.选择求解器
3.提供相应数据
4.根据模板设置目标函数与约束
5.设置显示选项
6.求解
生成代码:基于“求解器”求解
2.基于“问题”求解优化问题(编程)
优势:
1.代码表述与数学公式一致,易于创建和调试
2.自动选择求解器、处理不同约束类型
3.提供fcn2optimexpr将函数转化为所需表达式
4.自动计算梯度
自动微分:对目标函数与约束自动计算梯度
1.一系列自动计算梯度的数值方法
无需使用符号表达式运算
仅支持一阶梯度
2.与有限差分法相比
计算量减小
计算精度高
3.需满足一定条件
示例: 使用MATLAB求解数独
求解思路:这是一个0/1优化问题
操作步骤:
1.定义优化变量
2.建立优化问题“容器”【目标函数表达式、约束表达式、初始值...】
3.定义目标函数表达式
4.设置初始值
5.求解
3.基于“求解器”求解---需要对优化算法有一定了解
优势:
1.可以使用实时编辑器“优化”任务进行可视化操作
2.矩阵形式表达,求解时间更短
3.可以在大型问题中使用Hessian矩阵乘法函数或jacobian矩阵乘法函数来节省内存
4.可以提供梯度或Hessian矩阵提高精度与效率
选择求解器
使用矩阵与向量定义目标函数与约束
使用函数定义目标函数与约束
调用求解器
操作步骤:
1.选择求解器
2.编写目标函数
3.编写约束
4.设置选项
5.调用求解器求解
三、Global Optimization Toolbox---全局优化工具箱
使用fmincon寻找全局最优解依赖于初始值
全局优化工具箱:求解器