jayboxyz / deeplearning-cv-notes Goto Github PK
View Code? Open in Web Editor NEW:notebook: deepleaning and cv notes.
:notebook: deepleaning and cv notes.
windows 下查看安装的 cuda 版:
方法1:进入 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA 即可看到。
方法2:CMD 下输入 nvcc --version
可查看到。
指算法检测到的建筑物与真实的正像素的交集以及它们之间的比值。IoU 一般作为目标检测和语义分割中的最常用指标。
如上,假设黄色区域即 S1 为建筑,红色区域即 S2 为预测,S3 为重叠区域,即预测正确的区域。那么:
- 准确率:Precision = S3/S2
- 召回率:Recall = S3/S1
- 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度量】详细介绍
回答节选:
来自 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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
文章:【AI不惑境】计算机视觉中注意力机制原理及其模型发展和应用-有三AI
视频:-----------------------
另
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脚本语言开发的数字图片处理包,比如PIL,Pillow, opencv, 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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
所谓多尺度,实际上就是对信号的不同粒度的采样,通常在不同的尺度下我们可以观察到不同的特征,从而完成不同的任务。
如上两个图是同样的一维信号在不同采样频率下的结果,这是一条精度曲线。通常来说粒度更小/更密集的采样可以看到更多的细节,粒度更大/更稀疏的采样可以看到整体的趋势,不过此处由于使用了不同的颜色,曲线本身也存在较大的波动,所以粒度更小的右图反而能更直观的看到各个曲线的整体性能比较结果。
很多时候多尺度的信号实际上已经包含了不同的特征,为了获取更加强大的特征表达,在传统图像处理算法中,有一个很重要的概念,即图像金字塔和高斯金字塔。
图像金字塔,即一组不同分辨率的图像,如下图,
采样的方式可以是不重叠或者重叠的,如果是不重叠的,采样尺度因子为2,那就是每增加一层,行列分辨率为原来的1/2。
当然,为了满足采样定理,每一个采样层还需要配合平滑滤波器,因此更常用的就是高斯金字塔,每一层内用了不同的平滑参数,在经典的图像算子SIFT中被使用。
不过这不是本文要聚焦的内容,请大家去自行了解尺度空间理论,接下来聚焦深度学习中的多尺度模型设计。
卷积神经网络通过逐层抽象的方式来提取目标的特征,其中一个重要的概念就是感受野。如果感受野太小,则只能观察到局部的特征,如果感受野太大,则获取了过多的无效信息,因此研究人员一直都在设计各种各样的多尺度模型架构,主要是图像金字塔和特征金字塔两种方案,但是具体的网络结构可以分为以下几种:(1) 多尺度输入。(2) 多尺度特征融合。(3) 多尺度特征预测融合。(4) 以上方法的组合。
顾名思义,就是使用多个尺度的图像输入(图像金字塔),然后将其结果进行融合,传统的人脸检测算法V-J框架就采用了这样的思路。
深度学习中模型以MTCNN[1]人脸检测算法为代表,其流程如下,在第一步检测PNet中就使用了多个分辨率的输入,各个分辨率的预测结果(检测框)一起作为RNet的输入。
值得一提的是,多尺度模型集成的方案在提高分类任务模型性能方面是不可或缺的,许多的模型仅仅采用多个尺度的预测结果进行平均值融合,就能在ImageNet等任务中提升2%以上的性能。
2.2 多尺度特征融合网络
多尺度特征融合网络常见的有两种,第一种是并行多分支网络,第二种是串行的跳层连接结构,都是在不同的感受野下进行特征提取。
(1) 并行多分支结构
比如Inception网络中的Inception基本模块,包括有四个并行的分支结构,分别是1×1卷积,3×3卷积,5×5卷积,3×3最大池化,最后对四个通道进行组合。
除了更高卷积核大小,还可以使用带孔卷积来控制感受野。在图像分割网络Deeplab V3[2]和目标检测网络trident networks[3]中都使用了这样的策略,网络结构如下图:
还有一种比不同大小的卷积核和带孔卷积计算代价更低的控制感受野的方法,即直接使用不同大小的池化操作,被PSPNet[4]采用。
值得注意的是,这样的多分支结构对于模型压缩也是有益处的,以Big-little Net[5]为代表,它采用不同的尺度对信息进行处理。
对于分辨率大的分支,使用更少的卷积通道,对于分辨率小的分支,使用更多的卷积通道,这样的方案能够更加充分地使用通道信息。
(2) 串行多分支结构
串行的多尺度特征结构以FCN[6],U-Net为代表,需要通过跳层连接来实现特征组合,这样的结构在图像分割/目标检测任务中是非常常见的。
从上面这些模型可以看出,并行的结构能够在同一层级获取不同感受野的特征,经过融合后传递到下一层,可以更加灵活地平衡计算量和模型能力。串行的结构将不同抽象层级的特征进行融合,对于边界敏感的图像分割任务是不可缺少的。
即在不同的特征尺度进行预测,最后将结果进行融合,以目标检测中的SSD[7]为代表。
SSD在不同stride不同大小的特征图上进行预测。低层特征图stride较小,尺寸较大,感受野较小,期望能检测到小目标。高层特征图stride较大,尺寸较小,感受野较大,期望能检测到大目标。
类似的**还有SSH[8],从分辨率较大的特征图开始分为多个分支,然后各个分支单独预测不同尺度大小的目标。
既然可以将不同尺度的特征进行融合,也可以在不同的尺度进行预测,为何不同时将这两种机制一起使用呢?这样的结构以目标检测中的FPN[9]为代表。
即将高层的特征添加到相邻的低层组合成新的特征,每一层单独进行预测。当然,也可以反过来将低层的特征也添加到高层,比如PAN[10]。
当然,对于不同尺度的特征图的融合,还可以基于学习的融合方案。
上面说了这么多的方法,相信动手能力强的同学一定可以基于这些方法进行排列组合和拓展。另外,对于某些领域中的专用技巧,比如目标检测中的不同尺度的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();
—— From:关于图像分类中类别不平衡那些事
论文:《Network in Network》
概述:
此论文是2014年的一篇比较厉害的paper,该论文改进了传统的cnn网络使得网络模型参数很少,也为后续的Googlenet和resnet以及目标检测网络中提出的全卷积共享提供了一个很好的开端,小菜也是在学习主流的深层网络模型的论文时发现许多论文中都有提到NIN这篇论文,所以专门挑了时间看了这篇论文,觉得这篇论文的确不错,论文中的网络整体架构如下图所示。
论文的创新点:
—— From:https://blog.csdn.net/infinita_lv/article/details/89288419
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. 无论如何,转化偏倚将为零。
推荐该文:语义分割损失函数总结(持续更新) - 聂聪冲的博客 | Nick Blog(有 keras 代码实现)
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的权重文件有四个:
notop理解:notop表示不包含顶层的全连接层,所以两个版本,一个是包含全连接层权重的版本,一个是不包含全连接层的版本
th与tf的区别:Keras提供了两套后端,Theano和Tensorflow, th和tf的大部分功能都被backend统一包装起来了,但二者还是存在不小的冲突,有时候你需要特别注意Keras是运行在哪种后端之上,它们的主要冲突有:
以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 中,点击【布局->分隔符】即可找到。
在编辑文档的时候,前面的内容一旦改动,容易对后面的结构产生变动,可以使用分页符,前后内容不受影响。我们常常利用分页符,防止表格跨页。
分节符:制造格式的分离。
作用就是分隔文本格式,包括页面布局、页眉页脚格式等。有两种分节符:
分节的同时带有分页功能,比如这一页是竖版的,下一页需要变成横版;
2、连续分节符
保持连续不分页,但彼此之间可以设置不同的格式,比如报纸常见的分栏结构。
总结:
理清要求:
1.封面无页码
2.目录页使用罗马数字(Ⅰ、Ⅱ、Ⅲ)
3.正文页使用阿拉伯数字(1、2、3)
找到思路:利用分节符,把文章分成三个部分,单独设置页码格式。
解决步骤:
1、在封面和目录,目录和正文之间插入分节符,将文档分为三节;
2、取消节与节之间的链接;
3、第1节 不插入页码;
4、第2节 插入页码,设置格式为罗马数字并且起始编号为I;
5、第3节 插入页码,设置格式为阿拉伯数字并且起始编号为1;
单击“开始”>“显示/隐藏”。
这样可以显示 word 文档所有隐藏的符号。
已添加的分节符将以如下方式开始和结束,将光标放在该分节符之前,然后按 delete 即可删除。
江西师范大学专业学位硕士研究生学位论文格式要求:http://www.365dxlw.com/wap/content/?2413.html
参考:
以下为 word 2013 下的操作:
“中英文摘要页码用古罗马数字编排,正文及其以后内容页码用阿拉伯数字编排”
假如论文中“中英文摘要在第3页,正文及其以后内容在第9页。
将鼠标移至第2页最后的位置,然后点击【布局→分隔符(页面布局)→分节符类型】选为“下一页”,点击确定,此时鼠标移动到了第3页;
点击【插入→页码→设置页码格式→选择所要插入的数字格式】,并选择起始页码为罗马数字1,点击确定就可以了。这时我们可以看到从第三页开始页码分别为1,2,3………,但是前面的两页也插入了页码,用如下步骤3,4解决;
双击第三页插入页码的地方,这时会弹出页眉页脚的工具栏,点击其中的“同前”(有些版本为“链接到前一个”)按钮(默认是启用这个功能,点一下相当于取消这个链接),然后关闭;
这时可以回到第一页插入页码的地方双击,将其中的页码删除,这时第一页和第二页的页码都消失了。当然如果想在刚才没有页码的第一,二页中插入其他符号形式的页码,直接使用如上所述的第一种情况的步骤就可以了,他对后面第三页开始的页码没有影响,同理也可以在后面第三页开始的文档中插入其他符号形式的页码。
正文及其以后内容步骤从1到4再重复一遍,只是选为阿拉伯数字。
比如这个要求:
学位论文页眉采用5号宋体打印。“引言”、“正文”、“结论”部分的奇数页页眉居中为“论文题目”,偶数页页眉居中为“XX学位论文”(标明研究生学位类别,例如,教育硕士专业学位论文、工程硕士专业学位论文等);页眉下横线为单直线,粗度1.5磅。
其实为奇偶数页设置不同页面,这个和插入页码道理差不多。
在开始正文的前面插入【分节符(下一节)】,这样正文就和前面内容相当于“脱离”,然后点击正文第一页页眉处,然后勾选【奇偶页不同】,再取消【链接到前一条页眉】,然后在正文的第一页写上奇数页你需要设置的比如“论文题目” -> 在点击第二页页面,同样取消【链接到前一条页眉】,写上偶数页你需要设置的页面比如“XX学位论文”,完成。
注1:勾选了【奇偶数页不同】,可能也会对页脚下页码产生影响,如果页码受影响,可以点击页脚下页码处,然后点击【插入->页码->页面底端】选择相应的页码格式,即可。
注2:好好理解下【链接到前一条页眉】。有好些情况下记得要取消【链接到前一条页眉】。
只要在编写文档过程中,设置好了你的标题等这些(这个可以点击【视图->勾选导航窗口】可以看到左侧目录),然后在你需要插入目录的地方,点击【引用->目录】选择自己想要的目录即可。
并且可以点击【自定义目录->选项 或 修改】进行样式修改。
设置成如下对齐方式:
参考:WPS-段落调节、参考文献上下对齐,编号自动生成。_weixin_42769537的博客-CSDN博客
MS Office word 通过在“开始”->"段落"->“编号”->自定义编号
!!!注:序号[1]、[2]...... 需要把序号的字体设置为 Times New Roman 等字体可以对齐,设置为宋体等字体可能无法对齐。
回答:如何解决使用AxMath在WPS中插入右编号公式时出现* MERGEFORMAT ? - 傲梨自歪的回答 - 知乎
https://www.zhihu.com/question/316758084/answer/639569949
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.