思绪无限yolov5水果识别系统
时间: 2025-02-01 19:51:43 浏览: 69
### 基于YOLOv5的水果识别系统实现
#### 准备工作
为了构建基于YOLOv5的水果识别系统,首先需要准备环境和数据集。确保安装了必要的依赖库,并下载预训练好的YOLOv5模型。
```bash
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
```
#### 数据集处理
根据已有描述[^2],所使用的数据集中包含了多种不同类别的水果图像,如苹果、香蕉、橙子、西瓜等共八个类别。这些数据对于训练模型至关重要。需按照特定格式整理好标签文件(通常是`.txt`),并将其划分为训练集与验证集两个部分。
#### 修改配置文件
编辑`yolov5/data/custom_fruits.yaml`来定义自己的数据集路径以及类别名称:
```yaml
train: ./data/images/train/
val: ./data/images/validation/
nc: 8
names: ['apple', 'banana', 'orange', 'watermelon', ... ]
```
#### 训练模型
利用上述提到的数据集对YOLOv5进行微调,在命令行执行以下指令即可启动训练流程。这里设定了最大迭代次数为300次epoch,这有助于获得更优的结果。
```bash
python train.py --img 640 --batch 16 --epochs 300 --data custom_fruits.yaml --weights yolov5s.pt
```
#### 测试与评估
完成训练之后可以加载最优权重来进行测试样本预测效果查看。通过调整置信度阈值和其他参数优化最终表现。
```python
from pathlib import Path
import cv2
import torch
from models.experimental import attempt_load
from utils.general import non_max_suppression, scale_coords
from utils.datasets import letterbox
def detect(image_path='test.jpg'):
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = attempt_load('./runs/train/exp/weights/best.pt').to(device)
img_size = 640
conf_thres = 0.4
iou_thres = 0.45
# Load image and preprocess it.
source_image = cv2.imread(str(Path.cwd()/image_path))
original_shape = source_image.shape[:2]
processed_img = letterbox(source_image)[0]
processed_img = processed_img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB & HWC to CHW
processed_img = torch.from_numpy(processed_img).float().div_(255.).unsqueeze(0).to(device)
pred = model(processed_img, augment=False)[0]
det = non_max_suppression(pred, conf_thres=conf_thres, iou_thres=iou_thres)[0]
if det is not None and len(det):
det[:, :4] = scale_coords(processed_img.shape[2:], det[:, :4], original_shape).round()
for *xyxy, conf, cls in reversed(det):
label = f'{model.names[int(cls)]} {conf:.2f}'
plot_one_box(xyxy, source_image, label=label, color=(0, 255, 0), line_thickness=3)
if __name__ == '__main__':
from matplotlib import pyplot as plt
test_image = "path_to_your_test_image"
detect(test_image)
plt.imshow(cv2.cvtColor(cv2.imread(test_image), cv2.COLOR_BGR2RGB))
plt.show()
```
此代码片段展示了如何读取一张图片并通过已训练好的YOLOv5模型对其进行推理分析,最后绘制边界框标注出检测到的目标物体及其对应的概率分数。
阅读全文
相关推荐
















