YOLO를 활용하여 철길 크랙 탐지
- YOLO
- 철길
- 크랙
- 탐지
오늘 할거
객체 탐지는 다양한 산업에서 널리 활용되며, 특히 실시간 탐지가 중요한 분야에서는 YOLO 모델이 강력한 도구로 자리 잡고 있어요. 이번 글에서는 최신 YOLOv11을 활용하여 객체 탐지를 해볼거에요.
지난 시간에는 YOLO 데이터 셋이 갖추어진 상태에서 했다면, 오늘은 형식이 다른 데이터를 가져와서 YOLO 데이터 셋의 형태로 변경하여 사용하는 점이 다르다고 할 수 있겠네요. 객체 탐지에는 Detection(탐지)과 Segmentation(분할) 두 가지 방식이 있지만, 이번 글에서는 Detection를 집중하여 다루고, Segmentation은 다음 글에서 자세히 설명할게요!
Detection에 대해 간단히 설명하자면 이미지에서 Bounding Box와 Class를 예측하는 작업으로, 특정 객체의 위치와 종류를 식별하는 방식이라고 요약할 수 있겠네요.
학습을 위한 오픈 데이터 활용 및 전처리 과정
이번에 사용할 데이터는 철길에서 발생하는 크랙 또는 불량 데이터를 사용하여 모델을 학습하여, YOLOv11의 성능을 분석하고 적용 방법을 살펴볼게요. 사용된 데이터는 AI 허브에서 제공하는 오픈 데이터인 ‘고속철도 철길 데이터셋’으로, KTX 탈선이나 명절에 내려갈 때 너무 힘들다 보니 관심이 생겨 이 데이터셋을 사용해보고자 했어요.
YOLOv11 학습을 진행하기 전에, 데이터를 효과적으로 활용하기 위한 사전 전처리 과정이 필요해요.
- 오픈 데이터에서 특정 라벨 추출
- 오픈 데이터에서는 철길은 Segmentation, 크랙은 Detection 형태로 라벨링이 되어 있는데, 크랙 탐지만을 학습하기 위해 Detection 라벨만을 선택적으로 추출했어요.
- YOLO Dataset 형식으로 변환
- 오픈 데이터의 라벨링 형식이 YOLO Dataset 형식과 다르기 때문에, 이를 YOLO 학습에 적합한 형태로 변환해줬어요.
모델 학습
데이터셋 구성이 완료된 후, 다음 단계로 학습 환경 설정과 모델 학습 실행 과정이 남아 있어요. 학습 환경 설정에 대한 자세한 내용은 이전 블로그인 YOLO tutorial에서 알아봤으니, 이번 글에서는 모델 학습 실행 과정을 중심으로 설명할게요!
from ultralytics import YOLO
import torch
model = YOLO("yolo11s.pt")
model.train(
data='/home/itivai-1/project/demoproject/data/railway/YOLODataset/dataset.yaml',
imgsz=320,
epochs=1000,
project='/home/itivai-1/project/demoproject/railway/trainResults/',
batch = 16,
pretrained=False
)
- model = YOLO("yolo11s.pt")
- 사용할 모델 객체를 생성
- train_args
- data : 지정한 데이터 셋의 경로
- imgsz : 입력 이미지 크기 (320x320)
- epochs : 진행할 epoch 횟수
- batch : batch size를 설정
- project : 학습 결과를 저장할 디렉토리 경로
- pretrained : 현재 로드한 모델을 사전 학습된 모델로 사용할지 여부를 결정
추론 결과
이제 학습된 모델을 활용하여 추론 결과를 확인해 볼게요.
추론 결과, 탐지된 객체들은 세 가지 범주로 분류되었어요. 각 범주는 철길 상태를 시각적으로 쉽게 구분할 수 있도록 서로 다른 색상의 Bounding Box로 표시되고 있어요.
- tie_normal(파란 Bounding Box)
- 철도를 받치고 있는 연석을 말해요. 이 연석이 깨지거나, 금이 간 경우, 불량으로 표시돼요.
- fast_clip_normal(초록 Bounding Box)
- 철길에 부착된 클립이 정상적인 상태임을 의미해요.
- fast_clip_abnormal(빨간 Bounding Box)
- 철길에 부착된 클립에서 이상이 감지된 경우를 의미해요.
결론 및 향후 개선 방향
철길 크랙 탐지는 철도 유지보수의 자동화와 효율성을 높이는 데 중요한 역할을 할 수 있다고 생각돼요. 특히, 각 상태를 시각적으로 명확하게 구분하여 유지보수 작업을 보다 체계적으로 이루어질 수 있도록 하는데 도움을 줄 수 있지 않을까요?
향후에는 다음과 같은 개선 방향을 고려할 수 있을 것 같아요.
- 모델의 탐지 정확도를 더욱 향상시키기 위해 추가적인 데이터 증강 및 학습 진행
- 보다 세밀한 철길 상태 분류를 위해 다양한 크랙 및 결함 유형을 반영한 학습 데이터 구축
- 탐지 결과를 활용한 실시간 모니터링 시스템 개발
철길 크랙 탐지 자동화의 필요성
철길 크랙 탐지는 현재까지 대부분 사람이 직접 육안으로 검수하는 방식으로 이루어지고 있어요. 이러한 방식은 많은 시간이 소요될 뿐만 아니라, 인적 오류로 인해 정확도가 떨어질 위험이 있어요.
YOLO을 활용하여 자동으로 철길 크랙 탐지하는 방식은 이러한 한계를 극복하고, 유지보수 작업을 자동화함으로써 효율성을 높일 수 있을 것으로 기대하고 있어요. 기존 수작업 대비 검수 속도를 크게 향상시킬 수 있으며, 위험 요소를 조기에 발견하여 철도 안정성을 강화할 수 있을거에요. YOLO 기반의 철길 크랙 탐지 기술을 잘 만든다면 단순한 탐지 시스템을 넘어, 철도 유지보수 방식 자체를 효율적으로 바꿀 수 있는 계기가 될 수 있지 않을까 라고 생각해요.