yolov5 学习记录

目录

  • 理论
    • 卷积神经网络
  • 实践
    • win安装
      • anaconda下安装yolo
    • linux安装
    • 使用
      • 自定义训练
      • 打印坐标(像素)信息
      • 变量类型
      • 结合ROS

理论

卷积神经网络

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks)。
学习方法:梯度下降法。
输入层、隐含层(卷积层、池化层、全连接层)、输出层。

卷积层:卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,组成卷积核的每个元素都对应一个权重系数和一个偏差量(bias vector),类似于一个前馈神经网络的神经元(neuron)。卷积也可以理解为一个特征提取器。
yolov5 学习记录_第1张图片
池化层:主要作用是下采样,通过去掉Feature Map中的不重要样本,进一步减少参数数量

全连接层:卷积神经网络中的全连接层等价于传统前馈神经网络中的隐含层。特征图在全连接层中会失去空间拓扑结构,被展开为向量并通过激励函数。

实践

win安装

anaconda下安装yolo

1.下载yolov5
https://github.com/ultralytics/yolov5
2.创建环境:
anaconda 环境搭建,略。
anaconda prompt中:
创建以yolo为名称的新环境:

conda create -n yolo python=3.8 

打开该环境:

activate yolo

进入到下载的yolo工程文件夹中
cmd操作:

E:\ cd #进入根文件夹
cd xxx #进入子文件夹

进入到下载的yolo工程文件夹中后:

pip install -r requirements.txt 

安装完成即可。
3.权重下载
在https://github.com/ultralytics/yolov5/releases中下载4个权重文件,放到工程路径下的weights文件夹中。
4.测试

python detect.py --source 0 --weights=weights/yolov5s.pt (如果设备有摄像头)

linux安装

使用

自定义训练

参考:https://blog.csdn.net/qq_45701791/article/details/113992622
1.制作数据集
使用labellmg制作数据集。
过程略。
2.训练

python train.py --img 640 --batch 50 --epochs 100 --data /xxx/A.yaml --weights yolov5s.pt --nosave --cache

参数信息:
epochs 迭代次数
其中的 --data /xxx/A.yaml,A.yaml中标注了数据集的信息:

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ./yolo_A/images/ #若在本文件夹下,加入./
val: ./yolo_A/images/
# number of classes
nc: 1
# class names
names: ['Hand']

train、val为训练集和测试集的图片存放路径(这里用了一个集),labels路径自动识别。nc 类别数量,name 类别名称,与class.txt中信息一致。

打印坐标(像素)信息

detect.py中修改:
annotator.box_label()
参考:yolov5返回坐标

变量类型

label : str ; names[] : str ; conf : torch.Tensor

torch.Tensor()是Python类,更明确的说,是默认张量类型torch.FloatTensor()的别名,torch.Tensor([1,2]) 会调用Tensor类的构造函数__init__,生成单精度浮点类型的张量。

可以用python的索引和切片来获取和修改一个张量tensor中的内容:

>>> x = torch.FloatTensor([[1, 2, 3], [4, 5, 6]])
>>> print(x[1][2])
6.0
>>> x[0][1] = 8
>>> print(x)
 1 8 3
 4 5 6
[torch.FloatTensor of size 2x3]

结合ROS

问题:注意结合ros使用时注意ros节点的引入,尽量不要在yolo程序中定义引入ros节点,rospy.init_node(“”)后,程序循环易处理不当,将导致程序卡顿,无法ctrlC结束程序等问题。

解决办法1:使用参数服务器。
仅仅在yolo detect.py中使用参数服务器API,将识别得到的数据传入参数服务器中,供其他ros节点使用。

你可能感兴趣的:(ROS,学习,深度学习,计算机视觉)