图像评估算法 - NIMA

作者: SpikeKing | 来源:发表于2019-02-14 17:40 被阅读7次

在视觉业务场景中,对于用户上传的图像,经常需要给予一个模糊的评分,用于推荐或者画像。这就涉及到如何评估图像的好坏。

NIMA

本文介绍一篇,2018年TIP的一篇文章(IEEE Transactions on Image Processing 2018),NIMA: Neural Image Assessment,基于神经网络的图像评估:

数据集

数据集:AVA,Aesthetic Visual Analysis,已标注。

标签如下:

11 953417 0 0 0 5 32 50 23 10 3 1 22 0 1396
12 953777 0 3 2 3 13 40 35 21 8 3 20 53 1396
13 953756 0 2 3 9 35 50 20 5 2 2 0 0 1396
14 954195 0 1 7 26 56 23 6 1 0 2 0 0 1396
15 953903 0 1 4 5 33 50 17 9 3 2 21 28 1396
16 954222 0 1 2 4 18 41 29 17 10 4 9 24 1396
17 953889 0 1 0 9 20 40 29 14 11 6 0 0 1396
18 953844 0 0 1 6 40 51 20 6 4 0 15 19 1396
19 954104 0 0 2 7 35 47 19 8 5 0 0 0 1396
20 954229 0 0 2 10 50 42 12 4 3 1 0 0 1396

其中:

  • 第1维是图像索引;
  • 第2维是图像ID;
  • 第3-12维是图像评分的分布,每张图片约210个人评分,平均1~10分的人数,即The number of votes per image ranges from 78 to 549, with an average of 210 votes;
  • 第13-14维是两个类别,tags,参考tags文档,可能有0~1个类别,用0标记补全;
  • 第15维,挑战赛的ID,25w张图片,来源于1447个挑战赛;即We created AVA by collecting approximately 255,000 images covering a wide variety of subjects on 1,447 challenges;

标签分布如下:

Distribution

训练模型

GitHub:neural-image-assessment

训练,参考train_mobilenet.py

MobileNet的改进:

  1. 输入图像是224x224x3;
  2. MobileNet去掉全连接层;
  3. 全局池化使用AveragePooling;
  4. 增加Dropout层,0.75,增加10个评分数据的回归;
  5. 优化算法Adam;
  6. 损失函数earth_mover_loss
  7. mobilenet预训练参数;
GAP

EMD (earth mover’s distance) loss,推土机距离,详解:

import numpy as np
import tensorflow as tf
from keras import backend as K


def main():
    arr1 = np.array([[0., 1., 2.], [0., 1., 2.]])
    arr2 = np.array([[1., 3., 5.], [2., 4., 6.]])
    print(arr1, arr2)
    
    sess = tf.Session()
    
    cdf_ytrue = K.cumsum(arr1, axis=-1)
    cdf_ypred = K.cumsum(arr2, axis=-1)
    
    v_cdf_ytrue = sess.run(cdf_ytrue)
    v_cdf_ypred = sess.run(cdf_ypred)
    print(v_cdf_ytrue, v_cdf_ypred)

    samplewise_emd = K.sqrt(K.mean(K.square(K.abs(cdf_ytrue - cdf_ypred)), axis=-1))

    v_samplewise_emd = sess.run(samplewise_emd)
    print(v_samplewise_emd)

    loss = K.mean(samplewise_emd)
    
    v_loss = sess.run(loss)
    print(v_loss)


def earth_mover_loss(y_true, y_pred):
    cdf_ytrue = K.cumsum(y_true, axis=-1)
    cdf_ypred = K.cumsum(y_pred, axis=-1)
    samplewise_emd = K.sqrt(K.mean(K.square(K.abs(cdf_ytrue - cdf_ypred)), axis=-1))
    return K.mean(samplewise_emd)


if __name__ == '__main__':
    main()

EMD公式:

EMD公式

推理

预测图像:

  1. 图像预处理;
  2. 计算期望和方差,期望是得分,方差是歧义度;

改进

  1. 数据集与真实数据差距较大,数据集偏摄影作品,真实数据为用户实拍。标注真实数据集,SABC四级分类。
  2. 增加垃圾数据的得分为0分,如违规图片,证件等;
  3. 增加清晰度和颜值等辅助相关;
  4. AVA数据集打分集中在4-5分,输出分数区分度不大。
    改进:融合其他数据集和美图数据,使模型输出区分增大。

参考1参考2参考3EMD参考4

相关文章

  • 图像评估算法 - NIMA

    在视觉业务场景中,对于用户上传的图像,经常需要给予一个模糊的评分,用于推荐或者画像。这就涉及到如何评估图像的好坏。...

  • 使用Opencv构建一个简单的图像相似检测器(MSE、SSIM)

    摘要: 本文使用opencv。numpy等简单的工具库,根据mse及ssim两种算法来评估两张图像的相似度,便于理...

  • 【百面机器学习】优化算法

    机器学习算法 = 模型表征 + 模型评估 + 优化算法。不同的优化算法对应的模型表征和评估指标分别为线性分类模型和...

  • CV03_05:基于图的图像分割

      图像检测中使用了候选区域的生成算法,该算法使用了基于图的图像分割算法,这里专门整理备注下。 基于深度学习算法的...

  • 校园招聘2017

    网易招聘 图像算法工程师(北京) 岗位描述:1、负责实现并优化编解码及压缩等图像算法;2、负责图像相关的技术、系统...

  • Opencv3计算机视觉

    Opencv是图像处理领域常用的视觉库,为了加强对图像算法的理解,重新回顾一下这些基础的图像算法,使用Python...

  • 算法的复杂度(一)

    术语“算法复杂性”用于衡量算法解决给定问题所需的步骤。它根据输入数据大小来评估算法执行的操作的计数顺序。 为了评估...

  • 复习 - 模型测试

    一、模型测试的API总结 1、分类算法评估方式 2、回归算法评估方式 二、分类模型测试 交叉验证:(Cross V...

  • ENVI:遥感图像增强

    图像增强:通过对图像数据采用各种图像增强算法,提高图像的目视效果,方便人工目视解译、图像分类中样本选取等

  • [iOS] 图像处理:一种高效裁剪图片圆角的算法

    [iOS] 图像处理:一种高效裁剪图片圆角的算法 [iOS] 图像处理:一种高效裁剪图片圆角的算法

网友评论

    本文标题:图像评估算法 - NIMA

    本文链接:https://www.haomeiwen.com/subject/srqyeqtx.html