参考:windows下使用docker封装本地YOLOv5_docker yolo windows-CSDN博客

创建image:

先打开一个cmd然后拉image,后续要用这个镜像制作yolo 的 镜像

docker pull nvcr.io/nvidia/ pytorch:24.01-py3

Dockerfile:

#基于的基础镜像

FROM nvcr.io/nvidia/pytorch:24.01-py3

#代码添加到code文件夹

ADD . /usr/src/app/uniform/yolotest

# 设置code文件夹是工作目录

WORKDIR /usr/src/app/uniform/yolotest

# 安装支持

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt
 

在yolov5的文件夹中放入dockerfile,并创建image:

docker build -t yourname .

Image转为Container

 
docker run --gpus all -it --name yolov5 -v D:\yolov5-files:/mnt/ yolov5:latest bash

其中:

--gpus all:请求使用所有可用的 GPU 资源。

-it:两个选项的组合:

-i:以交互模式运行容器,保持标准输入流(stdin)打开。

-t:分配一个伪终端,允许用户与容器交互。

-v E:\Users\yolov5:/mnt/:挂载一个卷,将主机上的 E:\Users\yolov5 目录映射到容器内的 /mnt/ 目录。这允许容器访问主机上的文件。mnt可以随意更 换,尽量是没有出现过的地址,不然里面的东西可能会被覆盖

--rm:容器在停止时自动删除。这避免了容器占用的空间。(可以不用)

yolov5:last:指定要运行的 Docker 镜像,yolov5 是镜像的名称,last 是标签。

bash:在容器内运行 bash shell,这样用户可以与容器交互。

如果需要添加或者修改yolov5里面的文件,可以在本地的地址(我这里是 E:\Users\yolov5)进行修改,然后进行cp就可以

在docker里面是可以找到 /mnt/ 目录的, /mnt/ 目录里面的内容就我是主机上的 E:\Users\yolov5 里面的内容

进入容器后运行python detect.py报错:

报错1:

找到的解决方法:OpenCV报错修复: AttributeError: module 'cv2.dnn' has no attribute 'DictValue' - Shiyu_Huang - 博客园

pip install opencv-fixer==0.2.5
python -c "from opencv_fixer import AutoFix; AutoFix()"

然后又出现了报错2:

最近一些Python 问题小结一、numpy.dtype size changed, may indicate bina - 掘金

最后出现这两个错误:

Traceback (most recent call last):
  File "/usr/src/app/uniform/yolotest/detect.py", line 438, in <module>
    main(opt)
  File "/usr/src/app/uniform/yolotest/detect.py", line 433, in main
    run(**vars(opt))
  File "/usr/local/lib/python3.10/dist-packages/torch/utils/_contextlib.py", line 115, in decorate_context
    return func(*args, **kwargs)
  File "/usr/src/app/uniform/yolotest/detect.py", line 166, in run
    model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half)
  File "/usr/src/app/uniform/yolotest/models/common.py", line 480, in __init__
    pt, jit, onnx, xml, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle, triton = self._model_type(w)
  File "/usr/src/app/uniform/yolotest/models/common.py", line 795, in _model_type
    from export import export_formats
  File "/usr/src/app/uniform/yolotest/export.py", line 71, in <module>
    from models.yolo import ClassificationModel, Detect, DetectionModel, SegmentationModel
  File "/usr/src/app/uniform/yolotest/models/yolo.py", line 55, in <module>
    from utils.plots import feature_visualization
  File "/usr/src/app/uniform/yolotest/utils/plots.py", line 18, in <module>
    from scipy.ndimage.filters import gaussian_filter1d
  File "/usr/local/lib/python3.10/dist-packages/scipy/ndimage/__init__.py", line 152, in <module>
    from ._filters import *
  File "/usr/local/lib/python3.10/dist-packages/scipy/ndimage/_filters.py", line 37, in <module>
    from scipy._lib._util import normalize_axis_index
  File "/usr/local/lib/python3.10/dist-packages/scipy/_lib/_util.py", line 18, in <module>
    from scipy._lib._array_api import array_namespace
  File "/usr/local/lib/python3.10/dist-packages/scipy/_lib/_array_api.py", line 15, in <module>
    from numpy.testing import assert_
  File "/usr/local/lib/python3.10/dist-packages/numpy/testing/__init__.py", line 11, in <module>
    from ._private.utils import *
  File "/usr/local/lib/python3.10/dist-packages/numpy/testing/_private/utils.py", line 26, in <module>
    from numpy._core import (
ImportError: cannot import name 'intp' from 'numpy._core' (/usr/local/lib/python3.10/dist-packages/numpy/_core/__init__.py)
root@62cb7f964d47:/usr/src/app/uniform/yolotest# python detect.py

A module that was compiled using NumPy 1.x cannot be run in
NumPy 2.2.6 as it may crash. To support both 1.x and 2.x
versions of NumPy, modules must be compiled with NumPy 2.0.
Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.

If you are a user of the module, the easiest solution will be to
downgrade to 'numpy<2' or try to upgrade the affected module.
We expect that some modules will need time to support NumPy 2.

Traceback (most recent call last):  File "/usr/src/app/uniform/yolotest/detect.py", line 38, in <module>
    import torch
  File "/usr/local/lib/python3.10/dist-packages/torch/__init__.py", line 1425, in <module>
    from .functional import *  # noqa: F403
  File "/usr/local/lib/python3.10/dist-packages/torch/functional.py", line 9, in <module>
    import torch.nn.functional as F
  File "/usr/local/lib/python3.10/dist-packages/torch/nn/__init__.py", line 1, in <module>
    from .modules import *  # noqa: F403
  File "/usr/local/lib/python3.10/dist-packages/torch/nn/modules/__init__.py", line 35, in <module>
    from .transformer import TransformerEncoder, TransformerDecoder, \
  File "/usr/local/lib/python3.10/dist-packages/torch/nn/modules/transformer.py", line 20, in <module>
    device: torch.device = torch.device(torch._C._get_default_device()),  # torch.device('cpu'),
/usr/local/lib/python3.10/dist-packages/torch/nn/modules/transformer.py:20: UserWarning: Failed to initialize NumPy: _ARRAY_API not found (Triggered internally at /opt/pytorch/pytorch/torch/csrc/utils/tensor_numpy.cpp:84.)
  device: torch.device = torch.device(torch._C._get_default_device()),  # torch.device('cpu'),
Traceback (most recent call last):
  File "/usr/src/app/uniform/yolotest/detect.py", line 46, in <module>
    from ultralytics.utils.plotting import Annotator, colors, save_one_box
  File "/usr/local/lib/python3.10/dist-packages/ultralytics/__init__.py", line 12, in <module>
    from ultralytics.utils import ASSETS, SETTINGS
  File "/usr/local/lib/python3.10/dist-packages/ultralytics/utils/__init__.py", line 23, in <module>
    import cv2
  File "/usr/local/lib/python3.10/dist-packages/cv2/__init__.py", line 181, in <module>
    bootstrap()
  File "/usr/local/lib/python3.10/dist-packages/cv2/__init__.py", line 153, in bootstrap
    native_module = importlib.import_module("cv2")
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ImportError: libGL.so.1: cannot open shared object file: No such file or directory

问了下kimi,给出解决方法:

# 1. 锁死 NumPy
pip uninstall numpy -y
pip install numpy==1.24.3 --force-reinstall

# 2. 安装系统图形库
apt update && apt install -y libgl1-mesa-glx libglib2.0-0 libsm6 libxext6 libxrender-dev libgomp1

# 3. 再跑你的脚本
python detect.py

再来一次就成功了,可以把结果拷到刚刚启动容器时绑定系统的文件夹

 cp runs/detect/exp2/bus.jpg /mnt/

然后就可以在D盘的yolov5-files查看测试结果了

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐