当前位置:AIGC资讯 > AIGC > 正文

Stable diffusion/ComfyUI:RuntimeError: mat1 and mat2 shapes cannot be multiplied (154x2048 and 768x3

项目场景:

今天做项目的时候遇到一个报错。讲一下这个问题的原因和解决方法。
先看报错日志。我用的是秋叶老师的启动器,所以直接上控制台日志截图。

问题描述

工作流, 我是添加了效率节点的加载器和采样器。同时集成了ControlNet堆。
问题报错:RuntimeError: mat1 and mat2 shapes cannot be multiplied (154x2048 and 768x300)

——

原因分析:

可以看到,我们的大模型选择的是SDXL模型。ControlNet堆选择的是1.1版本的ControlNet,它所对应的模型应该是SD1.5模型。

所以,在进行K采样器处理的时候发生了,图片像素不兼容不可处理的报错。

解决方案:

方案1:这里想解决这个问题,在不改变工作流结构的情况下最简单的方法就是切换为SD1.5的大模型就可以了

方案2:但是如果实在需要使用SDXL的大模型,那么就不能使用ControlNet堆了,需要使用SDXL的ControlNet节点。

这样就可以了,正常生成图片不会报错。(报错贴,没找合适的SDXL模型,请无视出图质量。)

总结

### 项目场景总结
在做项目时,我遇到了一个技术报错,该问题源自于我在使用工作流添加了效率节点的加载器和采样器,并集成了ControlNet堆的情况下发生的。报错指示了矩阵运算中的维度不匹配问题,影响了数据处理的顺利进行。
### 问题描述
问题描述中指出,具体报错是`RuntimeError: mat1 and mat2 shapes cannot be multiplied (154x2048 and 768x300)`,这意味着在某处的矩阵乘法操作中,输入的两个矩阵维度无法对应乘起来。成因在于大模型(我选用的是SDXL模型)与ControlNet堆(1.1版本更适用于SD1.5模型)之间存在不兼容,特别是在图片像素处理上。
### 原因分析
经过诊断,原因明了:我当前使用的是SDXL模型,而集成的ControlNet堆(1.1版本)是按照SD1.5模型设计的。这种模型不匹配导致了在处理图像数据(如通过K采样器)时出现了像素尺寸的不兼容问题,进而触发了矩阵乘法维度的错误。
### 解决方案
为了解决这一问题,我提供了两种可行的方案:
1. **方案1:切换至兼容的大模型**
为了避免修改工作流结构,最直接的方法是更换当前的大模型为SD1.5。这样,控制网堆和SD1.5模型将兼容,从而避免维度不匹配的错误,实现无缝衔接和顺利运行。
2. **方案2:适配ControlNet节点**
若项目中必须使用SDXL模型,那么需要放弃当前的ControlNet堆,转而使用专为SDXL设计的ControlNet节点。这样虽然对工作流做出了一定的调整,但能确保SDXL大模型与ControlNet的完美配合,解决报错的同时保持原有的功能性和质量要求。
通过上述任一方案的实施,可以有效地解决报错问题,并确保项目顺利推进,生成高质量的图像输出。

更新时间 2024-09-17