深度學習于糖豆推薦應用--圖片模糊識別

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閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容