faq_2021_s2.md 9.2 KB
Newer Older
C
cuicheng01 已提交
1 2 3 4 5
# 图像识别常见问题汇总 - 2021 第2季


## 目录
* [第1期](#第1期)(2021.07.08)
B
Bin Lu 已提交
6
* [第2期](#第2期)(2021.07.27)
C
cuicheng01 已提交
7 8 9 10 11 12 13 14

<a name="第1期"></a>
## 第1期

### Q1.1: 目前使用的主体检测模型检测在某些场景中会有误检?

**A**:目前的主体检测模型训练时使用了COCO、Object365、RPC、LogoDet等公开数据集,如果被检测数据是类似工业质检等于常见类别差异较大的数据,需要基于目前的检测模型重新微调训练。

C
cuicheng01 已提交
15
### Q1.2: 添加图片后建索引报`assert text_num >= 2`错?
C
cuicheng01 已提交
16 17 18

**A**:请确保data_file.txt中图片路径和图片名称中间的间隔为单个table,而不是空格。

C
cuicheng01 已提交
19
### Q1.3: 识别模块预测时报`Illegal instruction`错?
C
cuicheng01 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33

**A**:可能是编译生成的库文件与您的环境不兼容,导致程序报错,如果报错,推荐参考[向量检索教程](../../../deploy/vector_search/README.md)重新编译库文件。

### Q1.4 主体检测是每次只输出一个主体检测框吗?

**A**:主体检测这块的输出数量是可以通过配置文件配置的。在配置文件中Global.threshold控制检测的阈值,小于该阈值的检测框被舍弃,Global.max_det_results控制最大返回的结果数,这两个参数共同决定了输出检测框的数量。

### Q1.5 训练主体检测模型的数据是如何选择的?换成更小的模型会有损精度吗?

**A**:训练数据是在COCO、Object365、RPC、LogoDet等公开数据集中随机抽取的子集,小模型精度可能会有一些损失,后续我们也会尝试下更小的检测模型。关于主体检测模型的更多信息请参考[主体检测](../application/mainbody_detection.md)

### Q1.6 识别模型怎么在预训练模型的基础上进行微调训练?

**A**:识别模型的微调训练和分类模型的微调训练类似,识别模型可以加载商品的预训练模型],训练过程可以参考[识别模型训练](../tutorials/getting_started_retrieval.md),后续我们也会持续细化这块的文档。
C
cuicheng01 已提交
34 35 36 37 38 39 40 41

### Q1.7 PaddleClas和PaddleDetection区别

**A**:PaddleClas是一个兼主体检测、图像分类、图像检索于一体的图像识别repo,用于解决大部分图像识别问题,用户可以很方便的使用PaddleClas来解决小样本、多类别的图像识别问题。PaddleDetection提供了目标检测、关键点检测、多目标跟踪等能力,方便用户定位图像中的感兴趣的点和区域,被广泛应用于工业质检、遥感图像检测、无人巡检等项目。

### Q1.8 PaddleClas 2.2和PaddleClas 2.1完全兼容吗?

**A**:PaddleClas2.2相对PaddleClas2.1新增了metric learning模块,主体检测模块、向量检索模块。另外,也提供了商品识别、车辆识别、logo识别和动漫人物识别等4个场景应用示例。用户可以基于PaddleClas 2.2快速构建图像识别系统。在图像分类模块,二者的使用方法类似,可以参考[图像分类示例](../tutorials/getting_started.md)快速迭代和评估。新增的metric learning模块,可以参考[metric learning示例](../tutorials/getting_started_retrieval.md)。另外,新版本暂时还不支持fp16、dali训练,也暂时不支持多标签训练,这块内容将在不久后支持。
C
cuicheng01 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54

### Q1.9 训练metric learning时,每个epoch中,无法跑完所有mini-batch,为什么?

**A**:在训练metric learning时,使用的Sampler是DistributedRandomIdentitySampler,该Sampler不会采样全部的图片,导致会让每一个epoch采样的数据不是所有的数据,所以无法跑完显示的mini-batch是正常现象。后续我们会优化下打印的信息,尽可能减少给大家带来的困惑。

### Q1.10 有些图片没有识别出结果,为什么?

**A**:在配置文件(如inference_product.yaml)中,`IndexProcess.score_thres`中会控制被识别的图片与库中的图片的余弦相似度的最小值。当余弦相似度小于该值时,不会打印结果。您可以根据自己的实际数据调整该值。

### Q1.11 为什么有一些图片检测出的结果就是原图?

**A**:主体检测模型会返回检测框,但事实上为了让后续的识别模型更加准确,在返回检测框的同时也返回了原图。后续会根据原图或者检测框与库中的图片的相似度排序,相似度最高的库中图片的标签即为被识别图片的标签。

C
cuicheng01 已提交
55
### Q1.12 使用`circle loss`还需加`triplet loss`吗?
C
cuicheng01 已提交
56

C
cuicheng01 已提交
57
**A**`circle loss`是统一了样本对学习和分类学习的两种形式,如果是分类学习的形式的话,可以增加`triplet loss`
C
cuicheng01 已提交
58

C
cuicheng01 已提交
59
### Q1.13 hub serving方式启动某个模块,怎么添加该模块的参数呢?
C
cuicheng01 已提交
60 61 62 63 64 65 66 67

**A**:具体可以参考[hub serving参数](../../../deploy/hubserving/clas/params.py)

### Q1.14  模型训练出nan,为什么?

**A**

1.确保正确加载预训练模型, 最简单的加载方式添加参数`-o Arch.pretrained=True`即可;
C
cuicheng01 已提交
68

C
cuicheng01 已提交
69 70 71
2.模型微调时,学习率不要太大,如设置0.001就好。


C
cuicheng01 已提交
72
### Q1.15 SSLD中,大模型在500M数据上预训练后蒸馏小模型,然后在1M数据上蒸馏finetune小模型?
C
cuicheng01 已提交
73 74 75

**A**:步骤如下:

C
cuicheng01 已提交
76
1.基于facebook开源的`ResNeXt101-32x16d-wsl`模型 去蒸馏得到了`ResNet50-vd`模型;
C
cuicheng01 已提交
77

C
cuicheng01 已提交
78
2.用这个`ResNet50-vd`,在500W数据集上去蒸馏`MobilNetV3`
C
cuicheng01 已提交
79

C
cuicheng01 已提交
80 81 82 83 84 85 86 87 88 89 90 91 92
3.考虑到500W的数据集的分布和100W的数据分布不完全一致,所以这块,在100W上的数据上又finetune了一下,精度有微弱的提升。


### Q1.16 如果不是识别开源的四个方向的图片,该使用哪个识别模型?

**A**:建议使用商品识别模型,一来是因为商品覆盖的范围比较广,被识别的图片是商品的概率更大,二来是因为商品识别模型的训练数据使用了5万类别的数据,泛化能力更好,特征会更鲁棒一些。

### Q1.17 最后使用512维的向量,为什么不用1024或者其他维度的呢?

**A**:使用维度小的向量,为了加快计算,在实际使用过程中,可能使用128甚至更小。一般来说,512的维度已经够大,能充分表示特征了。

### Q1.18 训练SwinTransformer,loss出现nan

C
cuicheng01 已提交
93
**A**:训练SwinTransformer的话,需要使用paddle-dev去训练,安装方式参考[paddlepaddle安装方式](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/linux-pip.html),后续paddlepaddle-2.1也会同时支持。
C
cuicheng01 已提交
94 95 96 97 98

### Q1.19 新增底库数据需要重新构建索引吗?

**A**:这一版需要重新构建索引,未来版本会支持只构建新增图片的索引。

C
cuicheng01 已提交
99
### Q1.20 PaddleClas 的`train_log`文件在哪里?
C
cuicheng01 已提交
100

C
cuicheng01 已提交
101
**A**:在保存权重的路径中存放了`train.log`
B
Bin Lu 已提交
102 103 104 105 106


<a name="第2期"></a>
## 第2期

B
Bin Lu 已提交
107
### Q2.1 PaddleClas目前使用的Möbius向量检索算法支持类似于faiss的那种index.add()的功能吗? 另外,每次构建新的图都要进行train吗?这里的train是为了检索加速还是为了构建相似的图?
B
Bin Lu 已提交
108 109 110 111 112 113 114 115 116 117

**A**:Mobius提供的检索算法是一种基于图的近似最近邻搜索算法,目前支持两种距离计算方式:inner product和L2 distance. faiss中提供的index.add功能暂时不支持,如果需要增加检索库的内容,需要从头重新构建新的index. 在每次构建index时,检索算法内部执行的操作是一种类似于train的过程,不同于faiss提供的train接口,我们命名为build, 主要的目的是为了加速检索的速度。

### Q2.2 可以对视频中每一帧画面进行逐帧预测吗?
**A**:可以,但目前PaddleClas并不支持视频输入。可以尝试修改一下PaddleClas代码,或者预先将视频逐帧转为图像存储,再使用PaddleClas进行预测。

### Q2.3:在直播场景中,需要提供一个直播即时识别画面,能够在延迟几秒内找到特征目标物并用框圈起,这个可以实现吗?
**A**:要达到实时的检测效果,需要检测速度达到实时性的要求;PPyolo是Paddle团队提供的轻量级目标检测模型,检测速度和精度达到了很好的平衡,可以试试ppyolo来做检测. 关于ppyolo的使用,可以参照:   https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/configs/ppyolo/README_cn.md

### Q2.4: 对于未知的标签,加入gallery dataset可以用于后续的分类识别(无需训练),但是如果前面的检测模型对于未知的标签无法定位检测出来,是否还是要训练前面的检测模型?
B
Bin Lu 已提交
118
**A**:如果检测模型在自己的数据集上表现不佳,需要在自己的检测数据集上再finetune下
B
Bin Lu 已提交
119

B
Bin Lu 已提交
120
### Q2.5: Mac重新编译index.so时报错如下:clang: error: unsupported option '-fopenmp', 该如何处理?
B
Bin Lu 已提交
121
**A**:该问题已经解决。Mac编译index.so,可以参照文档: https://github.com/PaddlePaddle/PaddleClas/blob/develop/deploy/vector_search/README.md
B
Bin Lu 已提交
122 123

### Q2.6: PaddleClas有提供调整图片亮度,对比度,饱和度,色调等方面的数据增强吗?
B
Bin Lu 已提交
124
**A**:PaddleClas提供了多种数据增广方式, 可分为3类:1. 图像变换类: AutoAugment, RandAugment;  2. 图像裁剪类: CutOut、RandErasing、HideAndSeek、GridMask;3. 图像混叠类:Mixup, Cutmix. 其中,Randangment提供了多种数据增强方式的随机组合,可以满足亮度、对比度、饱和度、色调等多方面的数据增广需求