모델 실행
안녕하세요 Neat!에서 사용한 것과 동일한 작업 디렉터리를 사용하여 객체 감지를 위한 실제 모델을 실행합니다. 이 애플리케이션은 YOLOv8 모델을 로드하고, 샘플 이미지를 읽고, 추론을 실행하고, 바운딩 박스를 디코딩하고, 감지된 객체의 수를 출력합니다.
이 페이지에서는 두 가지 Neat 개념을 소개합니다.
Model은 컴파일된 모델 패키지를 로드하고run(...)진입점을 제공합니다.ModelOptions는 Neat에게 이미지를 준비하고 감지기 출력을 디코딩하는 방법을 알려줍니다.
지금은 전체 API를 완전히 숙지할 필요가 없습니다. Model과 ModelOptions가 함께 작동하여 컴파일된 모델을 실행하는 방법에 집중하십시오.
모델 및 샘플 이미지 가져오기
-
모델과 입력 이미지를 저장할 assets 디렉터리를 만듭니다.
sdk or devkit$mkdir -p assets cd assets -
모델을 다운로드하세요:
sdk or devkit$sima-cli modelzoo -v 2.0.0 get yolo_v8ssima-cli 모델 다운로드sima-cli가 모델을assets디렉터리 이외의 다른 곳에 저장하는 경우, 해당 파일을assets/yolo_v8s_mpk.tar.gz로 복사합니다. -
샘플 이미지를 다운로드하여
assets디렉터리에tutorial_sample_image.png로 저장합니다. -
프로젝트 디렉터리로 돌아갑니다:
sdk or devkit$cd ..
단계별 설명
안녕하세요 Neat!의 프로그램을 기반으로 구축합니다. 동일한 CMakeLists.txt 파일을 유지합니다(이미 Neat 및 OpenCV와 연결되어 있음). 그런 다음 프로그램 본문을 아래의 네 단계로 대체합니다. 각 단계는 최종 프로그램의 작은 부분입니다. 순서대로 읽은 다음 전체 프로그램을 가져와 붙여넣고 실행합니다. 모든 블록에서 언어 탭을 선택합니다. 선택은 사이트 전체 선택기를 따릅니다.
1. 이미지 {#step-load-image} 로드 및 크기 조정
YOLOv8s는 고정된 640×640 BGR 이미지를 필요로 하므로 OpenCV를 사용하여 샘플 이미지를 읽고 크기를 조정합니다. 이는 일반적인 이미지 입출력이며, 아직 Neat API는 사용하지 않습니다.
cv::Mat load_sample_image() {
cv::Mat bgr = cv::imread("assets/tutorial_sample_image.png", cv::IMREAD_COLOR);
if (bgr.empty())
throw std::runtime_error("failed to load sample image");
cv::resize(bgr, bgr, cv::Size(640, 640)); // YOLOv8s input size
return bgr;
}
2. 입력 및 디코딩 과정을 설명합니다. ModelOptions
ModelOptions 이미지와 모델 간의 런타임 계약입니다. 여기서는 다음 두 가지를 명시합니다. Neat 추론 전에 디코딩된 픽셀을 전처리해야 하며, 검출기의 원시 출력을 박스로 디코딩하는 방법을 설명합니다. decode_type YOLOv8 디코더를 선택하고, 임계값을 사용하여 약하거나 겹치는 박스를 제거합니다. top_k 개수를 제한합니다.
simaai::neat::Model::Options opt;
opt.preprocess.kind = simaai::neat::InputKind::Image;
opt.preprocess.preset = simaai::neat::NormalizePreset::COCO_YOLO;
opt.decode_type = simaai::neat::BoxDecodeType::YoloV8;
opt.score_threshold = 0.55f;
opt.nms_iou_threshold = 0.5f;
opt.top_k = 100;