ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • YOLO 모델 로딩하는 코드
    컴공지식/컴퓨터비전 2024. 11. 4. 21:42

    OpenCV 라이브러리를 사용해서 YOLO (You Only Look Once)라는 객체 탐지 모델을 불러올거다.

    readNetFromDarknet 함수를 써서 YOLO 모델을 로드한다.

     

    // YOLO 모델 설정 파일과 가중치 파일 경로 지정
    String modelConfiguration = "yolov2.cfg";
    String modelBinary = "yolov2.weights";

    // YOLO 모델 로드
    Net net = Dnn.readNetFromDarknet(modelConfiguration, modelBinary);

     

    // 이미지 프레임을 딥러닝 모델이 처리할 수 있는 blob 형태로 변환
    Mat inputBlob = Dnn.blobFromImage(frame, 1 / 255.0, new Size(416, 416), new Scalar(0, 0, 0), true, false);

     

    // YOLO 네트워크에 inputBlob을 입력으로 설정
    net.setInput(inputBlob, "data");

    // 네트워크를 통해 예측 수행하고, 결과를 detectionMat에 저장
    Mat detectionMat = net.forward("detection_out");

     

    modelConfiguration: 네트워크 구조를 담고 있는 .cfg 파일 경로, 제대로 된 경로로 넣어야 작동한다.

    modelBinary: 학습된 가중치 파일 경로, 이 파일이 있어야 모델이 뭘 탐지하는지 안다.

    Dnn.readNetFromDarknet: OpenCV의 DNN 모듈에서 readNetFromDarknet 메서드를 이용해 모델을 불러온다. 이렇게 하면 net 객체가 만들어져서 나중에 이미지에서 객체를 탐지할 때 쓸 수 있다.

    blobFromImage 쪽의 인자인 frame에는 처리하고 싶은 이미지가 들어가야 한다. 이 frame이 바로 YOLO 모델에 입력될 이미지다.

    net.setInput(inputBlob, "data");는 YOLO 모델의 입력으로 inputBlob을 설정해주는 거다. inputBlob은 우리가 이전 단계에서 만든 이미지 데이터의 "blob" 형태다. "data"는 YOLO 모델의 기본 입력 레이어 이름이다. 다른 이름을 쓰면 제대로 작동하지 않을 수 있으니까 그대로 써야 한다.

    Mat detectionMat = net.forward("detection_out");의 forward 함수는 YOLO 모델에 inputBlob을 넣고 예측을 수행하게 해준다.

    "detection_out"은 YOLO의 출력 레이어 이름이다. 이 레이어에서 탐지 결과가 나온다.

    detectionMat에는 모델이 탐지한 객체의 정보를 담은 결과가 저장된다. 예를 들어 탐지된 객체의 위치, 클래스, 신뢰도 같은 정보들이 들어있다.

     

     

    '컴공지식 > 컴퓨터비전' 카테고리의 다른 글

    퍼스펙티브 변환 과정 예시  (1) 2024.11.11
    Projective transformation  (3) 2024.11.09
    Optical Flow (광류 추적) 코드  (1) 2024.10.28
    추적 (Tracking) 코드  (1) 2024.10.28
    얼굴 인식 코드  (1) 2024.10.28
Designed by Tistory.