YOLO v8 설치기

yun·2023년 11월 29일
1

ML/DL

목록 보기
6/9
  • 로컬 환경:

    • 운영체제: Ubuntu 22.04
    • Nvidia Cuda 버전: 12.0 --> 이놈이 매번 라이브러리 설치를 힘들게 한다.. 가급적 11.8 기준으로 설치해주는 것이 좋습니다
  • YOLO v8 Python 라이브러리 설치

pip install ultralytics

무척 무척 간단해 보인다. 분명 전에도 여러 번 설치를 했었는데? 다시 설치하려고 보니 왜 이렇게 험난한 거야 ㅠㅠ 그래서 정리해 둔다.

도커를 쓰고 torch 도커에서 빌드 시작하면 만날 일이 없었음.. 도커 쓰세요 도커

  • 별 생각 없이 설치 후에 segment 실행하면 만나는 에러
    • 실행문
      yolo segment predict model=yolov8n-seg.pt source=0 show=True
    • 에러
      Traceback (most recent call last):
      File "/home/yoh/venv/yolov8_venv/bin/yolo", line 5, in <module>
        from ultralytics.yolo.cfg import entrypoint
      File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/__init__.py", line 5, in <module>
        from ultralytics.yolo.engine.model import YOLO
      File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/yolo/__init__.py", line 3, in <module>
        from . import v8
      File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/yolo/v8/__init__.py", line 3, in <module>
        from ultralytics.yolo.v8 import classify, detect, segment
      File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/yolo/v8/classify/__init__.py", line 3, in <module>
        from ultralytics.yolo.v8.classify.predict import ClassificationPredictor, predict
      File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/yolo/v8/classify/predict.py", line 4, in <module>
        import torch
      File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/torch/__init__.py", line 235, in <module>
        from torch._C import *  # noqa: F403
      ImportError: /home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/torch/lib/../../nvidia/cusparse/lib/libcusparse.so.12: undefined symbol: __nvJitLinkAddData_12_1, version libnvJitLink.so.12
    • 되게 길지만 에러가 어디서 났는지를 보세요. import torch입니다.
      ultralytics를 설치할 때 자동으로 설치되는 torch가 cuda 12.1 버전 호환이기 때문.
    • 이걸 해결하려면 11.8 cuda와 호환되는 torch를 설치해줘야 하는데, uninstall한 후에 설치하면 된다.

이렇게

pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu118

근데 yolo v3와 v5에는 잘 먹히던 이것도 여기선 갑자기 에러가 나는데...

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
generate-parameter-library-py 0.3.6 requires jinja2, which is not installed.
generate-parameter-library-py 0.3.6 requires typeguard, which is not installed.

jinja2가 필요한데 그게 없다고 한다.

뭐하는 놈이냐면

Flask 서버 개발 등에도 쓰이는 템플릿 엔진

아무튼 torch는 generate-parameter-library-py에 의존하고, generate-parameter-library-py는 jinja2에 의존하고 있어서 결과적으로 torch 설치하기 전에 먼저 설치되어 있어야 한다.

그래서 결론:

python3 -m pip install --upgrade pip
pip install jinja2
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu118
pip install ultralytics

이렇게 설치하고 다시 segment를 predict해 본다.

[ERROR:0@5.761] global obsensor_uvc_stream_channel.cpp:156 getStreamChannelGroup Camera index out of range
Traceback (most recent call last):
  File "/home/yoh/venv/yolov8_venv/bin/yolo", line 8, in <module>
    sys.exit(entrypoint())
  File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/cfg/__init__.py", line 448, in entrypoint
    getattr(model, mode)(**overrides)  # default args from model
  File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/engine/model.py", line 239, in predict
    return self.predictor.predict_cli(source=source) if is_cli else self.predictor(source=source, stream=stream)
  File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/engine/predictor.py", line 207, in predict_cli
    for _ in gen:  # running CLI inference without accumulating any outputs (do not modify)
  File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/torch/utils/_contextlib.py", line 35, in generator_context
    response = gen.send(None)
  File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/engine/predictor.py", line 240, in stream_inference
    self.setup_source(source if source is not None else self.args.source)
  File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/engine/predictor.py", line 215, in setup_source
    self.dataset = load_inference_source(source=source,
  File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/data/build.py", line 166, in load_inference_source
    dataset = LoadStreams(source, imgsz=imgsz, vid_stride=vid_stride, buffer=buffer)
  File "/home/yoh/venv/yolov8_venv/lib/python3.10/site-packages/ultralytics/data/loaders.py", line 92, in __init__
    raise ConnectionError(f'{st}Failed to open {s}')
ConnectionError: 1/1: 0... Failed to open 0

근데 이런 에러가 왜 나죠..?
source를 0으로 줬는데 0번 index 카메라를 사용 못해서이다.

0번 카메라 무슨 일인데요

v4l2-ctl --list-devices

있는 카메라 전부 내놔.


그래서 보니까

Iriun Webcam (platform:v4l2loopback-000):
	/dev/video0

HD Webcam: HD Webcam (usb-0000:00:14.0-13):
	/dev/video1
	/dev/video2
	/dev/media0

Iriun Webcam이 0번, HD Webcam(노트북 웹캠)이 1/2번이다.

아이폰 카메라를 웹캠으로 써 보겠다고 (근데 오토포커싱 기능 있는 카메라는 캘리브레이션 설정이 더 어려워서 결국 안 쓰게 됨 ㅠㅠ) 설치했던 건데, 아이폰에서는 Iriun 실행중이 아니라서 당연히 카메라를 못 쓰니까 발생한 에러.

source를 쓸 수 있는 카메라로 주면 정상 실행됩니다.

yolo segment predict model=yolov8n-seg.pt source=1 show=True

0개의 댓글

관련 채용 정보