YOLO v2를 사용한 객체 검출 코드 생성
이 예제에서는 YOLO(You Only Look Once) v2 객체 검출기에 대한 CUDA® MEX를 생성하는 방법을 보여줍니다. YOLO v2 객체 검출 신경망은 2개의 하위 신경망으로 구성됩니다. 하나의 특징 추출 신경망이 있고, 그 뒤에 검출 신경망이 옵니다. 이 예제에서는 Computer Vision Toolbox™의 YOLO v2 딥러닝을 사용한 객체 검출 예제에서 훈련시킨 신경망에 대한 코드를 생성합니다. 자세한 내용은 YOLO v2 딥러닝을 사용한 객체 검출 (Computer Vision Toolbox) 항목을 참조하십시오. Computer Vision Toolbox™의 Import Pretrained ONNX YOLO v2 Object Detector 예제에서 가져온 신경망에 대해 CUDA® MEX를 생성하도록 이 예제를 수정할 수 있습니다. 자세한 내용은 Import Pretrained ONNX YOLO v2 Object Detector (Computer Vision Toolbox) 항목을 참조하십시오.
타사 선행 조건
필수
이 예제는 CUDA MEX를 생성하며, 다음과 같은 타사 요구 사항이 있습니다.
CUDA® 지원 NVIDIA® GPU 및 호환되는 드라이버.
선택 사항
정적, 동적 라이브러리 또는 실행 파일과 같은 비 MEX 빌드의 경우, 이 예제에는 다음과 같은 추가 요구 사항이 있습니다.
NVIDIA 툴킷.
NVIDIA cuDNN 라이브러리.
컴파일러 및 라이브러리 환경 변수. 자세한 내용은 타사 하드웨어 항목과 필수 제품 준비하기 항목을 참조하십시오.
GPU 환경 확인하기
coder.checkGpuInstall
함수를 사용하여 이 예제를 실행하는 데 필요한 컴파일러와 라이브러리가 올바르게 설치되었는지 확인합니다.
envCfg = coder.gpuEnvConfig('host'); envCfg.DeepLibTarget = 'cudnn'; envCfg.DeepCodegen = 1; envCfg.Quiet = 1; coder.checkGpuInstall(envCfg);
사전 훈련된 DAGNetwork 가져오기
이 예제에서는 훈련된 신경망을 포함하는 yolov2ResNet50VehicleExample
MAT 파일을 사용합니다. 이 파일의 크기는 약 98MB입니다. MathWorks® 웹사이트에서 파일을 다운로드합니다.
matFile = matlab.internal.examples.downloadSupportFile('vision/data','yolov2ResNet50VehicleExample.mat'); vehicleDetector = load(matFile); net = vehicleDetector.detector.Network
net = DAGNetwork with properties: Layers: [150×1 nnet.cnn.layer.Layer] Connections: [162×2 table] InputNames: {'input_1'} OutputNames: {'yolov2OutputLayer'}
DAG 신경망은 컨벌루션 계층, ReLU 계층, 배치 정규화 계층, YOLO v2 변환 계층 및 YOLO v2 출력 계층을 비롯한 150개의 계층으로 이루어져 있습니다. 딥러닝 신경망 아키텍처의 대화형 시각화를 표시하려면 analyzeNetwork
(Deep Learning Toolbox) 함수를 사용하십시오.
analyzeNetwork(net);
yolov2_detect
진입점 함수
yolov2_detect.m
진입점 함수는 영상을 입력값으로 받아 yolov2ResNet50VehicleExample.mat
파일에 저장된 딥러닝 신경망을 사용하여 이 영상에 대해 검출기를 실행합니다. 이 함수는 yolov2ResNet50VehicleExample.mat
파일의 network 객체를 영속 변수 yolov2Obj로 불러온 다음 후속 검출 호출에서 영속 객체를 재사용합니다.
type('yolov2_detect.m')
function outImg = yolov2_detect(in,matFile) % Copyright 2018-2021 The MathWorks, Inc. persistent yolov2Obj; if isempty(yolov2Obj) yolov2Obj = coder.loadDeepLearningNetwork(matFile); end % Call to detect method [bboxes,~,labels] = yolov2Obj.detect(in,'Threshold',0.5); % Convert categorical labels to cell array of charactor vectors labels = cellstr(labels); % Annotate detections in the image. outImg = insertObjectAnnotation(in,'rectangle',bboxes,labels);
MEX 코드 생성 실행하기
진입점 함수에 대한 CUDA 코드를 생성하려면 MEX 타깃에 대한 GPU 코드 구성 객체를 만들고 타깃 언어를 C++로 설정하십시오. coder.DeepLearningConfig
함수를 사용하여 CuDNN
딥러닝 구성 객체를 만들고 이 객체를 GPU 코드 구성 객체의 DeepLearningConfig
속성에 할당합니다. 입력 크기를 224×224×3으로 지정하여 codegen
명령을 실행합니다. 이 값은 YOLOv2의 입력 계층 크기입니다.
cfg = coder.gpuConfig('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn'); cfg.GenerateReport = true; inputArgs = {ones(224,224,3,'uint8'),coder.Constant(matFile)}; codegen -config cfg yolov2_detect -args inputArgs
Code generation successful: View report
생성된 MEX 실행하기
비디오 파일 리더를 설정하고 입력 비디오를 읽어 들입니다. 비디오 플레이어를 만들어서 비디오 및 출력 검출을 표시합니다.
videoFile = 'highway_lanechange.mp4'; videoFreader = VideoReader(videoFile); depVideoPlayer = vision.DeployableVideoPlayer('Size','Custom','CustomSize',[640 480]);
비디오 입력값을 프레임별로 읽어 들이고 검출기를 사용하여 비디오의 차량을 검출합니다.
while hasFrame(videoFreader) I = readFrame(videoFreader); in = imresize(I,[224,224]); out = yolov2_detect_mex(in,matFile); depVideoPlayer(out); % Exit the loop if the video player figure window is closed cont = hasFrame(videoFreader) && isOpen(depVideoPlayer); end
참고 문헌
[1] Redmon, Joseph, and Ali Farhadi. "YOLO9000: Better, Faster, Stronger." 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). IEEE, 2017.
참고 항목
함수
객체
coder.gpuConfig
|coder.gpuEnvConfig
|coder.CuDNNConfig
|vision.VideoFileReader
(Computer Vision Toolbox) |vision.DeployableVideoPlayer
(Computer Vision Toolbox)
관련 예제
- YOLO v2 딥러닝을 사용한 객체 검출 (Computer Vision Toolbox)
- Import Pretrained ONNX YOLO v2 Object Detector (Computer Vision Toolbox)
- Code Generation for Object Detection by Using Single Shot Multibox Detector
- YOLO v3 딥러닝 신경망을 사용한 객체 검출 코드 생성
세부 정보
- Getting Started with YOLO v2 (Computer Vision Toolbox)
- 객체 검출용 앵커 상자 (Computer Vision Toolbox)
- 지원되는 신경망, 계층 및 클래스
- Load Pretrained Networks for Code Generation