黃成華
(蘭州職業技術學院 藝術設計學院, 甘肅蘭州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審圖系統。該系統利用深度學習技術,能夠自動識別和審查“建筑制圖與識圖”課程室內施工圖紙中的文字、符號、線條等元素及其相對應的關系,實現了相關圖紙的人工智能審查和信息反饋,為“建筑制圖與識圖”課程教學提供了有力的輔助。筆者將在此研究基礎上,與更多高校相關專業教師交流探討,增加模型訓練參數數量,優化系統算法,以期能夠開展更廣范圍的模型訓練,提升模型的泛化能力。