文献阅读¶
目录
face recognize/verification¶
测试集:LFW
FaceNet¶
google, 99.6%
end-to-end
8M人,2亿 img
fearure: 128
与其他的深度学习方法在人脸上的应用不同,FaceNet并没有用传统的softmax的方式去进行分类学习,然后抽取其中某一层作为特征,而是 directly learns a mapping from face images to a compact Euclidean space where distances directly correspond to a measure of face similarity,然后基于这个embedding再做人脸识别、人脸验证和人脸聚类等。
verification simply involves thresholding the distance between the two embeddings;
recognition becomes a k-NN classification problem;
clustering can be achieved using off-the-shelf techniques such as k-means or agglomerative clustering.
- FaceNet主要创新点:
去掉了最后的softmax,用元组计算距离的方式来进行模型的训练。使用这种方式学到的图像表示非常紧致,使用128位足矣。
元组的选择非常重要,选得好可以很快收敛。
- 元组的选择方法:
最直接的方法就是对于每个样本,从所有样本中找出离他最近的反例和离它最远的正例,然后进行优化。这种方法有两个弊端:
耗时,基本上选三元组要比训练还要耗时;
容易受不好的数据的主导,导致得到的模型很差。
所以论文中提出了两种策略:
Generate triplets offline every n steps, using the most recent network checkpoint and computing the argmin and argmax on a subset of the data.
Generate triplets online. This can be done by selecting the hard positive/negative exemplars from within a mini-batch.
对于online 方法,为了使mini-batch中生成的triplet合理,生成mini-batch的时候,保证每个mini-batch中每个人平均有40张图片,然后随机加一些反例进去。在生成triplet的时候,找出所有的anchor-pos对,然后对每个anchor-pos对找出其hard neg样本。这里,并不去找hardest anchor-pos对,因为实际训练时,使用所有的anchor-pos对更稳健、收敛速度也稍快。使用hardest neg样本可能导致训练初期陷入极小值,因此除了上述策略外,还会选择一些semi-hard的样例,所谓的semi-hard即不考虑alpha因素。
- 网络模型:
ZF
GoogleNet
Object Detection¶
RCNN(Region CNN)¶
13s/images in GPU
53s/images in CPU
- Region proposals:(selective search)
The first generates category-independent region proposals. These proposals define the set of candidate detections available to our detector.
- Feature extraction:(4096, AlexNet)
The second module is a large convolutional neural network that extracts a fixed-length feature vector from each region.
本阶段,如果候选框与物体的人工标注矩形框的重叠区域IoU大于0.5,那么我们就把这个候选框标注成正样本,否则我们就把它标注为负样本。
图像缩放有各项异性、各向同性、不同padding的方法。
- Classifier:
The third module is a set of class-specific linear SVMs.
本阶段,正负样本的IoU 阈值为0.3
- BBox Regression
为分好类的Proposal Region 校正边框
训练集是BBox 的中心点及长宽(x,y,w,h), 输入是CNN 提取到的特征(pool5)
只用判定为本类的候选框中IoU大于0.6的候选框训练。
问题:
CNN训练的时候,本来就是对bounding box的物体进行识别分类训练,是一个端到端的任务,在训练的时候最后一层softmax就是分类层,那么为什么要先用CNN做特征提取(提取fc7层数据),然后再把提取的特征用于训练svm分类器?
这是因为svm训练和cnn训练过程的正负样本定义方式各有不同,导致最后采用CNNsoftmax输出比采用svm精度还低。cnn在训练的时候,对训练数据做了比较宽松的标注——采用这个方法的主要原因在于因为CNN容易过拟合,需要大量的训练数据;然而svm训练的时候,因为svm适用于少样本训练,所以对于训练样本数据的IOU要求比较严格。
fast-RCNN¶
和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒
- Feature extraction & Classifier & BBox Regression(VGG16):
RCNN一张图像内候选框之间大量重叠,提取取特征操作冗余。 为加快速度
训练时,先将一张图像送入网络,在pool5送入从这幅图像上提取出的候选区域(ROI pooling layer)。这些候选区域的前几层特征不需要再重复计算。
测试时,将整张图像归一化后直接送入深度网络。在pool5 才加入候选框信息,在末尾的少数几层处理每个候选框。
RCNN中独立的分类器和回归器需要大量特征作为训练样本。 本文把类别判断和位置精调统一用深度网络实现,不再需要额外存储。
同时, 因为网络末端同步训练的分类和位置调整,提升准确度,因此直接输出最后一层作为分类结果。
注解
pool5 将patch 均分成 H*W 的区域pool, 因此形成固定大小的特征,类似 SPP-net
faster-RCNN¶
5-17 fps
ZF, VGG16
- Region proposals:(RPN)
在提取好的特征图上,对所有可能的候选框进行判别。由于后续还有位置精修步骤,所以候选框实际比较稀疏。
结构:多加一层 conv ,然后时是并行的分类(object or not)和校正网络(x,y,w,h)
训练样本
对每个标定的真值候选区域,IoU最大的anchor记为前景样本
对a)剩余的anchor,如果其与某个标定重叠比例大于0.7,记为前景样本;如果其与任意一个标定的重叠比例都小于0.3,记为背景样本
对a),b)剩余的anchor,弃去不用。
跨越图像边界的anchor弃去不用
注解
Note that a single ground-truth box may assign positive labels to multiple anchors.
- 训练的3种方法:
轮流训练
近似联合训练
联合训练
Mask RCNN¶
extends Faster R-CNN by adding a branch for predicting segmentation masks on each RoI
RoIAlign
decouple mask and class prediction: with a per-pixel sigmoid and a binary loss
models can run at about 200ms per frame(5 fps) on a GPU
human pose estimation
network-depth-features: ResNet-50-C4, Feature Pyramid Network (FPN)
Pedestrain Detection¶
Pedestrain reidentification¶
Handwritten Chinese Character Recognition(HCCR)¶
NLP(natural language processing)
2013 富士通公司的团队采用改进的CNN (Convolutional neural network)网络,获得了脱机手写汉字识别的第一名,识别率高达94.77%
2015 改进的HCCR-GoogLeNet模型,在ICDAR2013比赛数据集上取得了96.74%的识别率(首次超越人类)
深度学习方法的问题
训练和测试时间较长,字典存储偏大等问题,
ocr 识别方法: - - sequence-based model(based on HMMs, Connectionist Temporal Classification, Attention based models, etc.) - attention-based models :Attention就是在网络中加入关注区域的移动、缩放机制,连续部分信息的序列化输入。 关注区域的移动、缩放采用强化学习来实现。 - third party solutions like Abbyy(收费) or Tesseract
android 方案: tensorflow caffe react native –> tesseract 库 云服务 –> tensorflow server / docker
Tesseract
1. app/build.gradle 添加依赖 tess-two 依赖(tess-two 网页) 2.
To Be Continue¶
价值迭代网络
SA-GAN(Self-Attention GAN): 生成图片, 对生成器和判别器应用谱归一化(spectral normalization)
ST-GAN(Spatial Transformer GAN):
ATA-GAN(Attention-Aware GAN):生成图片, a novel attention transfer mechanism
DA-GAN(Deep Attention GAN): instance-level image translation, 非监督, 可用于 text-to-image