### YOLOv5在Ubuntu上的使用教程
#### 安装依赖库
为了能够在Ubuntu上顺利运行YOLOv5模型,需要先安装一系列必要的软件包。这包括但不限于Python版本管理工具`pyenv`以及通过它来设置合适的Python环境[^1]。
```bash
sudo apt-y python3-pip git
pip3 install --upgrade pip setuptools wheel
```
#### 获取源码并准备项目结构
从GitHub仓库克隆官方维护的YOLOv5代码至本地机器,并进入对应的文件夹内完成初步准备工作。
```bash
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
```
#### 设置Python开发环境
采用Anaconda创建独立的工作空间可以有效隔离不同项目的依赖关系冲突问题;同时确保所选Python解释器满足YOLOv5最低要求——即至少为3.7以上版本[^2]。
```bash
conda create -n yolov5 python=3.9 -y
conda activate yolov5
```
#### 安装所需的Python库
依据README.md文档指引,利用Pipfile锁定具体版本号的方式批量下载第三方扩展模块,特别是PyTorch框架及其配套组件CUDA Toolkit等GPU加速支持部分。
```bash
pip install -r requirements.txt
```
#### 验证安装成果
最后一步是验证整个流程是否成功执行完毕。可以通过调用预训练权重来进行简单的图像检测测试案例,以此确认所有环节均正常运作无误。
```python
from pathlib import Path
import torch
from models.common import DetectMultiBackend
from utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages, LoadStreams
from utils.general import (LOGGER, check_file, check_img_size, check_imshow, colorstr, cv2,
increment_path, non_max_suppression, print_args, scale_coords, strip_optimizer, xyxy2xywh)
from utils.plots import Annotator, colors, save_one_box
from utils.torch_utils import select_device, time_sync
weights = 'yolov5s.pt'
imgsz=(640, 640)
device=''
conf_thres=0.25
iou_thres=0.45
max_det=1000
classes=None
agnostic_nms=False
augment=False
visualize=False
line_thickness=3
hide_labels=False
hide_conf=False
half=False
dnn=False
# Initialize
device = select_device(device)
model = DetectMultiBackend(weights, device=device, dnn=dnn)
stride, names, pt = model.stride, model.names, model.pt
imgsz = check_img_size(imgsz, s=stride) # check image size
source='data/images/bus.jpg'
dataset = LoadImages(source, img_size=imgsz, stride=stride, auto=pt and not dnn)
for path, im, im0s, vid_cap, s in dataset:
im = torch.from_numpy(im).to(device)
im = im.half() if half else im.float()
im /= 255
if len(im.shape) == 3:
im = im[None]
pred = model(im, augment=augment, visualize=visualize)
pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det)
for i, det in enumerate(pred):
p, im0, frame = path, im0s.copy(), getattr(dataset, 'frame', 0)
p = Path(p)
gn = torch.tensor(im0.shape)[[1, 0, 1, 0]]
annotator = Annotator(im0, line_width=line_thickness, example=str(names))
if len(det):
det[:, :4] = scale_coords(im.shape[2:], det[:, :4], im0.shape).round()
for *xyxy, conf, cls in reversed(det):
c = int(cls)
label = None if hide_labels else (names[c] if hide_conf else f'{names[c]} {conf:.2f}')
annotator.box_label(xyxy, label, color=colors(c, True))
im0 = annotator.result()
cv2.imshow(str(p), im0)
cv2.waitKey(1)
```