본문 바로가기

Tech/AI 해커톤

1.[Task] 해결해야할 문제

안녕하세요 AI를 잘 다루고 싶은 Rimo입니다.

저는 딥러닝, 특히 Computer Vision에 관심이 많은데요, 해커톤이나 개인 프로젝트에서 실전과 같은 문제를 많이 다루고자 합니다. 이번 글에서는 제가 해커톤에서 수상한 내용을 기반으로 부품 불량 검출 모델을 개발한 과정에 대해 정리해 보고자 합니다. 하나의 성능지표를 높이는 데에만 집중했던 기존의 해커톤과는 달리 기획부터 모델링, 성능지표 선정까지 모두 본인이 스스로 진행해야 됐다는 점에서 나름 의미 있던 해커톤이었습니다.

 

이글이 도움 될만한 독자는 아래와 같습니다.

  • AI 솔루션에 관심이 있는 모든 분들
  • 특히 Classification, Object Detection, Anomaly Detection, XAI 분야에 관심이 있는 분들
  • MNIST가 아닌, 실제 상황에 AI를 적용하고자 하는 분들

목차

  1. [Task] 해결해야 할 문제
  2. [Data Centric] 데이터로 부터 얻은 인사이트
  3. [Model Centric] 모델 아키텍처 및 학습과정
  4. [XAI] 이 모델 믿고 가도 되는 거야?
  5. [Bye] 프로젝트를 마무리하며

1.  [Task] 해결해야 할 문제

부품 원본 이미지

위와 같이 Rod Assembly라고 불리는 자동차 부품이 있습니다. 저희가 흔히 아는 서스펜션과 관련 있는 부품이라 보면 되겠습니다. 이러한 부품을 생산하는 공장에서는 최대한 빨리 많은 부품을 만들어 내는 것도 중요하지만, 만들어낸 부품에 불량은 없는지 “검수”를 하는 과정 또한 매우 중요합니다. 100개를 주문했는데 그중에 5개가 불량이라면, 나머지 95개가 아무리 퀄리티가 좋다 한들 고객사 입장에서는 만족할리가 없겠죠. 이번 프로젝트는 이러한 검수과정을 사람이 아닌, 카메라와 컴퓨터가 대신하여 자동화 시스템을 구축하는 것입니다. 문제 해결을 위해 공장으로부터 제공받은 데이터는 2가지였습니다.

1) 부품 이미지 데이터

5가지 유형의 부품 양상

정상, 찍힘, 밀림, 이중선, 미압입 총 5가지의 유형이 있는 데이터셋이었습니다.

정상 : 부품에 아무런 하자가 없는 양품
찍힘 : 공정 이동 과정에서 낙하로 인해 널링에 스크래치가 발생하는 형태
밀림 : 공정 과정 중 기계에 의해 특정 부분이 밀린 형태
이중선 : 전조 과정에서 베어링 이상으로 인해 널링에 이중선이 발생하는 형태
미압입 : 리벳이 널링에 완벽하게 끼워지지 않은 형태

 

위의 데이터에서 불량이 발생하는 핵심 부분만 확대해서 보면 아래와 같습니다.

 

부품의 널링(Knurling) 부분

2) 라벨링 데이터

부품 이미지뿐 아니라, 문제 해결 시 참고할 수 있는 BoundingBox(bbox) 라벨 데이터도 함께 제공받았습니다. bbox의 클래스는 널링, 리벳, 찍힘, 밀림, 이중선 이렇게 총 5가지의 카테고리를 가지고 있었습니다. 해당 bbox를 위의 예시 이미지에 씌우면 아래처럼 시각화할 수 있습니다.

부품에 bbox를 시각화

bbox의 라벨 데이터가 있었기에, 당장 객체탐지모델을 활용하여 불량을 검수할 수도 있었겠지만 라벨링 부분에 염려되는 부분이 많아서 다른 방법론을 모색했습니다. 자세한 이야기는 [Data Centric] 편에서 다루도록 하겠습니다.

프로젝트의 방향

앞서 말했듯 이번 프로젝트의 목표는 정해진 방법론으로 특정 성능지표(metrics)를 높이는 게 아니었습니다. “불량품을 검출해 달라”라는 니즈만 존재한 채, 사용해야 할 모델과 방법론들은 스스로 정했어야 했죠. 그러다 보니 당장에 코딩보다는 어떻게 문제를 해결할지 기획 단계에서 꽤 많은 시간을 소비한 것 같습니다.

가끔은 A4용지에 아이디어를 기록하곤 합니다

앞으로 포스팅할 글의 방향은 여러 고민들과 해결방안을 찾아다니는 여정에 대한 내용이 될 것입니다. 그렇기에 code는 단 한 줄도 등장하지 않습니다. code와 관련된 모든 것은 프로젝트가 완료되었을 시 제 Github에 공개할 예정입니다.

마치며

이러한 프로젝트를 하는 이유는 결국 실제 문제를 해결하기 위한 노하우를 얻기 위해서입니다. CNN, 인터넷으로 충분히 공부해 볼 수 있습니다. 비지도 학습, 오토인코더, XAI 등 수많은 AI관련 지식들 또한, 인터넷과 여러 강의들이 정말 친절하고 자세하게 설명해 주고 있습니다. 하지만, 이러한 지식들을 활용해 실제 문제를 해결하는 것은 또 다른 어려움인 것 같습니다. 실제 문제를 해결할 수 있는 엔지니어가 되고자 합니다. 그래서 기회가 된다면, 제가 진행한 프로젝트가 실제 현업에 적용될 수 있는지, 실제 적용하기가 어렵다면 어떠한 문제점 때문인지, 현업에 계신 여러 전문가 분들의 피드백을 얻어볼 계획입니다. 제 프로젝트가 겉만 번지르르하고 전혀 쓸모없는 알고리즘이라면, 당장에 개선을 해야겠죠. 이 내용 또한 공유할 가치가 있다면 함께 포스팅하도록 하겠습니다.

 

[ 실사구시 ]
실질적인 일에 나아가 옮음을 구하며, 사실에 토대를 두어 진리를 탐구함.


긴 글 읽어주셔서 감사합니다😉