π CLiST: Multimodal Predictive Maintenance Model
π Model Description (λͺ¨λΈ κ°μ)
CLiST; Cross-modal Late-fusion integrated Sensor & Thermal networkλ μ€λ§νΈ μ μ‘° νμ₯μ μ΄μ‘μ₯μΉ(AGV/OHT)μμ λ°μνλ νν μνμ μ€μκ°μΌλ‘ κ°μ§νκ³ μμΈ‘νκΈ° μν΄ νμ΅λ μ¬μ νμ΅ κ°μ€μΉ(Pre-trained Weights)μ λλ€.
λ³Έ νλ‘μ νΈμ ν΅μ¬ λͺ¨λΈμΈ CLiSTλ λ©ν°λͺ¨λ¬ μ§μ° μ΅ν©(Late-Fusion) μν€ν μ²λ₯Ό λ€λ£¬ μ νμ°κ΅¬ λ Όλ¬Έμ μμ΄λμ΄λ₯Ό κΈ°λ°μΌλ‘, μ€μ μ€λ§νΈ μ μ‘° νμ₯μ μ΄μ‘μ₯μΉ λ°μ΄ν° νΉμ±μ λ§κ² μ§μ μ€κ³νκ³ PyTorchλ‘ κ΅¬ν(Implementation)ν λͺ¨λΈμ λλ€.
- π Reference Paper: A Multimodal Time-Frequency Fusion Architecture for Fault Diagnosis in Rotating Machinery
1D μκ³μ΄ μΌμ λ°μ΄ν°μ 2D μ΄νμ μ΄λ―Έμ§λ₯Ό λμμ λΆμνλ λ©ν°λͺ¨λ¬(Multimodal) μν€ν μ²λ₯Ό κ°μ§λ©°, μ₯λΉμ μνλ₯Ό 4κ°μ§ μνλ λ±κΈ(Normal, Attention, Warning, Danger)μΌλ‘ λΆλ₯ν©λλ€.
Developed by: μ μ΄μ΄ (Jeon Un-yeol)
Model type: Multimodal Classification Network (1D-CNN + Swin Transformer)
License: Apache-2.0
Language(s): Korean
ποΈ Model Architecture (λͺ¨λΈ ꡬ쑰)
1D Sensor Stream:
LightTSEncoder(Rolling Window + 1D-CNN)λ₯Ό ν΅ν΄ μκ³μ΄ μΌμμ ν΅κ³μ λΆμμ μ±(Mean, Var, Kurt)μ μΆμΆν©λλ€.2D Vision Stream:
LiteSwinEncoder(Swin-T κΈ°λ°)λ₯Ό ν΅ν΄ μ΄νμ μ΄λ―Έμ§μ κ΅μ λ°μ΄(Hot Spot) ν¨ν΄μ νμ ν©λλ€.Fusion Strategy: λ λͺ¨λ¬λ¦¬ν°μμ μΆμΆλ νΉμ§μ μ΅μ’ λΆλ₯κΈ° μ§μ μμ κ²°ν©νλ Late Fusion (μ§μ° μ΅ν©) λ°©μμ μ±ννμμ΅λλ€.
π How to Use (μ¬μ© λ°©λ²)
μ΄ κ°μ€μΉ νμΌ(best_clist_model.pth)κ³Ό μ κ·ν ν΅κ³λ νμΌ(domain_stats.json)μ λ¨λ
μΌλ‘ μ€νλ μ μμΌλ©°, CLiST νλ‘μ νΈμ μ 체 μμ€ μ½λμ ν¨κ» μ¬μ©λμ΄μΌ ν©λλ€.
- μμ€ μ½λ λ€μ΄λ‘λ μλ GitHub λ ν¬μ§ν 리μμ μΆλ‘ νμ΄νλΌμΈ μ½λλ₯Ό ν΄λ‘ ν©λλ€.
- κ°μ€μΉ νμΌ λ°°μΉ
μ΄ Hugging Face μ μ₯μμ
Files and versionsνμμ μλ λ νμΌμ λ€μ΄λ‘λνμ¬, ν΄λ‘ ν GitHub νλ‘μ νΈ λ΄λΆμ weights/ ν΄λ μμ μμΉμν΅λλ€.
best_clist_model.pthdomain_stats.json
- μΆλ‘ μ€ν (Python API)
from clist.pipeline import CLiSTPipeline
# νμ΄νλΌμΈ λ‘λ (κ°μ€μΉ λ° ν΅κ³λ μλ μ μ©)
pipeline = CLiSTPipeline(weight_path='weights/best_clist_model.pth', stats_path='weights/domain_stats.json')
# μμΈ‘ μν
result = pipeline.predict(sensor_csv_path='sensor.csv', vision_bin_path='thermal.bin')
print(result['predicted_status']) # ex: "Danger(μν)"
π Training Data (νμ΅ λ°μ΄ν°)
μ΄ λͺ¨λΈμ AI-Hub, νκ΅μ§λ₯μ 보μ¬νμ§ν₯μμμ μ 곡νλ 'μ μ‘°νμ₯ μ΄μ‘μ₯μΉμ μ΄ν μμ§λ³΄μ λ©ν°λͺ¨λ¬ λ°μ΄ν°'λ₯Ό μ¬μ©νμ¬ νμ΅λμμ΅λλ€.
μ£Όμ: μλ³Έ νμ΅ λ°μ΄ν°λ AI-Hub μ΄μ©μ½κ΄ λ° λνλ―Όκ΅ μ μκΆλ²μ μν΄ λ³΄νΈλ°κ³ μμΌλ―λ‘ λ³Έ λͺ¨λΈ μ μ₯μμλ ν¬ν¨λμ΄ μμ§ μμ΅λλ€. λ°μ΄ν°λ₯Ό μ§μ νμ©νμλ €λ©΄ AI-Hub μΉμ¬μ΄νΈλ₯Ό ν΅ν΄ λ³λλ‘ μ μ² λ° λ€μ΄λ‘λνμ μΌ ν©λλ€.
AI-Hub μ μ‘°νμ₯ μ΄μ‘μ₯μΉ λ°μ΄ν° νμ΄μ§
π Evaluation Metrics (νκ° μ§ν)
ν΄λμ€ κ° λ°μ΄ν° λΆκ· ν(Class Imbalance)μ΄ μ¬ν μμ§λ³΄μ λ°μ΄ν°μ νΉμ±μ κ³ λ €νμ¬, μ£Όλ νκ° μ§νλ‘ Macro F1 Scoreλ₯Ό μ¬μ©νμ¬ λͺ¨λΈ μ±λ₯μ κ²μ¦ λ° μ΅μ ν(Optuna)νμμ΅λλ€.