지게차가 팔레트를 조작할 수 있도록 팔레트를 감지하는 모델을 개발하는 로봇 공학 또는 머신 러닝(ML) 엔지니어라고 가정해 보겠습니다. 기존의 딥 러닝 파이프라인에 익숙하고, 수동으로 주석을 단 데이터 세트를 큐레이팅했으며, 성공적인 모델을 학습시킨 경험이 있습니다.
이제 조밀하게 쌓인 팔레트 더미라는 다음 과제를 해결할 준비가 되었습니다. 어디서부터 시작해야 할지 궁금할 것입니다. 2D 바운딩 박스 감지 또는 인스턴스 분할이 이 작업에 가장 유용할까요? 3D 바운딩 박스 감지를 수행해야 하며, 수행한다면 어떻게 주석을 달아야 할까요? 단안 카메라, 스테레오 카메라 또는 라이더 중 어떤 것을 사용하는 것이 가장 좋을까요? 실제 창고 장면에서 발생하는 팔레트의 양을 고려할 때 수동으로 주석을 다는 것은 쉬운 일이 아닙니다. 잘못하면 비용이 많이 들 수도 있습니다.
저도 비슷한 상황에 직면했을 때 이런 고민을 했습니다. 다행히도 비교적 적은 노력으로 쉽게 시작할 수 있는 방법이 있었으니 바로 합성 데이터였습니다.
합성 데이터 개요
합성 데이터 생성(SDG)은 실제 이미지가 아닌 렌더링된 이미지를 사용하여 신경망을 훈련하기 위한 데이터를 생성하는 기법입니다. 합성 렌더링 데이터를 사용하면 장면에 있는 오브젝트의 전체 모양과 위치를 암시적으로 알 수 있고 2D 바운딩 박스, 키포인트, 3D 바운딩 박스, 세분화 마스크 등과 같은 주석을 생성할 수 있다는 이점이 있습니다.
합성 데이터는 대규모의 수동 데이터 주석 작업을 수행하기 전에 또는 데이터가 제한적이거나 존재하지 않는 경우 아이디어를 빠르게 반복할 수 있으므로 딥러닝 프로젝트를 부트스트랩하는 데 좋은 방법이 될 수 있습니다. 이러한 경우, 도메인 무작위화를 사용한 합성 데이터가 애플리케이션에 매우 효과적이라는 것을 처음 시도할 때 알 수 있습니다. 그리고 시간도 절약됩니다.
또는 작업을 재정의하거나 다른 센서 방식을 사용해야 할 수도 있습니다. 합성 데이터를 사용하면 많은 비용이 드는 주석 작업을 하지 않고도 이러한 결정을 실험해 볼 수 있습니다.
많은 경우 실제 데이터를 사용하는 것이 더 유용할 수 있습니다. 좋은 점은 합성 데이터로 실험함으로써 문제를 더 잘 파악할 수 있고, 가장 중요한 곳에 주석 작업을 투자할 수 있다는 것입니다. 각 머신러닝 작업에는 고유한 과제가 있으므로 합성 데이터가 어떻게 적합한지, 실제 데이터를 사용해야 하는지, 아니면 합성 데이터와 실제 데이터를 혼합하여 사용해야 하는지 정확히 결정하기는 어렵습니다.
합성 데이터를 사용하여 팔레트 세분화 모델 훈련하기
합성 데이터를 사용하여 팔레트 감지 모델을 훈련하는 방법을 고려할 때, 우리 팀은 작은 것부터 시작했습니다. 3D 박스 감지나 복잡한 것을 고려하기 전에 먼저 합성 데이터로 훈련된 모델을 사용하여 무엇이든 감지할 수 있는지 확인하고자 했습니다. 이를 위해 상자가 위에 있는 팔레트 한두 개만 포함된 장면의 간단한 데이터 세트를 렌더링했습니다. 이 데이터를 사용하여 시맨틱 세분화 모델을 훈련했습니다.
시맨틱 세분화 모델을 훈련하기로 선택한 이유는 작업이 잘 정의되어 있고 모델 아키텍처가 비교적 간단하기 때문입니다. 또한 모델이 실패하는 부분(잘못 세분화된 픽셀)을 시각적으로 식별할 수 있습니다.
세분화 모델을 훈련하기 위해 팀은 먼저 거친 합성 장면을 렌더링했습니다(그림 1).
팀은 이러한 렌더링 이미지만으로는 의미 있는 팔레트 감지 모델을 학습시키기에는 다양성이 부족할 것이라고 생각했습니다. 또한 보다 사실적인 이미지를 생성하기 위해 생성형 AI를 사용하여 합성 렌더링을 보강하는 실험을 하기로 결정했습니다. 훈련 전에 이러한 이미지에 생성 AI를 적용하여 모델이 실제 세계로 일반화할 수 있는 능력을 향상시킬 수 있는 변형을 추가했습니다.
이 작업은 렌더링된 장면에서 오브젝트의 포즈를 대략적으로 보존하는 깊이 조건부 생성 모델을 사용하여 수행되었습니다. SDG로 작업할 때 반드시 생성형 AI를 사용할 필요는 없습니다. 합성 텍스처, 색상, 팔레트의 위치 및 방향을 변경하는 등 기존의 도메인 무작위화를 사용해 볼 수도 있습니다. 렌더링된 텍스처를 변경하는 기존의 도메인 무작위화만으로도 애플리케이션에 충분할 수 있습니다.
이러한 합성 이미지를 약 2,000개 렌더링한 후 PyTorch를 사용하여 resnet18 기반 Unet 세그먼테이션 모델을 학습시켰습니다. 그 결과, 실제 이미지에서 매우 뛰어난 성능을 보였습니다(그림 3).
이 모델은 팔레트를 정확하게 세분화할 수 있었습니다. 이 결과를 바탕으로 워크플로우에 대한 신뢰도가 높아졌지만 문제는 아직 끝나지 않았습니다. 지금까지 팀의 접근 방식으로는 팔레트의 인스턴스를 구분하지 못했으며, 바닥에 놓여 있지 않은 팔레트는 감지하지 못했습니다. 그림 4에 표시된 것과 같은 이미지의 경우 결과를 거의 사용할 수 없었습니다. 이는 훈련 분포를 조정해야 한다는 것을 의미했습니다.
반복적으로 데이터 다양성을 늘려 정확도 개선하기
세분화 모델의 정확도를 개선하기 위해 팀은 다양한 무작위 구성으로 쌓인 더 다양한 팔레트 이미지를 추가했습니다. 데이터 세트에 약 2,000개의 이미지를 추가하여 총 4,000개의 이미지를 확보했습니다. 쌓인 팔레트 장면은 USD Scene Construction Utilities 오픈 소스 프로젝트를 사용하여 만들었습니다.
USD Scene Construction Utilities는 실제 세계에서 볼 수 있는 분포를 반영하는 구성으로 팔레트를 서로 상대적으로 배치하는 데 사용되었습니다. 다양한 팔레트 모델 중에서 선택할 수 있는 범용 씬 디스크립션(OpenUSD) SimReady 에셋을 사용했습니다.
쌓인 팔레트로 훈련하고 더 다양한 시점을 사용하여 이러한 사례에 대한 모델의 정확도를 개선할 수 있었습니다.
이 데이터를 추가하는 것이 모델에 도움이 되었다면 추가 주석 비용이 들지 않는데 왜 2,000개의 이미지만 생성했을까요? 동일한 합성 분포에서 샘플링했기 때문에 많은 이미지로 시작하지 않았습니다. 이미지를 더 추가한다고 해서 데이터 세트에 다양성이 크게 증가하지는 않습니다. 대신 모델의 실제 정확도를 개선하지 않고 유사한 이미지만 많이 추가할 수 있습니다.
소규모로 시작함으로써 팀은 모델을 빠르게 학습시키고, 실패한 부분을 확인한 후 SDG 파이프라인을 조정하고 데이터를 더 추가할 수 있었습니다. 예를 들어, 모델이 팔레트의 특정 색상과 모양에 편향된 것을 발견한 후 이러한 실패 사례를 해결하기 위해 합성 데이터를 더 추가했습니다.
이러한 데이터 변형을 통해 모델이 직면한 실패 시나리오(플라스틱 및 컬러 팔레트)를 처리하는 능력이 향상되었습니다.
데이터 변형이 좋다면 한 번에 많은 변형을 추가하면 어떨까요? 우리 팀이 실제 데이터로 테스트를 시작하기 전까지는 어떤 분산이 필요한지 알기 어려웠습니다. 모델이 제대로 작동하는 데 필요한 중요한 요소를 놓쳤을 수도 있습니다. 또는 다른 요소의 중요성을 과대평가하여 불필요하게 노력을 소모했을 수도 있습니다. 반복 작업을 통해 작업에 필요한 데이터를 더 잘 이해할 수 있었습니다.
팔레트 측면 중심 감지를 위한 모델 확장
세분화를 통해 몇 가지 유망한 결과를 얻었으므로 다음 단계는 의미론적 세분화에서 좀 더 실용적인 것으로 작업을 조정하는 것이었습니다. 다음으로 평가할 가장 간단한 작업은 팔레트 측면의 중심을 감지하는 것이라고 결정했습니다.
팔레트 측면 중심점은 지게차가 팔레트를 조작할 때 중심이 되는 지점입니다. 실제로는 팔레트를 조작하기 위해 더 많은 정보(예: 이 지점의 거리 및 각도)가 필요할 수 있지만, 우리는 이 지점을 이 프로세스의 간단한 다음 단계로 간주하여 팀이 데이터가 모든 다운스트림 애플리케이션에 얼마나 유용한지 평가할 수 있도록 했습니다.
이러한 지점을 감지하는 것은 세분화와 마찬가지로 이미지 영역에서 수행되며 구현하기 쉽고 시각적으로 해석하기 쉬운 히트 맵 회귀를 통해 수행할 수 있습니다. 이 작업을 위해 모델을 훈련시킴으로써 합성 데이터 세트가 조작을 위한 중요한 핵심 포인트를 탐지하는 모델을 훈련시키는 데 얼마나 유용한지 빠르게 평가할 수 있었습니다.
훈련 후 결과는 그림 8에서 볼 수 있듯이 고무적이었습니다.
연구팀은 합성 데이터를 사용하여 팔레트가 촘촘히 쌓여 있는 경우에도 팔레트 측면을 감지할 수 있음을 확인했습니다. 이 작업을 위한 모델을 개선하기 위해 데이터, 모델, 학습 파이프라인을 지속적으로 반복했습니다
모서리 감지를 위한 모델 확장
측면 중심 감지 모델에서 만족스러운 지점에 도달하자 다음 단계인 상자 모서리 감지로 작업을 확장하는 방안을 모색했습니다. 초기 접근 방식은 팔레트 측면 중심에 대한 접근 방식과 유사하게 각 모서리에 대해 히트 맵을 사용하는 것이었습니다.
그러나 이 접근 방식은 곧 문제가 발생했습니다. 감지 대상 물체의 치수를 알 수 없었기 때문에 팔레트 모서리가 직접 보이지 않는 경우 모델이 모서리 위치를 정확하게 유추하기가 어려웠습니다. 히트 맵을 사용하면 피크 값이 일관되지 않으면 안정적으로 파싱하기 어렵습니다.
따라서 히트 맵을 사용하는 대신 얼굴 중앙 피크를 감지한 후 모서리 위치를 회귀하는 방법을 선택했습니다. 주어진 팔레트 면 중심에서 모서리의 오프셋을 포함하는 벡터 필드를 추론하도록 모델을 학습시켰습니다. 이 접근 방식은 이 작업에 대한 가능성을 빠르게 보여줬고, 오클루전이 큰 경우에도 모서리 위치에 대한 의미 있는 추정치를 제공할 수 있었습니다.
이제 팀에 유망한 작업 파이프라인이 생겼으므로 이 프로세스를 반복하고 확장하여 발생하는 다양한 실패 사례를 해결했습니다. 최종 모델은 총 약 25,000개의 렌더링된 이미지로 학습되었습니다. 비교적 낮은 해상도(256 x 256픽셀)로 학습된 모델은 더 높은 해상도에서 추론을 실행하여 작은 팔레트를 감지할 수 있었습니다. 그 결과 위와 같은 까다로운 장면도 비교적 높은 정확도로 감지할 수 있었습니다.
이는 모두 합성 데이터로 생성된 것이었기 때문에 가능했습니다. 이것이 바로 오늘날의 팔레트 감지 모델입니다.
합성 데이터로 나만의 모델 구축 시작하기
합성 데이터로 반복적으로 개발함으로써 우리 팀은 실제 이미지에서 작동하는 팔레트 감지 모델을 개발했습니다. 더 많은 반복을 통해 더 많은 진전을 이룰 수 있습니다. 이 시점 이후에는 실제 데이터를 추가하면 더 나은 결과를 얻을 수 있습니다. 그러나 합성 데이터 생성이 없었다면 변경할 때마다 새로운 주석을 추가해야 했기 때문에 이만큼 빠르게 반복할 수 없었을 것입니다.
이 모델을 사용해보고 싶거나 팔레트 감지 모델을 사용할 수 있는 애플리케이션을 개발 중이라면 GitHub의 SDG 팔레트 모델을 방문하여 모델과 추론 코드를 모두 찾아볼 수 있습니다. 이 리포지토리에는 사전 학습된 ONNX 모델과 함께 TensorRT로 모델을 최적화하고 이미지에서 추론을 실행하는 지침이 포함되어 있습니다. 이 모델은 NVIDIA Jetson AGX Orin에서 실시간으로 실행할 수 있으므로 엣지에서 실행할 수 있습니다.
또한 최근 오픈소스 프로젝트인 USD 씬 구축 유틸리티를 확인하실 수 있으며, 여기에는 USD Python API를 사용하여 USD 씬을 구축하기 위한 예제와 유틸리티가 포함되어 있습니다.
경험을 통해 합성 데이터를 사용하여 AI 애플리케이션을 부트스트랩하는 방법을 살펴보세요. 합성 데이터 생성을 시작하고 싶으시다면 NVIDIA에서 프로세스를 간소화하는 도구 세트를 제공합니다. 여기에는 다음이 포함됩니다:
- 유니버설 씬 디스크립션(OpenUSD): 메타버스의 HTML이라고 할 수 있는 USD는 3D 월드를 완벽하게 설명하기 위한 프레임워크입니다. USD에는 3D 오브젝트 메시와 같은 기본 요소뿐만 아니라 머티리얼, 조명, 카메라, 피직스 등을 설명할 수 있는 기능도 포함되어 있습니다.
- NVIDIA Omniverse 리플리케이터: NVIDIA Omniverse 플랫폼의 핵심 확장 기능인 리플리케이터를 사용하면 개발자가 대규모의 다양한 합성 훈련 데이터를 생성하여 인식 모델 훈련을 부트스트랩할 수 있습니다. 사용하기 쉬운 API, 도메인 무작위화, 멀티센서 시뮬레이션과 같은 기능을 갖춘 Replicator는 데이터 부족 문제를 해결하고 모델 훈련 프로세스를 가속화할 수 있습니다.
- SimReady 에셋: 시뮬레이션 지원 에셋은 시뮬레이션된 디지털 세계에서 실제 세계를 표현하기 위해 정확한 물리적 속성, 동작 및 연결된 데이터 스트림을 포함하는 물리적으로 정확한 3D 오브젝트입니다. NVIDIA는 3D 씬을 구성하는 데 바로 사용할 수 있는 사실적인 에셋과 머티리얼 모음을 제공합니다. 여기에는 팔레트, 핸드 트럭, 골판지 상자 등 창고 물류와 관련된 다양한 에셋이 포함됩니다. SimReady 에셋을 활성 스테이지에 추가하기 전에 검색, 표시, 검사 및 구성하려면 SimReady Explorer 확장 기능을 사용할 수 있습니다. 각 SimReady 에셋에는 사전 정의된 고유한 시맨틱 레이블이 있어 세분화 또는 객체 감지 모델에 대한 주석이 달린 데이터를 쉽게 생성할 수 있습니다.
팔레트 모델, NVIDIA Omniverse를 사용한 합성 데이터 생성 또는 NVIDIA Jetson을 사용한 추론에 대해 궁금한 점이 있으면 GitHub에 문의하거나 NVIDIA Omniverse 합성 데이터 생성 개발자 포럼 및 NVIDIA Jetson Orin Nano 개발자 포럼을 방문하세요.
SIGGRAPH에서 AI의 다음 단계 살펴보기
SIGGRAPH 2023에서 NVIDIA CEO 젠슨 황의 강력한 키노트에 참여하세요. 수상 경력에 빛나는 연구, OpenUSD 개발, 콘텐츠 제작을 위한 최신 AI 기반 솔루션 등 최신 기술을 독점적으로 살펴볼 수 있습니다.
표준 라이선스를 무료로 다운로드하여 NVIDIA Omniverse를 시작하거나 Omniverse Enterprise를 통해 팀을 연결하는 방법을 알아보세요. 개발자라면 첫 번째 확장 프로그램을 구축하거나 Omniverse 리소스를 사용하여 커넥터 개발을 시작하세요. 뉴스레터를 구독하고 인스타그램, 미디엄, 트위터에서 NVIDIA Omniverse를 팔로우하여 플랫폼에 대한 최신 소식을 받아보세요. 리소스는 포럼, Discord 서버, Twitch 및 YouTube 채널에서 확인하세요.
관련 리소스
- GTC 세션: 오브젝트 감지 모델 훈련을 위한 합성 데이터 생성
- GTC 세션: 모바일 로봇의 시뮬레이션 기반 개발: 차세대 물류 로봇 O³dyn에 대한 기술 핸즈온
- GTC 세션: 인식 모델을 위한 옴니버스 리플리케이터를 사용한 합성 데이터 생성
- SDK: cuOpt
- 웨비나: NVIDIA NGC 주피터 노트북 데이: 이미지 세분화
- 웨비나: 가상 리액터 기술을 사용한 플라스틱 재활용 가속화