
簡介面向建筑安全檢測與計算機視覺研究者的墻壁損傷缺陷分割數據集以labelme標注格式提供可用于訓練和評估圖像分割算法實現(xiàn)剝落、銹蝕、裂縫等損傷的自動識別與分類。資源包共1個docx文件約2.1MB內含數據集說明與標注規(guī)范7820張640×640像素jpg圖片均配有對應json標注文件采用多邊形框精細描繪損傷區(qū)域覆蓋涂鴉、支座、潮濕斑跡、銹蝕、剝落、泛堿、空洞區(qū)域、風化、殘留模板、空腔、外露鋼筋、伸縮縫、裂縫、排水、活動裂縫、接頭膠帶、巖窩、防護設備、水侵蝕混凝土及物體共20個類別其中銹蝕、剝落、空腔等類別標注量較為豐富。已有103人學習關注。讀者可據此了解數據集結構、類別分布與標注規(guī)則并自行將json轉換為mask、yolo或coco格式用于語義分割或實例分割實驗為建筑墻壁健康監(jiān)測研究提供數據基礎。1. 建筑墻壁損傷缺陷分割數據集7820 張圖背后的“建筑病歷本”到底長什么樣如果你第一次聽到“建筑墻壁損傷缺陷分割數據集”這個詞大概率會以為它是一份檢測報告或者某個軟件的名字。其實都不是。它更像一本被拆成 7820 頁的“建筑病歷本”每一頁是一張 640×640 的墻壁照片旁邊配一份 JSON 文件用多邊形把墻上的裂縫、銹蝕、剝落、泛堿一塊塊圈出來并寫上這屬于哪一類毛病。這本“病歷本”一共記錄了 20 種損傷類別從涂鴉、支座到外露鋼筋、水侵蝕混凝土覆蓋了建筑外墻和結構表面常見的缺陷形態(tài)。搞懂它的價值在于過去判斷一面墻有沒有問題靠的是老師傅拿手電筒一寸寸看經驗難復制、標準難統(tǒng)一。而有了這種帶像素級標注的數據算法就能學著“看圖識病”把人工巡檢變成可批量、可復現(xiàn)的自動識別。對做計算機視覺的人來說它是一份現(xiàn)成的分割訓練素材對建筑檢測領域的人來說它是一份把“墻面病害”翻譯成機器能讀的語言的樣本集。下面就從它是什么、為什么這樣設計、容易和什么搞混一層層拆開講。2. 為什么是 labelme 格式一份“只給原料不給成品”的數據集2.1 labelme 格式到底存了什么很多人下載完數據集解壓一看只有 jpg 和 json沒有常見的 mask 圖片第一反應是“是不是缺文件”。其實這正是 labelme 格式的特點它不直接給你一張黑白掩膜圖而是把標注信息寫進 JSON 里。每份 JSON 記錄的是多邊形頂點坐標、類別名稱、圖片路徑這些原始信息相當于把“畫框的過程”保存了下來而不是只保存“畫完的結果”。打個比方mask 文件像是一張已經烤好的蛋糕你只能看不能改配方labelme 的 JSON 則像一份帶步驟的食譜面粉多少、糖多少、烤箱幾分鐘都寫著你隨時可以調整。數據集明確說明“不包含 mask 文件僅僅包含 jpg 圖片和對應的 json 文件”這不是偷工減料而是把轉換的自由度留給了使用者。你可以把它轉成語義分割用的 mask也可以轉成 YOLO 或 COCO 格式做實例分割路線自己選。從標注工具看這批數據用的是 labelme 5.5.0標注方式是 polygon 多邊形框而不是簡單的矩形框。多邊形意味著標注者沿著損傷區(qū)域的實際輪廓描邊裂縫的細長走向、剝落的不規(guī)則邊緣都能被貼合這對分割任務比矩形框精細得多。圖片統(tǒng)一為 640×640 分辨率尺寸規(guī)整省去了大量預處理時縮放裁剪的麻煩。2.2 為什么類別設計得這么“細”20 個類別乍看有點多但拆開看是有層次的。有的描述材料劣化比如 Rust銹蝕、Spalling剝落、Efflorescence泛堿、Weathering風化有的描述結構異常比如 Crack裂縫、ACrack活動裂縫、Hollowareas空洞區(qū)域、Cavity空腔、Rockpocket巖窩還有的偏向附屬設施或施工遺留比如 Bearing支座、EJoint伸縮縫、Drainage排水、JTape接頭膠帶、Restformwork殘留模板、PEquipment防護設備。這種細分不是為了湊數而是因為不同缺陷的成因和處理方式差別很大模型如果只能識別“墻壞了”實用價值有限能分清是銹脹引起的剝落還是泛堿引起的表面析出才談得上輔助判斷。類別數量分布也很能說明問題。Rust 的標注數達到 14665Spalling 有 9849Cavity 有 9222這三類占了很大比重而 object 只有 13 個ACrack 只有 423 個JTape 1076 個。這種長尾分布是真實場景的寫照——銹蝕和剝落在老舊建筑上隨處可見活動裂縫和雜物的出現(xiàn)頻率則低得多。使用時要意識到樣本少的類別訓練難度天然更高不能指望模型對每個類別都一視同仁地準。提示數據集本身不對訓練出的模型精度或權重作任何保證它提供的是“準確且合理的標注”不是“開箱即用的檢測器”。把它當成原料而不是成品。2.3 7820 張圖意味著什么量級7820 張 jpg 配 7820 份 json數量上一一對應沒有漏標。這個規(guī)模在建筑缺陷分割里屬于中等偏上夠用來訓練一個中等復雜度的分割網絡也夠做一次有說服力的對比實驗但還不至于大到需要分布式訓練。640×640 的分辨率對分割任務是個務實的選擇——再高會顯著增加顯存和標注成本再低則裂縫這類細長目標容易糊成一片。從使用角度看這個量級適合做幾件事訓練一個基線分割模型、驗證某種數據增強策略對缺陷識別的效果、或者拿其中一部分做微調。它不適合直接當成“萬能檢測器”的充分條件因為建筑場景的光照、材質、拍攝角度變化極大單一數據集很難覆蓋全部情況。理解這一點比記住 7820 這個數字更重要。3. 20 個類別怎么讀從“墻面病害”到“機器可讀標簽”3.1 材料劣化類銹蝕、剝落、泛堿、風化這幾類是墻面最直觀的“病”。Rust 指鋼筋或金屬件銹蝕后在表面留下的銹跡和銹脹標注數 14665是全集最多的類別說明它在樣本里出現(xiàn)得極其頻繁。Spalling 是剝落混凝土表層成片掉渣往往和銹脹、凍融有關標注數 9849。Efflorescence 是泛堿墻面析出白色鹽霜看著像發(fā)霉但不是標注數 3956。Weathering 是風化表面被日曬雨淋磨得粗糙變色標注數 4621。這四類容易在視覺上互相干擾銹跡偏紅褐泛堿偏白剝落有凹凸陰影風化則是整體質感變化。模型要分清它們靠的不是顏色單一特征而是紋理和邊界的組合。標注時用多邊形沿實際區(qū)域描邊正好保留了這些邊界信息比矩形框更能體現(xiàn)“病斑”的形狀。3.2 結構異常類裂縫、活動裂縫、空腔、空洞區(qū)域、巖窩Crack 是普通裂縫標注數 3612ACrack 是活動裂縫標注數 423數量少但含義特殊——活動裂縫意味著它還在發(fā)展對結構安全的提示更強。Hollowareas 是空洞區(qū)域標注數 1538Cavity 是空腔標注數 9222兩者名字接近但標注量差很多使用時要按數據集給出的定義來理解不要自行合并。Rockpocket 是巖窩標注數 616屬于混凝土澆筑或基層處理留下的凹坑。裂縫類目標的特點是細長、對比度低分割難度高。640×640 的分辨率下一條細裂縫可能只占幾個像素寬多邊形標注能否貼合走向直接影響模型學到的邊界質量。這也是為什么數據集強調“對類別進行畫多邊形框 polygon”——矩形框會把大量背景裹進去細裂縫就學不準了。3.3 附屬與施工遺留類支座、伸縮縫、排水、接頭膠帶、殘留模板、防護設備Bearing支座標注 1201EJoint伸縮縫506Drainage排水1649JTape接頭膠帶1076Restformwork殘留模板1019PEquipment防護設備1892。這些類別嚴格說不是“損傷”而是墻面上的構件或施工痕跡。它們被納入標注是因為在真實巡檢畫面里這些元素經常和缺陷混在一起模型如果分不清“這是伸縮縫”和“這是裂縫”就會誤報。舉個具體場景一條筆直的伸縮縫在照片里和一條直裂縫很像但前者是設計預留后者是病害。數據集把 EJoint 單獨列類就是讓模型有機會學會區(qū)分。同理接頭膠帶和殘留模板屬于施工遺留容易被當成表面異物單獨成類能減少混淆。這類“非損傷類別”的存在恰恰說明數據集的設計考慮了真實巡檢的干擾因素而不是只挑干凈的病害樣本。3.4 長尾類別與 object 的定位object 只有 13 個標注是全集最少的類別含義是“物體”大概率用于兜底標注畫面里無法歸入其他類別的干擾物。ACrack 423、Rockpocket 616、EJoint 506 也屬于長尾。長尾類別在訓練時容易被大類淹沒如果直接按整體精度評估模型可能對它們幾乎不響應卻 still 拿到好看的分數。使用這份數據時比較穩(wěn)妥的做法是分類別看指標而不是只看一個總數。注意類別名稱里的英文拼寫如 WConccor、Restformwork是數據集原始定義轉換格式時保持原樣不要自行“糾正”否則和 json 里的標簽對不上。4. 易混概念辨析分割數據集不是檢測數據集labelme 不是 mask4.1 易混點一分割數據集和檢測數據集很多人把“缺陷分割數據集”和“缺陷檢測數據集”當成一回事?;煜脑蚴莾蓚€任務都輸出“哪里有缺陷”看起來差不多。區(qū)別在于輸出粒度檢測任務給的是矩形框告訴你“這個區(qū)域有裂縫”分割任務給的是像素級掩膜告訴你“這幾個像素是裂縫旁邊那些不是”。這份數據集用 polygon 多邊形標注走的是分割路線雖然也能降級轉成檢測框用但它的核心價值在像素級邊界。怎么區(qū)分看標注文件里存的是什么。如果只有框的左上角坐標和寬高那是檢測如果是多邊形頂點序列那是分割。這份數據的 json 里是多邊形點集所以它天然服務于語義分割或實例分割而不是單純的框檢測。4.2 易混點二labelme 的 json 和 mask 圖片新手最容易卡在這里以為下載完就能直接喂給分割網絡結果發(fā)現(xiàn)沒有 mask 圖。json 是“標注的源文件”mask 是“標注的渲染結果”。json 里存的是類別和多邊形坐標mask 是把這些多邊形按類別填成不同像素值的圖。兩者信息等價但格式不同。數據集只給 json意味著轉換這一步要自己做可以轉 mask也可以轉 YOLO 的 txt 或 COCO 的 json。為什么這樣設計因為不同框架要的格式不一樣統(tǒng)一給源文件反而最靈活。代價是使用者得會寫轉換腳本或者找現(xiàn)成工具。這不是缺陷是取舍。4.3 易混點三語義分割和實例分割語義分割把同一類別的所有像素標成同一個值不區(qū)分“這是第幾條裂縫”實例分割則要把每一條裂縫單獨區(qū)分開。這份數據的 json 里每個多邊形是獨立對象理論上兩種任務都能支持但轉格式時要明確目標轉成語義 mask 就把同類合并轉成實例標注就保留每個多邊形的獨立性。搞混了會導致評估口徑不一致訓練出來的模型用途也對不上。4.4 易混點四標注數量多不等于類別重要Rust 有 14665 個標注object 只有 13 個數量差距巨大。有人會直覺認為“標注多的類別更重要”其實數量多只說明它在樣本里常見不代表它在業(yè)務上優(yōu)先級高?;顒恿芽p只有 423 個但它對結構安全的警示意義可能遠超大量普通銹跡。使用數據集時類別權重應該按業(yè)務目標來定而不是按標注數量排序。4.5 易混點五數據集開放不等于模型可用數據集說明里寫得很清楚只提供圖片和標注不對訓練出的模型或權重精度作保證。這和“下載即用”是兩回事?;煜c在于很多人把“數據質量好”等同于“模型效果好”。實際上標注準確只是必要條件模型效果還取決于網絡結構、訓練策略、數據增強、場景匹配度。把這份數據當成起點而不是終點心態(tài)就對了。5. 什么時候該用它、什么時候別硬上一份邊界判斷5.1 適合用的場景第一類做建筑缺陷分割的基線實驗。7820 張 640×640 圖、20 類多邊形標注規(guī)模適中、格式統(tǒng)一拿來跑一個分割網絡、驗證某個改進模塊有沒有效是很順手的起點。第二類做 labelme 到其他格式的轉換流程驗證。json 轉 mask、轉 YOLO、轉 COCO這套數據量足夠暴露轉換腳本里的邊界問題比如多邊形自相交、類別名映射遺漏。第三類做長尾分布下的類別不平衡研究。Rust 一萬多、object 十幾個天然就是一個不平衡樣本適合測試重采樣、損失加權這些手段。具體到操作層面轉換時可以先用一小批數據驗證流程比如先取 50 張跑通再全量。下面是一段把 labelme json 轉成二值 mask 的示意代碼只保留多邊形填充邏輯實際使用時按類別映射改顏色值import json import numpy as np from PIL import Image, ImageDraw # 讀取單份 labelme json把多邊形按類別填成不同像素值 with open(sample.json, r, encodingutf-8) as f: data json.load(f) h, w data[imageHeight], data[imageWidth] mask np.zeros((h, w), dtypenp.uint8) # 類別名到像素值的映射需與訓練時的類別表一致 cls_map {Crack: 1, Rust: 2, Spalling: 3} draw ImageDraw.Draw(Image.fromarray(mask)) for shape in data[shapes]: label shape[label] if label not in cls_map: continue points [tuple(p) for p in shape[points]] # polygon 填充第三個參數是類別像素值 ImageDraw.Draw(Image.fromarray(mask)).polygon(points, fillcls_map[label])這段代碼的關鍵點有三個imageHeight和imageWidth決定 mask 尺寸必須和原圖一致shapes里每個元素的points是多邊形頂點順序不能亂cls_map是類別名到像素值的映射必須和后續(xù)訓練配置對齊漏一個類別就會導致該類被當成背景。實際轉換時還要處理多邊形點數為奇數、坐標越界這些臟數據建議先統(tǒng)計一遍再批量跑。5.2 不適合硬上的場景如果目標是直接上線一個“拍張照就知道墻壞沒壞”的產品這份數據單獨不夠。它覆蓋的是特定拍攝條件下的 640×640 畫面真實巡檢的光照、距離、遮擋變化更復雜模型泛化需要更多場景數據補充。如果目標是檢測非墻面對象比如路面、橋梁底面類別體系對不上硬套只會得到一堆錯標。如果團隊沒有格式轉換能力又不愿意寫腳本那 labelme 的 json 會成為第一道坎這時候要么先補轉換工具鏈要么換現(xiàn)成的 mask 格式數據集。還有一個容易被忽略的邊界這份數據不包含模型評估結果也沒有劃分訓練集和驗證集。拿到手需要自己切分切分時要注意同一面墻的多個角度圖片不要跨集泄漏否則驗證分數會虛高。這個坑我踩過——早些年拿類似數據直接隨機切分驗證集里混進了訓練集同場景的圖指標好看得離譜換真實場景就翻車。從那以后我每次切分前都先按拍攝來源分組再在組內隨機寧可訓練集小一點也不讓驗證集“見過答案”。希望這份拆解能幫你在打開那 7820 份 json 之前先想清楚自己要拿它做什么、缺哪一步、邊界在哪。本文還有配套的精品資源點擊獲取