「YOLOv3」从头实现YOLOv3目标检测(三)实现网络体系结构
本教程转载于:https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/, 在原教程上加入了自己的理解,我的理解将用 这样的格式写出. ( 原博客中有错误的地方在本文中也进行了修正 )
这是从头开始实现 YOLO v3检测器的教程的第3部分。在上一部分中,我们实现了 YOLO 体系结构中使用的层,在这一部分中,我们将使用 PyTorch 搭建 YOLO 的网络体系结构,这样我们就可以生成给定图像的输出。
我们的目标是设计网络的前向传递。
定义网络
正如之前所说的,我们使用nn.Module去构建自定义模块。接下来我们将定义检测器的网络结构。在darknet.py 中添加如下的内容:
12345class Darknet(nn.Module): def __init__(self, cfg_file_path): super(Darknet, self).__init__() self.blocks = parse_cfg(cfg_file_path) ...
「YOLOv3」从头实现YOLOv3目标检测(二)构建网络结构
本教程转载于:https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/, 在原教程上加入了自己的理解,我的理解将用 这样的格式写出
这是从头开始实现 YOLO v3检测器的教程的第2部分。在第一部分中,我解释了 YOLO 的工作原理,在这一部分中,我们将使用 PyTorch 实现 YOLO 使用的层。
阅读这篇文章你需要:
[ ] 了解Part1有关YOLO工作原理的基础知识
[ ] PyTorch 的基本工作知识,包括如何使用 nn 创建网络结构等。
Getting Started
首先创建一个检测器代码所在的目录。
然后创建一个文件 darknet.py。Darknet 是 YOLO 基础架构的名称。该文件将包含创建 YOLO 网络的代码。我们将用一个名为 util.py 的文件来补充它,该文件将包含各种 helper 函数的代码。将这两个文件保存到文件夹中。您可以使用 git 来跟踪更改。
配置文件
官方代码(用 c 编写)使用一个配置文件来构建网络。cfg 文件逐块 ...
「YOLOv3」从头实现YOLOv3目标检测(一)YOLO基础知识
本教程转载于:https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/, 在原教程上加入了自己的理解,我的理解将用 这样的格式写出
这是一个关于从头开始构建 YOLO v3检测器的教程,详细介绍了如何从配置文件创建网络体系结构、加载权重和设计输入/输出管道。
什么是YOLO?
YOLO 代表你只看一次( You Only Look Once)。它是一种物体探测器,利用深度卷积神经网络学到的特征来探测物体。在我们开始写代码之前,我们必须了解 YOLO 是如何工作的。
一个完整的卷积神经网络
YOLO 仅使用卷积层,使其成为一个完全卷积网络(FCN)。它有75个卷积层,带有跳过连接和上采样层。没有使用任何形式的pooling,使用stride为2的卷积层对特性映射进行下采样。这有助于防止由于池化而导致的低级特性的丢失。
作为一个 FCN,YOLO 可以允许输入任意大小的图片。然而,在实践中,由于各种各样的问题,我们可能希望坚持一个固定的输入大小。
这些问题中最大的一个是,如果我们想批量 ...
「工具箱」coronaPolvo的工具箱
conda源
添加源
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152vim ~/.condarc# 中科大channels: - https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ - https://mirrors.ustc.edu.cn/anaconda/pkgs/free/ - https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/ssl_verify: true # 清华channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/clo ...
「CS231N」神经网络与反向传播
上一节课中已经学习了如何定义损失函数以及根据这个损失函数去分类器。在这节课中将会学习神经网络与反向传播。
神经网络
神经网络
在上节课的内容中介绍了线性分类器,最简单的神经网络结构其实就是在线性分类器之后添加了激活函数。然后通过堆叠的方式形成了多层的结构。
其中的 max(0,W1x)max(0,W_1x)max(0,W1x) 就是一种激活函数,也是一种非常经典的激活函数叫做 RELURELURELU 激活函数。
一个最简单的二层神经网络模型如下:
“神经网络”是一个非常广泛的术语。对于上述的模型我们可以用全连接网络或者多层感知器(MLP)来描述他。
如果我们不用激活函数,得到的结果会更好吗?
如果我们不用激活函数,以两层的网络结构举例。
f=W2W1xW3=W2W1∈RC×H,f=W3xf=W_{2} W_{1} x \quad W_{3}=W_{2} W_{1} \in \mathbb{R}^{C \times H}, f=W_{3} x \\
f=W2W1xW3=W2W1∈RC×H,f=W3x
堆叠的结果可以写成f=W2W1xf=W_2W_1xf=W2W1 ...
「CS231N」损失函数与梯度下降
上一节的CS231N的课程中介绍了KNN算法与线性分类器算法。其中线性分类算法还没有介绍如何去实现,本节课中我们将会定义损失函数以及根据这个损失函数去优化线性分类器。引用PPT中的一段话:
TODO
Define a loss function that quantifies with the unhappiness with the scores across the training data
Come up with a way of efficiently finding the parameters that minimize the loss function. (optimization)
损失函数
Multiclass SVM loss
损失函数公式
这个损失函数是SVM中使用的loss。
假设输入为(xi,yi)(x_i,y_i)(xi,yi)
损失函数的定义如下:
Li=∑j≠yi{0 if syi≥sj+1sj−syi+1 otherwise =∑j≠yimax(0,sj−syi+1)\begin{aligned}
L_{i} &=\sum ...
「CS231N」图像分类-KNN与线性分类器
本节课主要简介K最近岭(KNN)算法和线性分类器两种算法。
什么是图像分类?
图像分类问题就如它的名字一样,它解决的问题是输入一张图像如何计算出该章图像的类别。图像分类是计算机视觉领域的核心问题,后期的目标检测,语义分割,实例分割等任务都是基于图像分类问题去解决的。
图像分类遇到的挑战
图像在计算机中是以数字矩阵的形式进行存储的,比如一只猫的图片他在计算机看来就是一个数字矩阵:
但是如果摄像机从不同的角度拍摄猫,或者不同背景的猫又或是不同品种的猫。这些图片的像素矩阵已经是完全不一样的了。那么我们要如何通过计算机去学习到“猫”这种特征呢?
如果你想用硬编码的方式去实现一个图像分类,可能你写的就是这样的代码了。
123def classify_image(image): # Some magic here? return class_label
我们可以很清晰的认识到,图像分类并不像数组排序这样有一个“显式”的特征可以进行提取。no obvious way to hard-code the algorithm for recognizing a cat, or other cl ...
「GAN」GAN损失函数总结
朴素GAN
朴素GAN的思想比较单纯,生成器负责生成假的数据。然后判别器负责鉴别这些数据。在计算LOSS的时候就是计算BCE LOSS,看一看代码就非常的清楚了。朴素GAN在计算损失函数的时候的计算依据是真的数据label就是1,假的数据label就是0。
123456789101112131415161718192021222324252627282930313233# 首先训练鉴别器for d_index in range(d_steps): # 1A: Train D on real d_real_data = Variable(d_sampler(d_input_size)) # 让判别器判断真的数据 d_real_decision = D(preprocess(d_real_data)) # 告诉判别器这些数据是真的 d_real_error = criterion(d_real_decision, Variable(torch.ones([1]))) # ones = true d_real_error.backward() # compute/stor ...
「花书」数值计算
前言
当前有跟着老师做一些深度学习的研究,在研究的过程中我意识到了深度学习基础知识的重要性。所以回来把花书好好的啃一遍。这篇文章是这个系列的第一篇,希望我能够坚持把这本书给啃完吧😊。
在机器学习领域经常需要进行大量的数值计算,常见的操作有优化(optimization,找到一个任务达到最大值/最小值时的参数)和线性方程的解决系统。当一个方程中包含着大到内存都装不下的实数时,即使只是评估一个数学方程对于电子计算机而言也是非常困难的。使用计算机的有限来毕竟一些无限的数,这个本身就是矛盾的。花书中本章主要就是解决这样的问题
上溢和下溢
在数字计算机中一个最基本的问题就是我们需要在有限的数字系统中去表示无限多个实数。这意味着当我们在使用计算书表示数字的时候几乎所有的实数都会产生一个近似误差。很多情况下这个误差都是可以忽略的。书中叫他rounding error,可以很直观的感觉出来就是误差中的“边缘人士”。但是rounding error在多个操作中如果积累的过多也会造成实验的失败。
rounding error的一种经典的形式就是下溢 underflowunderflowunderf ...
「基础知识」多任务损失函数设计策略
在多任务学习中,多个任务联合求解,共享归纳偏差。多任务学习本质上是一个多目标问题,因为不同的任务可能会发生冲突,需要进行权衡。一个常见的折衷办法是优化一个代理目标,使每个任务的加权线性组合损失最小化。但是,这种变通方法只有在任务没有竞争的情况下才有效,而这种情况很少发生。其实可以将多任务学习明确地定义为多目标优化问题,其总体目标是寻找一个帕累托最优解。
多任务学习
大多数机器学习模型都是独立来进行学习的,即单任务学习(single-task learning)。也就是说,我们针对一个特定的任务,设计一个模型,然后进行迭代优化。对于稍复杂一点的任务,我们也习惯于通过进行拆解的方式,来对任务的每个部分进行建模。这样存在一个很明显的问题,在对每个子任务进行建模的时候,很容易忽略任务之间的关联、冲突和约束等关系,导致多个任务的整体效果无法更优。
多任务学习(multi-task learning),就是与单任务学习相对的一个概念。在多任务学习中,往往会将多个相关的任务放在一起来学习。例如在推荐系统中,排序模型同时预估候选的点击率和浏览时间。相对于单任务学习,多任务学习有以下优势:
多个任务 ...