Simulation / Modeling / Design

합성 데이터로 육안 검사를 위한 물체 감지 모델을 훈련하는 방법

Reading Time: 5 minutes

AI는 산업용 육안 검사를 빠르게 변화시키고 있습니다. 공장 환경에서는 조립 중 결함이나 누락 또는 잘못된 부품을 감지하는 등 다양한 문제에 육안 검사가 사용됩니다. 컴퓨터 비전은 제품의 문제를 조기에 식별하여 고객에게 전달될 가능성을 줄일 수 있습니다.

그러나 정확하고 다양한 기능을 갖춘 물체 감지 모델을 개발하는 것은 엣지 AI 개발자에게 여전히 어려운 과제입니다. 강력한 물체 감지 모델을 개발하려면 포괄적이고 대표적인 데이터 세트에 액세스할 수 있어야 합니다. 많은 제조 시나리오에서 실제 데이터 세트는 실제 시나리오의 복잡성과 다양성을 포착하는 데 부족합니다. 좁은 환경과 제한된 변형의 제약으로 인해 다양한 상황에 효과적으로 적응할 수 있도록 모델을 훈련하는 데 어려움이 있습니다.

팀은 합성 데이터를 활용하여 실제 시나리오와 매우 유사한 다양한 무작위 데이터로 모델을 훈련하고 데이터 세트의 격차를 해결할 수 있습니다. 그 결과 산업 자동화, 의료, 제조 등 다양한 엣지 AI 애플리케이션에 배포할 수 있는 더 정확하고 적응력이 뛰어난 AI 모델을 만들 수 있습니다.

합성 데이터 생성부터 AI 학습까지

엣지 임펄스는 개발자가 엣지 디바이스용 AI 모델을 만들고 배포할 수 있도록 지원하는 통합 개발 플랫폼입니다. 데이터 수집, 전처리, 모델 트레이닝 및 배포를 지원하여 사용자가 AI 기능을 애플리케이션에 효과적으로 통합할 수 있도록 도와줍니다.

NVIDIA Omniverse의 핵심 확장 기능인 NVIDIA Omniverse Replicator를 사용하면 물리적으로 정확하고 사실적이며 합성으로 생성된 주석이 달린 이미지를 OpenUSD로 알려진 유니버설 씬 디스크립션(Universal Scene Description)으로 생성할 수 있습니다. 이러한 이미지는 엣지 임펄스 플랫폼에서 오브젝트 감지 모델을 훈련하는 데 사용할 수 있습니다.

NVIDIA Omniverse는 개인과 팀이 범용 장면 설명(OpenUSD) 기반 3D 워크플로 및 애플리케이션을 개발할 수 있도록 지원하는 컴퓨팅 플랫폼입니다.

OpenUSD는 확장성, 성능, 버전 관리 및 에셋 관리 기능으로 인해 합성 데이터 생성에 탁월한 다재다능하고 상호 운용 가능한 3D 교환 및 포맷으로, 복잡하고 사실적인 데이터 세트를 제작하는 데 이상적인 선택입니다. OpenUSD 및 USD 기반 SimReady 에셋에 연결되는 방대한 3D 콘텐츠 툴 에코시스템이 있어 물리 기반 오브젝트를 씬에 쉽게 통합하고 합성 데이터 생성 워크플로우를 가속화할 수 있습니다.

Omniverse Replicator를 사용하면 여러 도메인에 걸쳐 USD 데이터를 무작위로 생성하여 오브젝트 감지 모델이 직면할 수 있는 실제 가능성을 반영하는 시나리오를 표현할 수 있습니다.

그림 1. Omniverse Replicator에서 시작하여 엣지 임펄스 플랫폼에서 끝나는 엔드투엔드 데이터-트레이닝 파이프라인

새로운 Edge Impulse Omniverse 확장 기능을 사용하면 몇 번의 클릭만으로 합성적으로 생성된 이미지를 사용하여 Edge Impulse에서 모델을 학습시킬 수 있습니다.

Omniverse Kit Python 확장 템플릿을 사용하여 개발된 이 확장 프로그램을 통해 사용자는 Edge Impulse API에 연결하고 합성 데이터를 업로드할 데이터 세트를 선택할 수 있습니다. Kit Python 확장 템플릿은 코드 스니펫 옵션과 확장 프로그램을 빠르게 개발하기 위한 간단하고 자명하게 설명된 리소스입니다.

객체 감지 모델을 위한 합성 데이터 생성하기

Omniverse Replicator로 합성 데이터를 생성하고 이를 사용하여 엣지 임펄스에서 모델을 훈련하는 워크플로우를 이해하려면 탄산음료 캔 모델 감지 예제를 따르세요.

그림 2. 합성 데이터 세트로 학습한 후 탄산음료 캔을 감지하는 오브젝트 감지 모델

프로세스의 첫 번째 단계는 실제 시나리오를 나타내는 환경의 가상 복제본 또는 디지털 트윈을 구축하는 것입니다. 합성 이미지를 생성하는 장면은 움직일 수 있는 물체와 움직이지 않는 물체로 구성됩니다. 움직이지 않는 세트에는 조명, 컨베이어 벨트, 카메라 두 대가 포함되며, 움직일 수 있는 오브젝트는 소다 캔으로 구성됩니다. 도메인 무작위화를 사용하면 일부 고정 및 이동 오브젝트의 위치, 조명, 색상, 텍스처, 배경, 전경 등 다양한 속성을 변경할 수 있습니다.

이러한 에셋은 OpenUSD를 통해 Omniverse Replicator에서 표현됩니다. 3D 모델 파일을 USD로 변환하고 Omniverse CAD 임포터 확장자를 사용하여 Omniverse Replicator로 임포트할 수 있습니다.

조명은 사실적인 이미지 생성에 중추적인 역할을 합니다. 직사각형 조명은 패널에서 생성된 빛을 에뮬레이트할 수 있으며 돔 조명은 전체 장면을 밝게 합니다. 조명의 온도, 강도, 스케일, 위치, 회전 등 조명의 다양한 파라미터를 무작위로 지정할 수 있습니다.

다음 스크립트는 정규 분포에서 샘플링을 통해 무작위로 추출한 온도와 강도를 보여 주며, 눈금은 균일 분포로 무작위로 추출합니다. 조명의 위치와 회전은 일정하게 유지되도록 고정되어 있습니다.

python

# Lightning setup for Rectangular light and Dome light 

def rect_lights(num=1):

    lights = rep.create.light(

        light_type="rect",

        temperature=rep.distribution.normal(6500, 500),

        intensity=rep.distribution.normal(0, 5000),

        position=(45, 110, 0),

        rotation=(-90, 0, 0),

        scale=rep.distribution.uniform(50, 100),

        count=num

    )

    return lights.node

rep.randomizer.register(rect_lights)

def dome_lights(num=3):

    lights = rep.create.light(

        light_type="dome",

        temperature=rep.distribution.normal(6500, 500),

        intensity=rep.distribution.normal(0, 1000),

        position=(45, 120, 18),

        rotation=(225, 0, 0),

        count=num

    )

    return lights.node

rep.randomizer.register(dome_lights)

대부분의 씬에는 테이블이나 이 경우의 컨베이어 벨트처럼 환경에 중요한 움직이지 않는 오브젝트가 있습니다. 이러한 오브젝트의 위치는 고정할 수 있으며, 오브젝트의 재질은 실제 가능성을 반영하여 무작위로 지정할 수 있습니다.

다음 스크립트는 캔이 놓일 컨베이어 벨트를 USD로 생성합니다. 또한 위치와 회전도 고정합니다. 이 예제에서는 컨베이어 벨트의 재질을 무작위로 지정하지 않습니다.

python 

# Import and position the conveyor belt

conveyor = rep.create.from_usd(CONVEYOR_USD, semantics=[('class', 'conveyor')])

with conveyor:

    rep.modify.pose(

        position=(0, 0, 0),

        rotation=(0, -90, -90),

    )

고품질 데이터 세트를 보장하려면 해상도가 다른 여러 대의 카메라를 사용하고 씬에 전략적으로 배치하는 것이 좋습니다. 카메라의 위치는 무작위로 지정할 수도 있습니다. 이 스크립트에서는 해상도가 다른 두 대의 카메라를 씬의 여러 위치에 전략적으로 배치합니다.

# Multiple setup cameras and attach to render products

camera = rep.create.camera(focus_distance=focus_distance, focal_length=focal_length,

                            position=cam_position, rotation=cam_rotation, f_stop=f_stop)

camera2 = rep.create.camera(focus_distance=focus_distance2, focal_length=focal_length2,

                            position=cam_position2, rotation=cam_rotation, f_stop=f_stop)

# Render images

render_product = rep.create.render_product(camera, (1024, 1024))

render_product2 = rep.create.render_product(camera2, (1024, 1024))
그림 3. 여러 카메라 위치에서 합성 이미지 생성

마지막 단계는 움직일 수 있는 물체의 위치를 무작위로 지정하는 동시에 해당 영역에 유지합니다. 이 스크립트에서는 사용 가능한 캔 에셋 모음에서 무작위로 선택된 3D 캔 모델 인스턴스 5개를 초기화합니다.

cans = list()

for i in range(TOTAL_CANS):

    random_can = random.choice(cans_list)

    random_can_name = random_can.split(".")[0].split("/")[-1]

    this_can = rep.create.from_usd(random_can, semantics=[('class', 'can')]) 

    with this_can:

        rep.modify.pose(

            position=(0, 0, 0),

            rotation=(0, -90, -90)

        )

    cans.append(this_can)

그런 다음 캔의 포즈를 무작위로 지정하고 두 평면에 분산시켜 캔을 컨베이어 벨트 위에 유지하면서 충돌을 피합니다.

with rep.trigger.on_frame(num_frames=50, rt_subframes=55):

    planesList=[('class','plane1'),('class','plane2')]

    with rep.create.group(cans):

        planes=rep.get.prims(semantics=planesList)

        rep.modify.pose(

            rotation=rep.distribution.uniform(

                (-90, -180, 0), (-90, 180, 0)

            )

        )

        rep.randomizer.scatter_2d(planes, check_for_collisions=True)
그림 4. 컨베이어 벨트에 무작위 포즈로 흩어져 있는 캔

데이터 주석 달기, 모델 구축, 실제 오브젝트로 테스트하기

이미지가 생성된 후에는 Edge Impulse Omniverse 확장 프로그램을 사용하여 몇 번의 클릭만으로 Edge Impulse Studio에 업로드할 수 있습니다. 엣지 임펄스 스튜디오에서 데이터 세트에 주석을 달고 Yolov5 오브젝트 감지 모델과 같은 모델을 사용하여 학습할 수 있습니다. 버전 제어 시스템을 통해 다양한 데이터 세트 버전과 하이퍼파라미터에 걸쳐 모델 성능을 추적하여 정확도를 최적화할 수 있습니다.

실제 오브젝트로 모델 정확도를 테스트하기 위해 라이브 비디오를 스트리밍하고 엣지 임펄스 CLI 도구를 사용하여 로컬에서 모델을 실행할 수 있습니다.

그림 5. 엣지 임펄스에서 모델 정밀도 테스트

모델이 객체를 정확하게 감지하지 못하면 추가 데이터 세트에 대해 모델을 학습시켜야 합니다. 이러한 반복적인 프로세스는 AI 모델 학습에 있어 일반적인 과정입니다. 합성 데이터의 또 다른 장점은 후속 반복에서 필요한 변형을 프로그래밍 방식으로 수행할 수 있다는 것입니다.

이 예제에서는 추가 합성 데이터 세트를 생성하여 성능 향상을 위한 모델 훈련에 사용했습니다. 추가 데이터 세트는 컨베이어에서 더 멀리 떨어진 카메라 거리를 사용했습니다. 카메라 각도 및 재료와 같은 다른 매개 변수는 추가 데이터 세트에서 수정하여 성능을 개선할 수 있습니다.

모델의 실패 지점을 중심으로 더 많은 데이터를 생성하는 데이터 중심 접근 방식을 취하는 것은 ML 문제를 해결하는 데 매우 중요합니다. 추가 학습과 매개변수 미세 조정을 통해 모델이 다양한 방향, 재료 및 기타 관련 조건에 걸쳐 잘 일반화될 수 있도록 할 수 있습니다.

합성 데이터로 엣지 AI 훈련 및 배포 시작하기

Omniverse Replicator에서는 물리적으로 정확한 합성 데이터를 쉽게 생성할 수 있습니다. Omniverse를 무료로 다운로드하고 Omniverse 코드에서 Replicator를 시작하기 위한 지침을 따르기만 하면 됩니다.

엣지 임펄스를 사용하면 Omniverse에서 생성된 합성 데이터를 사용하여 ML 모델을 훈련할 수 있습니다. 지금 바로 등록하고 임베디드 머신 러닝 모델을 사용해 보세요.

Imagine 2023 키노트에서 NVIDIA의 제품 관리 디렉터인 Amit Goel과 함께하세요. AI 및 머신 러닝에 대한 업계 인사이트와 NVIDIA Omniverse 및 Omniverse Replicator로 가능해진 사용 사례에 대해 알아보세요.

뉴스레터를 구독하고 인스타그램, 미디엄, 트위터를 팔로우하여 NVIDIA Omniverse에 대한 최신 소식을 받아보세요. 더 많은 리소스를 보려면 포럼, Discord 서버, TwitchYouTube 채널을 확인하세요.

관련 리소스

Discuss (0)

Tags