Using PyTorch Version of YOLOV3/TinyYOLOV3
- 前言:调研_20190521。
目录
- 1 Requirements
- 2 Prepare the data
- 3 Know about .cfg file
- 4 Modify the parameters
- 5 Reference
1 Requirements
- torch>=0.4
无论是在服务器上面还是在我们自己的电脑上面,当我们成功安装了Ubuntu系统之后,系统一般情况下会自带Python2.x或Python3.x环境。
Ubuntu系统还会自动帮我们安装Python2.x环境下的pip安装工具,但是没有Python3.x环境下的pip3安装工具,所以我们需要手动安装pip3。如果没有,那么可以首先安装 pip:sudo apt install -y python-pip
然后安装 pip3:sudo apt install -y python3-pip
更新 pip 版本:sudo pip install --upgrade pip
更新 pip3 版本:sudo pip3 install --upgrade pip
查看已安装的 python 包:pip freeze使用pip更新pytorch和torchvision
pip list --outdated -format=legacy # 列举pip当前可以更新的所有安装包
pip install --upgrade pytorch torchvision # 更新pytorch和torchvision安装使用pip安装指定版本
pip install pytorch==0.1.10如何查看当前pytorch版本 有时候我们想要知道当前的pytorch版本,我们可以使用如下代码打印出当前的版本:
import torch print(torch.version)卸载pytorch重新安装
pip uninstall torch - numpy
NumPy(Numeric Python)是用Python进行科学计算的基本软件包。 NumPy是Python编程语言的扩展,增加了对大型多维数组和矩阵的支持,以及一个大型的高级数学函数库来操作这些数组。NumPy提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。pip:
pip install numpy - torchvision
torchvision是独立于pytorch的关于图像操作的一些方便工具库。 torchvision的详细介绍在:https://pypi.org/project/torchvision/torchvision主要包括一下几个包:
vision.datasets : 几个常用视觉数据集,可以下载和加载,这里主要的高级用法就 是可以看源码如何自己写自己的Dataset的子类
vision.models : 流行的模型,例如 AlexNet, VGG, ResNet 和 Densenet 以及 与训 练好的参数。
vision.transforms : 常用的图像操作,例如:随机切割,旋转,数据类型转换,图 像到tensor ,numpy 数组到tensor , tensor 到 图像等。
vision.utils : 用于把形似 (3 x H x W) 的张量保存到硬盘中,给一个mini-batch的图 像可以产生一个图像格网。pip:
pip install torchvision - pillow
PIL(Python Imaging Library)是Python常用的图像处理库,而Pillow是PIL的一个友好Fork,提供了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。Pillow的文档:http://pillow.readthedocs.io/en/latest/
Pillow的github:https://github.com/python-pillow/Pillowpip:
pip install Pillow - matplotlib
matplotlib是Python编程语言及其NumPy数值数学扩展的绘图库。 它提供了一个面向对象的API,用于将绘图嵌入到使用通用GUI工具包(如wxPython,Qt或GTK +)的应用程序中。 还有一个基于状态机(如OpenGL)的程序“pylab”接口,其设计与MATLAB非常相似。pip:
sudo pip install matplotlib如果matplotlib 装不上需要先安装其依赖的包libpng和freetype
安装libpng:
sudo apt-get install libpng-dev
安装freetype:
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.10.tar.gz
tar zxvf freetype-2.4.10.tar.gz cd freetype-2.4.10/
./congfigure
make sudo make install
然后再通过pip来安装matplotlib
pip install matplotlib - torchsummary
torchsummary 库实现类似于 Keras 的model.summary()的功能,以便于打印 PyTorch 模型信息。
pip:
pip install torchsummary
git clone https://github.com/sksq96/pytorch-summary
使用方法:
from torchsummary import summary summary(pytorch_model, input_size=(channels, H, W))
其中, input_size 是必须设定的,以对网络进行一次 forward. - tqdm
tqdm官网地址:https://pypi.org/project/tqdm/
Github地址:https://github.com/tqdm/tqdm
Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)。
pip:
pip install tqdm
示例一 简单的demo:
# !/user/bin/env python
# -*- coding:utf-8 -*-
import time
from tqdm import tqdm
from tqdm._tqdm import trange
for i in tqdm(range(100)):
time.sleep(0.01)
2 Prepare the data
- path to data
如果我们的工程目录是/PyTorch-YOLOv3/…我们可以像这样将自己的数据信息输入到训练网络:
/PyTorch-YOLOv3/data/custom/images/…
like this: …
/PyTorch-YOLOv3/data/custom/labels/…
like this:
/PyTorch-YOLOv3/data/custom/train.txt
like this: …
/PyTorch-YOLOv3/data/custom/valid.txt
/PyTorch-YOLOv3/data/custom/test.txt
/PyTorch-YOLOv3/data/custom/custom.names
like this:…在/PyTorch-YOLOv3/config下新建custom.data文件并录入如下:
classes = 20 #以voc数据为例,训练样本有20个种类
train = /data/custom/train.txt
valid = /data/custom/valid.txt
test = /data/custom/test.txt
names = /data/custom/custom.names - xml_2_txt
按照voc数据集的结构放置图像文件:
Annotation中主要存放xml文件,每一个xml对应一张图像,并且每个xml中存放的是标记的各个目标的位置和类别信息,命名通常与对应的原始图像一样;
ImageSets我们只需要用到Main文件夹,这里面存放的是一些文本文件,通常为train.txt、test.txt等,该文本文件里面的内容是需要用来训练或测试的图像的名字;
根据自己情况修改/PyTorch-YOLOv3/voc2label.py脚本并运行,将xml文件转换成yolo格式的txt文件,放在生成的同级labels文件夹内。 - compute anchor box
yolov3.cfg的默认 anchor box 尺寸是基于 ImageNet训练集,使用 k-means 聚类算法获得的。在实际应用中,我们可能会检测一些形状特殊的物体,比如长尺,这时候,通用的anchor box尺寸会对最终训练模型的准确度产生影响,这时我们需要根据自己的样本生成对应的 anchor box 尺寸,替代默认值。
通过kmeans.py获得自己样本的 anchor box 尺寸
根据需要修改label_path以及n_anchors label_path 存储的是训练样本所有标注文本txt的地址
like this:
yolov3中n_anchors为9,tiny-yolov3中n_anchors为6
运行脚本后,在终端显示9个anchor box的值,用来替代yolov3.cfg文件中的anchor box尺寸
3 Know about .cfg file
[net]
# Testing 测试模式
# batch=1
# subdivisions=1
# Training 训练模式
batch=16 # 一批训练样本的样本数量,每batch个样本更新一次参数
subdivisions=1 # batch/subdivisions作为一次性送入训练器的样本数量,如果内存不够大,将batch分割为subdivisions个子batch# 上面这两个参数如果电脑内存小,则把batch改小一点,batch越大,训练效果越好,subdivisions越大,可以减轻显卡压力
width=416 # input图像的宽
height=416 # input图像的高
channels=3 # input图像的通道数# 以上三个参数为输入图像的参数信息 width和height影响网络对输入图像的分辨率,从而影响precision,只可以设置成32的倍数
momentum=0.9 # DeepLearning1中最优化方法中的动量参数,这个值影响着梯度下降到最优值得速度
decay=0.0005 # 权重衰减正则项,防止过拟合.每一次学习的过程中,将学习后的参数按照固定比例进行降低,为了防止过拟合,decay参数越大对过拟合的抑制能力越强。
angle=0 # 通过旋转角度来生成更多训练样本
saturation = 1.5 # 通过调整饱和度来生成更多训练样本
exposure = 1.5 # 通过调整曝光量来生成更多训练样本
hue=.1 # 通过调整色调来生成更多训练样本
learning_rate=0.001 # 学习率决定着权值更新的速度,设置得太大会使结果超过最优值,太小会使下降速度过慢。 如果仅靠人为干预调整参数,需要不断修改学习率。刚开始训练时可以将学习率设置的高一点,而一定轮数之后,将其减小,在训练过程中,一般根据训练轮数设置动态变化的学习率。刚开始训练时:学习率以 0.01 ~ 0.001 为宜。一定轮数过后:逐渐减缓。 接近训练结束:学习速率的衰减应该100倍以上。学习率的调整参考https://blog.csdn.net/qq_33485434/article/details/80452941
burn_in=1000 # 在迭代次数小于burn_in时,其学习率的更新有一种方式,大于burn_in时,才采用policy的更新方式
max_batches = 500200 # 训练达到max_batches后停止学习
policy=steps # 这个是学习率调整的策略,有policy:constant, steps, exp, poly, step, sig, RANDOM,constant等方式
steps=400000,450000 # 下面这两个参数steps和scale是设置学习率的变化,比如迭代到400000次时,学习率衰减十倍。
scales=.1,.1 # 450000次迭代时,学习率又会在前一个学习率的基础上衰减十倍[convolutional]
batch_normalize=1 # 是否做BN
filters=32 # 输出特征图的数量
size=3 # 卷积核的尺寸
stride=1 # 做卷积运算的步长
pad=1 # 如果pad为0,padding由 padding参数指定;如果pad为1,padding大小为size/2,padding应该是对输入图像左边缘拓展的像素数量
activation=leaky # 激活函数的类型
# Downsample......
# Downsam ple
######################[convolutional]
size=1
stride=1
pad=1
filters=255 # 每一个[region/yolo]层前的最后一个卷积层中的 filters=(classes+1+coords)*anchors_num
activation=linear[yolo] # 在yoloV2中yolo层叫region层
mask = 6,7,8 # 这一层预测第6、7、8个 anchor boxes ,每个yolo层实际上只预测3个由mask定义的anchorsanchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326# coco2014,anchors是可以事先计算出来
classes=80 # 网络需要识别的物体种类数
num=9 # 每个grid cell预测几个box,和anchors的数量一致。当想要使用更多anchors时需要调大num,且如果调大num后训练时Obj趋近0的话可以尝试调大object_scale
jitter=.3 # 利用数据抖动产生更多数据,YOLOv2中使用的是crop,filp,以及net层的angle,flip是随机的, jitter就是crop的参数,tiny-yolo-voc.cfg中jitter=.3,就是在0~0.3中进行cropignore_thresh = .5 # 决定是否需要计算IOU误差的参数,大于thresh,IOU误差不会夹在cost function中
truth_thresh = 1
random=1 # 如果为1,每次迭代图片大小随机从320到608,步长为32,如果为0,每次训练大小与输入大小一致...
4 Modify the parameters
- train
parser = argparse.ArgumentParser()
parser.add_argument("--epochs", type=int, default=200, help="number of epochs")
parser.add_argument('-batch_size', type=int, default=32, help='size of each image batch')
parser.add_argument('-model_config_path', type=str, default='config/yolov3.cfg', help='path to model config file')
parser.add_argument('-data_config_path', type=str, default='config/costum.data', help='path to data config file')
parser.add_argument('-pretarained_path', type=str, default='weights/darknet53.conv.74', help='path to weights file')
parser.add_argument('-class_path', type=str, default='data/custom/custom.names', help='path to class label file')
parser.add_argument('-iou_thres', type=float, default=0.5, help='iou threshold required to qualify as detected')
parser.add_argument('-conf_thres', type=float, default=0.5, help='object confidence threshold')
parser.add_argument('-nms_thres', type=float, default=0.45, help='iou threshold for non-maximum suppression')
parser.add_argument('-n_cpu', type=int, default=0, help='number of cpu threads to use during batch generation')
parser.add_argument('-img_size', type=int, default=416, help='size of each image dimension')
opt = parser.parse_args()
parser.add_argument("--tiny_version", type=bool, default=False, help="whether is the yolov3-tiny version")
...print(opt)
parameter means:epochs: 设置循环的参数batch_size: 每个batch大小model_config_path: 网络配置文件data_config_path: custom.data文件,存储相关信息pretarained_path: 权重文件路径class_path: 类别文件,注意类别的顺序,coco.namesiou_thres: iou阈值conf_thres: 目标执行度阈值nms_thres: 非极大抑制阈值n_cpu: 实用多少个线程来创建batchimg_size: 设置初始图片大小
- image_detect
parser = argparse.ArgumentParser()
parser.add_argument('--image_folder', type=str, default='/samples', help='path to dataset')
parser.add_argument('--weights_path', type=str, default='checkpoints/epoch_***.weights', help='path to weights file')
...image_detect.py line43
os.makedirs('output', exist_ok=True) # detect结果保存路径image_folder # 用于detect的数据保存路径weights_path # detect的权重文件路径
5 Reference
[1] PyTorch version of Yolo3/TinyYolo3, which is developed by Chen Yong
[2] https://github.com/eriklindernoren/PyTorch-YOLOv3
[3] https://blog.csdn.net/miao0967020148/article/details/80400357
[4] https://www.jianshu.com/p/4c12ee91a6d7
[5] https://blog.csdn.net/fengzhen8023/article/details/82927776
[6] https://www.cnblogs.com/yjphhw/p/9773333.html
[7] http://www.cnblogs.com/pcat/p/6790058.html
[8] https://blog.csdn.net/Mr_Cat123/article/details/78563998
[9] https://blog.csdn.net/yato0514/article/details/78754551
[10] https://www.aiuai.cn/aifarm458.html
[11] https://blog.csdn.net/qq_33472765/article/details/82940843
[12] https://blog.csdn.net/weixin_42880443/article/details/81953158
[13] https://blog.csdn.net/WK785456510/article/details/81565637
[14] https://blog.csdn.net/weixin_42731241/article/details/81474920
[15] http://www.cnblogs.com/pprp/p/10152698.html
Using PyTorch Version of YOLOV3/TinyYOLOV3相关推荐
- 使用PyTorch从零开始实现YOLO-V3目标检测算法 (三)
原文:https://blog.csdn.net/u011520516/article/details/80216009 点击查看博客原文 这是从零开始实现YOLO v3检测器的教程的第3部分.第二部 ...
- 使用PyTorch从零开始实现YOLO-V3目标检测算法 (一)
原文:https://blog.csdn.net/u011520516/article/details/80222743 点击查看博客原文 标检测是深度学习近期发展过程中受益最多的领域.随着技术的进步 ...
- 使用pytorch从零开始实现YOLO-V3目标检测算法 (二)
原文:https://blog.csdn.net/u011520516/article/details/80212960 博客翻译 这是从零开始实现YOLO v3检测器的教程的第2部分.在上一节中,我 ...
- 使用PyTorch从零开始实现YOLO-V3目标检测算法 (四)
原文:https://blog.csdn.net/u011520516/article/details/80228130 点击查看博客原文 这是从零开始实现YOLO v3检测器的教程的第4部分,在上一 ...
- yolov3/tiny-yolov3训练和测试 python2/3
yolov3 数据集准备 使用labelimg工具标记数据(voc格式) 把标记好的xml文件转成txt,转化脚本如下(python2.7) 1, 获取所有图像名 ``` import os dirl ...
- Pytorch——YOLOv3
YOLO: Real-Time Object Detection 官方的 目标检测之 YOLOv3 (Pytorch实现) 关于YOLOv3模型(原论文作者将其称之为" ...
- pytorch版本下的yolov3训练实现火焰检测
时隔好多好多日子了,一直没写博客(小声bb,最近忙着接私活儿).马上就要开学了,害,回去就要加油干了!!! 本次教程写个pytorch版本的yolov3检测,用的火焰检测数据集,效果如下: 这就可以做 ...
- Pytorch实现YOLOv3训练自己的数据集
1.说明: 最近一直在研究深度学习框架PyTorch,就想使用pytorch去实现YOLOv3的object detection.在这个过程中也在各大论坛.贴吧.CSDN等中看了前辈们写的文章,在这里 ...
- GPU端到端目标检测YOLOV3全过程(下)
GPU端到端目标检测YOLOV3全过程(下) Ubuntu18.04系统下最新版GPU环境配置 · 安装显卡驱动 · 安装Cuda 10.0 · 安装cuDNN 1.安装显卡驱动 (1)这里采用的是P ...
最新文章
- TOMACAT源码解析
- echart css样式弄了几个月了,样式一直都没有好好解决,好激动
- 下一个计划 : .NET/.NET Core应用性能管理
- python做excel表格柱状图_Python Excel 绘制柱形图
- 微信号都可以改了,那淘宝号呢?官方硬核回应遭网友吐槽:你没有心!
- java对象json序列化时忽略值为null的属性
- Jar运行的几个方法
- pip install ipython出错_Python -- 关于pip安装Ipython
- java linux和windows下文件路径间隔符的写法——解决linux下程序在windows下运行时的上传文件出错问题...
- pwm 正弦波_增强型PWM抑制功能对于直列式电机控制的五大优势
- 如何优化Flash动画使文件更小播放更流畅
- 5G和4G有那些区别
- 《前沿科技·吴军讲5G》思维导图详细解析
- Unity 网格合并MeshBaker(一)
- 论文解读-CenterNet:Keypoint Triplets for Object Detection
- 基于FPGA的AD9854并行接口驱动(VerilogHDL语言)
- 计算机组成原理字发生器,计算机组成原理实验2.7时序发生器赖晓铮剖析.ppt
- XMind (2022)新版思维导图新增功能介绍
- pr2020lut导入_pr lut预设怎么安装-PR下导入lut预设的方法 - 河东软件园
- 多应用多平台支付模块设计-基础模块开篇
热门文章
- 讲讲BW/4 HANA和BW on HANA的区别
- error: C2338: Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt
- UIWebView 使用
- MySQL语句查询数据库数据并添加到Redis缓存
- 打开WPS或office,提示运行时错误‘424’或 运行错误‘429’,ActiveX部件不能创建对象
- PDF在线免费转换成PPT怎么操作?
- 信贷业务全流程22个环节
- 干货!学习 Python 看这篇管够!!!
- 特征工程(三) 数据标准化和归一化
- NR PRACH(六) type 2(2-step) RA基本过程及时频域映射