08.05-08.10第32周已完成

pycharm基本使用

pycharm debug怎样调试代码

深度学习 CNN RNN 5天

计算机视觉CV理论基础 14天

YOLOv5目标检测原理和源码4天

计算机视觉之目标检测、目标分割、目标跟踪7天 14h

计算机视觉之车道线检测 3天

计算机视觉之车道线分割 8天

指示交通灯识别 1天

李沐学ai看个5p 30h

小土堆yolo 5p 2.5h

0805

开始每天三小时学习

第一小时:看买的课

pycharm基本使用

【零基础】PyCharm基本功能入门详解_哔哩哔哩_bilibili

解释了什么是:解释器(python)、编辑器(pycharm),推荐安装annacanda(集成了很多库)

ctrl + alt + l可以自动帮你给代码排版 

keymap可以看快捷键,PEP 8规范、文件模板、editor里的live templat里有一些代码快捷模板、open in explore、TODO的作用、常用快捷键、安装Virtualenv虚拟环境时,会有一个base环境进行拷贝,可以选择是否继承全局环境里的包和库。(意味着Virtualenv虚拟环境可以继承系统环境里的配置)

而conda是从网上重新下载一个解释器,另外不同在于,Virtualenv会把venv文件放在项目文件夹里,而conda会把venv文件放在annocanda里。

两点不同:基础解释器来源;venv文件位置

-----------------------

pycharm debug怎样调试代码

Pycharm debug 怎样使用Pycharm调试代码_哔哩哔哩_bilibili

step into, step out(跳出时会把这个函数运行完,返回result)

step into my code:区别在于只有在当前脚本定义了函数才会into

step over

run to cursor运行到光标指定的位置

控制台调试

-----------------------

计算机视觉之目标检测、目标分割、目标跟踪7天

Introduction_哔哩哔哩_bilibili

迁移学习

11.1 迁移学习【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili

看下迁移学习 李沐,重点是找到目标构架是否有预训练好的模型(tensorflow hub 和 TIMM)

基本思想:每一个完整的神经网络都可以分为编码器(提取特征)和解码器(线性层分类器)。

基本步骤:

        初始化模型:(注意!!!你的模型要和预训练的模型构架一致

                初始化特征提取器,其权重为预训练模型权重,

                随机初始化分类器

                在本地最小值附近进行参数优化

        用小的学习率和小的epoch进行训练(这也是为什么叫微调

                标准化搜索空间

微调期间冻结底层网络(把layer1等层的学习率变成0)超参数加一!!!

基本思想:底层网络学习的是比较底层的特征,可以从感受野进行理解。底层特征是通用的,包括曲线、边缘等。而高层网络对应的高层特征更加特定于任务和数据集,例如标签分类。

步骤:

        保证底层通用网络不变

        专注于学习特定的任务

        强大的正则化器

例子

import timm
from torch import nn

model = timm.ccreat_model('resnet18', pretrained)
model.fc = nn.Linear(model.fc.in_features, n_class)

好处:收敛更快,精度不会变坏

-------------------------------------

0806

李沐学ai

2p 1.5h

p04

x+=1 是原地操作

x = x+1新内存

p5

axis=1很有意思。可以这样理解:把[2,5,4]中的第二维“5”给“吃掉”了,结果是[2,4],这样会好理解些。

a = torch.arange(20*2).reshape(2,5,4)
a.shape, a.sum(), a
a_sum_0 = a.sum(axis=0)
a_sum_0,a_sum_0.shape
a_sum_1 = a.sum(axis=1)
a_sum_1,a_sum_1.shape

L1 和 L2范数

矩阵的 F范数 

??torch中确实不区分行向量和列向量

小土堆yolo 5p

5p 1.2h [1:3,1:]左闭右开

cv慕尼黑

5p 3.5h

p 3

 Problems of 1. Template matching + sliding window
– Occlusions: we need to see the WHOLE object
– This works to detect a given instance of an object but not 
a class of objects
– Objects have an unknown position, scale and aspect
ratio, the search space is searched inefficiently with 
sliding window

1. 模板匹配 + 滑动窗口的问题


– 遮挡:我们需要看到整个物体
– 这种方法可以检测物体的给定实例,但不能检测物体的类别
– 物体的位置、比例和纵横比未知,使用滑动窗口搜索搜索空间效率低下

2. Feature extraction + classification – Learning multiple weak learners to build a strong classifier – That is, make many small decisions and combine them for a stronger final decision

2. 特征提取 + 分类


– 学习多个弱学习器以构建强分类器
– 即做出许多小决策并将它们结合起来
以做出更强大的最终决策

比如haar feature:眼睛这里比较黑,所以是黑线,最简陋的机器学习检测

步骤

– Step 1: Select your Haar-like features – Step 2: Integral image for fast feature evaluation • I can evaluate which parts of the image have highest crosscorrelation with my feature (template) – Step 3: AdaBoost for to find weak learner

• I cannot possibly evaluate all features at test time for all image locations

• Learn the best set of weak learners • Our final classifier is the linear combination of all weak learners

– 步骤 1:选择类似 Haar 的特征(小波变换)
– 步骤 2:积分图像以进行快速特征评估(其实就是色素加减)
• 我可以评估图像的哪些部分与我的特征(模板)具有最高的互相关性
– 步骤 3:AdaBoost 用于查找弱学习者,级联分类器
• 我不可能在测试时评估所有图像位置的所有特征
• 学习最佳弱学习者集
• 我们的最终分类器是所有弱学习者的线性组合

理论

 Haar特征和级联分类器目标检测介绍及代码_haar特征分类器-CSDN博客

 2. 特征提取 
HOG方向梯度直方图
2. 分类

– Step 1: Choose your training set of images that contain the object you want to detect. – Step 2: Choose a set of images that do NOT contain that object. – Step 3: Extract HOG features on both sets. – Step 4: Train an SVM classifier on the two sets to detect whether a feature vector represents the object of interest or not (0/1 classification).

– 步骤 1:选择包含要检测的对象的图像训练集。
– 步骤 2:选择不包含该对象的图像集。
– 步骤 3:在两个集合上提取 HOG 特征。
– 步骤 4:在两个集合上训练 SVM 分类器以检测特征向量是否代表感兴趣的对象(0/1 分类)。

可变形部分模型

对更多人体姿态更鲁棒

如何定义对象

We need a generic, class-agnostic objectness measure: how likely it is for an image region to contain an object

我们需要一个通用的、与类别无关的物体性度量:图像区域包含物体的可能性

Using this measure yields a number of candidate object proposals or regions of interest (RoI) where to focus.

使用此方法可以产生许多值得关注的候选对象提案或感兴趣区域 (RoI)。

(现在是两个阶段:先找RoI,然后分类器)

两种找RoI方法:selective search ,     edge boxes
找到最好的box:NMS--None-Maximum Suppression

所以非极大值抑制的真正作用是在很多人脸场景下,可以设置一个0-0.5之间的阈值,把重叠的锚框删掉,剩下的就是各个人脸的锚框

https://www.cnblogs.com/oliyoung/p/nms.html

NMS牵涉到IOU的概念:Intersection over Union or Jaccard Index

one-stage and two-stage detection

------------------------------

0807

jeston nano 和 tx2都是嵌入式计算平台,树莓派是小型计算板。tx2性能是最强大的。

蒸馏学习 1h

蒸馏学习笔记

 原理:

若是把马的图片喂给已经训练好的网络里面,网络给出soft targets这个结果,是马的概率为0.7,为驴的概率为0.25,为车的概率是0.05,所以soft targets就传递了更多的信息

 所以训练教师网络的时候就可以用hard targets训练,训练出了教师网络之后,教师网络对这张图片的预测结果soft targets能够传递更多的信息,就可以用soft targets去训练学生网络

Soft Label包含了更多“知识”和“信息,像谁,不像谁,有多像,有多不像

步骤: 

蒸馏温度T

引入蒸馏温度T,把原来比较硬的soft targets变的更软,更软的soft targets去训练学生网络,那些非正确类别概率的信息就暴露的越彻底,相对大小的知识就暴露出来,让学生网络去学

T为1,就是原softmax函数,softmax本来就是把每个类别的logic强行变成0-1之间的概率,并且求和为1,是有放大差异的功能,如果logic高一点点,经过softmax,都会变的很高。

T越小,非正确类别的概率相对大小的信息就会暴露的更明显;T越大,曲线就会变得更soft,高的概率给降低,低的概率会变高,贫富差距就没有了。

计算hard loss:

学生网络和hard label之间的传统交叉熵为-log(0.88)

计算soft loss:

通过蒸馏后的学生网络和教师网络的softmax概率求交叉熵

将两个损失函数求和,

作为最终学生网络的损失函数,去训练学生网络

李沐学ai

2p 1.5h

6 p:数学求导

7p:.detach() 把这个变量变为常量,用于神经网络中固定参数

小土堆yolo 5p

5p 1.2h 

0808

AlexNet是首先提出反向传播的

抽象:可以让c知道给你写代码

例子:

我现在要用VGG 16提取MNIST数据集中的特征,jiyupytorch框架,最后经过一个全局平均池化层

 cv慕尼黑

2p 2.5h

4p:

定位和分类:

CNN+FC,和GT比较,L2loss

两个检测头:输出一:检测框(通过回归)(L2loss);输出二:分类得分(Softmax loss)

但不管是分类,还是回归,其本质是一样的 都是建立映射关系

目标检测中的边框回归(Bounding Box Regression)_目标识别的regression是什么-CSDN博客

 步骤

It was typical to train the classification head first, freeze the layers
• Then train the regression head
• At test time, we use both!

 通常先训练分类头,然后冻结各层
• 然后训练回归头
• 在测试时,我们同时使用两者!

Overfeat

简析Overfeat(部分引用) | TwistedW's Home

https://www.cnblogs.com/liaohuiqiang/p/9348276.html

Sliding window + box regression + classification

Sliding window

产生多个预测框,然后贪心算法

In practice: use many sliding window locations and multiple scales

实践中:使用多个滑动窗口位置和多个尺度 

目的是更好的检测大物体小物体

OverFeat的另一个重要贡献是它的滑动窗口分类回归非常高效 

https://chmx0929.gitbook.io/machine-learning/ji-suan-ji-shi-jue/ji-suan-ji-shi-jue/mu-biao-jian-ce/xiang-guan-yan-jiu/overfeat

多尺度滑窗

简析Overfeat(部分引用) | TwistedW's Home

6种

 offset池化

offset池化

offset max-pooling 介绍_offset pooling-CSDN博客

二维就可以得到9张图片。所以是6*9个滑窗

全卷积网络FCN

通过池化得到了5x5大小的图片。OK,关键部分来了,接着要从:5x5大小的图片->1x1大小的图片:

(1)传统的CNN:如果从以前的角度进行理解的话,那么这个过程就是全连接层,我们会把这个5*5大小的图片,展平成为一个一维的向量, 进行计算(写cnn代码的时候,这个时候经常会在这里加一个flatten函数,就是为了展平成一维向量)。

(2)FCN:FCN并不是把5x5的图片展平成一维向量,再进行计算,而是直接采用5x5的卷积核,对一整张图片进行卷积运算。

其实这两个本质上是相同的,只是角度不同,FCN把这个过程当成了对一整张特征图进行卷积,同样,后面的全连接层也是把它当做是以1x1大小的卷积核进行卷积运算。

然后我们就只需要在后面把它们拉成一维向量摆放就ok了,这样在一个尺度上,我们可以得到一个C*N个预测值矩阵,每一列就表示图片属于某一类别的概率值, 然后我们求取每一列的最大值,作为本尺度的每个类别的概率值。

最后我们一共用了6种不同尺度(文献好像用了12张,另外6张是水平翻转的图片),做了预测,然后把这六种尺度结果再做一个平均,作为最最后的结果。

好处:这个时候,我们就可以发现采用FCN网络,可以输入任意大小的图片。 同时需要注意的是网络最后输出的图片大小不在是一个1x1大小的图片,而是一个与输入图片大小息息相关的一张图片了。

简析Overfeat(部分引用) | TwistedW's Home

卷积计算共享(其实是由全卷积带来的)

OverFeat的另一个重要贡献是它的滑动窗口分类回归非常高效,在此之前,很多滑动窗口技术都是为每个窗口重复进行所有的计算,这对计算资源的消耗是巨大的。而OverFeat通过将全连接层改造成卷积层的方式,使得相同区域的计算结果可以共享,如下图所示。

https://chmx0929.gitbook.io/machine-learning/ji-suan-ji-shi-jue/ji-suan-ji-shi-jue/mu-biao-jian-ce/xiang-guan-yan-jiu/overfeat

全卷积的好处:下图中第一个图是训练时用14*14的图像,最后产生一个输出,下面的图是测试时,可以用16*16的图像产生了“2*2”个输出,以此类推我们可以在测试时使用更大的图像(使用多scale),产生“更多”的输出进行(取最大)预测。这个做法相对于传统的滑动窗口(用14*14大小,步长为2的滑动窗口在16*16的图像上执行4次卷积操作进行分类)的优点是,只需要执行一次,保证了效率同时可以建模用各种不同尺度图像,不局限于固定的裁剪翻转方式(相对于alexNet测试阶段的做法),而且消除了很多冗余计算,提高了模型的鲁棒性又保证了效率。 

 总结:

FCN很简单,6个尺度的滑窗,每个又有offset池化产生9张图,9个图每个图拉成一维向量,取最大值为该类概率,然后6个尺寸求平均概率。

接下来:怎么处理不同尺寸大小的图片

 There are a couple of workarounds: – RNN: Romera-Paredes and Torr. Recurrent Instance Segmentation. ECCV 2016. – Set prediction: Rezatofighi, Kaskman, Motlagh, Shi, Cremers, Leal-Taixé, Reid. Deep Perm-Set Net: Learn to predict sets with unknown permutation

 有几种解决方法:

– RNN:Romera-Paredes 和 Torr。循环实例分割。ECCV 2016。

– 集合预测:Rezatofighi、Kaskman、Motlagh、Shi、Cremers、Leal-Taixé、Reid。Deep Perm-Set Net:学习预测具有未知排列的集合

 RCNN家族

2014年RCNN

都是两阶段方法。先找RoI,然后分类和回归。

 Training scheme: – 1. Pre-train the CNN on ImageNet – 2. Finetune the CNN on the number of classes the detector is aiming to classify (softmax loss) – 3. Train a linear Support Vector Machine classifier to classify image regions. One SVM per class! (hinge loss) – 4. Train the bounding box regressor (L2 loss)

训练方案:

– 1. 在 ImageNet 上预训练 CNN – 2. 根据检测器要分类的类别数量对 CNN 进行微调(softmax 损失) – 3. 训练线性支持向量机分类器对图像区域进行分类。每个类别一个 SVM!(hinge 损失) – 4. 训练边界框回归器(L2 损失)

优点

PROS: – The pipeline of proposals, feature extraction and SVM classification is well-known and tested. Only features are changed (CNN instead of HOG). – CNN summarizes each proposal into a 4096 vector (much more compact representation compared to HOG) – Leverage transfer learning: the CNN can be pre-trained for image classification with C classes. One needs only to change the FC layers to deal with Z classes.

优点: – 提议、特征提取和 SVM 分类的流程众所周知且经过测试。只更改了特征(用CNN 替代是 HOG)。 – CNN 将每个提议汇总为 4096 向量(与 HOG 相比,表示更加紧凑) – 利用迁移学习:CNN 可以预先训练用于 C 类图像分类。只需更改 FC 层即可处理 Z 类。

缺点

• CONS: – Slow! 47s/image with VGG16 backbone. One considers around 2000 proposals per image, they need to be warped and forwarded through the CNN. – Training is also slow and complex – The object proposal algorithm is fixed. Feature extraction and SVM classifier are trained separately à not exploiting learning to its full potential.

 • 缺点: – 速度慢!使用 VGG16 主干时每张图片耗时 47 秒。每张图片大约有 2000 个提议,需要通过 CNN 进行扭曲和转发。 – 训练速度慢且复杂 – 对象提议算法是固定的。特征提取和 SVM 分类器是分开训练的 à 无法充分利用学习的潜力(在最后的SVM中没有反向传播)。

R-CNN进行目标检测的训练流程:
  • 使用区域生成算法,生成2000个候选区域,这里使用的是Selective search.
  • 对生成的2000个候选区域,使用预训练好的AlexNet网络进行特征提取。
    • 将候选区域变换到网络需要的尺寸(227×227227×227)。 在进行变换的时候,在每个区域的边缘添加p𝑝个像素,也就是手工的添加个边框,设置p=16𝑝=16。
    • 改造预训练好的AlexNet网络,将其最后的全连接层去掉,并将类别设置为21(20个类别,另外一个类别代表背景).

利用上面提取到的候选区域的特征,对每个类别训练一个SVM分类器(而分类)来判断,候选框里物体的类别,是给类别就是positive,不是就是negative。比如,下图针对狗的SVM分类器 

对于面只是得到了每个候选框是不是包含某个目标,其得到的区域位置不是很准确。这里需要再训练一个线性回归模型判断,候选区域框出的目标是不是完美。对于某个类别的SVM是Positive的候选区域,来判断其框的目标区域是不是很完美。 

 https://www.cnblogs.com/wangguchangqing/p/10384058.html

缺点总结 

训练分为多个步骤,比较繁琐。 需要微调CNN网络提取特征,训练SVM进行正负样本分类,训练边框回归器得到正确的预测位置 

  • SVM分类器和边框回归器的训练过程,和CNN提取特征的过程是分开的,并不能进行特征的学些更新

2015年 SPP-NET

 对整张图片做卷积然后提取出尺寸不同的特征,然后SPP空间金字塔池化把特征变换到需要的尺寸。

使得任意大小的特征图都能够转换成固定大小的特征向量,这就是空间金字塔池化的意义(多尺度特征提取出固定大小的特征向量)。

It solved the R-CNN problem of being slow at test time

• It still has some problems inherited from R-CNN: – Training is still slow (a bit faster than R-CNN) – Training scheme is still complex – Still no end-to-end training 

它解决了 R-CNN 在测试时速度慢的问题

• 它仍然继承了 R-CNN 的一些问题: – 训练速度仍然很慢(比 R-CNN 快一点) – 训练方案仍然很复杂 – 仍然没有端到端训练(最后SVM无反向传播)

 2015年 Fast R-CNN

 和SPP类似,也是在全图上做了卷积;然后提取RoI区域;RoI Pooling(因为全连接层对输入有要求),然后全连接层,再分类和回归。

 RoI Pooling

 而且事实证明,这个RoI是对应像素块的最大池化,反向传播也很简单

优点:

实现了端到端 

快很多,训练快8倍,测试快146倍,但测试时间不包括生成提议区域的时间

实际上每个图片要2s

 

缺点:生成提议没有端到端 
Faster R-CNN  2015

深度学习系列(五):Faster RCNN算法理论 | 小切的博客

 提出了Region Proposal Network(RPN),除此之外和Fast R-CNN都一样

RPN集成到了网络内部;每个位置取9个锚框,三个形状和三个尺度,3*3=9(3 sacals * 3 aspect ratios)

有4*9个锚框坐标,然后锚框回归

2*9个分数,用于指示该锚框含有目标和不含目标的分数(前景概率和后景概率)

0809

 cv慕尼黑

 4p

 Faster R-CNN 

深度学习系列(五):Faster RCNN算法理论 | 小切的博客

RPN 

• Classification ground truth: We compute p which indicates how much an anchor overlaps with the ground truth bounding boxes
 1 indicates the anchor represent an object (foreground) and 0 indicates background object. The rest do not contribute to the training.

• 分类基本事实:我们计算 p,它表示锚点与基本事实边界框的重叠程度
1 表示锚点代表一个对象(前景),0 表示背景对象。其余0.3-0.7对训练没有贡献。 

 RPN训练步骤

For an image, we randomly sample 256 anchors to form a mini-batch (balanced objects vs. non-objects) • We calculate the classification loss (binary crossentropy). • Those anchors that do contain an object are used to compute the regression loss 

对于一幅图像,我们随机抽取 256 个锚点来形成一个小批量(平衡含对象与非对象)• 我们计算分类损失(二元交叉熵)。• 那些包含对象的锚点用于计算回归损失 

训练时回归的实际上是归一化的参数

smooth L1损失用于回归

 

 优点

• 10x faster at test time wrt Fast R-CNN

• Trained end-to-end including feature extraction, region proposals, classifier and regressor

• More accurate, since proposals are learned. RPN is fully convolutional

• 测试时间比 Fast R-CNN 快 10 倍

• 端到端训练,包括特征提取、区域提议、分类器和回归器

• 更准确,因为提议是经过学习的。RPN 是完全卷积的

0810

 cv慕尼黑

 5p

one-stage method

主要优点:很快
YOLO 2016

Recall sliding window object detection

• To make it efficient, we will “slide our window” only on certain locations of the image

• We divide our image in a grid.

有点像滑动窗口物体检测

• 为了提高效率,我们将仅在图像的某些位置“滑动窗口”

• 我们将图像划分为网格。

 步骤

和RPN很像,但不止回归锚框,而且要预测里边的语义

SSD 2016

和yolo很像

但SSD是在不同尺度进行预测

基本思想:

在最深的层(小分辨率)检测大物体,在浅层检测小物体

好处

不需要额外操作,只需要加一些连接

PROS:

– Very fast

– End-to-end trainable and fully convolutional

– SSD detects more objects than YOLO •

优点:

– 非常快

– 端到端可训练且完全卷积(全卷积),可以处理任何尺寸的图片

– SSD 比 YOLO 检测更多物体 •

CONS:

– Performance is not as good as two-stage detectors

– Difficulty with small objects 

缺点:

– 性能不如两阶段检测器

– 难以检测小物体

 问题

Two-stage detectors:

– Classification only work on “interesting” foreground regions (proposals, ~1-2k). Most background examples are already filtered out.

– Class balance between foreground and background objects is manageable.

– Classifier can concentrate on analyzing proposals with rich information content 

两阶段检测器:
– 分类仅适用于“有趣”的前景区域(提案,约 1-2k)。大多数背景示例已被过滤掉。
– 前景和背景对象之间的类别平衡是可管理的。
– 分类器可以专注于分析具有丰富信息内容的提案

 One-stage detectors:

– Many locations need to be analyzed (100k) densely covering the image à foreground-background imbalance

– Hard negative mining is useful, but not sufficient

单阶段检测器:
– 需要分析许多位置(100k)密集覆盖图像à前景-背景不平衡
– 硬负挖掘很有用(需要用),但还不够  

RetinaNet 2017

 使用改进后的交叉熵损失函数Focal Loss

使简单例子的损失降低,难例损失上升,更加重视难例

无锚框检测
CornerNet :2018基于点的检测 

预测 左上和右下点,然后生成框

 heatmaps

需要embedding里两组相似的向量,代表着左上角和右下角

Hourglass network 2016年提出的,被Corrner Net用了
 Corner Pooling
缺点:

What is the problem with CornetNet?

• Many incorrect bounding boxes (especially small) à too many False Positives

• Hypothesis: It is hard to infer the class of the box if the network is focused on the boundaries 

CornetNet 的问题是什么?
• 许多不正确的边界框(尤其是小的)à 太多误报
• 假设:如果网络专注于边界,则很难推断出边界框的类别 

   Center Net 2018

Idea: focus on the center of the object to infer its class

想法:关注物体的中心来推断其类别(多加一个检测头来利用中心来判别类)

• Use the corners as proposals, and the center to verify the class of the object and filter out outliers
• 使用角作为建议,并使用中心来验证物体的类别并过滤掉异常值 

 ExtremeNet 2019 (其实也广泛用于语义分割)

原理:基于角点,有角点其实和对象并无接触,对CNN很难预测

用extreme点来表示

评估方法

Precision

Recall

对于NMS

高重叠物体时,阈值很重要

李沐学ai

2p 1.5h

小土堆yolo 5p

5p 1.2h 

PhD-Vlog

Ph-D-Vlog的个人空间-Ph-D-Vlog个人主页-哔哩哔哩视频

看下沈鑫、吴国、徐洋的文章

同济子豪兄 两天毕业 图像分类

同济子豪兄的个人空间-同济子豪兄个人主页-哔哩哔哩视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值