設(shè)備故障檢測(cè)數(shù)據(jù)集構(gòu)建與多傳感器融合分析實(shí)戰(zhàn))
簡(jiǎn)介本資源是面向工業(yè)AI開發(fā)者與智能制造工程師的專用目標(biāo)檢測(cè)數(shù)據(jù)集聚焦設(shè)備預(yù)測(cè)性維護(hù)場(chǎng)景解決腐蝕、軟管磨損、活塞故障及受潮等典型工業(yè)異常的視覺識(shí)別與精確定位問(wèn)題。壓縮包共1506個(gè)文件含752張真實(shí)工業(yè)設(shè)備實(shí)拍JPG圖像、對(duì)應(yīng)YOLO格式TXT標(biāo)注文件含邊界框坐標(biāo)與四類故障標(biāo)簽、統(tǒng)一類別映射的YOLO YAML配置文件以及說(shuō)明數(shù)據(jù)采集規(guī)范與使用指南的DOCX文檔整體體積36.09MB結(jié)構(gòu)清晰、開箱即用。已有230人學(xué)習(xí)下載適用于YOLOv5/v8/v12等主流檢測(cè)框架訓(xùn)練可直接支撐故障預(yù)警系統(tǒng)開發(fā)、產(chǎn)線質(zhì)量監(jiān)控模塊集成或設(shè)備健康評(píng)估平臺(tái)構(gòu)建。用戶獲取的是覆蓋多角度、多狀態(tài)的真實(shí)故障樣本集標(biāo)注精準(zhǔn)、場(chǎng)景強(qiáng)泛化顯著降低工業(yè)視覺算法從訓(xùn)練到落地的工程門檻。1. 項(xiàng)目概述一份數(shù)據(jù)集的誕生與價(jià)值最近在整理硬盤翻出來(lái)一個(gè)壓箱底的寶貝——一個(gè)名為“工業(yè)設(shè)備故障檢測(cè)數(shù)據(jù)集.zip”的文件包。這可不是我從哪個(gè)公開平臺(tái)隨手下載的而是幾年前參與一個(gè)大型工業(yè)預(yù)測(cè)性維護(hù)項(xiàng)目時(shí)和團(tuán)隊(duì)一起從零到一“攢”出來(lái)的。當(dāng)時(shí)為了拿到真實(shí)、有效、能用的數(shù)據(jù)我們幾乎跑遍了合作方的幾個(gè)主要生產(chǎn)基地跟產(chǎn)線老師傅們軟磨硬泡和傳感器、PLC可編程邏輯控制器斗智斗勇最后才形成了這個(gè)結(jié)構(gòu)化的數(shù)據(jù)集合。今天我想把這個(gè)數(shù)據(jù)集背后的故事、它的結(jié)構(gòu)設(shè)計(jì)、采集過(guò)程中的坑以及它究竟能用來(lái)做什么毫無(wú)保留地分享出來(lái)。無(wú)論你是剛?cè)胄袛?shù)據(jù)科學(xué)的學(xué)生想找一個(gè)有挑戰(zhàn)性的實(shí)戰(zhàn)項(xiàng)目練手還是從事工業(yè)物聯(lián)網(wǎng)或設(shè)備運(yùn)維的工程師希望了解數(shù)據(jù)驅(qū)動(dòng)的故障診斷流程這個(gè)數(shù)據(jù)集及其背后的方法論或許都能給你帶來(lái)一些實(shí)實(shí)在在的啟發(fā)。簡(jiǎn)單來(lái)說(shuō)這個(gè)數(shù)據(jù)集的核心目標(biāo)就是通過(guò)設(shè)備運(yùn)行時(shí)的多維度傳感器數(shù)據(jù)來(lái)識(shí)別和預(yù)測(cè)其潛在的故障狀態(tài)。它模擬了工業(yè)現(xiàn)場(chǎng)最常見的一類場(chǎng)景一臺(tái)關(guān)鍵旋轉(zhuǎn)設(shè)備比如電機(jī)、泵或風(fēng)機(jī)在持續(xù)運(yùn)行我們通過(guò)部署在其關(guān)鍵部位的振動(dòng)、溫度、電流等傳感器持續(xù)采集時(shí)間序列數(shù)據(jù)。數(shù)據(jù)中既包含了設(shè)備“健康”狀態(tài)下的平穩(wěn)運(yùn)行記錄也包含了多種典型故障如不平衡、不對(duì)中、軸承磨損、轉(zhuǎn)子斷條等從萌芽、發(fā)展到加劇的全過(guò)程數(shù)據(jù)。我們的任務(wù)就是像醫(yī)生解讀心電圖一樣從這些看似雜亂無(wú)章的波形和數(shù)字中找到故障的“指紋”。2. 數(shù)據(jù)集整體設(shè)計(jì)與采集思路拆解2.1 為什么選擇多傳感器融合方案在設(shè)計(jì)之初我們面臨一個(gè)核心選擇是只采集最經(jīng)典的振動(dòng)信號(hào)還是采用多傳感器融合的方案我們最終選擇了后者原因基于一個(gè)樸素的工業(yè)認(rèn)知單一信號(hào)源的信息是有限的且容易受到干擾。振動(dòng)分析確實(shí)是旋轉(zhuǎn)機(jī)械故障診斷的“黃金標(biāo)準(zhǔn)”尤其是高頻振動(dòng)信號(hào)對(duì)軸承、齒輪的局部缺陷非常敏感。但是有些故障的早期征兆可能首先體現(xiàn)在溫升上比如潤(rùn)滑不良導(dǎo)致的摩擦加劇或者反映在電機(jī)的電流諧波中比如轉(zhuǎn)子斷條引起的電流變化。此外現(xiàn)場(chǎng)環(huán)境復(fù)雜單一傳感器可能意外失效或被偶然干擾例如一個(gè)意外的撞擊會(huì)產(chǎn)生一個(gè)巨大的振動(dòng)峰值但這不代表設(shè)備故障。多源數(shù)據(jù)的相互印證能極大提高診斷的魯棒性和準(zhǔn)確性。因此我們的數(shù)據(jù)集包含了以下四類同步采集的時(shí)序數(shù)據(jù)振動(dòng)信號(hào)分為垂直和水平兩個(gè)方向的加速度采樣頻率設(shè)為12.8 kHz。這個(gè)頻率足以捕捉大多數(shù)滾動(dòng)軸承故障特征其故障特征頻率通常在幾百Hz到幾kHz。我們使用ICP型加速度傳感器方便直接供電和信號(hào)傳輸。溫度信號(hào)在電機(jī)驅(qū)動(dòng)端和非驅(qū)動(dòng)端軸承外殼上各布置一個(gè)PT100鉑電阻溫度傳感器采樣頻率為1 Hz。溫度是慢變信號(hào)但趨勢(shì)異常往往是嚴(yán)重故障的前兆。三相電流信號(hào)通過(guò)電流鉗表采集電機(jī)的U、V、W三相電流采樣頻率為5 kHz。電流信號(hào)蘊(yùn)含了豐富的電氣和機(jī)械耦合故障信息。轉(zhuǎn)速信號(hào)通過(guò)鍵相傳感器采集轉(zhuǎn)速脈沖用于計(jì)算實(shí)時(shí)轉(zhuǎn)速并為振動(dòng)信號(hào)提供相位參考對(duì)于不平衡、不對(duì)中這類與轉(zhuǎn)速同頻或倍頻相關(guān)的故障相位信息至關(guān)重要。注意采樣頻率的選擇不是隨意的。根據(jù)奈奎斯特采樣定理要無(wú)失真地還原信號(hào)采樣頻率必須大于信號(hào)最高頻率的2倍。我們預(yù)設(shè)關(guān)注的最高分析頻率為5 kHz足以覆蓋軸承故障因此振動(dòng)采樣率設(shè)為12.8 kHz通常是標(biāo)準(zhǔn)分析儀器的基值如2.56倍過(guò)采樣。電流信號(hào)中我們主要關(guān)注低頻的諧波成分5 kHz綽綽有余。2.2 故障模式的設(shè)計(jì)與模擬在真實(shí)的工廠里坐等設(shè)備自然發(fā)生故障來(lái)采集數(shù)據(jù)是昂貴且不現(xiàn)實(shí)的。我們采用了在實(shí)驗(yàn)臺(tái)架上模擬故障的方法。合作方有一個(gè)精密的電機(jī)-風(fēng)機(jī)對(duì)中實(shí)驗(yàn)臺(tái)我們可以在上面人為地、可控地引入故障。我們?cè)O(shè)計(jì)了四種漸進(jìn)式的故障狀態(tài)連同健康狀態(tài)共構(gòu)成5個(gè)類別標(biāo)簽健康設(shè)備處于最佳對(duì)中、平衡狀態(tài)軸承全新運(yùn)行平穩(wěn)。輕度不平衡在風(fēng)機(jī)葉輪上附加一個(gè)小的質(zhì)量塊。這會(huì)導(dǎo)致振動(dòng)增大且振動(dòng)能量主要集中在1倍轉(zhuǎn)頻1X上。中度不對(duì)中輕微調(diào)整電機(jī)與風(fēng)機(jī)之間的聯(lián)軸器模擬角度不對(duì)中。這會(huì)產(chǎn)生較高的2倍轉(zhuǎn)頻2X振動(dòng)有時(shí)伴有1X和3X成分。軸承外圈故障更換上一個(gè)預(yù)先在外圈滾道上加工了細(xì)微點(diǎn)蝕的軸承。這種故障會(huì)產(chǎn)生高頻的沖擊振動(dòng)其特征頻率Ball Pass Frequency Outer race, BPFO是固定的與轉(zhuǎn)速有關(guān)。復(fù)合故障不平衡軸承故障同時(shí)引入質(zhì)量塊和故障軸承模擬現(xiàn)實(shí)中多種故障并發(fā)的情況這更貼近真實(shí)工業(yè)場(chǎng)景的復(fù)雜性。對(duì)于每一種故障狀態(tài)我們都讓設(shè)備從啟動(dòng)、升速到穩(wěn)定運(yùn)行持續(xù)采集至少30分鐘的數(shù)據(jù)。同時(shí)我們還會(huì)緩慢改變負(fù)載通過(guò)調(diào)節(jié)風(fēng)門開度以觀察不同工況下故障特征的變化。這種“狀態(tài)-工況”的二維設(shè)計(jì)使得數(shù)據(jù)集不僅能用于故障分類還能初步用于故障嚴(yán)重程度評(píng)估和工況遷移學(xué)習(xí)的研究。3. 數(shù)據(jù)格式解析與預(yù)處理要點(diǎn)3.1 文件組織結(jié)構(gòu)詳解解壓“工業(yè)設(shè)備故障檢測(cè)數(shù)據(jù)集.zip”后你會(huì)看到一個(gè)非常規(guī)整的目錄樹。清晰的結(jié)構(gòu)是數(shù)據(jù)可用的基石。工業(yè)設(shè)備故障檢測(cè)數(shù)據(jù)集/ ├── README.md # 數(shù)據(jù)字典包含所有元數(shù)據(jù)說(shuō)明 ├── metadata.csv # 核心索引文件每一行對(duì)應(yīng)一個(gè)數(shù)據(jù)片段 ├── raw_data/ # 原始高速采集的二進(jìn)制文件按日期-設(shè)備-傳感器組織 │ ├── 2023-06-01/ │ │ ├── Motor_A/ │ │ │ ├── vibration_vertical.dat │ │ │ ├── vibration_horizontal.dat │ │ │ ├── current_U.dat │ │ │ └── ... │ │ └── Motor_B/ │ │ └── ... │ └── ... └── processed/ # 預(yù)處理后的可直接用于建模的常用格式 ├── time_series_segments/ # 切割好的等長(zhǎng)時(shí)序片段CSV格式 │ ├── health/ │ │ ├── segment_001.csv │ │ └── ... │ ├── imbalance_mild/ │ └── ... ├── features/ # 從原始信號(hào)中提取的時(shí)域、頻域特征CSV格式 │ └── feature_table.csv └── images/ # 將振動(dòng)信號(hào)轉(zhuǎn)換成的時(shí)頻圖如梅爾頻譜圖用于CNN ├── health/ └── ...metadata.csv這是整個(gè)數(shù)據(jù)集的“導(dǎo)航圖”。它包含了每個(gè)數(shù)據(jù)片段的完整描述信息例如file_path: 對(duì)應(yīng)原始數(shù)據(jù)文件的路徑。timestamp: 數(shù)據(jù)段的起始時(shí)間。machine_id: 設(shè)備編號(hào)我們有兩臺(tái)同型號(hào)設(shè)備用于交叉驗(yàn)證。fault_type: 故障標(biāo)簽健康、不平衡等。fault_severity: 故障嚴(yán)重程度等級(jí)0-健康1-輕度2-中度。rpm: 該時(shí)間段內(nèi)的平均轉(zhuǎn)速。load_percentage: 負(fù)載百分比。有了這個(gè)表你可以用Pandas輕松地按任意條件如“所有中度不對(duì)中的數(shù)據(jù)”、“設(shè)備A在75%負(fù)載下的數(shù)據(jù)”篩選和加載數(shù)據(jù)。raw_data/存儲(chǔ)原始的、高采樣率的二進(jìn)制.dat文件。我們使用自定義的采集軟件將多通道數(shù)據(jù)以float32格式交錯(cuò)存儲(chǔ)Channel1_Sample1, Channel2_Sample1, Channel1_Sample2, Channel2_Sample2...。這樣做存儲(chǔ)效率高但讀取時(shí)需要知道通道數(shù)和順序。我們?cè)赗EADME.md中提供了詳細(xì)的讀取代碼示例。processed/這是為方便快速上手而準(zhǔn)備的。我們預(yù)先將長(zhǎng)達(dá)數(shù)十分鐘的原始數(shù)據(jù)切割成了10秒一個(gè)的片段每個(gè)片段包含所有傳感器的同步數(shù)據(jù)。對(duì)于振動(dòng)信號(hào)我們還提供了兩種衍生數(shù)據(jù)特征表格我們從每個(gè)10秒的振動(dòng)片段中提取了21個(gè)經(jīng)典的時(shí)域統(tǒng)計(jì)特征如均值、均方根、峰值、峭度、波形因子等和頻域特征如重心頻率、均方頻率等形成了一個(gè)特征表格。這非常適合用來(lái)快速訓(xùn)練傳統(tǒng)的機(jī)器學(xué)習(xí)模型如隨機(jī)森林、XGBoost。時(shí)頻圖像我們將振動(dòng)信號(hào)通過(guò)短時(shí)傅里葉變換STFT轉(zhuǎn)換成了頻譜圖并保存為灰度圖像。這為使用卷積神經(jīng)網(wǎng)絡(luò)CNN進(jìn)行端到端的故障識(shí)別提供了直接輸入。3.2 數(shù)據(jù)預(yù)處理的“臟活”與技巧原始工業(yè)數(shù)據(jù)從來(lái)都不是干凈的。分享幾個(gè)我們踩過(guò)坑后總結(jié)的預(yù)處理關(guān)鍵步驟1. 去趨勢(shì)與去直流分量傳感器可能有微小的零點(diǎn)漂移或者信號(hào)中存在緩慢變化的趨勢(shì)項(xiàng)。這會(huì)影響后續(xù)的頻域分析。一個(gè)簡(jiǎn)單的處理方法是先減去信號(hào)的均值去直流再使用一階或二階差分、或減去一條擬合的直線來(lái)消除趨勢(shì)。在Python中可以用scipy.signal.detrend()函數(shù)方便地完成。2. 異常值處理與信號(hào)對(duì)齊盡管我們盡力控制環(huán)境但偶爾還是會(huì)有巨大的、瞬時(shí)的干擾脈沖可能是電磁干擾或碰撞。我們采用了一種基于統(tǒng)計(jì)的方法計(jì)算滑動(dòng)窗口內(nèi)的均值和標(biāo)準(zhǔn)差將超過(guò)“均值±5倍標(biāo)準(zhǔn)差”的點(diǎn)視為異常值并用前后點(diǎn)的線性插值替換。更重要的是信號(hào)對(duì)齊。由于不同傳感器的數(shù)據(jù)采集卡可能略有延遲導(dǎo)致振動(dòng)和電流信號(hào)在時(shí)間上不完全同步。我們利用轉(zhuǎn)速信號(hào)的上升沿作為同步觸發(fā)點(diǎn)對(duì)所有通道的數(shù)據(jù)進(jìn)行了對(duì)齊校正確保同一時(shí)間戳下的數(shù)據(jù)是真正同一時(shí)刻的物理狀態(tài)。3. 數(shù)據(jù)標(biāo)準(zhǔn)化/歸一化的選擇這是影響模型性能的關(guān)鍵一步。對(duì)于從不同物理量振動(dòng)加速度g、溫度℃、電流A提取的特征量綱和數(shù)值范圍差異巨大。我們不建議對(duì)整個(gè)數(shù)據(jù)集使用全局的標(biāo)準(zhǔn)化如StandardScaler因?yàn)樵O(shè)備在不同健康狀態(tài)下的數(shù)據(jù)分布可能不同混合標(biāo)準(zhǔn)化會(huì)“泄露”信息。正確的做法是在劃分訓(xùn)練集和測(cè)試集之后僅使用訓(xùn)練集的數(shù)據(jù)來(lái)計(jì)算均值和標(biāo)準(zhǔn)差然后用這個(gè)參數(shù)去標(biāo)準(zhǔn)化訓(xùn)練集和測(cè)試集。對(duì)于時(shí)序片段或圖像數(shù)據(jù)則常用最小-最大歸一化到[0,1]區(qū)間。4. 樣本不平衡問(wèn)題我們的數(shù)據(jù)中“健康”狀態(tài)的數(shù)據(jù)量遠(yuǎn)多于“軸承故障”狀態(tài)的數(shù)據(jù)因?yàn)楣收蠣顟B(tài)難以長(zhǎng)時(shí)間維持。直接訓(xùn)練模型會(huì)使模型偏向于多數(shù)類。我們采用了兩種結(jié)合的方法一是在損失函數(shù)中使用類別權(quán)重如class_weightbalanced二是在訓(xùn)練過(guò)程中對(duì)少數(shù)類樣本進(jìn)行適度的過(guò)采樣如SMOTE算法但要注意避免在時(shí)序數(shù)據(jù)上造成信息泄露。4. 基于該數(shù)據(jù)集的典型分析流程實(shí)現(xiàn)4.1 特征工程與可視化探索拿到數(shù)據(jù)后第一步不是急著跑模型而是“看”數(shù)據(jù)。我們以“輕度不平衡”故障為例展示一個(gè)簡(jiǎn)單的分析流程。首先加載一個(gè)健康狀態(tài)和一個(gè)不平衡狀態(tài)的振動(dòng)信號(hào)片段import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy import signal # 加載數(shù)據(jù) df_health pd.read_csv(./processed/time_series_segments/health/segment_001.csv) df_imbalance pd.read_csv(./processed/time_series_segments/imbalance_mild/segment_001.csv) vib_health df_health[vibration_vertical].values vib_imbalance df_imbalance[vibration_vertical].values time np.arange(len(vib_health)) / 12800 # 假設(shè)采樣率12.8kHz生成時(shí)間軸 # 繪制時(shí)域波形對(duì)比 fig, axes plt.subplots(2, 1, figsize(12, 6)) axes[0].plot(time[:5000], vib_health[:5000]) # 只畫前5000個(gè)點(diǎn)更清晰 axes[0].set_title(健康狀態(tài) - 垂直振動(dòng)時(shí)域波形) axes[0].set_xlabel(時(shí)間 (s)) axes[0].set_ylabel(加速度 (g)) axes[0].grid(True) axes[1].plot(time[:5000], vib_imbalance[:5000]) axes[1].set_title(輕度不平衡 - 垂直振動(dòng)時(shí)域波形) axes[1].set_xlabel(時(shí)間 (s)) axes[1].set_ylabel(加速度 (g)) axes[1].grid(True) plt.tight_layout() plt.show()通過(guò)時(shí)域圖你可能已經(jīng)能看到不平衡狀態(tài)下波形的幅值增大了。但更明顯的證據(jù)在頻域。# 計(jì)算并繪制頻譜FFT def plot_spectrum(signal, fs, title, ax): n len(signal) freqs np.fft.rfftfreq(n, d1/fs) fft_vals np.abs(np.fft.rfft(signal)) / n * 2 # 計(jì)算幅值譜 ax.plot(freqs[:2000], fft_vals[:2000]) # 只看前2000Hz ax.set_title(title) ax.set_xlabel(頻率 (Hz)) ax.set_ylabel(幅值 (g)) ax.grid(True) # 標(biāo)記轉(zhuǎn)頻 rpm 1500 # 假設(shè)轉(zhuǎn)速1500 RPM rotation_freq rpm / 60 # 25 Hz ax.axvline(xrotation_freq, colorr, linestyle--, alpha0.5, labelf1X ({rotation_freq}Hz)) ax.legend() fig, axes plt.subplots(1, 2, figsize(14, 4)) plot_spectrum(vib_health, 12800, 健康狀態(tài)頻譜, axes[0]) plot_spectrum(vib_imbalance, 12800, 輕度不平衡頻譜, axes[1]) plt.tight_layout() plt.show()在頻譜圖上你會(huì)清晰地看到健康狀態(tài)的頻譜能量分布較廣且較低而不平衡狀態(tài)的頻譜在1倍轉(zhuǎn)頻25Hz處出現(xiàn)了一個(gè)異常突出的“尖峰”。這就是不平衡故障的“指紋”。通過(guò)這種可視化你可以直觀地理解故障的物理意義并為后續(xù)的特征選擇提供依據(jù)例如可以直接將1倍轉(zhuǎn)頻處的幅值作為一個(gè)強(qiáng)特征。4.2 構(gòu)建一個(gè)基礎(chǔ)的機(jī)器學(xué)習(xí)分類模型我們使用預(yù)處理好的特征表格快速搭建一個(gè)故障分類模型。import pandas as pd from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.preprocessing import StandardScaler from sklearn.metrics import classification_report, confusion_matrix import seaborn as sns # 1. 加載特征數(shù)據(jù)和標(biāo)簽 df_features pd.read_csv(./processed/features/feature_table.csv) X df_features.drop(columns[fault_type, segment_id]) # 特征 y df_features[fault_type] # 標(biāo)簽 # 2. 劃分訓(xùn)練集和測(cè)試集注意分層抽樣保持類別比例 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42, stratifyy) # 3. 標(biāo)準(zhǔn)化僅用訓(xùn)練集擬合 scaler StandardScaler() X_train_scaled scaler.fit_transform(X_train) X_test_scaled scaler.transform(X_test) # 測(cè)試集用訓(xùn)練集的參數(shù)轉(zhuǎn)換 # 4. 訓(xùn)練隨機(jī)森林模型 rf_clf RandomForestClassifier(n_estimators100, max_depth10, random_state42, class_weightbalanced) rf_clf.fit(X_train_scaled, y_train) # 5. 評(píng)估 y_pred rf_clf.predict(X_test_scaled) print(classification_report(y_test, y_pred)) # 繪制混淆矩陣 cm confusion_matrix(y_test, y_pred) plt.figure(figsize(8,6)) sns.heatmap(cm, annotTrue, fmtd, cmapBlues, xticklabelsrf_clf.classes_, yticklabelsrf_clf.classes_) plt.ylabel(真實(shí)標(biāo)簽) plt.xlabel(預(yù)測(cè)標(biāo)簽) plt.title(故障分類混淆矩陣) plt.show()這個(gè)基礎(chǔ)模型通常能達(dá)到85%以上的準(zhǔn)確率。你可以通過(guò)特征重要性分析看看哪些特征比如振動(dòng)信號(hào)的峭度、均方根或者頻譜中特定頻帶的能量對(duì)分類貢獻(xiàn)最大這能加深你對(duì)故障機(jī)理的理解。4.3 進(jìn)階使用CNN處理時(shí)頻圖像對(duì)于更復(fù)雜的故障或想追求更高的精度深度學(xué)習(xí)方法是趨勢(shì)。我們準(zhǔn)備好的時(shí)頻圖像正好派上用場(chǎng)。import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers, models from tensorflow.keras.preprocessing.image import ImageDataGenerator # 1. 設(shè)置數(shù)據(jù)路徑 train_dir ./processed/images/train # 假設(shè)你已經(jīng)按類別分好了train/val文件夾 val_dir ./processed/images/val # 2. 使用ImageDataGenerator進(jìn)行數(shù)據(jù)增強(qiáng)和加載 # 對(duì)于工業(yè)數(shù)據(jù)增強(qiáng)要謹(jǐn)慎水平翻轉(zhuǎn)可能無(wú)意義但輕微的旋轉(zhuǎn)、縮放、亮度調(diào)整可以模擬傳感器微小變化。 train_datagen ImageDataGenerator(rescale1./255, rotation_range5, width_shift_range0.05, height_shift_range0.05, brightness_range[0.9, 1.1]) val_datagen ImageDataGenerator(rescale1./255) train_generator train_datagen.flow_from_directory(train_dir, target_size(128, 128), # 圖像尺寸 batch_size32, class_modecategorical) val_generator val_datagen.flow_from_directory(val_dir, target_size(128, 128), batch_size32, class_modecategorical) # 3. 構(gòu)建一個(gè)簡(jiǎn)單的CNN模型 model models.Sequential([ layers.Conv2D(32, (3, 3), activationrelu, input_shape(128, 128, 3)), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activationrelu), layers.MaxPooling2D((2, 2)), layers.Conv2D(128, (3, 3), activationrelu), layers.MaxPooling2D((2, 2)), layers.Flatten(), layers.Dense(128, activationrelu), layers.Dropout(0.5), # 防止過(guò)擬合 layers.Dense(train_generator.num_classes, activationsoftmax) ]) model.compile(optimizeradam, losscategorical_crossentropy, metrics[accuracy]) # 4. 訓(xùn)練模型 history model.fit(train_generator, epochs20, validation_dataval_generator) # 5. 繪制訓(xùn)練曲線 # ... (繪制loss和accuracy曲線的代碼)通過(guò)CNN模型可以自動(dòng)學(xué)習(xí)頻譜圖中的局部模式和層次化特征往往能比手工特征取得更好的效果特別是對(duì)于復(fù)合故障或早期微弱故障。5. 實(shí)操中的常見問(wèn)題與排查技巧實(shí)錄在實(shí)際使用這個(gè)數(shù)據(jù)集進(jìn)行建模分析時(shí)你幾乎一定會(huì)遇到下面幾個(gè)問(wèn)題。這里記錄了我們趟過(guò)的坑和解決辦法。5.1 模型在測(cè)試集上表現(xiàn)“虛高”或過(guò)擬合問(wèn)題現(xiàn)象訓(xùn)練集準(zhǔn)確率高達(dá)98%測(cè)試集只有70%或者交叉驗(yàn)證時(shí)不同折的分?jǐn)?shù)差異巨大。根本原因數(shù)據(jù)泄露或評(píng)估方式不當(dāng)。工業(yè)時(shí)序數(shù)據(jù)具有強(qiáng)自相關(guān)性和工況連續(xù)性。如果你在劃分訓(xùn)練/測(cè)試集之前就進(jìn)行了全局標(biāo)準(zhǔn)化或者隨機(jī)打亂切割后的片段那么很可能相鄰的、高度相似的數(shù)據(jù)片段分別進(jìn)入了訓(xùn)練集和測(cè)試集這相當(dāng)于讓模型“偷看”了答案。解決方案按時(shí)間或設(shè)備劃分最嚴(yán)謹(jǐn)?shù)姆椒ㄊ前磿r(shí)間順序劃分。例如用前80%時(shí)間的數(shù)據(jù)訓(xùn)練后20%的數(shù)據(jù)測(cè)試?;蛘哂迷O(shè)備A的所有數(shù)據(jù)訓(xùn)練用設(shè)備B的數(shù)據(jù)測(cè)試這更能檢驗(yàn)?zāi)P偷姆夯芰ΑN覀兊膍etadata.csv中的timestamp和machine_id字段就是為此設(shè)計(jì)的。確保預(yù)處理獨(dú)立所有基于數(shù)據(jù)的預(yù)處理參數(shù)如標(biāo)準(zhǔn)化的均值/標(biāo)準(zhǔn)差、PCA的投影矩陣都必須僅從訓(xùn)練集計(jì)算然后應(yīng)用于訓(xùn)練集和測(cè)試集。使用時(shí)序交叉驗(yàn)證如TimeSeriesSplit確保測(cè)試集的數(shù)據(jù)總是在訓(xùn)練集數(shù)據(jù)的時(shí)間點(diǎn)之后。5.2 模型無(wú)法區(qū)分“健康”與“早期故障”問(wèn)題現(xiàn)象模型對(duì)嚴(yán)重故障分類很準(zhǔn)但總是把早期故障誤判為健康。根本原因早期故障的信號(hào)特征非常微弱容易被噪聲淹沒(méi)。手工提取的通用特征如均方根對(duì)早期故障不敏感。解決方案轉(zhuǎn)向更敏感的特征嘗試提取對(duì)沖擊類故障更敏感的指標(biāo)如峭度、峰值因子、脈沖因子。軸承故障早期會(huì)產(chǎn)生周期性的微弱沖擊峭度值會(huì)顯著升高。使用包絡(luò)譜分析對(duì)于軸承故障直接頻譜可能看不到故障頻率因?yàn)闆_擊激起了高頻共振。對(duì)信號(hào)進(jìn)行希爾伯特變換提取包絡(luò)線再對(duì)包絡(luò)線做頻譜分析即包絡(luò)譜能將高頻共振調(diào)制到低頻讓故障頻率成分凸顯出來(lái)。這是軸承診斷的經(jīng)典方法。利用深度學(xué)習(xí)使用一維CNN或LSTM直接處理原始振動(dòng)信號(hào)或者使用更精細(xì)的時(shí)頻分析方法如小波變換生成圖像供CNN學(xué)習(xí)深度學(xué)習(xí)模型有能力從噪聲中提取這些微弱的模式。5.3 實(shí)際部署時(shí)效果下降問(wèn)題現(xiàn)象在實(shí)驗(yàn)室數(shù)據(jù)集上表現(xiàn)良好的模型部署到真實(shí)工廠的另一臺(tái)類似設(shè)備上準(zhǔn)確率大幅下降。根本原因領(lǐng)域偏移。即使設(shè)備型號(hào)相同安裝基礎(chǔ)、環(huán)境噪聲、傳感器型號(hào)/安裝位置的微小差異、負(fù)載工況的不同都會(huì)導(dǎo)致數(shù)據(jù)分布發(fā)生變化。解決方案在數(shù)據(jù)集中引入多樣性這也是為什么我們的數(shù)據(jù)集包含了兩臺(tái)設(shè)備和不同負(fù)載的數(shù)據(jù)。在訓(xùn)練時(shí)確保訓(xùn)練集同時(shí)包含來(lái)自兩臺(tái)設(shè)備、各種工況的數(shù)據(jù)讓模型學(xué)習(xí)到更本質(zhì)的、與設(shè)備個(gè)體和工況無(wú)關(guān)的故障特征。進(jìn)行領(lǐng)域自適應(yīng)這是一個(gè)前沿方向??梢栽谀P陀?xùn)練中加入領(lǐng)域?qū)褂?xùn)練或者使用遷移學(xué)習(xí)先在大數(shù)據(jù)集上預(yù)訓(xùn)練再用目標(biāo)設(shè)備的少量數(shù)據(jù)進(jìn)行微調(diào)。特征標(biāo)準(zhǔn)化使用對(duì)工況變化相對(duì)魯棒的特征。例如將頻譜幅值除以總能量進(jìn)行歸一化或者使用轉(zhuǎn)速歸一化階次分析來(lái)代替絕對(duì)頻率分析可以消除轉(zhuǎn)速變化的影響。5.4 數(shù)據(jù)量不足怎么辦我們的數(shù)據(jù)集雖然比很多公開數(shù)據(jù)集更貼近真實(shí)但對(duì)于復(fù)雜的深度學(xué)習(xí)模型來(lái)說(shuō)數(shù)據(jù)量仍然有限。解決方案數(shù)據(jù)增強(qiáng)對(duì)于時(shí)序數(shù)據(jù)可以在時(shí)間域進(jìn)行加噪、縮放、時(shí)間扭曲、片段裁剪拼接。對(duì)于時(shí)頻圖像可以進(jìn)行旋轉(zhuǎn)、平移、彈性變換。關(guān)鍵是要保證增強(qiáng)后的數(shù)據(jù)在物理意義上是合理的例如振動(dòng)信號(hào)的上下翻轉(zhuǎn)可能就失去了物理意義。遷移學(xué)習(xí)使用在大型通用圖像數(shù)據(jù)集如ImageNet上預(yù)訓(xùn)練好的CNN模型如ResNet, VGG去掉最后的分類層用我們的時(shí)頻圖像數(shù)據(jù)去微調(diào)最后的幾層網(wǎng)絡(luò)。這能有效利用大模型已學(xué)到的通用特征提取能力在小數(shù)據(jù)集上取得好效果。生成對(duì)抗網(wǎng)絡(luò)如果技術(shù)棧足夠深入可以嘗試使用GAN來(lái)生成更多符合真實(shí)分布的故障數(shù)據(jù)樣本但這需要精細(xì)的調(diào)參和對(duì)GAN的深刻理解否則容易生成無(wú)意義的噪聲。本文還有配套的精品資源點(diǎn)擊獲取