-
용접 자국 길이 예측 모델 개발 가이드AI 2025. 3. 11. 11:23
문제 정의 및 데이터 구성
700장의 용접 자국 이미지(BMP 형식)와 각 이미지의 용접 자국 길이(px 단위)가 기록된 CSV 데이터를 활용하여, 이미지로부터 용접 자국의 위치를 자동 검출하고 그 길이를 예측하는 모델을 개발합니다. 목표 출력은 용접 자국의 픽셀 단위 길이이며, 주어진 이미지-길이 쌍 데이터를 학습에 사용합니다.
이 문제는 기본적으로 **물체 검출(용접 자국 위치)**과 회귀(길이 예측) 요소를 모두 포함합니다. 즉, 이미지에서 용접 부위를 찾아내고, 그 길이를 수치로 산출해야 합니다. 개발된 모델은 PC 환경에서 실시간으로 동작하여, 카메라로 입력받는 영상에서 연속적으로 용접 자국의 길이를 측정할 수 있어야 합니다.
이미지 전처리 및 용접 자국 검출
모델 학습에 앞서 이미지 전처리를 통해 용접 자국을 강조하거나 배경 잡음을 줄여주면 성능을 높일 수 있습니다. 용접 자국의 위치를 자동으로 찾기 위해 다음과 같은 기법을 고려해볼 수 있습니다:
- 엣지 검출: Canny와 같은 엣지 검출 알고리즘을 사용하면 용접 부위의 경계선을 추출할 수 있습니다. 용접선이 주변 배경과 명확한 경계가 있다면 엣지 검출로 후보 영역을 얻은 뒤, 불필요한 작은 윤곽은 모폴로지 연산(예: 팽창/침식)이나 노이즈 제거로 걸러낼 수 있습니다. 연속된 가장 긴 에지나 큰 컨투어를 용접 자국으로 간주하여 **ROI (관심영역)**로 지정할 수 있습니다.
- mathworks.com
- 이진화 및 임계처리: 이미지의 명암 또는 색상 분포를 분석하여 용접 자국에 해당하는 부분만 이진 마스크로 분리합니다. 배경과 용접 자국의 대비가 크다면 전역 임계값 또는 Otsu 방법으로 용접 부위를 분리할 수 있습니다. 얻어진 이진 영상에서 가장 큰 연속 영역 또는 가장 긴 길이를 가진 영역을 찾아 ROI로 정합니다.
- ROI 추출: 위 기법들로 얻은 후보 영역에서 **용접 자국의 경계 상자(bounding box)**나 윤곽선을 획득하여, 해당 부분만 잘라냅니다. ROI 이미지는 이후 단계에서 용접 길이를 계산하거나 모델 입력으로 활용됩니다. 예를 들어, 용접선이 비교적 곧은 선 형태라면 검출된 끝점 사이의 거리를 픽셀 길이로 계산할 수 있고, 굴곡이 있다면 윤곽선의 길이나 최소 외접 직사각형의 가로/세로 크기로 근사할 수 있습니다.
전통적인 영상처리만으로도 일정 조건에서는 용접 자국 검출과 길이 추정이 가능하지만, 조명, 재질, 노이즈 등의 변화에 민감할 수 있습니다. 실제로 한 연구에서는 배경 차감 + Canny 에지 검출로 용접선을 찾으려고 했으나, 그림자나 눈부심 때문에 임계값을 일정하게 설정하기 어렵다고 보고하였습니다
. 용접부 표면의 녹, 반사 등의 복잡한 환경 요인은 전통 알고리즘의 정확도와 속도에 부정적 영향을 주며, 임계값 튜닝 등의 추가 작업을 야기합니다
. 따라서 견고한 성능을 얻기 위해서는 이러한 전처리 기법을 학습 기반 모델과 결합하거나, 아예 딥러닝 모델에 해당 기능을 학습시키는 방향을 고려해야 합니다.
모델 선택: 경량 딥러닝 vs 전통 머신러닝
요구사항에 따라 계산이 빠르고 실시간 처리 가능한 모델을 선택해야 합니다. 후보로는 CNN 기반 경량 딥러닝 모델(YOLOv5, EfficientDet 등)과 전통적인 머신러닝 모델(SVM, 랜덤 포레스트 등)이 있습니다. 각 접근법의 특징을 비교하여 최적의 솔루션을 모색합니다.
1. 경량 딥러닝 모델 (YOLOv5, EfficientDet 등)
YOLOv5나 EfficientDet는 이미지 내 객체의 위치를 찾는 객체 검출(Object Detection) 모델로서, 용접 자국을 하나의 객체로 인식해 bounding box와 길이에 관한 예측을 할 수 있도록 활용할 수 있습니다. 특히 YOLO 계열 모델은 한 번의 신경망 추론으로 객체의 위치와 크기를 예측하는 1-stage 검출기이므로 매우 빠른 것이 장점입니다
. YOLOv5는 모델 크기에 따라 나노(n), 소형(s) 등 여러 버전이 있으며, 작은 모델일수록 실시간 추론 속도가 빠릅니다. 실제로 YOLOv5는 효율적인 Backbone(CSP 구조)과 목(PANet)을 사용하여 실시간 객체 검출이 가능하며, 경량 모델도 정확도를 어느 정도 확보하고 있습니다
. 연구 보고에 따르면 YOLOv5s(small 모델)은 파라미터 수를 줄이면서도 검출 정확도와 속도의 균형이 가장 우수하여, 실시간 용접 작업 환경에 적합한 모델로 선정되기도 했습니다
. YOLO 시리즈의 이전 버전인 YOLOv4 역시 EfficientDet과 유사한 정확도를 내면서도 FPS는 2배 이상 높아 속도 면에서 우위를 보였습니다
. 전반적으로 YOLO 계열은 EfficientDet 대비 추론 속도가 빠르고 경량이어서, 요구조건인 실시간 PC 구현에 더 유리합니다 (EfficientDet도 D0같이 작은 버전은 있지만, 전반적으로 YOLO가 추론 시간이 더 짧다고 보고됩니다
).
딥러닝 검출 모델을 사용할 경우, 용접 자국을 특정 클래스의 객체로 정의하고 모델을 학습시킵니다. 학습된 모델은 이미지에서 용접 자국의 bounding box 좌표를 출력하며, 이를 통해 길이를 계산할 수 있습니다. 만약 용접 자국이 항상 수평 또는 수직 방향으로 놓여 있다면, bounding box의 가로 또는 세로 길이가 곧 픽셀 길이가 됩니다. 다양한 각도로 놓일 수 있다면 bounding box의 폭과 높이 중 더 긴 쪽을 길이로 사용하거나, 검출된 박스 내에서 추가적인 처리를 통해 끝점 간 거리를 계산할 수 있습니다. 예를 들어 YOLOv5를 사용해 용접선 객체를 탐지한 뒤, ROI를 크롭하여 그 내부를 Canny 등으로 다시 처리하면 끝점을 더 정확히 잡아 길이를 잴 수도 있습니다.
또 다른 딥러닝 접근으로, 이미지-길이 값을 직접 학습하는 회귀 신경망을 구축하는 방법이 있습니다. 이는 입력 이미지에서 특정 값(길이)을 예측하도록 CNN을 설계하는 것으로, ResNet이나 EfficientNet같은 백본 뒤에 회귀 출력 노드를 둔 모델을 생각할 수 있습니다. 이 접근은 용접 자국의 위치 인식을 명시적으로 하지 않고도 전체 이미지를 보고 길이를 추정할 수 있지만, 이미지 내 다른 요소들의 영향도 받을 수 있으므로 ROI 추출 선행 여부에 따라 성능이 달라집니다. ROI를 잘라낸 이미지(용접 부위만 있는)를 회귀 모델에 넣어 학습하면 위치 검출 단계를 단순화할 수 있습니다. 다만 이 방식은 Bounding box와 같이 사람이 해석할 수 있는 중간 출력이 없어 결과를 신뢰하기 어려울 수 있고, 용접 자국 이외의 배경 특성이 모델 판단에 엉뚱하게 작용할 위험이 있습니다. 따라서 YOLOv5 같은 객체 검출 모델로 위치를 찾고, 필요한 경우 후처리로 길이를 산출하는 접근이 직관적이고 성능 검증도 용이합니다.
YOLOv5나 EfficientDet을 활용한 선행 연구들을 보면, 소량의 용접 이미지 데이터로도 전이학습을 통해 높은 검출 성능을 얻을 수 있습니다
. 예컨대, 용접선 검출을 위해 YOLOv5 기반 알고리즘을 학습시켜 90% 이상의 인식 정확도를 달성하고, 기존 방법 대비 운영 효율을 12% 향상시켰다는 보고가 있습니다
. 이러한 결과는 딥러닝 모델이 용접 환경의 잡음이나 복잡한 배경 속에서도 강인하게 특징을 학습하여 높은 정확도를 낼 수 있음을 시사합니다. 또한 최근에는 YOLOv8-seg나 Mask R-CNN처럼 **용접 부위의 마스크(segmentation)**를 출력하는 기법도 연구되고 있는데, 마스크를 얻으면 픽셀 단위 길이를 보다 정확히 계산할 수 있습니다. 다만, 세그멘테이션 모델은 일반적으로 검출(bounding box) 모델보다 계산량이 많아 실시간성에서 불리할 수 있으므로, YOLOv5와 같은 경량 검출 모델 + 후처리 조합이 현실적인 선택입니다.
⚡ 요약: 딥러닝 기반 모델 (특히 YOLOv5-small 등 경량모델)은 자동으로 용접 자국의 특징을 학습하여 복잡한 환경에서도 높은 검출 성능과 실시간 속도를 보입니다. 학습을 통해 전처리 단계의 파라미터 튜닝 부담을 줄이고, 사람 수준으로 일관된 검출을 기대할 수 있습니다. 단, 모델 학습을 위해 Bounding box 라벨링 등 데이터 준비 작업이 필요하며, 700장의 데이터는 많지는 않으므로 전이 학습과 데이터 증강이 권장됩니다.
2. 전통적 머신러닝 모델 (SVM, 랜덤 포레스트 등)
전통적인 머신러닝 모델은 주로 명시적 특징 추출을 전제로 합니다. 이미지 자체를 SVM이나 랜덤 포레스트에 바로 넣기보다는, 앞서 언급한 전처리 기법으로 용접 자국의 특성을 수치화한 피처들을 추출하고, 이를 토대로 모델을 학습시킵니다. 예를 들어 다음과 같은 접근이 가능합니다:
- 피처 설계 예시: 전처리 결과 얻은 이진 영상에서 용접 자국으로 추정되는 컨투어의 길이(pixel 개수), bounding box 크기(가로, 세로), 영역의 면적이나 둘레 등을 계산하여 특징으로 사용합니다. 또한 이미지의 히스토그램, 에지 맵의 분포, 혹은 프로파일(예: 이미지 열화상 프로파일처럼 용접 부분의 밝기 변화) 등도 고려할 수 있습니다. 이처럼 도출된 수치 피처들과 CSV의 실제 길이로 회귀 모델을 학습하면, 새로운 이미지의 피처로부터 길이를 예측할 수 있습니다. SVM의 SVR(Support Vector Regression)이나 랜덤 포레스트 회귀를 사용하면 될 것입니다.
- 분류적 접근: 혹은 용접 길이를 연속값 대신 구간 범주로 나눠 분류 문제로 푼 뒤, 그 결과를 다시 수치로 환산하는 방법도 생각해볼 수 있습니다. SVM이나 RandomForestClassifier로 "짧음/중간/김" 같이 등급을 분류한 후, 각 등급 중앙값을 길이로 간주하는 식입니다. 하지만 이 방법은 데이터가 충분히 많지 않으면 구간 설정이 어렵고, 분류 경계에서 오차가 커질 수 있습니다.
- ROI 검출에 ML 활용: 전통 ML을 용접 자국 검출 단계에 활용할 수도 있습니다. 예를 들어 이미지의 작은 패치들을 훑으면서, 해당 패치가 용접 부위인지 여부를 SVM 분류로 예측해 연결하는 방식입니다. 과거 객체 검출에 HOG+SVM을 사용했던 것처럼, 용접 부분의 특징적인 패턴(예: 선 모양)을 HOG 등의 기술로 표현하고 SVM이 분류하도록 할 수 있습니다. 그러나 이러한 슬라이딩 윈도우 방식은 딥러닝 검출기의 속도에 비해 현저히 느릴 수 있고, 구현 복잡도도 높습니다. 대신, 앞서의 영상처리 기법으로 ROI를 찾은 후 해당 영역만 랜덤 포레스트로 이진 분류(용접 vs 배경)하여 검증하는 방식은 속도가 빠릅니다. Random Forest 등은 수백 픽셀 단위 이미지 patch를 특징으로 바로 넣어도 동작 가능하기 때문에, ROI 후보마다 빠르게 적용하여 거짓 검출을 걸러내는 데 활용할 수 있습니다.
전통 ML의 장점은 비교적 구현이 단순하고 해석이 용이하며, 특징 추출과 모델이 분리되어 있어 특정 부분을 손으로 조정하기 쉽다는 점입니다. 또한 학습에 많은 데이터가 필요 없거나, 실시간 추론시 연산부하가 매우 적을 수 있습니다 (예: 피처가 510개 수준이라면 랜덤 포레스트 예측은 매우 빠름). SVM/랜덤 포레스트 모델 자체는 경량이므로 CPU만으로도 마이크로초밀리초 단위 예측이 가능합니다. 그러나 특징 추출 단계가 병목이 될 수 있는데, 이미지에서 용접선을 찾는 연산은 결국 딥러닝에서 모델이 하던 일을 사람이 수동으로 하는 것이므로, 상황에 따라서는 딥러닝보다 복잡해질 수도 있습니다. 예컨대 조명이 바뀌면 임계값을 다시 조정해야 한다거나, 새로운 종류의 용접 패턴이 나타나면 일일이 규칙을 추가해야 할 수 있습니다
.
정리하면, 전통 ML 접근은 **제한된 상황(조명과 배경이 일정한 공정 환경 등)**에서는 매우 빠르고 충분한 정확도를 낼 수 있지만, 환경 변화에 대한 적응력과 일반화 성능은 딥러닝보다 떨어질 가능성이 높습니다. 또한 추출한 특징이 용접 길이와 선형/비선형 관계를 가질 것이라는 가정 하에 모델을 세우므로, 특징 선택에 따라 오차가 커질 수 있습니다. 반면 딥러닝 모델은 스스로 다층 특징을 학습하여 복잡한 관계도 모델링할 수 있기 때문에, 충분한 데이터와 적절한 구조를 주면 더 높은 정확도를 기대할 수 있습니다. 실제 용접 영상 분석 분야에서도 최근에는 전통적 영상처리+머신러닝보다 딥러닝 기반의 객체 검출/세그멘테이션 방법이 정확도와 신뢰성 측면에서 우수함이 보고되고 있습니다
.
⚡ 요약: 실시간성과 정확도를 모두 충족하려면, 최신 경량 딥러닝 모델(YOLOv5 등)이 유망합니다. 전통 방법은 추가 튜닝 없이 바로 사용하기엔 한계가 있고, 새로운 환경에 맞춰 Feature Engineering을 반복해야 할 수 있습니다. 반면 YOLO 계열은 학습만 잘 되면 다양한 조건에서도 일괄적인 성능을 내줄 수 있고, GPU 가속 하에 충분히 실시간으로 동작합니다. 따라서 가장 효율적인 모델로는 YOLOv5(또는 동급의 YOLOv8-nano/small 등) + 간단한 후처리 조합을 권장합니다. EfficientDet도 고려 대상이지만, 유사 정확도에서 속도가 느릴 수 있으므로 본 과제의 실시간 요구에는 다소 불리합니다
. 전통 ML은 참고용으로 비교 실험을 해볼 수는 있으나, 최종 시스템으로 채택하기에는 유지보수와 신뢰도 측면에서 비효율적일 수 있습니다.
모델 학습 방법 (YOLOv5를 중심으로)
위 비교를 통해 YOLOv5 기반 경량 검출 모델을 채택한다고 가정하고, 이를 효과적으로 학습시키는 방법을 제시합니다. (다른 딥러닝 모델을 선택해도 유사한 절차를 따르면 됩니다.)
- 데이터 준비 및 라벨링: 700장의 이미지에는 각 용접 자국의 실제 길이 값만 주어져 있으므로, 추가적인 라벨링 작업이 필요합니다. YOLOv5를 학습시키려면 용접 자국의 Bounding Box 좌표와 클래스 레이블이 주어진 라벨 파일이 요구됩니다. LabelImg와 같은 도구를 사용하여 모든 이미지에 대해 용접 자국 부위를 둘러싸는 사각형을 지정하고, 클래스 이름을 "weld" 등으로 저장합니다. (YOLO 형식의 라벨 텍스트나 COCO JSON 등으로 저장 가능). 이때 바운딩 박스는 용접 자국의 양 끝을 거의 맞닿게 둘러서 길이를 잘 표현할 수 있도록 그리는 것이 좋습니다. 라벨링 시 CSV의 길이 값을 참고하여, 박스가 해당 길이를 거의 덮도록 시각적 피드백을 얻을 수 있습니다. 만약 바운딩 박스로 용접 길이를 정확히 표현하기 어렵다면 (예: 용접선이 비스듬할 경우 대각선 길이가 실제 길이), 차선책으로 끝점에 별도 클래스를 부여해 두 점을 검출하게 하거나, 폴리라인 형태로 라벨링하는 방안을 생각할 수 있지만, 일반적인 객체 검출 프레임워크에서는 다루기 까다롭기 때문에 여기서는 단순 사각형으로 가정합니다.
- 데이터 세트 분할: 라벨링이 완료되면 데이터를 학습(training)과 검증(validation) 세트로 나눕니다. 예를 들어 **80% (560장)**는 학습에, **20% (140장)**는 검증에 사용합니다. 검증 세트는 모델의 일반화 성능을 평가하고 튜닝하기 위해 활용됩니다. 만약 데이터 700장 중 일부는 카메라 환경과 다를 수 있거나 품질이 낮다면, 검증 세트에 골고루 분포시키거나 별도로 제외하여 모델이 편향되지 않게 합니다.
- 데이터 증강(Data Augmentation): 700장은 딥러닝 학습치곤 많지 않으므로, 증강 기법을 적용해 효과적인 데이터량을 늘립니다. 증강에는 좌우반전, 회전, 밝기/대비 조절, 약간의 노이즈 추가 등이 있을 수 있습니다. 용접 자국의 모습이 뒤집혀도 동일한 길이로 취급될 수 있다면 반전/회전이 유효하며, 조명 변화에 대한 강인성을 위해 밝기 변화를 줍니다. 또한 YOLOv5 자체에도 Mosaic 증강 등 여러 기법이 내장되어 있으므로, 이를 활성화하면 학습에 도움이 됩니다. 연구에 따르면 특수한 증강 기법(WNGM 등)을 적용하면 노이즈가 심한 이미지에서도 feature point 검출 정확도가 향상된 바 있으므로, 본 데이터에도 증강을 통해 로버스트니스 향상을 기대할 수 있습니다.
- mdpi.com
- 모델 초기화 및 설정: YOLOv5를 **사전학습 가중치(Pretrained weights)**로 초기화하면 적은 데이터로도 빠르게 수렴할 수 있습니다. Ultralytics YOLOv5 저장소에서 제공하는 yolov5s.pt (COCO 데이터셋으로 pretrained) 가중치를 불러오고, 클래스 수를 1 (용접 하나)로 설정합니다. 입력 해상도는 이미지 크기에 맞게 지정하되, YOLOv5는 일반적으로 640×640 등 32의 배수 해상도를 사용하므로, 필요시 이미지 리사이즈 또는 패딩을 적용합니다. (예: BMP 이미지를 640 정사각으로 패딩/축소). 배치 크기는 GPU 메모리에 맞게, 학습률 등 하이퍼파라미터는 기본값에서 시작하되, 700장 규모에 맞춰 **조기 종료(Early stopping)**나 에폭 수 조절을 합니다. 예를 들어 100 에폭 정도 학습하되, 검증 mAP가 10 에폭 이상 개선 없으면 중단하는 식입니다.
- 모델 학습: 학습 시 손실 함수는 YOLOv5 기본(바운딩박스 회귀 + 객체성 점수 + 분류 손실)을 사용합니다. 우리의 경우 클래스는 하나이고, 주 관심은 바운딩 박스의 크기/위치 예측 정확도입니다. 학습 로그를 모니터링하여 obj_loss와 bbox_loss가 안정적으로 감소하는지 확인합니다. 또한 검증 세트에 대한 **mAP(mean Average Precision)**나 IoU 지표를 주시하여, 과적합 징후가 보이면 증강을 강화하거나 학습률을 조정합니다. 최종 에폭이 끝나면 **최고 성능 모델 가중치(best.pt)**를 확보합니다.
- 길이 예측 로직: 학습된 YOLOv5 모델은 이미지 입력 시 용접 자국의 bounding box를 출력할 것입니다. **길이(px)**를 산출하기 위해, 우선 **bounding box의 너비(width)**를 사용하는 방안을 고려합니다. 용접 자국이 가로로 놓인 이미지라면 bounding box의 가로 크기가 곧 길이에 해당할 것입니다. 만약 용접 자국이 세로로 놓인 경우라면 세로 높이를 쓰면 됩니다. 방향에 따라 적절한 축의 길이를 선택하거나, 불명확한 경우 width와 height 중 더 큰 값을 길이로 간주할 수 있습니다. (용접선이 기울어진 경우 bounding box는 실제보다 조금 더 큰 대각선 길이가 되지만, 오차 범위 내일 가능성이 높습니다.) 필요시, 검출된 bounding box 영역을 추출한 뒤 세그먼트 화하거나 윤곽선을 따라 길이를 재는 알고리즘을 추가 적용해 보정할 수도 있습니다. 예를 들어 ROI 영역에 다시 Canny를 적용하면 용접선의 픽셀들만 남길 수 있고, 이를 **호환 거리(hausdorff distance)**나 픽셀 개수로 길이를 구할 수 있습니다. 다만 이런 보정은 추가 연산이 필요하므로, 실시간 시스템에서는 bounding box 기반 단순계산으로 시작하고 추후 정밀도가 필요할 때 검토합니다.
- 전통 ML 모델 비교 학습 (선택): 딥러닝 모델과 별도로, baseline 비교를 위해 전통 ML 방식도 일부 시도해볼 수 있습니다. 예를 들어, 위에서 정의한 특징(컨투어 길이, 박스 크기 등)을 추출하여 CSV의 길이와 선형 회귀를 해보거나, 랜덤 포레스트 회귀모델을 만들어볼 수 있습니다. 700개 데이터를 5-fold 교차검증하여 평균 제곱오차(MSE)를 구해보고, 딥러닝 모델 결과(예: IoU나 평균 절대 오차)와 비교하면 각 방법의 정확도 차이를 정량화할 수 있습니다. 전통 ML은 구현 난이도가 낮으므로 빠르게 프로토타입을 만들어 참고치로 활용하고, 이것을 딥러닝 모델의 성능 목표로 삼는 것도 좋습니다.
모델 평가 및 최적화
학습 완료 후에는 검증 세트 및 추가 테스트 이미지를 통해 모델을 평가합니다. 평가 시 고려할 요소:
- 검출 정확도: YOLOv5의 mAP, Precision/Recall을 확인합니다. 이상적으로 용접 자국이 있는 모든 이미지에서 검출이 누락되지 않고(Recall 높음), 잘못된 곳을 검출하지 않아야 합니다(Precision 높음). 하나의 객체만 찾는 것이므로 Precision/Recall 모두 90% 이상 나오면 양호한 상태라 볼 수 있습니다.
- 길이 예측 정확도: CSV의 실제 길이와 모델이 산출한 길이를 비교합니다. 길이 비교는 **평균 절대 오차(MAE)**나 RMSE로 정량화할 수 있습니다. 예를 들어 모델 예측값과 실제값의 차이가 평균 ±5px 정도라면 대부분 용접 길이를 정확히 잰다고 볼 수 있습니다. 만약 bounding box 기반 길이계산의 한계로 오차가 큰 경우 (예: 기울기 등 때문이라면), 앞서 언급한 ROI 후처리를 도입하는 식으로 오차 원인을 보완합니다.
- 추론 속도: 실시간성을 만족하는지 확인해야 합니다. GPU가 있는 환경에서 YOLOv5s는 수십 FPS 이상도 가능하지만, CPU-only 환경에서는 속도 체크가 중요합니다. 초당 처리 프레임수 (FPS)를 측정하여, 목표로 한 카메라 fps (예: 30fps)에 근접하는지 봅니다. 만약 부족하다면 모델 경량화가 필요합니다. 방법으로는:
- 더 작은 모델(YOLOv5n - nano 모델 등) 사용 또는 채택,
- ONNX 변환 후 TensorRT나 OpenVINO 최적화로 추론 가속,
- 배치처리 대신 스트림 처리로 지연 최소화,
- 필요 없는 후처리 연산 줄이기 등이 있습니다.
- 모델 경량화 및 배포: 최종 모델은 약 수 MB~수십 MB 크기의 .pt 또는 .onnx 파일로 저장됩니다. 실시간 측정을 위해 프로그램 내에 이 모델을 로드해 사용해야 합니다. PyTorch로 구현했다면 torch.load로 모델을 불러와 .eval() 모드로 두고, 매 프레임 model(img)으로 추론합니다. 또는 Ultralytics의 detect.py 스크립트를 수정하여 webcam 입력을 받도록 설정할 수도 있습니다. 추론 결과를 처리하여 길이를 계산하는 함수를 통합하고, 그 결과를 화면에 표시하거나 파일로 기록하는 기능을 추가합니다.
실시간 사용 방법
PC에 연결된 카메라로부터 실시간 영상 스트림을 받아 용접 자국 길이를 측정하는 통합 시스템을 구축합니다. 전체 파이프라인은 다음과 같습니다:
- 카메라 세팅 및 보정: OpenCV 등의 라이브러리로 카메라를 열고 (cv2.VideoCapture 등) 프레임을 가져옵니다. 필요하다면 카메라의 해상도, 노출 등을 고정 설정하여 학습 데이터와 유사한 조건을 재현합니다. (추가로, 픽셀 길이를 실제 물리 길이로 변환하려면 카메라 캘리브레이션과 스크일 보정이 필요하지만, 여기서는 픽셀 단위로 충분하다고 가정합니다.)
- 프레임 전처리: 각 프레임에 대해, 학습 때와 동일한 전처리를 적용합니다. YOLOv5 모델에 입력하기 위해 크기 조정 및 정규화가 필요합니다. 예를 들어 640×640 사이즈로 리사이즈/패딩하고, 픽셀 값을 0~1로 정규화한 후 배치 차원을 추가해 tensor로 변환합니다. (Ultralytics 라이브러리를 사용하면 model 객체가 내부에서 알아서 처리해줍니다.)
- 용접 자국 검출: 전처리된 프레임을 학습된 YOLOv5 모델에 입력하여 용접 자국 bounding box를 예측합니다. 다수의 객체를 검출하는 일반적인 상황과 달리 용접 자국은 한 개만 있을 것이므로, 모델이 출력하는 한 개의 box와 confidence를 받아옵니다. 만약 여러 개 검출되거나 아무것도 검출 못한 경우, confidence 점수를 보고 임계치 이하 박스 무시하거나 이전 프레임 정보 활용 등의 로ジック도 필요할 수 있습니다. (예: 용접 자국이 연속 프레임에 지속적으로 나타나므로 트래킹으로 보완 가능)
- 길이 계산: 검출된 bounding box 좌표(x, y, w, h)로부터 용접 자국의 길이를 계산합니다. 일반적인 경우 w (너비) 혹은 h (높이) 중 용접 방향에 해당하는 값을 선택합니다. 예컨대 용접 자국이 이미지에서 가로로 놓인 경우 w를, 세로로 놓였으면 h를 길이로 결정합니다. 만약 용접 방향이 일정하지 않다면, 두 값 중 큰 쪽을 취하거나, ROI 내에서 추가적인 모멘트 계산으로 방향을 추정해도 됩니다. (단순히 큰 쪽 픽셀 수를 택하는 방법은 여러 사례에서 무난히 적용 가능할 것입니다.)
- 결과 출력: 계산된 길이를 화면에 표시하거나 다른 시스템으로 전달합니다. OpenCV의 cv2.putText 등을 이용하여 영상 위에 "Length: 123 px" 같은 텍스트를 overlay하면 사용자가 바로 확인할 수 있습니다. 또한 bounding box도 cv2.rectangle 등으로 그려주면 검출 위치를 시각적으로 보여줄 수 있어 신뢰성을 높입니다. 실시간 측정이므로, 매 프레임마다 값을 업데이트하되 화면 갱신 속도가 너무 빠르면 읽기 어려울 수 있으니, 이동 평균을 내거나 안정된 표시를 위해 약간의 저속 필터링을 적용할 수도 있습니다.
- 성능 최적화: 실시간 동작 시 프레임 처리 속도를 최적화해야 합니다. 앞서 언급한 것처럼 GPU 사용이 가능하면 가장 좋고, 불가능할 경우 경량화된 모델과 최적화 추론이 중요합니다. 모델 추론 이외에도 카메라 입력, 전처리, 후처리, 디스플레이 모두 지연을 유발하므로, 파이프라인을 병렬화하거나 비동기로 처리하여 최대 속도를 끌어냅니다. 예를 들어 Python에서는 separate thread로 카메라 캡쳐를 돌리고 메인 쓰레드에서 모델 추론을 하는 식으로 병목을 줄일 수 있습니다.
- 테스트 및 검증: 실제 용접 현장 환경에서 카메라를 통해 시스템을 시험하여, 다양한 거리, 각도, 조명 조건에서 일관되게 동작하는지 검증합니다. 만약 특정 조건에서 오류가 발생하면 (예: 용접부가 아닌 뜨거운 불꽃을 용접으로 오인한다든지), 해당 상황의 데이터를 추가 확보하여 **모델을 재학습(fine-tuning)**하거나 후처리 규칙을 보완합니다. 전통적 방법과 조합도 고려할 수 있는데, 예컨대 특정 색상의 불꽃 영역을 감지해 YOLO 검출 결과에서 제외시키는 후처리를 넣으면 오탐을 줄일 수 있습니다.
결론 및 권장 사항
요구사항을 종합하면, YOLOv5 기반의 경량 딥러닝 모델을 사용하여 용접 자국을 실시간 검출하고, 검출된 영역의 크기로부터 픽셀 길이를 산출하는 접근이 최적입니다. YOLOv5s 모델은 속도가 매우 빠르고(실시간 처리 가능) 경량임에도 불구하고 용접 자국 검출에 충분한 정확도를 보일 것으로 기대됩니다
. EfficientDet 등의 모델도 시험해볼 수 있으나, 유사한 정확도에서 YOLO 쪽이 추론 속도가 빠르다는 보고가 있으므로
본 프로젝트에는 YOLO 계열이 더 적합합니다. 전통적인 SVM/랜덤 포레스트 방법은 특징 추출이 제대로 이루어진다면 속도는 빠를 수 있으나, 학습 기반 접근만큼의 범용성과 정밀도를 담보하기 어렵다는 점을 염두에 두어야 합니다
. 실제로 복잡한 용접 환경에서는 딥러닝 방법이 전통 알고리즘보다 높은 정확도와 안정성을 보여준 바 있습니다
.
최종적으로, 학습된 YOLOv5 모델을 PC 애플리케이션에 통합하여 카메라 영상의 매 프레임을 분석함으로써, 용접 자국의 위치를 강조 표시하고 실시간으로 길이를 수치 출력해주는 시스템을 구축하게 됩니다. 이러한 시스템은 용접 품질 검사나 자동 용접 로봇의 피드백 등에 활용될 수 있습니다. 개발 과정에서 얻은 노하우로 증강된 데이터세트와 최적화된 모델을 확보하면, 추후 현장 환경이 변하더라도 추가 학습이나 파인튜닝을 통해 대응할 수 있습니다. 마지막으로, 운영 중에는 정기적인 검증과 보정을 통해 모델이 계속 정확하게 작동하는지 확인하고, 필요 시 새로운 데이터를 반영하여 모델을 진화시켜 나가는 것을 권장합니다.
참고 자료: 용접선 자동검출에 YOLO를 활용한 연구들
, YOLOv5 vs EfficientDet 성능 비교
, YOLOv5의 실시간 적용 가능성
, 전통 영상처리 기법의 한계 사례
등을 종합하여 본 가이드를 작성하였습니다. 각 모델과 방법의 장단점을 고려한 후, 요구사항에 가장 부합하는 솔루션을 선택하여 구현하시기를 바랍니다.
'AI' 카테고리의 다른 글
AI 모델을 경량, 중간, 대형 모델을 나누는 차이점이 뭐야? (0) 2025.03.11