黄成华
(兰州职业技术学院 艺术设计学院, 甘肃兰州730070)
“建筑制图与识图”是建筑室内设计专业的一门专业核心课程,旨在教授学生室内施工图规范标准、制图和识图方法,培养学生独立完成建筑制图和识图的能力。在授课期间,教师每节课都会布置相应的制图练习作业,并对学生提交的作业进行批阅,指出存在的错误,提出修改意见。然而,制图作业量大,教师批阅时更依赖于自身的制图水平和经验,而学生的学习能力和接受水平参差不齐,一份作业往往需要多次批阅和反复修改。同时,由于缺乏量化的评价标准,致使教师无法统一客观评价同级学生“建筑制图与识图”课程整体学习状况。鉴于此,笔者设计开发了基于室内施工图制图标准的AI审图系统,该系统基于深度学习框架TensorFlow的卷积神经网络(简称CNN)模型,构建全连接的神经网络模型。在深度学习的模型开发过程中,充足的数据集及精准的数据标注对最终模型效果来说至关重要。为了提高AI审图系统的性能和鲁棒性,系统以室内施工图制图国家标准等规范文件为基准,以课程作业和行业规范图纸为基础组建人工标注数据集,用于训练初始模型;利用训练好的模型对未标注的数据进行预测,通过优化算法和数据迭代方式实现对“建筑制图与识图”课程作业的审查,指出其错误,提出修改意见。学生使用AI审图系统可以实时检查、修改和完善作业,跳过等待教师批阅过程。教师使用AI审图系统可以量化数据分析,全面了解学生课程知识的掌握情况,有针对性地开展教学,提高教学质量。
室内施工图是应用于室内装饰项目的施工图纸,用于表现设计意图、配合报价、指导施工。使用规范的制图语言绘制的图纸,才能作为设计施工和报审的通用语言。具体要求为:目录体系合理且索引逻辑清晰,便于图纸的增减和设计变更;建筑装饰专业信息客观完整,与室内设计方案相匹配;图纸比例合理、排版美观,所用图线、字体、标注等符合行业规范[1]。
为了使系统具备更好的通用性和灵活性,适应教学中不断出现的新场景,增强扩展性,本系统采用水平式系统框架结构。核心结构采用基于深度学习框架TensorFlow的CNN模型实现基于室内施工图制图标准的AI审图,TensorFlow具有分布式计算能力,能够并行训练模型,适用于后续开展更大量级的训练[2]。
接收用户上传的图纸文件,筛选文件格式,退回非PDF格式文件,记录图纸作者信息。
对图纸文件信息进行区域划分、构件识别、强条审查等方面的数据处理:
1.对室内施工图图纸文件进行组件拆分和颜色分层;
2.使用神经网络模型对各层进行目标检测,确定各个组件的目标框;
3.组合各层各块目标框;
4.使用角度旋转、描边、遮挡和干扰等方式增强数据;
5.采用深度学习模型训练各组件,结合室内施工图中位置、上下文特征等信息判断绘图规范性。
CAD文件以PDF格式导入,以文本和图像形式输出,图1展示了该系统的数据结构。
图1 AI审图系统数据结构
1.数据集加载和预处理
系统采集与“建筑制图与识图”课程相关的多种类型的室内施工图纸作为数据集,包括课程标准作业图、学生作业图和企业样板施工图集等,目前已采集到2000余套。系统首先使用OpenCV库对采集数据集进行加载和预处理,预处理包括提高图像质量,减少噪声对模型训练的影响,并对数据集进行大小调整、裁剪和归一化等操作,确保图像在训练过程中的清晰度和准确性。
2.数据集划分
将数据集划分为训练集、测试集和验证集,以便在真实数据上对模型进行评估和泛化。
3.训练集权重调整
通过观测训练结果,调整数据结果权重,使其在现有数据训练条件下训练集权重参数更为合理。
4.测试集更迭
利用完成训练的模型对未标注数据开展预测,分析预测结果,提出优化方案,提高模型输出合理性。
5.验证集评估
使用验证集来评估模型训练的结果,为系统的准确性和稳定性提供修正依据。以下是使用Python语言编写代码,完成数据集加载和预处理的过程。
image_height =128
image_width =128
#图像大小调整和归一化
defpreprocess_image(image):
image = cv2.resize(image, (image_height, image_width))
image = image.astype('float32') / 255.0
return image
#预处理训练集图像
train_images = [preprocess_image(image)for image in train_images]
#预处理测试集图像
test_images = [preprocess_image(image)for image in test_images]
#预处理验证集图像
val_images = [preprocess_image(image)for image in val_images]
#对标签进行编码
fromsklearn.preprocessing import LabelEncoder
fromtensorflow.keras.utils import to_categorical
#对标签进行编码
label_encoder = LabelEncoder()
train_labels_encoded = label_encoder.fit_transform(train_labels)
test_labels_encoded = label_encoder.transform(test_labels)
val_labels_encoded = label_encoder.transform(val_labels)
#将标签转换为one-hot编码
num_classes =len(label_encoder.classes_)
train_labels_one_hot = to_categorical(train_labels_encoded, num_classes)
test_labels_one_hot = to_categorical(test_labels_encoded, num_classes)
val_labels_one_hot = to_categorical(val_labels_encoded, num_classes)
通过上述步骤完成数据的整理、划分和预处理,为后续的CNN模型训练做好准备。
CNN是一种深度学习算法,广泛应用于图像处理和计算机视觉领域[3]。AI审图系统采用深度学习框架TensorFlow的CNN模型构建,CNN模型的架构包括卷积层、池化层、全连接层等,最终通过全连接层输出预测结果,具体架构见图2。
图2 AI审图系统的CNN网络架构
AI审图系统中的CNN模型训练通过多层的卷积和池化操作逐步提取图像的视觉特征。输入层接收经过规范化处理的图像,并使用局部感受野与权值共享的方式提取基本的视觉特征,如边缘和角点[4]。卷积层生成特征图,其中每个位置的单元来自不同特征图,保留了图像丰富的特征。池化层进行降采样操作,降低分辨率并增强平移和形变的鲁棒性。用交替分布的卷积层和池化层,实现“双金字塔结构”,增加特征图的数量并降低分辨率。
采用深度学习框架TensorFlow,构建、训练和部署CNN模型,学习和提取室内施工图的关键特征,实现人工智能审图。AI审图系统TensorFlow架构设计如图3:
图3 AI审图系统TensorFlow 架构
该系统模型训练阶段使用了训练函数(train())和测试函数(test())。这两个函数接收输入数据(input)和相应的标签(也称为目标值target)作为输入参数。特别是训练函数,它还接受一个损失阈值(loss_threshold)作为迭代终止条件。其正向传播和反向传播的算法的步骤是:
1.初始化模型参数,设置优化算法和超参数,执行下一项;
2.执行训练函数(train()),执行下一项;
3.执行向前算法(forward()),计算预测结果,执行下一项;
4.计算损失函数值,损失是否小于设定阈值(loss_threshold)。若大于设定阈值,则执行第5步骤;若小于设定阈值,则执行第2步骤;
5.计算损失函数对于模型参数的梯度,使用梯度下降法优化算法,执行第6步骤;
6.预测函数(predict()) 输入矩阵,读取样本和标签,调用完成训练模型的向前算法(forward()),得到输出层结果,执行下一项;
7.解析输出结果,提取到预测目标值,输出位置的y坐标,即模型对输入样本的预测结果,执行下一项;
8.输出训练得到的模型参数。
将通过测试的系统进行封装,利用服务器环境部署到学校用于上课的机房电脑系统,以及网络课程的手机端,通过AI审图系统的审图和评价功能,教师可以实时查看学生提交的作业。
模型训练和验证过程:首先,对模型进行足够多轮次的训练,这时模型开始过拟合;其次,根据第一次训练结果,确定后续训练所需要的正确轮数;最后,使用正确轮数,重头开始启动新一次训练。测试函数(test())返回测试集数据的损失值和误差值的输出结果如图4所示。
图4 误差值和损失值输出结果
在Python代码生成的误差PR图中,测试函数值与训练函数值的误差曲线非常接近,表明系统误差小,预测结果较为准确,训练值和测试值输出结果如图5所示。
图5 训练值和测试值输出结果
print(f"Epoch {epoch + 1}/{NUM_EPOCHS}"
f" Training Loss:{running_loss:.4f}, Validation Loss: {val_loss:.4f}")
#训练完成后,可以使用模型进行预测
#测试数据集 test_dataset
predictions = []
model.eval()
withtorch.no_grad():
for test_inputs, _ in test_dataset:
test_outputs = model(test_inputs)
predicted_label = torch.argmax(test_outputs)
predictions.append(predicted_label.item())
#输出预测结果
print(predictions)
评价指标:准确率、召回率以及F1的值。
1.准确率 P=切分正确的标签/总的标签数;
2.召回率 R=切分正确的标签/正确标签的总数;
运行下列Python代码,调用sklearn.metrics库中的precision_score,recall_score和f1_score函数来计算准确率、召回率和F1值。将模型设置为评估模式,调用torch.no_grad上下文管理器,避免在评估过程中反复计算梯度,提高系统运行效率。输出结果如表1所示。
表1 测试结果
model.eval()
#初始化评估指标
val_loss =0.0
correct =0
predictions = []
targets = []
withtorch.no_grad():
for batch_idx, (inputs, labels) in enumerate(val_loader):
outputs = model(inputs)
val_loss += criterion(outputs, labels).item()
predicted = torch.max(outputs.data,1)
predictions.extend(predicted.tolist())
targets.extend(labels.tolist())
correct += predicted.eq(labels).sum().item()
#获取类别标签
labels = ['学生作业集', '施工图纸集', '公司施工图集', '批改后图纸集', '不完整图纸集']
#计算准确率
accuracy = correct /len(val_loader.dataset)
#计算召回率
recall = recall_score(targets, predictions,average='macro')
#计算F1值
f1 = f1_score(targets, predictions,average='macro')
#打印评估结果
print(f'Accuracy: {accuracy:.4f}')
print(f'Recall: {recall:.4f}')
print(f'F1: {f1:.4f}')
抽取100份样本,系统模型的训练时间为192秒,预测时间为79秒, F1值达到93.4%,准确率达到94%,召回率为93%,分析结果达到了预期效果。
该系统的Web应用可部署在学校机房电脑上,无登录密钥。学生使用Web版的AI审图系统,通过简单的上传、查阅和下载流程,完成图纸作业检查。教师通过查阅后台数据,能够获得学生提交作业次数、正确率、知识点出错频次等数据。
利用React Native框架开发移动端应用程序,使用HTML、CSS和JavaScript等工具,将其封装为适用于iOS和Android平台的App。
图6是基于React Native程序开发的移动应用程序界面示例,展示该移动应用程序在模拟器上的运行场景。图7为通过AI审图系统识图评判后的施工图纸及系统反馈的错误提示和修改建议。
图6 基于React Native程序开发的移动应用程序界面
图7 图纸反馈
本设计实现了基于室内施工图制图标准的AI审图系统。该系统利用深度学习技术,能够自动识别和审查“建筑制图与识图”课程室内施工图纸中的文字、符号、线条等元素及其相对应的关系,实现了相关图纸的人工智能审查和信息反馈,为“建筑制图与识图”课程教学提供了有力的辅助。笔者将在此研究基础上,与更多高校相关专业教师交流探讨,增加模型训练参数数量,优化系统算法,以期能够开展更广范围的模型训练,提升模型的泛化能力。