个人学习笔记,可能从各个地方的博客中截图粘贴,先谢了。
看下面的内容需要你理解CNN的基础知识,下面两个链接是CNN神经网络的可视化。
https://www.bilibili.com/video/av23951169?from=search&seid=12019935558685869597
卷积神经网络的三维可视化
1 CVPR是IEEE Conference on Computer Vision and Pattern Recognition的缩写,即IEEE国际计算机视觉与模式识别会议。
2 ICCV 的全称是 IEEE International Conference on Computer Vision,即国际计算机视觉大会,由IEEE主办,与计算机视觉模式识别会议(CVPR)和欧洲计算机视觉会议(ECCV)并称计算机视觉方向的三大顶级会议,被澳大利亚ICT学术会议排名和中国计算机学会等机构评为最高级别学术会议,在业内具有极高的评价。不同于在美国每年召开一次的CVPR和只在欧洲召开的ECCV,ICCV在世界范围内每两年召开一次。ICCV论文录用率非常低,是三大会议中公认级别最高的 [1] 。ICCV会议时间通常在四到五天,相关领域的专家将会展示最新的研究成果。2019年ICCV将在韩国首尔举办。
3 ECCV的全称是European Conference on Computer Vision(欧洲计算机视觉国际会议) ,两年一次,是计算机视觉三大会议(另外两个是ICCV和CVPR)之一。每次会议在全球范围录用论文300篇左右,主要的录用论文都来自美国、欧洲等顶尖实验室及研究所,中国大陆的论文数量一般在10-20篇之间。ECCV2010的论文录取率为27%。
———————————————————————————————————————————————————————
4 NIPS(NeurIPS),全称神经信息处理系统大会(Conference and Workshop on Neural Information Processing Systems),是一个关于机器学习和计算神经科学的国际会议。该会议固定在每年的12月举行,由NIPS基金会主办。NIPS是机器学习领域的顶级会议 [1] 。在中国计算机学会的国际学术会议排名中,NIPS为人工智能领域的A类会议 [2]
年份:2015
作者:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun
paper:https://arxiv.org/abs/1512.02325
具体看https://blog.csdn.net/ytusdc/article/details/86577939
1 分别将VGG16的全连接层FC6和FC7转换成 3x3 的卷积层 Conv6和 1x1 的卷积层Conv7
2 去掉所有的Dropout层和FC8层
3 同时将池化层pool5由原来的 stride=2 的 2x2 变成stride=1的 3x3 (猜想是不想reduce特征图大小)
4 添加了Atrous算法(hole算法),目的获得更加密集的得分映射
5 然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于检测
6 采用conv4; conv7; conv8 ;conv9 ;conv10 ; avg pooling六层特征图进行多尺度采样。
7 在conv4层后增加了batch normalization
1 多尺度特征映射。大检小,小检大
2 Default box 和 Prior box(先验框)
default box个数和生成公式
Prior box概念
正负样本1:3
4 采用卷积预测
IUO大于0.5选为正例
1、Matching strategy(匹配策略):
2、Hard negative mining:
3、Data augmentation(数据增强):主要采用的技术有水平翻转(horizontal flip),随机裁剪加颜色扭曲(random crop & color distortion),随机采集块域(Randomly sample a patch)(获取小目标训练样本)
4、Atrous Algothrim(获得更加密集的得分映射)
5、NMS(非极大值抑制)
SSD算法的优点应该很明显,运行速度可以和YOLO媲美,检测精度可以和Faster RCNN媲美。SSD对不同横纵比的object的检测都有效,这是因为算法对于每个feature map cell都使用多种横纵比的default boxes,这也是本文算法的核心。最后本文也强调了增加数据集的作用,包括随机裁剪,旋转,对比度调整等等。
1、需要人工设置prior box的min_size,max_size和aspect_ratio值。网络中prior box的基础大小和形状不能直接通过学习获得,而是需要手工设置。而网络中每一层feature使用的prior box大小和形状恰好都不一样,导致调试过程非常依赖经验。(相比之下,YOLO2使用聚类找出大部分的anchor box形状,这个思想能直接套在SSD上)
2、虽然采用了pyramdial feature hierarchy的思路,但是对小目标的recall依然一般,并没有达到碾压Faster RCNN的级别。作者认为,这是由于SSD使用conv4_3低级feature去检测小目标,而低级特征卷积层数少,存在特征提取不充分的问题。所以增加输入图像的尺寸对于小的object的检测有帮助。另外增加数据集(此处主要是指裁剪)对于小的object的检测也有帮助,原因在于随机裁剪后的图像相当于“放大”原图像,所以这样的裁剪操作不仅增加了图像数量,也放大了图像。
---------------------
作者:ytusdc
来源:CSDN
原文:https://blog.csdn.net/ytusdc/article/details/86577939
版权声明:本文为博主原创文章,转载请附上博文链接!
https://zhuanlan.zhihu.com/p/32525231
类别置信度(class-specific confidence scores):
基本都是MSE形式
使用卷积代替全连接
32倍下采样,分了13个格子
依然取IOU最大的进行训练,先根据gt中心落在那个cell中,然后在这个cell中选取IOU最大的作为正样本训练
依然是MSE
图引用自https://blog.csdn.net/leviopku/article/details/82660381#t4
目标真实位置获得,以cell为参照物进行转换,和anchor的直接通过偏移系数转换不同(这样偏移参数训练比较难)
对比Faster R-CNN
v1是一个cell两个预置框,两框共用同一结果。v2借鉴anchor机制,通过聚类选择了每个cell预置框的数量和size。v3还是聚类选择预置框,不过v3选择了9个预置框,每3个负责一个featuremap的cell,多尺度机制,大图预测小目标,小图预测大目标
作者并没有像SSD那样直接采用backbone中间层的处理结果作为feature map的输出,而是和后面网络层的上采样结果进行一个concat,之后再卷积计算处理作为最终结果
13 26 52
channel =bbox_number*(x+y+w+h+c)
v1、v2视为回归问题,采用均方差函数
只有v1写了损失函数,v2、v3没有明确写,v3论文说,使用了平方误差损失的总和+二值交叉熵
[译] 理解 LSTM(Long Short-Term Memory, LSTM) 网络 - wangduo - 博客园
https://zhuanlan.zhihu.com/p/32085405
上面两个只能了解运作流程,但是你很难知道lstm的内部和数据的流动究竟是怎么样的,比如我问你一个问题,time_step=10的程序中cell一共有几个?实现lstm需要几个参数?看下面吧
LSTM的输入输出究竟是什么样的
门层、门控信号、细胞状态、时间步、总参数量
解决只依靠前面信息的问题,可以综合考虑前后信息提升准确率。
我今天不舒服,我打算____一天。
只根据‘不舒服‘,可能推出我打算‘去医院‘,‘睡觉‘,‘请假‘等等,但如果加上后面的‘一天‘,能选择的范围就变小了,‘去医院‘这种就不能选了,而‘请假‘‘休息‘之类的被选择概率就会更大。
https://zhuanlan.zhihu.com/p/31852747
https://v.youku.com/v_show/id_XMzM4MDM2NzA2OA==.html?refer=seo_operation.liuxiao.liux_00003303_3000_Qzu6ve_19042900
https://zhuanlan.zhihu.com/p/31852747
网络退化、恒等映射、残差单元、短路连接
当残差为0时,此时堆积层仅仅做了恒等映射(权值全为1),至少网络性能不会下降,实际上残差不会为0,这也会使得堆积层在输入特征基础上学习到新的特征,从而拥有更好的性能。
https://blog.csdn.net/u013093426/article/details/81166751
请注意resnet用的是relu
恒等残差块——The identity block
为什么两种模块
处理通道数量不一致问题,第二个是为了防止卷积后通道数和原来数目对不上改进的,目前知道的原因就是这个
卷积残差块——The convolutional block
目的是处理尺寸不一致为题
https://zhuanlan.zhihu.com/p/53259174
1 主要解决了onestage不精准的问题,论文指出造成不精准主要是因为正负样本难易样本不均衡导致。
2 网络结构ResNet+FPN+两个subnet
3 最重要的改动是损失函数,如下αt解决正负样本不均衡的问题,Pt解决难以样本不能区分处理的问题
4 FPN不说了,两个subNet主要是用于回归位置和分类用的,RetinaNet是onestage网络了,所以这里的subNet实际上是类似改动的RPN网络,与RPN相比主要增加了类别预测并调整了IUO阈值以0.5判断,我记得RPN是0.3&0.7。使用的sigmoid做最后类别预测的输出,FPN每个尺寸特征图的分类subNet都是4个3x3xC的卷积核,最后3x3xKA(K类别数,A锚框数。
6 优化器:SGD、batchsize16、分类是FLoss 位置回归是smoothL1
1 Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图。
2 可以把计算图看做是一种有向图,Tensorflow中的每一个节点都是计算图上的一个Tensor, 也就是张量,而节点之间的边描述了计算之间的依赖关系(定义时)和数学操作(运算时)。
3 Tensorflow计算的过程就是利用的Tensor来建立一个计算图,然后使用Session会话来启动计算,最后得到结果的过程。
https://www.2cto.com/kf/201708/673033.html
pytorch中文文档
gitbook
torchvision主要包括一下几个包:
keras中文文档-快速开始
除了上述的sequential,通过layer的搭建方法是也是很流行的
https://blog.csdn.net/Irene_Loong/article/details/89509429
2014年Golbal Average Pooling 第一次出现在论文Network in Network中,后来又很多工作延续使用了GAP,实验证明:Global Average Pooling确实可以提高CNN效果。
过程参考一下链接
简书GAP
https://www.cnblogs.com/dsgcBlogs/p/8619566.html
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。
N维向量间的欧氏距离计算公式
最近邻插值
设原图为m*n,扩大到M*N
计算扩大系数K= m/M
开始对扩大后的图中每个像素位置赋值,如要对(x1,y2)赋值,则f(x1,y2) =f (x= x1*K,y = y1*K)。x,y为原图坐标,如果不能得到整数则根据小数四舍五入
线性插值、双线性插值
单线性插值就是线性函数对y的推导过程,双线性的话就是两次单线性的组合
https://blog.csdn.net/xbinworld/article/details/65660665
https://blog.csdn.net/qq_27871973/article/details/82973048
最重要的就是反卷积的过程,大致可以理解为卷积操作的数学本质,卷积核与特征图的点积,是可以写成矩阵相乘的,这样的话卷积操作就可以借助上面的图示矩阵与特征图相乘完成,反卷积可以通过乘上图矩阵的转置实现
https://blog.csdn.net/qq_36269513/article/details/80420363
一文读懂CRNN+CTC
1. CTC损失函数出现的原因
如果使用softmax计算loss,则需要将特征矩阵的每一列都与样本标签相对应,这样就需要训练时候,标记每个字符在样本中的位置,在通过cnn的感受野对齐到label,工作量巨大,而且实际上是很难对齐的。
这个问题同样存在语音识别的过程中,有人说话快有人说话慢的帧对齐问题。
所以CTC(Connectionist Temporal Classification/联结主义时间分类)提出一种不需要对齐的计算loss的方法,广泛应用与文本识别和语音识别领域。
2. CTC损失函数的计算方式(过程方式)
3 β压缩变换,出问题
https://zhuanlan.zhihu.com/p/56961620
https://blog.csdn.net/qq_18644873/article/details/84949649
TensorFlow是“定义 - 运行”,在图形结构中定义条件和迭代,然后运行它。另一方面,PyTorch是“按运行-定义”,其中图结构是在正向计算过程中实时定义的。换句话说,TensorFlow使用静态计算图,而PyTorch使用动态计算图。基于动态图的方法为复杂体系结构(如动态神经网络)提供了更易于操作的调试功能和更强的处理能力。基于静态图的方法可以更方便地部署到移动设备,更容易部署到更具不同的体系结构,以及具有提前编译的能力。
这个意思是不是说,如果部署到嵌入式设备时,TensorFlow是可以提前编译出结果,可以烧到硬件上,而pytorch的这种边运行边编译的缺点,导致嵌入式设备没法用,因为编译过程终端设备是无法完成的。
因此,PyTorch更适合于爱好者和小型项目的快速原型开发,而TensorFlow更适合大规模部署,尤其是在考虑跨平台和嵌入式部署时。 TensorFlow经受了时间的考验,并且仍然被广泛使用。它对大型项目具有更多功能和更好的可扩展性。 PyTorch越来越容易学习,但它并没有与TensorFlow相同的一体化整合功能。这对于需要快速完成的小型项目非常有用,但对于产品部署并不是最佳选择。
对应通道的值相加,隐藏的含义是,原来的特征中信息量增加了,但是特征数量没有增加
代表有resnet和FPN和LSTM和GRU的pointwise的乘和加
通道拼接,是代表特征数量增加了,计算量也增加了
代表有DenseNet和YOLOv3,LSTM和GRU的输入