深度学习于糖豆推荐应用--图片模糊识别

1. 引言

糖豆的小视频大部分来自UGC,我们的用户更多分布在三四线城市,她们经济条件相对没有那么良好,受限于手机相机、光线、拍摄者的抖动等影响导致部分上传的视频的首图图像质量不高。低质量图片类型主要包括运动模糊、对焦模糊、图片发黑(白)等,这样的首图在推荐分发流会带来非常不好的用户体验。因此开发一种图像模糊检测的技术显得非常必要。

2. 相关工作

2.1 传统方法

传统的图像模糊检测一般分为两种方法直接法和间接法。

  • 间接法是用一个线性方程来描述模糊图像:其中代表原始图像,代表未知的模糊函数,N代表噪声函数,代表现实看到的图像。间接法是通过使用多种方法来估计模糊函数,Rooms等人[1]提出了在小波域中通过观察边缘棱角来估算模糊函数。在论文[3]中,作者通过Lipschitz指数来计算最尖锐的边缘和相关系数,该相关系数是通过高斯点扩散函数的方差和Lipschitz指数的梯度来计算得到的,Lipschitz指数取决于图像中存在的模糊,而不依赖图像内容.

  • 直接法是通过检测和识别图像中一些具有特定属性的特征,比如边缘和拐角。当模糊事件发生之后,图像中的边缘类型和边缘的尖锐度都发生变化。通过检测这些交错分量的缺失可以辨别图像的模糊度。Marichal等人[4]通过非零DCT(Discrete Cosine Tranform离散余弦变换)系数的直方图来判别MPEG或者JPEG的模糊度,该算法考虑整个图像的DCT信息,这是基于一个重要的假设就是任何类型的边缘中图像中的尺度至少是8X8的块。

2.2 深度学习方法

随着近年来深度学习的快速发展,很多文献中应用深度学习算法来评估图像,文献[5]中,作者采用二层深度置信网络(two-stage deep belief network)进行模糊类型的分类和参数识别,首先进行傅立叶变换,然后进行训练阶段采用无监督的方式以及做一些权重的调整,这样训练得到的分类器的好处是不需要像其他算法[1]那样进行手动设置特征值计算。

传统模糊分类算法都是计算人工设计好的特征,这样计算的特征不能很好的表征大量失真图片的特性。最近很多研究人员将注意力转移到提取图片的深层次的特征结构。在深度学习中,卷积神经网络CNN是最常用的一种,常用的CNN模型有:AlexNet[6]、VGGNet[7]、GoogleNet[9]和ResNet[9]模型,在数据库ImageNet都取得很好的效果。在论文[10][11]都是利用CNN抽取的特征,结果显示非常有效,并且适合多种图像分类和目标识别中,可以尝试中图像模糊检测中的应用,它和传统的特征提取算法SIFT、HOG、GIST等相比,CNN特征提取不需要进行人工设计图像中目标的特征。这些CNN模型都可以在深度学习框架TensorFlow和Caffe上实现,有个基于tensorflow实现的开源工程yadlt[12]里面实现了多种深度学习算法,比如CN、RBM、DBN以及逻辑回归等等。

3. 模糊图片识别实验

我们分别采用三种方法来进行对模糊图片检测的实验,包括第三方深度学习API、传统方法、CNN方法。我们在两组不同的数据集上进行了多次试验。公开数据集是使用公开的测试图片数据库Corel和Caltech 101,随机选取了4153张清晰的图片,同时利用高斯模糊对这图像进行不同参数radius的模糊处理。私有数据集主要使用糖豆app产生的图像数据,人工标注了模糊图片集有20334张,清晰图片集有16104张。

3.1 基于第三方API-腾讯优图

第三方深度学习主要采用了腾讯优图开放平台提供图像识别的接口。其中模糊检测:fuzzydetect(self, image_path, data_type=0, seq=’’)参数:image_path 标识图片信息,data_type 表示image_path是图片还是url,0代表图片,1代表url。
检测的输出结果:{u'errorcode': 0, u'errormsg': u'OK', u'fuzzy_confidence': 0.0, u'fuzzy': False}。该检测结果显示输入的图片不是模糊的,计算得到的模糊度fuzzy_confidence为0.

3.1.1 私有数据集

在两组数据集上得到的结果如下,采用腾讯优图提供的模糊检测api,主要关注的指标为FPR和TNR。
我们做了三组试验,第一组是表1利用该api默认的参数,对每个检测图像得到的分数大于阈值0.2判断为模糊图片;第二组是表2将图片得分数设置为大于阈值0.1判断为模糊图像;第三组表3做了两次检测,第一次检测是得分大于0.1判定为模糊图像,如果得分低于0.1,裁剪出图像中间部分再检测一次,如果得分大于阈值0.08那么该图片判定为模糊图像,这个检测策略针对运动模糊场景很实用。

名称 FPR TNR
组一 32.9% 42.5%
组二 47.8% 49.8%
组三 60.3% 65.1%

Positive指清晰图片,Negative指模糊图像,Ture指正确分类,Flase指错误分类。表1和表2当调整阈值从0.2调整到0.1的时候,对模糊图片的检测效果提升了0.07个点,如表4所示,效果不明显,当对图像进行两次检测的时候,对模糊图片的检测率提升到0.651,如表4中TNR所示。由于试验采用的清晰和模糊图片集是通过人工标注的,没有统一的标准误差会很大,所以当降低阈值的时候,从清晰图片中更加容易检测到模糊的图片,见表4中FPR。

综上所述,采用两次检测策略可以更加识别出模糊的图片。

3.1.2 公有数据集测试

利用组三中的检测方法,在公开图像数据集上进行测试,使用公开的测试图片数据库Corel和Caltech 101,随机选取了4153张清晰的图片,同时利用高斯模糊对这图像进行不同参数radius的模糊处理,来测试该算法的准确率。试验数据如下。

正样本的检测

名称 True False
Positive 586 3567
Rate 14.1%

负样本的检测

名称 True False TNR
radius=2 4100 53 98.7%
radius=1.5 4093 60 98.5%
radius=1 4081 72 98.2%

3.2 传统方法-联合laplace和haar-wavelet

采用laplace和haar-wavelet变换[13]进行模糊检测。检测的结果比腾讯优图的效果好。

名称 True False
Positive 1129 221
Negative 1456 67
名称 FPR TNR
Rate 16.4% 76.7%

使用公开的测试图片数据库Corel和Caltech 101,随机选取了4153张清晰的图片,同时利用高斯模糊对这图像进行不同参数radius的模糊处理,来测试该算法的准确率。试验数据如下。

正样本的检测

名称 True False
Positive 946 3207
Rate 22.7%

负样本的检测

名称 True False TNR
radius=3 4153 0 100%
radius=2 4126 27 99.3%
radius=1.5 3936 217 94.7%
radius=1 2712 1441 65%

试验结果表明,在糖豆app产生的图像数据集上,联合laplace和haar-wavelet的算法要比腾讯优图模糊检测api的效果好;通过对比表5,6和表9,10,在公开图像数据集上,laplace和haar-wavelet对正样本的识别率比腾讯优图好,对负样本随着图像高斯模糊参数的变化识别也在波动很大,而腾讯优图对高斯模糊产生的负样本的识别率比较稳定。

由于糖豆app产生的模糊图像由多种因素导致的,很大一部分是运动模糊和对焦模糊,比高斯模糊要复杂很多,故此我们采用CNN方法来训练专有模型来检测模糊图片。

3.3 CNN方法

3.3.1 原理

根据文献[14]使用6层的卷积网络,主要是针对运动模糊的识别。作者使用PASCAL VOC 2010数据集,自己合成不同参数的运动模糊类型图像构成训练集。由于我们的模糊图像是由于很多种因素导致的,不仅仅是运动模糊的一种,于是我们利用糖豆标注的模糊图像和人工合成的运动模糊图像构成训练集。

该6层CNN结构如下图1所示。

image.png
image.png
卷积层
Pooling层

3.3.2 建模实现

# 定义模型
model = Sequential()
# 7x7 filter
# 步长是7 卷积窗口步重叠
# 96 map feature
model.add(Convolution2D(96, 7, 7, input_shape=input_shape))
model.add(Activation('relu'))
# model.add(Convolution2D(96, 7,7, activation='relu'))  #vgg-like
#2*2池化
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Convolution2D(256, 5, 5))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(num_classes))
model.add(Activation('softmax'))

##模型求解
epochs = 100
learning_rate = 0.01
decay = learning_rate / epochs
adam = Adam(lr=learning_rate)
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer='sgd',metrics=["accuracy"])

##模型概览
model.summary()
model.get_config()
model.layers[0].get_config()
model.layers[0].input_shape
model.layers[0].output_shape
model.layers[0].get_weights()
numpy.shape(model.layers[0].get_weights()[0])
model.layers[0].trainable

##模型训练
hist = model.fit(X_train, y_train, batch_size=128, nb_epoch=epochs, verbose=1, validation_data=(X_test, y_test))
filename='model_train_new.csv'
csv_log=callbacks.CSVLogger(filename, separator=',', append=False)
early_stopping=callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='min')
checkpoint = callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_best_only=True, mode='min')

##模型评估
score = model.evaluate(X_test, y_test, verbose=0)
print('Test Loss:', score[0])
print('Test accuracy:', score[1])
test_image = X_test[0:1]
print 'shape:', (test_image.shape)
print 'predict:', (model.predict(test_image))
print 'predict_classes:', (model.predict_classes(test_image))
print 'y_test:', (y_test[0:1])

##保存模型
file = open(filepath+"tangdoublur.h5", 'a')
model.save(filepath+"tangdoublur.h5")
file.close()

3.3.3 实验结果

在模糊数据集的检测上有较大的提升,达到了将近80%。如文章前部所述,由于糖豆图片的模糊类型繁多,并且存在多种组合。所以目前的模糊检测还存在大量提升空间。清晰数据集上有非常优秀的检测性能。

名称 FPR TNR
CNN方法 78.8% 96.8%

最后我们将该方法应用在糖豆小视频的推荐流程中,整体提升了推荐流视频的可看性。

4. 结束

本文主要简述图像模糊检测的一些算法,介绍CNN在图像模糊检测以及图像分类识别中应用,以及目前存在的工具,并采用了CNN方法检测模糊图片,提升了糖豆推荐流的观看体验。

参考文献:

[1] Tong, H., Li, M., Zhang, H., and Zhang, C. "Blur detection for digital images using wavelet transform," In Proceedings of the IEEE International Conference on Multimedia and Expo, vol.1, pp. 27-30, June 2004. doi: 10.1109/ICME.2004.1394114.

[2] Rooms, F., Pizurica, A., Philips, W. “Estimating image blur in the wavelet domain.” In Proc. of IEEE Int. Conf. on Acoustics and Signal Processing, vol. 4, pp.4190- 4195, IEEE, 2002.

[3] Wanqing, S., Qing, L., Yuming, W. “Tool wear detection using Lipschitz exponent and harmonic wavelet.” Mathematical Problems in Engineering, August 2013, Article ID 489261, http://dx.doi.org/10.1155/2013/489261.

[4] Panchapakesan, K., Sheppard, D.G., Marcellin, M.W., and Hunt, B.R. “Blur identification from vector quantizer encoder distortion.” In Proc. of the 1998 International Conference on Image Processing (ICIP 98), pp. 751-755, 4-7 Oct. 1998, Chicago, IL., USA.

[5] Y.Ruomei, S.Ling: “Image Blur Classification and Parameter Identification using Two-stage Deep Belief Networks,” British Machine Vision Conference , 2013 :70.1-70.11.

[6] Alex Krizhevsky Ilya Sutskever Geoffrey E. Hinton “ImageNet Classification with Deep Convolutional Neural Networks,” NIPS 2012.

[7] K.Simonyan, A.Zisserman “Very Deep Convolutional Networks for Large-scale Image Recognition,” ICLR 2015.

[8] Christian Szegedy, Wei Liu, Yangqing Jia, et “Going Deeper with Convolutions,” CVPR 2015.

[9] K.He, X.Zhang, S.Ren, J.Sun “Deep Residual Learning for Image Recognition,” LSVRC 2015.

[10] Hirokatsu Kataoka, Kenji Iwata, Yutaka Satoh. Feature Evaluation of Deep Convolutional Neural Networks for Object Recognition and Detection. CoRR. 2015. arXiv: 1509.07627.

[11] Xiaona Song, Ting Rui, Zhengjun Zha, Xinqing Wang, Husheng Fang “The AdaBoost algorithm for vehicle detection based on CNN features,” ICIMCS 2015.

[12] https://github.com/blackecho/Deep-Learning-TensorFlow

[13] Tong H, Li M, Zhang H, et al. Blur detection for digital images using wavelet transform[C]// IEEE International Conference on Multimedia and Expo. IEEE, 2004:17-20 Vol.1.

[14] Sun J, Cao W, Xu Z, et al. Learning a convolutional neural network for non-uniform motion blur removal[J]. 2015(CVPR):769-777.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容