单图单物

 
设总物体类别为n 
一张图片上只有一个物体
输入一张图片,判断其上的物体属于哪个类别 

 
网络最后一层的神经元个数为n,每个位置对应一个类别,
神经网络最后一层神经元的个数与物体类别数一致,每个位置代表相应物体的概率,总和为1 
    
单图多物

 
设总物体类别为n 
一张图片上有多个物体
输入一张图片,判断其上有哪些类别的物体

 
网络最后一层的神经元个数为n,每个位置对应一个类别,
神经网络最后一层神经元的个数与物体类别数一致,
每个位置代表相应物体的概率,
- 1-代表该图像上有该物体
- 0-代表该图像上无该物体

如果是机器学习,可能需要n个模型,每个模型判断是否为某个类别,
深度学习模型则不需要,一次就可以判断n个类别 
- 好像机器学习输出只是一个数值,为什么会这样呢?机器学习为什么不能计算向量呢?
    

类别的确定

 
业务上只有N个类别,但业务限制不住用户,防不住意外,总会出现一些不属于这N个类别的事物
    
所以,定义第N+1个类别,将不确定因素出现的类别归于此类,不确定类,未知类别
- 客户异常输入
- 程序bug导致的异常
- 其他一切意外出现的异常


 

    

一个工程师最大的能力是什么?

 
问题转化的能力

可以将 一个未处理过的问题 转化为 类似的已处理过的问题

这样,就可以使用已知的解决问题的方法解决该问题了
    

 
这里将定位问题转化为图像分类问题 
- 切图,切成一个个小图片
- 判断一张图片是否存在某个物体
- 切图时,记下坐标就可以框图了
    

切图框的形状

 
统一的框也可以计算

与物体边缘越贴合越好 

一个物体也可以多类框, 一个人站着一个框, 坐着一个框, 躺着还是一个框

框的形状可以使用穷举法
- 一个物体可能有多个形状的框
- 不同的物体可能有不同形状的框
- 每个框都有同比放大或缩小的图像


    

标准框与真实框之间的误差

 
初始化一个正方形,或者一个最接近真实物体的框,
设计一个方法,可以 反应/体现 初始化框与真实框之间的差异

随着模型训练学习,初始化框不断向真实框逼近... 

回归的是offset,模型框与标签框之间的偏差

 
一个物体,由框切出的图像是有多个的,按重叠度进行合并


 
两个图像中的物体有80%一样,重叠,那么就认为这两个图像的物体是同一个物体

两个图像中的物体有20%一样,重叠,那么就认为这两个图像的物体不是一个物体 
  
关键看重叠比例,至少多少比例算同一个物体,作为超参数提供到API中,根据业务确定

Jaccard系数

 
IOU:交并比,交集占并集的比例,

Jaccard index [1], 又称为Jaccard相似系数(Jaccard similarity coefficient)
用于比较有限样本集之间的相似性与差异性。

Jaccard系数值越大,样本相似度越高。

 
Jaccard求两个集合之间的相似度,
其计算代价比余弦相似度,欧氏距离要低

 


物体检测

 
单图单物,最初的图像分类
- 手写数字识别


物体检测:单图多类别 分类任务
1. 单图多物,分出每个物体:物体检测,这是图像级分类,粗糙的分类,

2. 再+每个物体的位置,画个框,定位:物体检测中做的好的,还属于物体检测

3. 框是长方形,若能勾画出物体的具体形状就更好了:语义分隔

4. 在语义分隔的基础,对每类物体中的不同实例进行编号/描述/分别:实例分隔

5. 在实例分隔的基础,取出背景,前景,背景与背景也会不一样:
全场景分隔,图像上每个区域都进行了分类


 
物体检测是AI视觉方向核心中的核心

搞定物体检测,就彻底踏入CV大门... 

 
图像上只出现物体的一部分,通过这个部分,人一眼就能确定是什么物体

现在,也要让AI具有这样的能力:根据一个物体的一部分,推断出这是什么物体
    

 
置信度:有多大的把握确定一件事,有多大的概率确定一件事 
    
AI确定一个事物是某个物体的概率是多少?

 
物体检测的输入:
- 图像,图像上物体可能完整,也可能残缺
- 物体的类别及位置

物体检测的输出:
- 不同的类别,以及为该类别的概率 
- 不同物体的位置

 
RNN/CNN 
- two stage 
- 早期算法,具有开创性,推动了学术及行业的发展
  - 最伟大的地方在于,首次提出了解决一个问题的方法,重要的是开创性  
- 速度慢,当下追求的是速度,毫秒级的响应时间,RNN推理速度慢了
- 精度高
- 不发展了,退出历史舞台

YOLO
- one stage,速度快
- 前3版由一个修车工开发,后续版本由其他人开发... 
- 开始的时候因为速度快,精度稍微低一些;后续的版本,速度也上来了 
- 发展中

SSD 
- 清晰明了,速度快,one-stage 
- 发展中

无锚框设计系列 Anchor Free 
- 不切图
- 尚未工业化 


 
单类别,多实例,简单的物体检测 
- 人脸识别,从技术的角度看,叫 人脸检测 更合适一些 
- 零件计数,同一零件有多少个 
  

 
换一个行业,医疗,金融,流水生产线,... 
对一个技术的本质理解比较深入时,
进入一个新的领域,快速将一个未知问题转化为已知问题


根据具体的业务,快速出一个模型,出一个baseline,
然后
出多个模型,速度快的,速度慢的,性能,效率,从不同的维度都出一些模型 
  

 
人脸检测
- 相比物体检测,不需要检测其他类别,只需要判断是否人脸
- 画框,框的误差回归
- 多了一个任务,要标出眼睛,鼻子,嘴角等五点,五点offset回归
  

 


分类任务

机器学习中的二分类

 
是否发生,是否成立,用0与1表示  

发生/成立为1,反之为0 
    

工业上使用二分类解决多分类问题

 
一个模型对应一个二分类器 

有几个类别就设计几个二分类器,

使用A分类器判断是否为类别A
- 若是类别A,判断结束
- 若不是
  - 使用B分类器判断是否为类别B 
    - 若是类别B,判断结果
    - 若不是 
     - 一直判断下去,直到判断完所有的分类器 
    

 
不同的分类器之间相互独立,可并行训练,
- 就是各训练各的,各判断各的,
- 并行预测时,也可以取概率最高的类别 
  - 比如A分类器预测该事物为A的概率为0.6,但B分类器认为该事物为B的概率为0.8,则将该事物确定为B 
  - 当出现多个类别差别不大的情况时,比如一个预测为0.7,一个预测为0.75,那么就是训练不到位,要重新训练 
  

 
本来只A,B,C三个分类,有人确要加一个A+B的类别,成为四分类

不管是机器学习,还是深度学习,模型并不认识自己要分的是什么类别,
完全就是学习数据规律,数据是怎么分的,它就怎么学习

所以,你要弄出来一个A+B类别,那就将数据分成四类,A,B,C,A+B,然后训练就可以了
    

 
上面是AI模型训练的思路,下面是传统开发的思路:
如果是深度学习,像这种三类到四类的映射,一个简单的全连接变换就可以
如果是机器学习,可以判断出A,B,C三类别后,再手工加一些if else判断一下
    

 

    

 


 

  

 


图像相对坐标

 
原图像(宽,高)--> (W,H)
图像上点的绝对坐标:(x,y)

相对坐标:(x/W,y/H),

当原图按比例缩放时,相对坐标不变,
当一个点处于原图二分之一处时,
原图不管如何缩放,那个点永远都在原图的二分之一处,
在原图缩放的过程中,点的绝对坐标也在同时缩放,
并且缩放的比例一致,所以其比值不变,
即 相对坐标 在原图缩放的过程中 不变 

原图(W,H)转化为统一的尺度,比如(32,32),
相对坐标表示位于新图的(32*x/W,32*y/H)处,
新图通常转化为一个固定长度的方图,强制进行了统一尺度,
相对坐标的尺度也随之统一

参考