MapleStory Finger Point

Development/YOLO

윈도우 환경 YOLO IndexError: invalid index to scalar variable.

吳鍾振 2022. 11. 17. 17:51

간단한 YOLO 테스트를 해보려 했는데.. 자꾸 Index 에러가 발생한다.

실행 환경:
Window 11
Darknet YOLO v3
openCV==4.6.0
python==3.10.0

...

net = cv2.dnn.readNet(weights_file, config_file)
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)

classes = []
with open("./coco.names", "r") as f:
    classes = [line.strip() for line in f.readlines()]
layer_names = net.getLayerNames()

output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]


결과:

> python yolo.py
Traceback (most recent call last):
  File "F:\onvif\get-metadata-ipcam\yolo.py", line 84, in <module>
    output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
  File "F:\onvif\get-metadata-ipcam\yolo.py", line 84, in <listcomp>
    output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
IndexError: invalid index to scalar variable.

 

물론 에러가 발생하면 원인 파악 및 분석을 해야 하지만 나는 그저 테스트 영상 출력되면 되어서 하드 코딩으로 진행했다.
물론 하드 코딩 절대 하면 안됨!!

# output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
output_layers = ['yolo_82', 'yolo_94', 'yolo_106']

위 구문을 아래로 바꿔주면 잘 실행된다.

이 숫자들이 뭔지 궁금해서 조금 찾아봤는데 YOLO v3에는 3개의 출력 레이어 (82, 94, 106) 가 있다고 한다.
이는 학습 마스크 크기를 말하며, 마스크 크기가 클수록 작은 객체를 예측 가능.. 하다고 한다..


열심히 공부하자..

반응형