研究思路
一、数字图像
基础研究
图像的文件格式:图片有常见的bmp,jpg,png,等。三种图像之间的差别:
位图和矢量图区别;矢量图又叫向量图,是用一系列计算机指令来描述和记录一幅图,一幅图可以解为一系列由点、线、面等到组成的子图,它所记录的是对象的几何形状、线条粗细和色彩等(常见的有CAD图)
位图叫点阵图或像素图,计算机屏幕上的图你是由屏幕上的发光点(即像素)构成的,每个点用二进制数据来描述其颜色与亮度等信息,这些点是离散的,类似于点阵。多个像素的色彩组合就形成了图像
常见我们现在使用的图像识别用jpg、png、bmp三种转换,由于位图具有设备无关图和设备有关关图所以在没有说明的模型情况下一般使用jpg的图像训练图像识别和目标检测,这种数据格式保证深层的语意信息和浅层的边缘信息
BMP:优点(无损压缩,图质最好),缺点(文件太大,不利于网络传输)
GIF:优点(动画存储格式),缺点(最多256色,画质差)
PNG:优点(可保存透明背景的图片),缺点(画质中等)
JPG:优点(文件小,利于网络传输),缺点(画质损失)
alpha通道:按照位分类有:8、16、24、32位真彩图,功能是用来表达一张图像的透明程度
Base64:图像网络传输二进制编码,通过这个可以实现模型在线训练和相关部署及其与各种协议进行转换,主要功能实现图像在网络传输过程的编解码问题
像素尺寸基本信息查看方法
首先用windows系统自带的工具画图打开移动鼠标到图像的固定位置,在左下角显示的像素参数就是该点的像素参数,参考原始是整张图的左上角用鼠标去测试显示(0,0)坐标原点。
标注文件原理
使用结构化数据方法对图像内像素点进行交互式标注,这个工具目前主流的有Labelme和Labelimg,新手可以把xml,json,yml的格式化文件里面的坐标信息点使用python的scipy.misc库方式对应到原图的上画出相应的读出来到矩阵中观察
图像的加减乘除
使用opencv实现图像的算术运算
图像的增删改查
使用opencv的插值实现图像尺寸批量修改
1*1卷积特点;1. 实现跨通道的交互和信息整合;2. 进行卷积核通道数的降维和升维 https://www.jianshu.com/p/5e7c5baf03cf / https://blog.csdn.net/a1154761720/article/details/53411365
3*3卷积特征;(1)3x3是最小的能够捕获像素八邻域信息的尺寸。
(2)两个3x3的堆叠卷基层的有限感受野是5x5;三个3x3的堆叠卷基层的感受野是7x7,故可以通过小尺寸卷积层的堆叠替代大尺寸卷积层,并且感受野大小不变。
(3)多个3x3的卷基层比一个大尺寸filter卷基层有更多的非线性(更多层的非线性函数),使得判决函数更加具有判决性。
(4)多个3x3的卷积层比一个大尺寸的filter有更少的参数,假设卷基层的输入和输出的特征图大小相同为C,那么三个3x3的卷积层参数个数3x(3x3xCxC)=27C2;一个7x7的卷积层参数为49C2;所以可以把三个3x3的filter看成是一个7x7filter的分解(中间层有非线性的分解, 并且起到隐式正则化的作用。
https://blog.csdn.net/qzrdypbuqk/article/details/80104948
55卷积特征:为什么一个55的卷积核可以由2个3*3的卷积核替代?https://blog.csdn.net/m0_37997973/article/details/82457911
不规则卷积特点;
77卷积特点及(77=17+71来稀疏化模型,模型优化压缩的方法)inception v3上说将7x7分解成两个一维的卷积(1x7,7x1)
数据增强中的卷积平移不具备不变性问题
VGGNet的特征:
整个网络有5段卷积,每一段内有2~3个卷积层,且每一层的卷积核的数量一样。各段中每一层的卷积核数量依次为:64,128,256,512,512。记住有两层512
都使用了同样大小的卷积核尺寸(33)和最大池化尺寸(22),卷积过程使用"SAME"模式,所以不改变feature map的分辨率。网络通过2*2的池化核以及stride=2的步长,每一次可以分辨率降低到原来的1/4,即长宽变为原来的1/2。
网络的参数量主要消耗在全连接层上,不过训练比较耗时的依然是卷积层
ResNet的特征:
1、引入shortcut connection/gated shortcut connection
2、实现恒等变换identity mapping
DensNet
NASNet
fishNet
NASNet
mobilenet
squeezenet
卷积神经网络的十种基本操作
变形和可分离卷积技术应用
1、Group convolution 分组卷积
2、减少卷积层参数量-Bootleneck
3、ResNet的skip cooection
4、DepthWise操作解决通道和区域同步分离
5、分组卷积对通道随机分组shuffleNet(Group conv是一种channel分组的方式,Depthwise +Pointwise是卷积的方式,只是ShuffleNet里面把两者应用起来了。因此Group conv和Depthwise +Pointwise并不能划等号。)
6、通道注意力加权SEnet
7、Dilated convolution空洞卷积扩大感受野
8、Deformable convolution 可变形卷积核
启发与思考
现在越来越多的CNN模型从巨型网络到轻量化网络一步步演变,模型准确率也越来越高。现在工业界追求的重点已经不是准确率的提升(因为都已经很高了),都聚焦于速度与准确率的trade off,都希望模型又快又准。因此从原来AlexNet、VGGnet,到体积小一点的Inception、Resnet系列,到目前能移植到移动端的mobilenet、ShuffleNet(体积能降低到0.5mb!),我们可以看到这样一些趋势:
卷积核方面:
大卷积核用多个小卷积核代替;
单一尺寸卷积核用多尺寸卷积核代替;
固定形状卷积核趋于使用可变形卷积核;
使用1×1卷积核(bottleneck结构)。
卷积层通道方面:
标准卷积用depthwise卷积代替;
使用分组卷积;
分组卷积前使用channel shuffle;
通道加权计算。
卷积层连接方面:
使用skip connection,让模型更深;
densely connection,使每一层都融合上其它层的特征输出(DenseNet)
启发
类比到通道加权操作,卷积层跨层连接能否也进行加权处理?bottleneck + Group conv + channel shuffle + depthwise的结合会不会成为以后降低参数量的标准配置?
模式识别
特征提取方法:GIST、HOG、SIFI、LBP,分类模型:SVM、LR、随机森林、决策树
工程思路
工程应用主要解决的问题如下:
结合自己的场景和现有的数据、成熟模型解决下面问题:生产场景的理解难点问题转换为基本可实现问题(问题分解);基本的预处理操作;怎么finetune迁移学习;load加载和保存模型;多GPU训练/多机器训练;自定义数据加载转换;数据增强方案;训练是前后两个方向计算,inference是前向计算;自己根据模型结构图和checkpoint等写inference。
过拟合、欠拟合
梯度消失(残差块解决梯度弥散)、网络退化、梯度爆炸
softmax、relu leakrelu区别 激活函数、损失函数、BN
模型训练应该注意点:
模型部署的基本方法:
应用研究
遮挡识别
多尺度识别
小目标识别
密集型检测
稀疏性检测
Opencv普通算法在计算机视觉中应用
分类识别
目标检测
Faster R-CNN
借助谷歌的https://github.com/tensorflow/models实现各种目标检测
人脸识别
工程注意事项:在根目录和slim下要对steup进行先bulid后install
借助tf-sever部署成服务启动
Cascade R-CNN
借助pytorch的mmdetection实现https://github.com/open-mmlab/mmdetection
C++调用pytorch的模型
YOLOv3
SSD
FSSD
RFBNet
M2Det
应用:单双目测距
语义分割
应用:bili的弹幕布掩码
多模态识别
Imagecaptation
细粒度识别
Factorized Attention: Self-Attention with Linear Complexities
向量场识别
强化学习
自动驾驶线路规划
用于视觉-语言导航的强化跨模态匹配及自我监督模仿学习
论文地址:http://arxiv.org/abs/1811.10092
对抗学习
主要应用是时尚芭莎与主题餐厅店的装饰设计
主要应用
1、OCR
2、人脸识别
3、指纹识别
4、图像识别
5、目标检测
一阶段
二阶段