Coder Social home page Coder Social logo

jayboxyz / deeplearning-cv-notes Goto Github PK

View Code? Open in Web Editor NEW
333.0 333.0 121.0 36.96 MB

:notebook: deepleaning and cv notes.

Jupyter Notebook 94.18% Python 5.81% Batchfile 0.01%
deeplearning matlab matplotlib numpy opencv python scikit-learn tensorflow

deeplearning-cv-notes's People

Contributors

jaybo233 avatar jayboxyz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

deeplearning-cv-notes's Issues

语义分割中的 Loss、评价指标

个人梳理

一、语义分割评价

交并比 IoU

指算法检测到的建筑物与真实的正像素的交集以及它们之间的比值。IoU 一般作为目标检测和语义分割中的最常用指标。

准确率 Precision 和 召回率 Recall

  • 准确率:指算法检测到的建筑物像素中真实正像素的百分比。
  • 召回率:即算法检测到正确建筑物占地面真实正像素的百分比。

如上,假设黄色区域即 S1 为建筑,红色区域即 S2 为预测,S3 为重叠区域,即预测正确的区域。那么:

  1. 准确率:Precision = S3/S2
  2. 召回率:Recall = S3/S1
  3. IoU 计算:IoU = s3/(s1+s2-s3) 另外也可以根据混淆矩阵计算得来。

混淆矩阵

参考:

- True Positive(真正, TP):将正类预测为正类数. 
- True Negative(真负 , TN):将负类预测为负类数. 
- False Positive(假正, FP):将负类预测为正类数 → 误报 (Type I error). 
- False Negative(假负 , FN):将正类预测为负类数 →漏报 (Type II error).

这篇文章推荐下:【错误率、精度、查准率、查全率和F1度量】详细介绍

神经网络中 add 和 concatenate 融合方式区别?

1、如何理解神经网络中通过add的方式融合特征? - 知乎

回答节选:

  1. 如何理解神经网络中通过add的方式融合特征? - Hengkai Guo的回答 - 知乎
    https://www.zhihu.com/question/306213462/answer/562776112
  2. 如何理解神经网络中通过add的方式融合特征? - Hanjie WU的回答 - 知乎
    https://www.zhihu.com/question/306213462/answer/760147233

来自 2.

add操作经典代表网络是ResNet,concate操作经典代表网络是Inception系统网络中的Inception结构和DenseNet。

正如之前的回答有人说的,add操作相当于加入一种先验知识。我觉得也就是相当于你对原始特征进行人为的特征融合。而你选择的特征处理的操作是element-wise add。通过add操作,会得到新的特征,这个新的特征可以反映原始特征的一些特性,但是原始特征的一些信息也会在这个过程中损失。

但是concate就是将原始特征直接拼接,让网络去学习,应该如何融合特征,这个过程中信息不会损失。

所以我认为add其实只是concate的一种特殊情况。但是concate带来的计算量较大,在明确原始特征的关系可以使用add操作融合的话,使用add操作可以节省计算代价。

作者:Hanjie WU
链接:https://www.zhihu.com/question/306213462/answer/760147233
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

is there a substraction operation between Deep Learning layers ?

Hi guys,
I'm trying to build a DeepLearning network which contains a subtraction operation between two layers, and I can't find a way to do that while MATLAB has just an addition operation (additionLayer)?
for more clarification, the equation below discribes the step that I should do:
C = X - AvgPooling(X)
any suggestions guys?

Python图像处理库

基于python脚本语言开发的数字图片处理包,比如PIL,Pillow, opencv, scikit-image等。

  • PIL和Pillow只提供最基础的数字图像处理,功能有限;
  • opencv实际上是一个c++库,只是提供了python接口,更新速度非常慢。
  • scikit-image是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,正好与matlab一样,因此,我们最终选择scikit-image进行数字图像处理。

Image读出来的是PIL的类型,而skimage.io读出来的数据是numpy格式的

import Image as img
import os
from matplotlib import pyplot as plot
from skimage import io,transform
#Image和skimage读图片
img_file1 = img.open('./CXR_png/MCUCXR_0042_0.png')
img_file2 = io.imread('./CXR_png/MCUCXR_0042_0.png')

输出可以看出Img读图片的大小是图片的(width, height);而skimage的是(height,width, channel), [这也是为什么caffe在单独测试时要要在代码中设置:transformer.set_transpose('data',(2,0,1)),因为caffe可以处理的图片的数据格式是(channel,height,width),所以要转换数据]

作者:jiandanjinxin
链接:https://www.jianshu.com/p/f2e88197e81d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

多尺度设计

【AI不惑境】深度学习中的多尺度模型设计 【荐】

1、什么是多尺度

1.1 什么是多尺度

所谓多尺度,实际上就是对信号的不同粒度的采样,通常在不同的尺度下我们可以观察到不同的特征,从而完成不同的任务。

image

如上两个图是同样的一维信号在不同采样频率下的结果,这是一条精度曲线。通常来说粒度更小/更密集的采样可以看到更多的细节,粒度更大/更稀疏的采样可以看到整体的趋势,不过此处由于使用了不同的颜色,曲线本身也存在较大的波动,所以粒度更小的右图反而能更直观的看到各个曲线的整体性能比较结果。

1.2 图像金字塔

很多时候多尺度的信号实际上已经包含了不同的特征,为了获取更加强大的特征表达,在传统图像处理算法中,有一个很重要的概念,即图像金字塔和高斯金字塔。

图像金字塔,即一组不同分辨率的图像,如下图,

image

采样的方式可以是不重叠或者重叠的,如果是不重叠的,采样尺度因子为2,那就是每增加一层,行列分辨率为原来的1/2。

当然,为了满足采样定理,每一个采样层还需要配合平滑滤波器,因此更常用的就是高斯金字塔,每一层内用了不同的平滑参数,在经典的图像算子SIFT中被使用。

image

不过这不是本文要聚焦的内容,请大家去自行了解尺度空间理论,接下来聚焦深度学习中的多尺度模型设计。

2、计算机视觉中的多尺度模型架构

卷积神经网络通过逐层抽象的方式来提取目标的特征,其中一个重要的概念就是感受野。如果感受野太小,则只能观察到局部的特征,如果感受野太大,则获取了过多的无效信息,因此研究人员一直都在设计各种各样的多尺度模型架构,主要是图像金字塔和特征金字塔两种方案,但是具体的网络结构可以分为以下几种:(1) 多尺度输入。(2) 多尺度特征融合。(3) 多尺度特征预测融合。(4) 以上方法的组合。

2.1 多尺度输入网络

顾名思义,就是使用多个尺度的图像输入(图像金字塔),然后将其结果进行融合,传统的人脸检测算法V-J框架就采用了这样的思路。

深度学习中模型以MTCNN[1]人脸检测算法为代表,其流程如下,在第一步检测PNet中就使用了多个分辨率的输入,各个分辨率的预测结果(检测框)一起作为RNet的输入。
image

值得一提的是,多尺度模型集成的方案在提高分类任务模型性能方面是不可或缺的,许多的模型仅仅采用多个尺度的预测结果进行平均值融合,就能在ImageNet等任务中提升2%以上的性能。

2.2 多尺度特征融合网络

多尺度特征融合网络常见的有两种,第一种是并行多分支网络,第二种是串行的跳层连接结构,都是在不同的感受野下进行特征提取。

(1) 并行多分支结构

比如Inception网络中的Inception基本模块,包括有四个并行的分支结构,分别是1×1卷积,3×3卷积,5×5卷积,3×3最大池化,最后对四个通道进行组合。

image

除了更高卷积核大小,还可以使用带孔卷积来控制感受野。在图像分割网络Deeplab V3[2]和目标检测网络trident networks[3]中都使用了这样的策略,网络结构如下图:

image

还有一种比不同大小的卷积核和带孔卷积计算代价更低的控制感受野的方法,即直接使用不同大小的池化操作,被PSPNet[4]采用。

image

image

值得注意的是,这样的多分支结构对于模型压缩也是有益处的,以Big-little Net[5]为代表,它采用不同的尺度对信息进行处理。

image

对于分辨率大的分支,使用更少的卷积通道,对于分辨率小的分支,使用更多的卷积通道,这样的方案能够更加充分地使用通道信息。

(2) 串行多分支结构

串行的多尺度特征结构以FCN[6],U-Net为代表,需要通过跳层连接来实现特征组合,这样的结构在图像分割/目标检测任务中是非常常见的。

image

从上面这些模型可以看出,并行的结构能够在同一层级获取不同感受野的特征,经过融合后传递到下一层,可以更加灵活地平衡计算量和模型能力。串行的结构将不同抽象层级的特征进行融合,对于边界敏感的图像分割任务是不可缺少的。

2.3 多尺度特征预测融合

即在不同的特征尺度进行预测,最后将结果进行融合,以目标检测中的SSD[7]为代表。

SSD在不同stride不同大小的特征图上进行预测。低层特征图stride较小,尺寸较大,感受野较小,期望能检测到小目标。高层特征图stride较大,尺寸较小,感受野较大,期望能检测到大目标。

image

类似的**还有SSH[8],从分辨率较大的特征图开始分为多个分支,然后各个分支单独预测不同尺度大小的目标。

image

2.4 多尺度特征和预测融合

既然可以将不同尺度的特征进行融合,也可以在不同的尺度进行预测,为何不同时将这两种机制一起使用呢?这样的结构以目标检测中的FPN[9]为代表。

image

即将高层的特征添加到相邻的低层组合成新的特征,每一层单独进行预测。当然,也可以反过来将低层的特征也添加到高层,比如PAN[10]。

image

当然,对于不同尺度的特征图的融合,还可以基于学习的融合方案。

3、后话

上面说了这么多的方法,相信动手能力强的同学一定可以基于这些方法进行排列组合和拓展。另外,对于某些领域中的专用技巧,比如目标检测中的不同尺度的Anchor设计,不同尺度的训练技巧,在这里没有讲述。

以上就是多尺度的常用设计方法,从图像分辨率的控制,到卷积核,池化的大小和不同的方案,到不同特征的融合,现在有很多相关的研究,本文不一一详述,作为计算机视觉中的老大难问题,我们会持续关注,相关自动架构搜索的研究也已经出现[11]。

混淆矩阵的绘制

注1:

在下文计算混淆矩阵的代码中,可能会出现一个报错:

missing from current font.

加入下面代码可以解决该报错:

plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']

注2:

当使用如下代码保存使用 plt.savefig 保存生成的图片时,结果打开生成的图片却是一片空白。

import matplotlib.pyplot as plt

""" 一些画图代码 """

plt.show()
plt.savefig("filename.png")

原因:其实产生这个现象的原因很简单:在 plt.show() 后调用了 plt.savefig() ,在 plt.show() 后实际上已经创建了一个新的空白的图片(坐标轴),这时候你再 plt.savefig() 就会保存这个新生成的空白图片。

解决:在 plt.show() 之前调用 plt.savefig();

全连接层(FC)和 全局平均池化(Global Average Pooling,GAP)

论文:《Network in Network》

概述:

此论文是2014年的一篇比较厉害的paper,该论文改进了传统的cnn网络使得网络模型参数很少,也为后续的Googlenet和resnet以及目标检测网络中提出的全卷积共享提供了一个很好的开端,小菜也是在学习主流的深层网络模型的论文时发现许多论文中都有提到NIN这篇论文,所以专门挑了时间看了这篇论文,觉得这篇论文的确不错,论文中的网络整体架构如下图所示。

论文的创新点:

  • 提出了抽象能力更高的Mlpconv层
  • 提出了Global Average Pooling(全局平均池化)层

—— From:https://blog.csdn.net/infinita_lv/article/details/89288419

为什么 CNN's conv bias 设为 False,如 ResNet、SEnet等

参考:kuangliu/pytorch-cifar#52

Any channel bias added would only affect the channel mean. Since BatchNorm2d is applied after Conv2d and will remove the channel mean, there's no point of adding bias to Conv2d.
To put it in another way, the gradient w.r.t. the conv bias will be zero anyway.

添加的任何通道偏置只会影响通道平均值。 由于BatchNorm2d在Conv2d之后应用,并且将删除通道均值,因此没有必要向Conv2d添加偏差。
换句话说,梯度w.r.t. 无论如何,转化偏倚将为零。

keras 使用预训练模型迁移学习、fine-tune

From:http://www.pipiwa.top/blog/show/1199

1、自动下载预训练模型及权重

base_model = VGG16(weights='imagenet', include_top=False, pooling=None,
                   input_shape=(resize, resize, 3), classes = 2)
for layer in base_model.layers:
    layer.trainable = False
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(64, activation='relu')(x)
x = Dropout(0.5)(x)
predictions = Dense(2, activation='sigmoid')(x)

model = Model(inputs=base_model.input, outputs=predictions)
model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
his = model.fit(train_data,train_label,
          batch_size=64,
          epochs=50,
          validation_split=0.2,
          shuffle=True)

输出提示显示,程序会自动去网上下载VGG16的权重模型。

2、自己手动下载

Keras-模型代码: https://github.com/fchollet/deep-learning-models

原始权重下载地址:https://github.com/fchollet/deep-learning-models/releases

tf模型权重百度云下载地址:http://pan.baidu.com/s/1dE9giOD

vgg16的权重文件有四个:

  • vgg16_weights_tf_dim_ordering_tf_kernels.h5 和vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5
  • vgg16_weights_th_dim_ordering_th_kernels.h5 和vgg16_weights_th_dim_ordering_th_kernels_notop.h5

notop理解:notop表示不包含顶层的全连接层,所以两个版本,一个是包含全连接层权重的版本,一个是不包含全连接层的版本

th与tf的区别:Keras提供了两套后端,Theano和Tensorflow, th和tf的大部分功能都被backend统一包装起来了,但二者还是存在不小的冲突,有时候你需要特别注意Keras是运行在哪种后端之上,它们的主要冲突有:

  • dim_ordering,也就是维度顺序。比方说一张224*224的彩色图片,theano的维度顺序是(3,224,224),即通道维在前。而tf的维度顺序是(224,224,3),即通道维在后。
  • 数据格式的区别,channels_last”对应原本的“tf”,“channels_first”对应原本的“th”。tf 默认的格式是(rows,cols,channels),th默认的格式是(channels,rows,cols)
    以128x128的RGB图像为例,“channels_first”应将数据组织为(3,128,128),而“channels_last”应将数据组织为(128,128,3)

以VGG为例,我们后天使用的是tensorflow,我们要自己训练全连接层,下载vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5 ,代码如下:

base_model = VGG16(weights='./vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5', include_top=False, pooling=None,
                   input_shape=(resize, resize, 3), classes = 2)

毕业论文排版

参考:

一、先对这几个有认识

参考:

如何找到分页符、分节符?—— 在 word 2013 中,点击【布局->分隔符】即可找到。

1、分页符

分页符:制造内容上的分离。
image

在编辑文档的时候,前面的内容一旦改动,容易对后面的结构产生变动,可以使用分页符,前后内容不受影响。我们常常利用分页符,防止表格跨页。

2、分节符

分节符:制造格式的分离。

作用就是分隔文本格式,包括页面布局、页眉页脚格式等。有两种分节符:

1、下一页分节符
image

分节的同时带有分页功能,比如这一页是竖版的,下一页需要变成横版;

image

2、连续分节符

image

保持连续不分页,但彼此之间可以设置不同的格式,比如报纸常见的分栏结构。

image

总结:

理清要求:

1.封面无页码
2.目录页使用罗马数字(Ⅰ、Ⅱ、Ⅲ)
3.正文页使用阿拉伯数字(1、2、3)

image

找到思路:利用分节符,把文章分成三个部分,单独设置页码格式。
image

解决步骤

1、在封面和目录,目录和正文之间插入分节符,将文档分为三节;
2、取消节与节之间的链接;
3、第1节 不插入页码;
4、第2节 插入页码,设置格式为罗马数字并且起始编号为I;
5、第3节 插入页码,设置格式为阿拉伯数字并且起始编号为1;


3、如何删除分页符、分节符?

单击“开始”>“显示/隐藏”。

image

这样可以显示 word 文档所有隐藏的符号。

已添加的分节符将以如下方式开始和结束,将光标放在该分节符之前,然后按 delete 即可删除。
image

二、硕士论文排版

江西师范大学专业学位硕士研究生学位论文格式要求:http://www.365dxlw.com/wap/content/?2413.html

参考:

以下为 word 2013 下的操作:

1.页码

中英文摘要页码用古罗马数字编排正文及其以后内容页码用阿拉伯数字编排

假如论文中“中英文摘要在第3页,正文及其以后内容在第9页。

  1. 将鼠标移至第2页最后的位置,然后点击【布局→分隔符(页面布局)→分节符类型】选为“下一页”,点击确定,此时鼠标移动到了第3页;

  2. 点击【插入→页码→设置页码格式→选择所要插入的数字格式】,并选择起始页码为罗马数字1,点击确定就可以了。这时我们可以看到从第三页开始页码分别为1,2,3………,但是前面的两页也插入了页码,用如下步骤3,4解决;

  3. 双击第三页插入页码的地方,这时会弹出页眉页脚的工具栏,点击其中的“同前”(有些版本为“链接到前一个”)按钮(默认是启用这个功能,点一下相当于取消这个链接),然后关闭;

  4. 这时可以回到第一页插入页码的地方双击,将其中的页码删除,这时第一页和第二页的页码都消失了。当然如果想在刚才没有页码的第一,二页中插入其他符号形式的页码,直接使用如上所述的第一种情况的步骤就可以了,他对后面第三页开始的页码没有影响,同理也可以在后面第三页开始的文档中插入其他符号形式的页码。

  5. 正文及其以后内容步骤从1到4再重复一遍,只是选为阿拉伯数字。

为正文奇偶数页设置不同页眉

比如这个要求:

学位论文页眉采用5号宋体打印。“引言”、“正文”、“结论”部分的奇数页页眉居中为“论文题目”偶数页页眉居中为“XX学位论文”(标明研究生学位类别,例如,教育硕士专业学位论文、工程硕士专业学位论文等);页眉下横线为单直线,粗度1.5磅。

其实为奇偶数页设置不同页面,这个和插入页码道理差不多。

在开始正文的前面插入【分节符(下一节)】,这样正文就和前面内容相当于“脱离”,然后点击正文第一页页眉处,然后勾选【奇偶页不同】,再取消【链接到前一条页眉】,然后在正文的第一页写上奇数页你需要设置的比如“论文题目” -> 在点击第二页页面,同样取消【链接到前一条页眉】,写上偶数页你需要设置的页面比如“XX学位论文”,完成。

注1:勾选了【奇偶数页不同】,可能也会对页脚下页码产生影响,如果页码受影响,可以点击页脚下页码处,然后点击【插入->页码->页面底端】选择相应的页码格式,即可。

注2:好好理解下【链接到前一条页眉】。有好些情况下记得要取消【链接到前一条页眉】

2.目录

只要在编写文档过程中,设置好了你的标题等这些(这个可以点击【视图->勾选导航窗口】可以看到左侧目录),然后在你需要插入目录的地方,点击【引用->目录】选择自己想要的目录即可。

目录样式修改:

并且可以点击【自定义目录->选项 或 修改】进行样式修改。

参考文献,对齐问题

设置成如下对齐方式:

image

image

参考:WPS-段落调节、参考文献上下对齐,编号自动生成。_weixin_42769537的博客-CSDN博客

MS Office word 通过在“开始”->"段落"->“编号”->自定义编号

!!!注:序号[1]、[2]...... 需要把序号的字体设置为 Times New Roman 等字体可以对齐,设置为宋体等字体可能无法对齐。

解决使用 wps打开word,公式时出现 * MERGEFORMAT?

回答:如何解决使用AxMath在WPS中插入右编号公式时出现* MERGEFORMAT ? - 傲梨自歪的回答 - 知乎
https://www.zhihu.com/question/316758084/answer/639569949

  • 这个方法可以解决。但是每个公式编号都这样去解决,太麻烦了,但现在也不知道还有什么更好的办法解决。。。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.