• 前言:调研_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/Pillow

    pip:
    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相关推荐

  1. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (三)

    原文:https://blog.csdn.net/u011520516/article/details/80216009 点击查看博客原文 这是从零开始实现YOLO v3检测器的教程的第3部分.第二部 ...

  2. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (一)

    原文:https://blog.csdn.net/u011520516/article/details/80222743 点击查看博客原文 标检测是深度学习近期发展过程中受益最多的领域.随着技术的进步 ...

  3. 使用pytorch从零开始实现YOLO-V3目标检测算法 (二)

    原文:https://blog.csdn.net/u011520516/article/details/80212960 博客翻译 这是从零开始实现YOLO v3检测器的教程的第2部分.在上一节中,我 ...

  4. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (四)

    原文:https://blog.csdn.net/u011520516/article/details/80228130 点击查看博客原文 这是从零开始实现YOLO v3检测器的教程的第4部分,在上一 ...

  5. yolov3/tiny-yolov3训练和测试 python2/3

    yolov3 数据集准备 使用labelimg工具标记数据(voc格式) 把标记好的xml文件转成txt,转化脚本如下(python2.7) 1, 获取所有图像名 ``` import os dirl ...

  6. Pytorch——YOLOv3

    YOLO: Real-Time Object Detection             官方的 目标检测之 YOLOv3 (Pytorch实现) 关于YOLOv3模型(原论文作者将其称之为" ...

  7. pytorch版本下的yolov3训练实现火焰检测

    时隔好多好多日子了,一直没写博客(小声bb,最近忙着接私活儿).马上就要开学了,害,回去就要加油干了!!! 本次教程写个pytorch版本的yolov3检测,用的火焰检测数据集,效果如下: 这就可以做 ...

  8. Pytorch实现YOLOv3训练自己的数据集

    1.说明: 最近一直在研究深度学习框架PyTorch,就想使用pytorch去实现YOLOv3的object detection.在这个过程中也在各大论坛.贴吧.CSDN等中看了前辈们写的文章,在这里 ...

  9. GPU端到端目标检测YOLOV3全过程(下)

    GPU端到端目标检测YOLOV3全过程(下) Ubuntu18.04系统下最新版GPU环境配置 · 安装显卡驱动 · 安装Cuda 10.0 · 安装cuDNN 1.安装显卡驱动 (1)这里采用的是P ...

最新文章

  1. TOMACAT源码解析
  2. echart css样式弄了几个月了,样式一直都没有好好解决,好激动
  3. 下一个计划 : .NET/.NET Core应用性能管理
  4. python做excel表格柱状图_Python Excel 绘制柱形图
  5. 微信号都可以改了,那淘宝号呢?官方硬核回应遭网友吐槽:你没有心!
  6. java对象json序列化时忽略值为null的属性
  7. Jar运行的几个方法
  8. pip install ipython出错_Python -- 关于pip安装Ipython
  9. java linux和windows下文件路径间隔符的写法——解决linux下程序在windows下运行时的上传文件出错问题...
  10. pwm 正弦波_增强型PWM抑制功能对于直列式电机控制的五大优势
  11. 如何优化Flash动画使文件更小播放更流畅
  12. 5G和4G有那些区别
  13. 《前沿科技·吴军讲5G》思维导图详细解析
  14. Unity 网格合并MeshBaker(一)
  15. 论文解读-CenterNet:Keypoint Triplets for Object Detection
  16. 基于FPGA的AD9854并行接口驱动(VerilogHDL语言)
  17. 计算机组成原理字发生器,计算机组成原理实验2.7时序发生器赖晓铮剖析.ppt
  18. XMind (2022)新版思维导图新增功能介绍
  19. pr2020lut导入_pr lut预设怎么安装-PR下导入lut预设的方法 - 河东软件园
  20. 多应用多平台支付模块设计-基础模块开篇

热门文章

  1. 讲讲BW/4 HANA和BW on HANA的区别
  2. error: C2338: Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt
  3. UIWebView 使用
  4. MySQL语句查询数据库数据并添加到Redis缓存
  5. 打开WPS或office,提示运行时错误‘424’或 运行错误‘429’,ActiveX部件不能创建对象
  6. PDF在线免费转换成PPT怎么操作?
  7. 信贷业务全流程22个环节
  8. 干货!学习 Python 看这篇管够!!!
  9. 特征工程(三) 数据标准化和归一化
  10. NR PRACH(六) type 2(2-step) RA基本过程及时频域映射