1.调用已有模型,实现常见目标检测.
2.准备特定数据集,训练自己的模型(本文示例yolov5和ultralytics系列的训练).
3.修改神经网络细节,加入Transformer,引入注意力机制,YOLO+视觉大模型...
创建一个文件夹并 构建以下目录:
└─data
├─images #标注数据集之前应收集/下载好图片们
│ ├─train #训练数据集,不需要标注,文件应为png/jpg/pdf
│ └─val #验证数据集,不需要标注,文件应为png/jpg/pdf
└─labels #后续创建好环境,安装labelimg后输出xml文件,再使用py脚本修改格式
│ ├─train #监督学习,训练标签,应为txt
│ └─val #验证标签,应为txt
│
└─ your_dataset.yaml #告诉YOLO数据的位置和组成
└─yolov5(后面会下载,若是ultralytics,则没有这个)yaml文件格式如下:
train: E:/YOLO/data/images/train # 训练图像路径,相对路径和绝对路径均可
val: E:/YOLO/data/images/val # 验证图像路径,推荐绝对路径
nc: 2 # 类别数量
names: ['dog', 'cat'] # 类别名称,记得顺序和标注时创建的类别顺序相同创建名称为:yolov5_env的环境
conda create -n yolo_env激活/进入创建的环境
conda activate yolo_env
安装标注软件,如已有数据集可跳过,以
pip install labelme
启动labelme,常用快捷键w(创建矩形框),d(下一张),a(上一张),记得设置自动保存
labelme
安装pytorch,官网查询版本+命令,只有NVIDIA显卡支持pytorch,Intel、AMD等不支持,以安装cuda12.4为例 pytorch官网
有时候网络不好,命令末尾可以加上--timeout 100,记得关梯子下载,否则可能下载失败
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 --timeout 100下载YOLOv5源码
git clone https://github.com/ultralytics/yolov5.git进入YOLOv5源码,下载所需其他pyhton包
cd yolov5 && pip install -r requirements.txt
训练命令,需要进入yolov5源码目录,参数需要根据实际修改
python train.py --img 640 --batch -1 --epochs 50 --data ../data/data.yaml --weights yolov5s.pt --device 0 源码下载(任意目录均可,会下载到对应虚拟环境位置)
pip install ultralytics
或者
pip install -U ultralytics
训练命令,任意目录运行均可,但是生成的runs文件夹(包含模型权重文件)会在该目录下
yolo task=detect mode=train model=yolov8s.pt data=./data/my_dataset.yaml batch=-1 epochs=100 device=0 name=onlyou其他问题:pip安装、pip缓存清除、pip存在但无法使用pip install、OPM链接库重复、页面文件过大Error、高级系统设置
相关名词和关系解释
GPU cuda pytorch torch anaconda
conda TensorFlow tenser pip sudo
GPU驱动 cuda编程 cuda Toolkit cuda核心 nvcc
相互关系:例:只有NVIDIA的GPU才支持pytorch
深度学习的HelloWorld--手写数字识别 minst
# 导入必要的库
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
# 设置参数
batch_size = 64 # 批大小
learning_rate = 0.001 # 学习率
num_epochs = 50 # 训练轮数
# 检查GPU可用性并设置 device
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f'Using device: {device}')
# 数据预处理
transform = transforms.Compose([
transforms.ToTensor(), # 将图片转换为张量
transforms.Normalize((0.5,), (0.5,)) # 对数据进行归一化处理
])
# 加载 MNIST 数据集
train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True)
test_dataset = datasets.MNIST(root='./data', train=False, transform=transform, download=True)
train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)
# 定义神经网络模型
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(28 * 28, 128) # 输入层到隐藏层
self.fc2 = nn.Linear(128, 64) # 隐藏层到隐藏层
self.fc3 = nn.Linear(64, 10) # 隐藏层到输出层
def forward(self, x):
x = x.view(-1, 28 * 28) # 展平输入
x = torch.relu(self.fc1(x)) # 激活函数
x = torch.relu(self.fc2(x)) # 激活函数
x = self.fc3(x) # 输出层
return x
# 初始化模型、损失函数和优化器,并将模型移到GPU
model = SimpleNN().to(device)
criterion = nn.CrossEntropyLoss() # 交叉熵损失
optimizer = optim.Adam(model.parameters(), lr=learning_rate) # Adam优化器
# 训练模型
for epoch in range(num_epochs):
model.train() # 设置模型为训练模式
running_loss = 0.0
for data, target in train_loader:
data, target = data.to(device), target.to(device) # 将数据和目标移动到GPU
optimizer.zero_grad() # 清零梯度
output = model(data) # 向前传播
loss = criterion(output, target) # 计算损失
loss.backward() # 反向传播
optimizer.step() # 更新权重
running_loss += loss.item()
print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/len(train_loader):.4f}")
# 测试模型
model.eval() # 设置模型为评估模式
correct = 0
total = 0
with torch.no_grad(): # 禁用梯度计算
for data, target in test_loader:
data, target = data.to(device), target.to(device) # 将数据移动到GPU
output = model(data)
_, predicted = torch.max(output.data, 1) # 取最大概率对应的类别
total += target.size(0) # 累计样本数
correct += (predicted == target).sum().item() # 计算正确预测的数量
print(f'Accuracy: {100 * correct / total:.2f}%')清除 Anaconda 的缓存可以帮助释放磁盘空间,或解决某些软件包安装问题。以下是清除 Anaconda 缓存的几种方法:
# 清除所有缓存
conda clean -all
# 清除包缓存
conda clean --packages使用以上方法后,您就可以成功清除 Anaconda 的缓存了。
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global http.sslVerify "true"
git config --global https.sslVerify "true"
git config --global http.sslVerify "false"
git config --global https.sslVerify "false"