로컬 환경:
YOLO v8 Python 라이브러리 설치
pip install ultralytics
무척 무척 간단해 보인다. 분명 전에도 여러 번 설치를 했었는데? 다시 설치하려고 보니 왜 이렇게 험난한 거야 ㅠㅠ 그래서 정리해 둔다.
도커를 쓰고 torch 도커에서 빌드 시작하면 만날 일이 없었음.. 도커 쓰세요 도커
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
이렇게
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