PyTorch 源码阅读笔记(1):dispatcher

什么是dispatcher 关于 PyTorch 的 dispatcher,PyTorch 的核心作者之一 Edward Z Yang 有过介绍:Let’s talk about the PyTorch dispatcher PyTorch 作为多平台的神经网络框架,需要实现这样一种功能:每个通用的算子都要实现一些相同的 api,比如前传和反传,这些相同的api在不同的硬件设备会有不同的代码实现,CPU下可能要用到MKL,GPU下是CUDA,各个厂商的NPU加速卡也可能有不同的底层代码。PyTorch 需要根据不同的硬件设备和使用场景,调用对应的函数实现,dispatcher 能够实现这个功能。 对于每个operator,dispatcher都会维护一个函数指针表,为每个dispatch key提供对应的实现。 Dispatcher class TORCH_API Dispatcher final { // 嵌套结构体 struct OperatorDef final { explicit OperatorDef(OperatorName&& op_name) : op(std::move(op_name)) {} impl::OperatorEntry op; size_t def_count = 0; size_t def_and_impl_count = 0; }; // 成员函数 C10_ALWAYS_INLINE static Dispatcher& singleton() { // ... static Dispatcher& s = realSingleton(); /* 全局单例 C10_EXPORT Dispatcher& Dispatcher::realSingleton() { static Dispatcher _singleton; return _singleton; } */ return s; } // 成员变量 LeftRight<ska::flat_hash_map<OperatorName, OperatorHandle>> operatorLookupTable_; std::list<OperatorDef> operators_; } operatorLookupTable_ 是一个算子表 LeftRight 实现参考:Brief Announcement: Left-Right - A Concurrency Control Technique with Wait-Free Population Oblivious Reads,大概逻辑是给任意的数据结构生成两份实例左和右,同时存在读写的时候,读左边的写右边的,写入完成后读取换到右边,当左边的所有读结束后,右边的写入再同步到左边,这种并发控制方式实现了零等待的读操作。...

2023-02-11 · 692 字 · luokai

论文阅读笔记:遮挡环境下的面部识别概述

概述 面部遮挡的场景可能有: 脸部配饰:眼镜、口罩、帽子、头发。 外部遮挡:被手或者各种其他物体遮挡。 人脸局部截取:在某些受限环境和视野下的局部面部捕捉。 人工遮挡:人工生成的局部色块、随机噪声等。 人脸检测 人脸检测是人脸识别流水线的第一步,人脸被大面积遮挡的时,类内相似度和类内偏差增加,人脸检测遇到挑战。许多方法通过自适应技术解决这个问题。 通用人脸检测 一般人脸检测算法为了应对遮挡情况,都有一些特殊的算法处理。MTCNN, Sckit-Image 和 Haar cascades 在实验设置或者室内环境下可以较好地检测到被遮挡的人脸。从方法来看 ,人脸检测技术主要可以分成三类: Rigid templates:Harr 类和 AdaBoost 均属于此类,在实时系统中性能较差。 DPM(deformable part models): 实时系统表现有改善,但是计算复杂度较高。 DCNN:DCNN provide a solid solution for various A-PIE problems up to date。 遮挡下的人脸检测 处理遮挡人脸的方式主要分为以下三类: 定位面部可见区域:CNN 类提取人脸局部特征。 丢弃被遮挡子区域的特征:FAN, LLE-CNN, AdaBoost cascade classifier,计算复杂度低。 使用遮挡信息:DCNN 通过提取遮挡区域附近的特征,尝试减少遮挡的影响。 人脸识别 人脸识别流水线 Face Detection:检测图像中的人脸。 Face Processing:人脸裁剪、缩放、对齐等。 Feature Extraction:提取人脸特征。 Face Matching:从图像数据库中匹配最相似的特征向量。 occlusion-robust 人脸识别 特征提取时,未遮挡区域的特征鲁棒性高于遮挡区域,但是在实际场景中遮挡位置的不确定性可能产生问题。 遮挡鲁棒技术使用新的相似性计算方法和更少的层数来处理类内相似度。Learning-based 特征更适合先进的系统。 Learning-based 特征可以分为四类: appearance-based:使用眼睛附近的子空间进行判别学习。 scoring-based:使用统计学习方法计算面部不同区域的遮挡概率,然后选择合适的区域进行判断。 Sparse representation classifier:对遮挡区域进行划分和识别,然后利用掩码策略和字典学习技术进行重建。 deep learning-based:训练成本高。 口罩对人脸识别的影响 口罩会对面部进行大面积的遮挡,导致了更高的类内相似度和类内偏差,对人脸识别的验证过程有较大影响。 在多种算法上测试的结果,遮挡面积约 70% 时,false rejection rates 为 20% 至 50%。...

2022-02-08 · 88 字 · luokai