기술 칼럼

산업 자동화를 위한 PLC에 딥러닝 신경망을 배포하고 통합하기 위한 워크플로 구현

작성자: Dr. Fabian Bause 및 Nicolas Camargo Torres, Beckhoff Automation GmbH & Co. KG


"여기 설명된 워크플로의 주요 장점은 팀이 빠른 반복을 통해 장단점 판단을 평가할 수 있다는 것입니다. 예를 들어, 품질 관리 응용 사례에서 우리는 신경망 크기와 실행 시간을 줄이기 위해 일부 분류 정확도를 희생했습니다."

산업 자동화 분야에서 머신러닝은 많은 잠재적 응용 분야를 가지고 있습니다. 예를 들어, 시각 기반 분류기는 완제품의 품질을 평가하고, 조립품에 추가되기 전에 잠재적으로 결함이 있는 부품을 식별하거나, 자연적으로 상당한 변형이 있는 경향이 있는 과일과 채소를 분류할 수 있습니다. 기존 컴퓨터 비전 기술을 사용하여 이러한 응용 사례 중 일부를 구축하는 것도 가능하지만, 딥러닝과 같은 AI의 등장으로 외관 검사의 자동화가 촉진되고 있습니다.

그러나 엔지니어링 팀은 종종 PLC 또는 산업용 PC에 AI 모델을 배포하는 데 어려움을 겪습니다. 따라서 제어 및 딥러닝 알고리즘을 단일 시스템에 통합하는 대신 별도의 시스템을 사용하여 대기 시간과 배포 및 유지 관리 비용이 더 높아집니다. 팀이 직면하는 또 다른 과제는 필요한 기술이 서로 다르다는 데서 비롯됩니다. 지금까지 데이터 사이언스와 산업 제어 워크플로는 상대적으로 공통점이 적었습니다.

Beckhoff Automation에서 우리 팀은 MATLAB® 툴과 Beckhoff Automation 제품을 결합해 로우코드 설계와 AI 모델 훈련을 가능하게 하며 산업용 타겟에 대한 모델의 배포와 통합을 간소화하는 새로운 워크플로를 구현했습니다. MathWorks 엔지니어와 협력하여 이 워크플로를 개발하고 육각 너트의 외관 검사(그림 1)를 포함하는 예시 품질 관리 응용 사례에서 이를 시연했습니다. 이 간단한 응용 사례는 육각 너트를 불량품과 불량이 아닌 것으로 분류하여 간단한 활용 사례를 보여주지만, 워크플로의 단계를 적용하면 훨씬 더 정교하고 복잡한 응용 사례의 개발 및 배포를 가속화할 수 있습니다.

비디오 길이: 0:22

그림 1. 육각 너트의 품질을 검사하기 위해 AI 모델을 사용하는 품질 관리의 응용 사례입니다. 

이러한 단계는 다음과 같습니다.

  1. Deep Learning Toolbox™로 MATLAB에서 딥러닝 모델을 설계, 훈련 및 최적화하거나 PyTorch® 또는 TensorFlow™ 등의 다른 머신러닝 프레임워크에서 모델을 가져옵니다.
  2. MATLAB Coder™ 및 TwinCAT Target for MATLAB을 사용해 컴파일된 TwinCAT® 객체를 모델에서 객체를 추출합니다. (컴파일된 TwinCAT 객체는 딥러닝 모델 외에도 전처리 및 후처리 코드를 포함할 수 있음)
  3. TwinCAT 3 Engineering에서 TwinCAT 객체를 호출해 분류를 수행하거나 예측을 합니다. 동일한 PLC에서 실행되는 다른 기능이나 구성요소와 통합합니다.

이러한 핵심 단계 외에도 데모 워크플로에는 두 가지 추가 보완 단계가 포함되었습니다.

  1. Simulink® 및 Stateflow®에서 제어 알고리즘을 설계합니다. Simulink Coder™ 및 TwinCAT 3 Target for Simulink를 사용해 이 제어 모델에서 TwinCAT 객체를 생성합니다.
  2. MATLAB의 앱 디자이너로 TwinCAT 3 Interface for MATLAB and Simulink를 사용하는 HMI(인간-기계 인터페이스)를 설계해 MATLAB과 TwinCAT 런타임 환경 사이에서 데이터를 교환합니다.

사전 훈련된 신경망을 사용한 전이 학습

딥러닝 응용 사례에 사용할 데이터를 수집하고 준비한 후 워크플로의 첫 번째 단계는 딥러닝 모델을 훈련하는 것입니다. MATLAB 과 Deep Learning Toolbox 사용하면 심층 신경망 디자이너 앱을 사용하여 처음부터 신경망을 훈련시키거나, 딥러닝 모델을 함수로 정의하고 사용자 지정 훈련 루프를 사용하거나, 사전 훈련된 모델을 새 데이터로 다시 훈련시키는 것(전이 학습이라고도 함) 등 여러 가지 방법으로 이를 수행할 수 있습니다. 비정상 데이터의 양이 적은 경우 Automated Visual Inspection Library for Computer Vision Toolbox™에 포함된 FCDD, PatchCore 등의 이상 감지 방법도 효과적입니다.

육각 너트 예시 응용 사례의 경우 우리는 전이 학습을 사용해 육각 너트의 영상 데이터셋을 분류하기 위해 컨벌루션 신경망을 재훈련했습니다. 구체적으로, 우리는 사전 훈련된 ResNet-18과 SqueezeNet 신경망을 MATLAB로 불러온 다음 이를 다시 훈련하여 육각형 너트 이미지를 분류했습니다. (그림 2)

비디오 길이: 1:33

그림 2. Deep Learning Toolbox로 새로운 영상을 분류하도록 딥러닝 신경망을 훈련할 수 있습니다.

ResNet-18 신경망은 매우 정확했지만 SqueezeNet 신경망보다 훨씬 더 크고 느렸습니다. SqueezeNet 신경망은 정확도는 다소 떨어지지만 해당 활용 사례에는 충분히 정확했습니다. 또한 PLC 타이밍 예산이 300ms이므로 ResNet-18은 우리 요구사항을 충족시킬 수 없다는 것을 알았고, 따라서 SqueezeNet으로 전환했습니다. 우리는 컨벌루션 계층의 필터를 가지치기함으로써 이 신경망의 성능을 더욱 개선하고 크기를 줄였습니다. 이러한 가지치기로 인해 정확도는 7%만 감소했지만 속도는 두 배로 증가했습니다. 정확도, 속도, 크기 간의 균형을 고려한 결정을 내려야 하는 팀에게는 다양한 신경망과 신경망 압축 옵션을 빠르게 평가할 수 있는 능력이 상당한 이점이 됩니다.

컴파일된 TwinCAT 객체 구축 및 TwinCAT 3 Engineering에 통합

MATLAB 함수(이 경우 딥러닝 모델을 호출하는 함수)에서 TwinCAT 객체를 생성하는 과정은 두 단계로 구성됩니다. 첫 번째 단계는 MATLAB Coder를 사용하여 함수에 대한 C/C++ 코드를 생성하는 것입니다. 두 번째 단계는 TwinCAT Target for MATLAB 사용하여 생성된 코드를 TwinCAT 객체로 컴파일하는 것입니다. 이 두 단계를 실행하는 스크립트를 작성하면 워크플로의 이 부분을 자동화할 수 있습니다. (그림 3) 딥러닝 신경망에 변경 사항이 생기면 팀은 이 스크립트를 다시 실행하여 즉시 업데이트된 TwinCAT 객체를 생성할 수 있습니다.

비디오 길이: 0:20

그림 3. TwinCAT 객체를 구축하는 데 사용될 C/C++ 코드를 생성할 수 있습니다.

여기서는 MATLAB에서 Beckhoff PLC로 딥러닝 신경망을 배포하는 또 다른 방법이 있다는 점을 알아두는 것이 중요합니다. 이 접근 방식을 사용하면 팀은 MATLAB에서 ONNX 파일을 내보내고 이 파일을 TwinCAT 3으로 불러와 추론 엔진(TwinCAT Machine Learning Server)과 함께 사용해 분류 또는 회귀 작업을 수행할 수 있으며, 심지어는 GPU에서 모델을 계산하는 옵션도 있습니다. MATLAB Coder 및 TwinCAT Target for MATLAB 기반 워크플로 접근 방식이 다른 대안에 비해 갖고 있는 한 가지 장점은 MATLAB에 구현된 추가적인 전처리 및 후처리 기능을 포함하는 데 사용할 수 있다는 것입니다. ONNX 내보내기 방식을 사용하면 신경망 자체만 배포됩니다.

TwinCAT 객체가 컴파일되면 다른 객체와 마찬가지로 TwinCAT 엔지니어링에서 사용할 수 있습니다. 자동화 엔지니어는 이제 TwinCAT 객체로 구현된 딥러닝 모델을 구조화된 텍스트를 포함한 다른 PLC 코드와 통합할 수 있습니다. 예를 들어, 샘플 응용 사례에서는 컴파일된 객체를 호출하고 카메라에서 촬영한 이미지(크기가 조절되어 픽셀 행렬로 변환됨)를 전달하는 코드를 작성했습니다. 그런 다음 코드는 예측 결과(육각 너트는 정상 또는 불량)와 결과에 대한 신뢰도를 반영하는 확률 점수를 모두 포함하는 분류기의 출력을 처리합니다. (그림 4)

TwinCAT Vision을 사용하여 딥러닝 모델을 시스템 통합하는 것을 보여주는 스크린샷입니다.

그림 4. TwinCAT Vision을 이용한 딥러닝 모델의 시스템 통합.

모션 제어 설계 및 배포

예시 품질 관리 응용 사례 설계를 완성하기 위해 카메라 시야 내에서 육각 너트를 위치시키는 데 사용되는 서보모터의 제어 시스템이 필요했습니다. 이 제어 시스템을 TwinCAT 엔지니어링에서 직접 구현할 수도 있었지만, 이 기회에 분류기 배포에 사용된 것과 동일한 Beckhoff PLC를 타겟팅하며 모델 기반 설계를 사용했습니다. 우리는 Stateflow로 Simulink에서 모션 제어기를 모델링하는 것으로 시작했습니다. 다음으로, 설계를 검증하기 위한 시뮬레이션을 실행한 후 Simulink Coder를 사용하여 모델에서 C/C++ 코드를 생성한 다음 TwinCAT 3 Target for Simulink를 사용하여 코드를 TwinCAT 객체로 컴파일했습니다. 그런 다음 이 객체를 TwinCAT Engineering에서 시각화하고 이를 다른 설계 요소와 통합할 수 있습니다. (그림 5)

드라이브 제어와 위치 피드백을 위한 입력, 논리 게이트, 출력을 갖춘 모션 제어 시스템을 보여주는 Simulink 모델입니다.

그림 5. 모션 제어를 위한 Simulink 모델.

MATLAB의 앱 디자이너 및 TwinCAT Interface for MATLAB을 사용한 HMI 설계

대부분의 산업 자동화 활용 사례에서 HMI는 운영자가 장비를 모니터링하고 제어하고, 실시간 데이터를 보고, 경고를 수신하고, 생산 프로세스를 관리할 수 있도록 제공됩니다. 예시 품질 관리 응용 사례에 대한 HMI를 생성하기 위해 우리는 MATLAB의 앱 디자이너를 사용해 사용자 인터페이스의 설계를 배치하는 것으로 시작했습니다. 사용자는 인터페이스를 통해 육각 너트의 움직임을 제어할 수 있고, 현재 카메라 아래에 위치한 육각 너트를 보고, 딥러닝 신경망의 결과(분류 및 확률 점수 포함)를 확인하고, 분류기의 실행 시간을 포함한 벤치마크를 모니터링할 수 있습니다. (그림 6) 사용자 인터페이스와 PLC 런타임 환경 간의 모든 데이터 교환은 TwinCAT 3 Interface for MATLAB and Simulink를 통해 수행되며, 이는 ADS(Automation Device Specification) 통신 프로토콜을 사용합니다.

육각 너트 품질 관리 HMI를 보여주는 스크린샷입니다.

그림 6. MATLAB의 앱 디자이너 및 TwinCAT 3 Interface for MATLAB and Simulink로 구축한 육각 너트 품질 관리 HMI입니다.

향후의 반복

여기에 설명된 워크플로의 주요 장점은 팀이 빠른 반복을 통해 상충 결정을 평가할 수 있다는 것입니다. 예를 들어, 품질 관리 응용 사례에서는 신경망 크기와 실행 시간을 줄이는 대신 분류 정확도를 일부 포기했습니다. 설계 요구사항이 훨씬 더 낮은 지연 시간을 요구한다면 신경망을 수정하여 추가적인 개선을 모색하거나 더 높은 성능 클래스의 구성 요소와 프로세서를 탑재한 PLC를 선택할 수도 있었을 것입니다.

특정 프로젝트 요구사항에 맞게 이 워크플로를 확장하는 것도 가능합니다. 이러한 확장 중 하나는 심층 신경망의 분류 결과를 사용하여 제어 시스템에 영향을 미치는 것입니다. 우리가 만든 특정 품질 관리 시연에서는 필요하지 않지만 분류 결과에 따라 제어 시스템이 즉각적인 조치를 취할 수 있는 기능은 다양한 산업 자동화 활용 사례에 널리 적용할 수 있으며 이 워크플로를 도입하는 많은 팀에게 자연스러운 다음 단계가 될 것입니다.

2024년 기고

관련 기능에 대한 칼럼 보기