保姆级复现yolov3
时间: 2024-12-28 08:14:05 浏览: 10
### YOLOv3 项目复现教程
#### 安装依赖环境
为了确保YOLOv3能够顺利运行,在开始之前需要创建一个新的Python虚拟环境并安装必要的库。推荐使用Anaconda管理工具来简化这一过程[^1]。
```bash
conda create -n yolov3 python=3.8
conda activate yolov3
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu
pip install opencv-python matplotlib numpy tqdm pyyaml Pillow filelock scipy
```
#### 获取源代码
访问YOLOv3的官方GitHub页面获取最新的源码版本。可以采用Git克隆的方式下载整个仓库到本地计算机上:
```bash
git clone https://github.com/ultralytics/yolov3.git
cd yolov3
```
#### 数据准备
对于想要训练自定义数据集的情况,需按照特定格式整理图片及其对应的标注文件,并修改`data/custom.yaml`中的路径设置以匹配个人的数据存储位置。如果只是做测试,则可以直接利用预训练权重进行目标检测任务而无需额外处理任何数据集。
#### 配置参数调整
编辑配置文件(如`models/yolov3.cfg`)来自定义网络结构或超参设定;也可以通过命令行选项指定不同模式下的具体行为,比如改变输入尺寸大小、启用混合精度计算等功能特性。
#### 进行预测操作
完成以上准备工作之后就可以调用内置脚本来执行对象识别了。下面是一条简单的指令用于加载已有的模型并对单张照片实施推断:
```python
from utils.general import non_max_suppression, scale_coords
from models.experimental import attempt_load
import cv2
import torch
weights = 'yolov3.pt'
imgsz = 640
device = ''
conf_thres = 0.25
iou_thres = 0.45
model = attempt_load(weights, map_location=device) # 加载模型
stride = int(model.stride.max()) # 模型最大步幅
names = model.module.names if hasattr(model, 'module') else model.names # 类别名称列表
# 图像读取与预处理...
img = ... # 假设这里已经得到了一张待测图像 `img`
imgs = [img.copy()] * 1 # 批量维度扩充
imgs = [letterbox(x, imgsz, stride=stride)[0] for x in imgs] # 调整分辨率至固定尺度
imgs = np.stack(imgs, axis=0)
imgs = imgs[..., ::-1].transpose((0, 3, 1, 2)) # BGR to RGB, BHWC to BCHW
imgs = np.ascontiguousarray(imgs)
with torch.no_grad():
pred = model(imgs_tensor.to(device), augment=False)[0]
det = non_max_suppression(pred, conf_thres, iou_thres, classes=None, agnostic=False)[-1]
if det is not None and len(det):
# 将边界框坐标缩放回原始图像空间内
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img.shape).round()
for *xyxy, conf, cls in reversed(det):
label = f'{names[int(cls)]} {conf:.2f}'
plot_one_box(xyxy, im0, label=label, color=colors(c=int(cls)), line_thickness=3)
cv2.imshow('result',im0)
cv2.waitKey(0)
```
阅读全文