주요 콘텐츠

YOLOX를 사용한 객체 검출 시작하기

Computer Vision Toolbox™ Automated Visual Inspection Library 지원 패키지를 사용하여 YOLOX(You Only Look Once X) 객체 검출기로 영상에서 객체를 검출합니다.

YOLOX 객체 검출 모델은 단일 단계(one-stage), 앵커 프리(anchor-free) 기법으로, 이전 YOLO 모델[1]에 비해 모델 크기를 대폭 줄이고 계산 속도를 개선합니다. 메모리 사용량이 많은 미리 정의된 앵커 상자를 사용하는 대신, YOLOX는 객체의 중심을 찾아 직접 객체의 위치를 추정합니다. 경계 상자의 크기를 예측하기 위해, 이 신경망은 입력 영상을 서로 다른 세 가지 스케일의 그리드로 분할하고, 그리드 점을 경계 상자의 왼쪽 위 오프셋으로 사용합니다. 그리드는 영상 크기에 따라 다시 계산될 수 있으므로, YOLOX를 사용하여 타일 기반 훈련을 수행할 수 있습니다. 즉, 패치 단위로 YOLOX 신경망을 훈련시키고 전체 크기의 영상에 대해 추론을 수행할 수 있습니다.

YOLOX 신경망은 백본(backbone), 넥(neck), 헤드(head)의 세 부분으로 구성됩니다.

  1. YOLOX 신경망의 백본은 사전 훈련된 컨벌루션 신경망인 CSP-DarkNet-53으로, COCO 데이터 세트에 대해 훈련되었습니다. 백본은 입력 영상에서 특징 맵을 계산하는 특징 추출 신경망 역할을 합니다.

  2. 넥은 백본과 헤드를 연결합니다. 넥은 여러 스케일에서 특징 맵과 그에 대응하는 그리드를 생성하는 특징 피라미드 신경망(FPN), 그리고 저수준 특징과 고수준 특징을 결합하는 경로 집계 신경망으로 구성됩니다. 넥은 백본 계층에서 생성된 특징 맵을 결합하여 서로 다른 세 가지 스케일(1024개 채널, 512개 채널, 256개 채널)에서 헤드에 입력으로 전송합니다.

  3. 분리된 검출 헤드는 집계된 특징을 다음을 포함하는 세 개의 특징 채널로 처리합니다.

    • 분류 점수 – 각 경계 상자의 클래스

    • 회귀 점수 – 각 경계 상자의 위치 및 크기

    • 객체성 점수(IoU) – 각 경계 상자가 객체를 포함할 신뢰 점수

아래 그림은 단순화를 위해 세 가지 스케일 중 하나에만 분리된 헤드가 포함된 기본 YOLOX 아키텍처를 보여줍니다.

YOLOX architecture: the FPN serves as the backbone network to extract multi-scale features from the input image, and output features at 3 scales to the head. The decoupled detection head outputs the classification, regression, and objectness scores.

자동 외관 검사 지원 패키지 설치하기

이 기능을 사용하려면 Deep Learning Toolbox™와 Automated Visual Inspection Library for Computer Vision Toolbox가 필요합니다. 애드온 탐색기에서 Automated Visual Inspection Library for Computer Vision Toolbox를 설치할 수 있습니다. 애드온 설치에 대한 자세한 내용은 애드온을 받고 관리하기를 참조하십시오. GPU에서 영상 데이터를 처리하려면 지원되는 GPU 장치와 Parallel Computing Toolbox™가 필요합니다.

사전 훈련된 YOLOX 신경망을 사용하여 영상에서 객체 검출하기

디폴트 설정으로 사전 훈련된 YOLOX 신경망을 사용하여 테스트 영상에서 객체를 검출하려면 다음 단계를 따르십시오.

  1. 작업 공간에서 테스트 영상을 불러옵니다. YOLOX 모델은 RGB 영상이나 회색조 영상을 지원합니다.

    I = imread("boats.png");
    
  2. CSP-DarkNet-53 백본을 특징 추출기로 사용하는 사전 훈련된 YOLOX 신경망을 구성하기 위해 yoloxObjectDetector 객체를 만듭니다.

    detector = yoloxObjectDetector("small-coco");

    객체 검출 성능이 저하될 수 있더라도 추론 속도를 높이려면, 특징 수를 줄인 경량 CSP-DarkNet-53 백본("tiny-coco")을 대신 지정합니다.

  3. 사전 훈련된 신경망에 대해 detect 함수를 사용하여 객체 검출을 수행하고, 함수가 경계 상자, 검출 점수, 레이블을 반환하도록 지정합니다.

    [bboxes,scores,labels] = detect(detector,I);
  4. insertObjectAnnotation 함수를 사용하여 입력 영상 위에 결과를 겹쳐 표시합니다.

    detectedImg = insertObjectAnnotation(I,"Rectangle",bboxes,labels);
    figure
    imshow(detectedImg)

    Bounding box and label output from the pretrained YOLOX detector object is overlaid on the RGB test image

훈련된 YOLOX 신경망을 사용하여 테스트 영상에 대해 추론을 수행하려면, 동일한 과정을 따르되 detector 변수에 훈련된 YOLOX 신경망을 지정합니다.

YOLOX 신경망을 훈련하고 전이 학습 수행하기

레이블이 지정된 데이터 세트를 기반으로 YOLOX 객체 검출 신경망을 훈련시키려면 trainYOLOXObjectDetector 함수를 사용하십시오. 신경망 훈련에 사용하는 데이터 세트의 클래스 이름을 지정해야 합니다. 그런 다음 trainYOLOXObjectDetector 함수를 사용하여 훈련되지 않은 신경망이나 사전 훈련된 신경망을 훈련시킵니다. 훈련 함수는 훈련된 신경망을 yoloxObjectDetector 객체로 반환합니다.

작은 객체를 검출하는 전이 학습을 위해 YOLOX 객체 검출기를 구성하고 훈련시키는 방법을 알아보려면 Detect Defects on Printed Circuit Boards Using YOLOX Network 예제를 참조하십시오.

딥러닝을 위해 훈련 데이터에 레이블 지정하기

ground truth 데이터를 생성하려면 영상 레이블 지정기 앱, 비디오 레이블 지정기 앱 또는 Ground Truth 레이블 지정기 (Automated Driving Toolbox) 앱을 사용하여 대화형 방식으로 픽셀에 레이블을 지정하고 레이블 데이터를 내보낼 수 있습니다. 또한 이러한 앱을 사용하여 객체 검출을 위해 사각형 관심 영역(ROI)에 레이블을 지정하고, 영상 분류를 위해 장면에 레이블을 지정하고, 의미론적 분할을 위해 픽셀에 레이블을 지정할 수 있습니다. 레이블 지정기에서 내보낸 ground truth 객체로부터 훈련 데이터를 만들려면 objectDetectorTrainingData 또는 pixelLabelTrainingData 함수를 사용합니다. 자세한 내용은 Training Data for Object Detection and Semantic Segmentation 항목을 참조하십시오.

참고 문헌

[1] Ge, Zheng, Songtao Liu, Feng Wang, Zeming Li, and Jian Sun. “YOLOX: Exceeding YOLO Series in 2021.” arXiv, August 5, 2021. http://arxiv.org/abs/2107.08430.

참고 항목

객체

함수

도움말 항목