SER-FIQ (Quality estimation,CVPR 2020)
https://zhuanlan.zhihu.com/p/348813783

github地址

def get_embedding_quality(img_input, insightface_model : InsightFace, ser_fiq : SERFIQ, T:int =100, use_preprocessing: bool =True,disable_tqdm: bool = False):"""Calculates the SER-FIQ Quality Score for a given img usinggiven insightface model and ser-fiq model.Parameters----------img_input : numpy array shape (x,y,3)The image to be processed.insightface_model : InsightFaceInstance of InsightFace classser_fiq : SERFIQInstance of SERFIQ classT: int, default is 100The amount of forward passes the SER-FIQ model should douse_preprocessing: bool, default is TrueTrue: Preprocessing of insightface model is applied (recommended)False: No preprocessing is used, needs an already aligned imagedisable_tqdm: bool, default is FalseIf True, no tqdm progress bar is displayedReturns-------Arcface/Insightface embedding: numpy array, shape (512,)Robustness score : float"""# Apply preprocessing if image is not already aligned# if use_preprocessing:#     img_input = insightface_model.get_input(img_input)print("直接输入对齐后的人脸")nimg= cv2.imread("./data/error.jpg")  #2.jpg 0.8820820700458204   4.jpg  0.8802309518003452  ,3.jpg 0.8854882678170457nimg = cv2.resize(nimg,(112,112))nimg = cv2.cvtColor(nimg, cv2.COLOR_BGR2RGB)img_input = np.transpose(nimg, (2, 0, 1))if img_input is None:# No face etc. could be found, no score could be calculatedreturn -1.0, -1.0# Array + prediction with insightfacedropout_emb = np.empty((1, 25088), dtype=float)embedding, dropout = insightface_model.get_feature(img_input)print(embedding.shape, dropout.shape)  # embedding.shape, dropout.shape  (512,) (1, 512, 7, 7)dropout_emb[0] = dropout.flatten()del dropout# Apply T forward passes using keras# 输出embedding 是insightface 模型输出的特征, 这里ser_fiq 构建了dropout 全连接 bn l2 norm 四个层,输入 insightface 模型 的 dropout 输出# 同样的输入,经过ser_fiq 100次( 每次由于dropout所以输出不同)  得到100个 512 维度的特征X = np.empty((T, 512), dtype=float)  # 运行100次  得到100次的结果,也就是100个 512 模型特征,for forward_pass in tqdm(range(T),desc="Forward pass",unit="pass",disable=disable_tqdm):X[forward_pass] = ser_fiq.predict(dropout_emb)norm = normalize(X, axis=1)print("100次的结果normalize",norm.shape)# Only get the upper triangle of the distance matrixeucl_dist = euclidean_distances(norm, norm)[np.triu_indices(T, k=1)]  # 100 *100的距离矩阵,取得右上三角 矩阵位置的 距离值print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> out")print(eucl_dist)print(eucl_dist.shape)#4950print(euclidean_distances(norm, norm).shape)# Calculate score as given in the paperreturn embedding, 2*(1/(1+np.exp(np.mean(eucl_dist))))

eucl_dist = [0.38127607 0.38299665 0.38819512 … 0.35166767 0.35103225 0.35759382]
(4950,)

论文中的公式,距离大,那么得分小, 分是在0-1 之间,
测试 :存在部分误差, 一个不是人脸的误检图片 分数是0.82,正常的清晰人脸0.88,差距不够明显

注意:
1、代码 ser_fiq. 网络是 “ dropout + 全连接 + bn +l2 norm” , 其中输入是insightface 模型 输出特征的前一个层 dropout的特征 (该模型的dropout 参数p=0)
实际上应该是 ,模型由dropout(参数不是0) 训练, 运行100次(dropout前面的参数固定,运行一次) 通过drop 得到100个随机出来的 512 enbedding进行上述代码的计算,而不需要 ser_fiq

2、pytorch 分离开,drop out 输出和 fc 输出的方法
PyTorch | 教你用小妙招提取神经网络某一层特征


    # load model and datamodel = P3D199()model = model.cuda()model.eval()data=torch.autograd.Variable(torch.rand(16,3,16,160,160)).cuda() # verifyout=model(data)feature=model.feature  # 这里得到想要的层的特征out2=model.fc(feature)  # 这里分离开, 前面的输出作为下一层的输入, 执行多个 model.fc(feature),就得到了不同drop 输出print(out==out2)

3、drop 怎么在 pytorch 中 测试的时候使用

在eval模式下,由于dropout未生效,利用apply函数,将Dropout单独设为train模式,dropout就生效了。
我们知道,dropout一般都在训练的时候使用,那么测试的时候如何也开启dropout呢?
在pytorch中,网络有train和eval两种模式,在train模式下,dropout和batch normalization会生效,而val模式下,dropout不生效,bn固定参数。

想要在测试的时候使用dropout,可以把dropout单独设为train模式,这里可以使用apply函数:

def apply_dropout(m):if type(m) == nn.Dropout:m.train()net.eval()
net.apply(apply_dropout)
y = net(x)
print('apply eval result:', y)
————————————————
版权声明:本文为CSDN博主「qian99」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qian99/article/details/89052262

人脸质量评估SER-FIQ (Quality estimation,CVPR 2020)代码解读相关推荐

  1. 300+篇CVPR 2020代码开源的论文,全在这里了!

    CVPR 2020代码开源项目一放出,得到不少CVers的关注,重点是:开源和根据方向分类.目前star数已经来到2000+,期间也有不少国内外的CVPR 2020论文作者提交issue,分享他们的工 ...

  2. 300+篇CVPR 2020代码开源的论文,全在这里了

    300+篇CVPR 2020代码开源的论文,全在这里了! CVPR 2020代码开源项目一放出,得到不少CVers的关注,重点是:开源和根据方向分类.目前star数已经来到2000+,期间也有不少国内 ...

  3. 【深度学习】270篇CVPR 2020代码开源的论文,全在这里了!

    整理不易,希望点个在看或者转发,支持一下 前言:1467篇 CVPR 2020 "不开源,就是耍流氓","开源,就是生产力",这是我们经常调侃的话术.因为我们经 ...

  4. 人脸质量评估网络推荐

    腾讯优图开源的: https://github.com/Tencent/TFace/tree/quality https://github.com/deepcam-cn/FaceQuality 效果图 ...

  5. CVPR 2020代码开源的论文最全合集

    前言 之前Amusi整理了1467篇CVPR 2020所有论文PDF下载资源,详见:全在这里了! CVPR2020-Code CVPR 2020 论文开源项目合集,同时欢迎各位大佬提交issue,分享 ...

  6. 腾讯多媒体实验室:基于三维卷积神经网络的全参考视频质量评估算法

    腾讯有多个视频业务线,点播视频有腾讯视频.企鹅影视,短视频有微视.K歌,直播类有Now直播.企鹅电竞,实时传输类有QQ和微信的音视频通话.无线投屏和腾讯会议等. 用户对不同的产品有不同程度的期待:比如 ...

  7. CVPR 2020 论文大盘点-图像质量评价篇

    本文继 去雨去雾去模糊篇 . 图像增强与图像恢复篇 .图像修复Inpainting篇之后,继续盘点CVPR 2020 中底层图像处理技术中非常重要的一块:图像质量评价(Image Quality As ...

  8. 23个CVPR 2020收录的新数据集,都在这里了!

    编辑:Amusi Date:2020-06-20 来源:CVer微信公众号 链接:23个CVPR 2020收录的新数据集,都在这里了! 前言 Amusi 之前整理了1467篇CVPR 2020所有论文 ...

  9. CVPR 2020文本图像检测与识别论文/代码

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx CVPR 2020 共收录 1470篇文章,算法主要领域:图像与视频处理,图像分类&检 ...

最新文章

  1. Android模拟器学framework和driver之传感器篇1(linux sensor driver)
  2. 基于点云的3D深度学习主干网络进展综述
  3. linux的gromacs模拟分子运动,分子动力学技术交流---gromacsamber
  4. android8 通知呼吸灯_android学习笔记----解决兼容8.0以上和8.0之前版本通知栏显示、振动、LED呼吸灯闪烁问题(真机验证)...
  5. win7下创建逻辑分区
  6. 首选System.lineSeparator()以用Java编写系统相关的行分隔符字符串
  7. Oracle P6培训系列:13分配限制条件
  8. c# splitContainer 中间的分割线问题
  9. Oracle 11g 表空间管理
  10. ocr初始化失败怎么办_电脑提示应用程序正常初始化失败如何解决?
  11. java考勤表导出_Sql通过存储过程生成全年日历考勤表数据
  12. vue 实现打字机效果
  13. 坚定文化新自信 提升文化软实力
  14. python 打印99乘法口诀
  15. 免费英语听力工具voscreen
  16. android版本分类
  17. MicroRNAs在HBV阳性肝细胞癌免疫耐受形成中的功能及机制研究
  18. c primer plus第六版 第七章
  19. 唐骏的成功——可以复制的成功
  20. 利用Qt Linguist将英文翻译为汉语

热门文章

  1. 【C++】反向迭代器的设计
  2. 纳尼,世界上第一台无人机竟产自中国?
  3. mysql cluster 7.5安装,mysql-cluster 7.3.5安装部署
  4. Neovim 打造 Java IDE
  5. 123个Pandas常用基础指令,真香!
  6. JavaScript数组拼接方法
  7. java创意生日快乐_Java,25岁生日快乐!
  8. 【POJ No. 1577 / UVA No. 1525】落叶 Falling Leaves
  9. 计算机专业英语名词解释大汇总
  10. 常见邮箱的SMTP设置