0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

是否有一種模型能在特定時(shí)間內(nèi)自動(dòng)識(shí)別視頻中的某個(gè)人物呢?

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-10-04 08:54 ? 次閱讀

編者按:本文作者Pulkit Sharma分享了一篇有趣的項(xiàng)目,以《貓和老鼠》為例,計(jì)算任意視頻中湯姆貓和杰瑞鼠的出鏡時(shí)長(zhǎng)。這一模型也可以用于其他電影,輕松統(tǒng)計(jì)各演員的上鏡時(shí)間。

簡(jiǎn)介

當(dāng)我開始接觸深度學(xué)習(xí)時(shí),學(xué)到的第一件事就是圖像分類。這個(gè)話題非常有趣,包括我在內(nèi)的很多人都沉浸在它的魅力之中。但是在我處理圖像分類時(shí)總會(huì)思考,如果我能將學(xué)到的東西遷移到視頻上就好了。

是否有一種模型能在特定時(shí)間內(nèi)自動(dòng)識(shí)別視頻中的某個(gè)人物呢?結(jié)果證明的確可以做到,下面就將我的方法分享給你們!

影視明星的出鏡時(shí)間是非常重要的,直接影響他們的片酬。舉個(gè)例子,在《蜘蛛俠:英雄歸來》中,小羅伯特唐尼僅僅出鏡15分鐘就有高達(dá)1000萬美元的片酬。

如果我能計(jì)算任意影片中所有演員的出鏡時(shí)間,那就太棒了!在這篇文章中,我將幫你理解如何在視頻數(shù)據(jù)中使用深度學(xué)習(xí)。我們就用《貓和老鼠》作為例子,計(jì)算任意視頻中,湯姆和杰瑞的出現(xiàn)時(shí)間。

注:本文需要讀者有一定的深度學(xué)習(xí)圖像分類的先驗(yàn)知識(shí)。如果沒有的話,我推薦你閱讀這篇文章(https://www.analyticsvidhya.com/blog/2016/10/tutorial-optimizing-neural-networks-using-keras-with-image-recognition-case-study/),了解有關(guān)深度學(xué)習(xí)和圖像分類的基本概念。

目錄

讀取視頻并提取幀

如何用Python處理視頻文件

計(jì)算出鏡時(shí)間——一種簡(jiǎn)單的解決方案

我的收獲

讀取視頻并提取幀

如上面的動(dòng)圖所示,,每一頁紙上都有不同的畫面,隨著我們翻動(dòng)書頁,可以看到一只跳舞的鯊魚,而且翻動(dòng)的速度越快,效果越好。這也可以看作一種視頻,換句話說,這種視覺效果是不同圖像以特定順序排列在一起產(chǎn)生的。

同樣的,視頻也是由一系列圖片組成的,這些圖片稱為“幀”,可以通過組合得到原始視頻。所以與視頻數(shù)據(jù)有關(guān)的問題和圖像分類或者目標(biāo)檢測(cè)問題并沒有什么不同。只是從視頻中提取幀需要多一個(gè)步驟。

我們這次的目的試計(jì)算湯姆和杰瑞在視頻中各自的出鏡時(shí)間,首先讓我們確定一下文中要做的步驟:

導(dǎo)入并讀取視頻,從中提取幀,將它們保存為圖片

標(biāo)記一些圖片用于模型的訓(xùn)練(這一步我已經(jīng)做好了)

在訓(xùn)練數(shù)據(jù)上搭建自己的模型

對(duì)剩余圖片進(jìn)行預(yù)測(cè)

計(jì)算湯姆和杰瑞各自的出鏡時(shí)間

跟著以下步驟學(xué)習(xí),將會(huì)幫助你解決很多深度學(xué)習(xí)相關(guān)的問題。

如何用Python處理視頻文件

首先要下載所有必需的庫:

NumPy

Pandas

Matplotlib

Keras

Skimage

OpenCV

第一步:讀取視頻并從中提取幀,將其保存為圖像

現(xiàn)在我們要下載視頻,并將它轉(zhuǎn)換成幀的形式。首先我們可以用VideoCapture( )函數(shù)從給定目錄中提取視頻,然后從視頻中提取幀,用imwrite( )函數(shù)將它們保存為圖像。

視頻下載地址:drive.google.com/file/d/1_DcwBhYo15j7AU-v2gN61qGGd1ZablGK/view

這個(gè)過程完成后,屏幕上會(huì)出現(xiàn)“Done!”的字樣。下面我們?cè)囍鴮?duì)圖像(幀)進(jìn)行可視化,首先用matplotlib中的imread( )函數(shù)讀取圖像,然后用imshow( )函數(shù)顯示圖像。

這就是視頻中的第一幀。我們從每秒中提取一幀,由于視頻時(shí)長(zhǎng)為4:58(共298秒),我們現(xiàn)在一共有298張照片。

我們的任務(wù)時(shí)確定哪張照片上有湯姆,哪張有杰瑞。如果我們提取出的圖像能和常見的ImageNet數(shù)據(jù)集中的圖片有很大的相似性,那么這個(gè)問題就能輕而易舉地解決了。但是這樣的樂趣在哪里?

我們的是動(dòng)畫片,所以要讓任何預(yù)訓(xùn)練模型在給定的視頻中定位湯姆和杰瑞還是有難度的。

第二步:標(biāo)記圖片訓(xùn)練模型

要實(shí)現(xiàn)標(biāo)記圖片,一種可能的方案是手動(dòng)貼標(biāo)簽。一旦模型學(xué)會(huì)了特定模式,我們就能用它在之前沒見過的圖像上作出預(yù)測(cè)。

要記住的一點(diǎn)是,有些幀里可能沒有湯姆和杰瑞的鏡頭,所以我們要將其看成是多種類的分類問題:

0:沒有湯姆和杰瑞的鏡頭

1:杰瑞

2:湯姆

我已經(jīng)給所有圖片打上了標(biāo)簽,所以直接在mapping.csv文件中下載即可。

映射文件包含兩部分:

image_ID:包含每張照片的名稱

Class.Image_ID:含有每張圖對(duì)應(yīng)的種類

下一步是讀取圖片信息,即他們的Image_ID部分:

現(xiàn)在我們就有了圖片,記住,我們要用兩部分訓(xùn)練模型:

訓(xùn)練圖片

對(duì)應(yīng)的種類

由于這里有三種不同情況,我們將用keras.utils中的to_cateforical( )函數(shù)對(duì)他們進(jìn)行獨(dú)熱編碼。

圖片再輸入到VGG16訓(xùn)練前,尺寸需變?yōu)?24×224×3,所以我們的圖片在輸入前要重設(shè)尺寸。我們要用到skimage.transform中的resize( )函數(shù)。

尺寸調(diào)整好后,我們還要對(duì)每個(gè)模型的需求進(jìn)行預(yù)處理,否則模型就不會(huì)表現(xiàn)得很好。利用keras.applications.vgg16中的preprocess_input( )函數(shù)來完成這一步驟。

我們還需要一個(gè)驗(yàn)證集來檢查模型在陌生圖片上的性能,這里就需要用到sklearn.modelselection模塊中的traintest_split( )函數(shù)來隨機(jī)將圖片分成訓(xùn)練集和驗(yàn)證集。

第三步:搭建模型

下一步就是搭建自己的模型。我們會(huì)用VGG16預(yù)訓(xùn)練模型來完成這一任務(wù)。首先導(dǎo)入所需的庫:

下載VGG16與訓(xùn)練模型,并將其保存為base_model:

用該模型對(duì)X_train和X_valid進(jìn)行預(yù)測(cè),得到特征,再用特征重新訓(xùn)練模型。

Xtrain和Xvalid的尺寸分別為(208,7,7,512)和(90,7,7,512)。為了輸入到神經(jīng)網(wǎng)絡(luò),我們必須把它重新修改成1—D尺寸。

現(xiàn)在對(duì)圖像進(jìn)行預(yù)處理,去中心化,讓模型收斂得更快。

最后,我們將搭建自己的模型,這一步可以分為三小步:

搭建模型

編譯模型

訓(xùn)練模型

用summary( )函數(shù)檢查模型的匯總信息:

模型中有一隱藏層,有1024個(gè)神經(jīng)元,輸出層有3個(gè)神經(jīng)元(因?yàn)槲覀冇?種不同的預(yù)測(cè)情況)?,F(xiàn)在我們開始編譯模型。

最后一步,我們要訓(xùn)練模型,并且用驗(yàn)證集檢測(cè)它在陌生圖像上的表現(xiàn):

可以看到在驗(yàn)證集上的表現(xiàn)很不錯(cuò),精確度達(dá)到85%。這就是我們?nèi)绾卧谝曨l數(shù)據(jù)上訓(xùn)練模型,再對(duì)每一幀作出預(yù)測(cè)的步驟。

下面,我將計(jì)算湯姆和杰瑞在新視頻中的出鏡時(shí)間。

計(jì)算出鏡時(shí)間——一種簡(jiǎn)單的解決方案

首先下載我們要用到的視頻。一旦完成,可以從中提取幀:

從新視頻中提取幀之后,我們就要下載test.csv文件,它包含每個(gè)提取出的幀的名字:

接著,我們將導(dǎo)入用于測(cè)試的圖片,然后針對(duì)之前提到的預(yù)訓(xùn)練模型重新修改尺寸:

接著,我們還要對(duì)這些圖片進(jìn)行調(diào)整,就像之前處理訓(xùn)練圖片那樣:

由于我們之前訓(xùn)練了模型,就可以用它做出預(yù)測(cè)了。

第四步:對(duì)剩余圖像進(jìn)行預(yù)測(cè)

第五步:計(jì)算湯姆和杰瑞的出鏡時(shí)間

剛剛我們規(guī)定了1代表杰瑞,2代表湯姆,這樣就可以用上述的預(yù)測(cè)來計(jì)算兩個(gè)角色的出鏡時(shí)長(zhǎng)了:

結(jié)果如上。

我的收獲

為了完成這一項(xiàng)目,我遇到了很多問題。下面是我遇到的一些挑戰(zhàn)及做出的應(yīng)對(duì)對(duì)策。

首先,我嘗試在沒有刪除最頂層的情況下使用預(yù)訓(xùn)練模型,結(jié)果并不理想。原因可能是由于我們的模型之前沒有在動(dòng)畫片上接受訓(xùn)練。為了解決這個(gè)問題,我重新用圖片訓(xùn)練模型,結(jié)果好了很多。

但是盡管用帶有標(biāo)記的圖片訓(xùn)練,精確度仍然不理想。模型在訓(xùn)練圖像上表現(xiàn)得并不好。所以,我試著增加圖層數(shù)量。這種做法結(jié)果不錯(cuò),但訓(xùn)練和驗(yàn)證精度之間并不對(duì)應(yīng)。模型出現(xiàn)了過度擬合,它在陌生數(shù)據(jù)上表現(xiàn)得也不好。所以我在密集層之后增加了Dropout層,這樣就解決了。

我注意到,湯姆的出鏡時(shí)間更長(zhǎng),所以模型得出的很多結(jié)論都是湯姆。為了讓模型平衡預(yù)測(cè),我用了sklearn.utils.classweight模塊中的computeclass_weight( )函數(shù)。它在數(shù)值計(jì)數(shù)較低的類別中分配了更高的權(quán)重,在較高的數(shù)值計(jì)數(shù)中分配較低權(quán)重。

另外,我還用Model Checkpoint保存了最佳模型。

最終,我們?cè)隍?yàn)證數(shù)據(jù)上達(dá)到了88%左右的結(jié)果,在測(cè)試數(shù)據(jù)上達(dá)到了64%的精確度結(jié)果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 自動(dòng)識(shí)別
    +關(guān)注

    關(guān)注

    3

    文章

    216

    瀏覽量

    22807
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4768

    瀏覽量

    84378
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5466

    瀏覽量

    120891

原文標(biāo)題:教程 | 計(jì)算任意視頻中各人物的出鏡時(shí)間(附Python實(shí)現(xiàn))

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Tricore MCU是否能在特定時(shí)序下識(shí)別連接了OCDS?

    我使用的是 Tricore TC37x 和 TC36x。 據(jù)我所知,當(dāng)連接 OCDS 調(diào)試器時(shí),Tricore 會(huì)暫停其看門狗定時(shí)器。 我想知道的是,Tricore MCU 是否能在特定時(shí)
    發(fā)表于 07-05 07:48

    自動(dòng)識(shí)別事件類別的中文事件抽取技術(shù)研究

    【作者】:許紅磊;陳錦秀;周昌樂;林如琦;楊肖方;【來源】:《心智與計(jì)算》2010年01期【摘要】:本文提出一種新的中文事件抽取自動(dòng)識(shí)別事件類別的模型,即:基于事件實(shí)例句子的分類
    發(fā)表于 04-24 09:55

    一種目標(biāo)自動(dòng)識(shí)別與跟蹤算法研究

    一種目標(biāo)自動(dòng)識(shí)別與跟蹤算法研究
    發(fā)表于 06-30 11:31

    DAQ測(cè)量規(guī)定時(shí)間內(nèi)的采集次數(shù)

    老師給舉了個(gè)例子,說是就像測(cè)試規(guī)定時(shí)間內(nèi)電燈開關(guān)的次數(shù)。這個(gè)課題的題目是壽命實(shí)驗(yàn),用的NI采集卡,采集對(duì)象是電壓,雙通道給的要求就是:用戶給出一個(gè)時(shí)間,測(cè)量在此時(shí)間內(nèi)雙通道的采集次數(shù)我的想法是,這個(gè)
    發(fā)表于 12-17 12:17

    一段時(shí)間內(nèi)數(shù)據(jù)的和

    每秒出個(gè)隨機(jī)數(shù),如何求10秒時(shí)間內(nèi)的數(shù)據(jù)總和
    發(fā)表于 08-03 18:19

    請(qǐng)問CC3000是否套機(jī)制,在一定時(shí)間內(nèi)套接字未進(jìn)行通信,會(huì)自動(dòng)關(guān)閉?

    ]820√[/tr]930√[/tr]1040√[/tr]1150√[/tr][td]1260Xcc3000 send函數(shù)直阻塞 客戶端recv函數(shù)返回 0猜測(cè):CC3000是否
    發(fā)表于 06-07 00:50

    為什么Type-C接口能在時(shí)間內(nèi)迅速取代Micro USB接口

    Type-C是近幾年大規(guī)模普及的充電接口,目前所發(fā)布的手機(jī)基本上都是該接口,而原來的Micro USB接口也逐漸減少使用,那為什么Type-C接口能在時(shí)間內(nèi)迅速取代Micro USB接口?筆者
    發(fā)表于 09-14 07:34

    如何統(tǒng)計(jì)光電編碼器一定時(shí)間內(nèi)的脈沖數(shù)目

    光電編碼器的結(jié)構(gòu)是由哪些部分組成的?如何統(tǒng)計(jì)光電編碼器一定時(shí)間內(nèi)的脈沖數(shù)目哪幾種方法?
    發(fā)表于 11-19 07:21

    如何點(diǎn)亮某個(gè)LED?如何檢測(cè)按鍵是否按下

    規(guī)定時(shí)間內(nèi)沒有按下,則減命,點(diǎn)亮下個(gè)LED。??那么如何點(diǎn)亮某個(gè)LED?如何檢測(cè)按鍵是否按下???我選擇了
    發(fā)表于 01-06 06:23

    一種改進(jìn)的步態(tài)識(shí)別方法

    步態(tài)識(shí)別通過人體走路的姿勢(shì)來識(shí)別人的身份。近年來,步態(tài)作為一種生物特征識(shí)別技術(shù)備受計(jì)算機(jī)視覺研究者的關(guān)注。對(duì)某個(gè)人
    發(fā)表于 04-01 08:47 ?20次下載

    一種視頻特定人物檢測(cè)方法

    為實(shí)現(xiàn)視頻特定人物檢測(cè),提出了一種兩階段檢測(cè)方法,即基于穩(wěn)健哈希簽名的流級(jí)檢測(cè)和基于子圖局部特征的文件級(jí)檢測(cè)。第階段利用簽名快速發(fā)現(xiàn)與查詢圖像相似度較高的關(guān)鍵幀,第二階段采用人臉子
    發(fā)表于 03-05 16:38 ?1次下載

    基于視頻深度學(xué)習(xí)的時(shí)空雙流人物動(dòng)作識(shí)別模型

    深度學(xué)習(xí)被運(yùn)用于圖片分類、人物臉部識(shí)別人物位置預(yù)測(cè)等識(shí)別領(lǐng)域。視頻人物動(dòng)作
    發(fā)表于 04-17 10:46 ?0次下載
    基于<b class='flag-5'>視頻</b>深度學(xué)習(xí)的時(shí)空雙流<b class='flag-5'>人物</b>動(dòng)作<b class='flag-5'>識(shí)別</b><b class='flag-5'>模型</b>

    谷歌推出視頻智能API 自動(dòng)識(shí)別物體

    該名為視頻智能(Video Intelligence)的API將可以讓開發(fā)者開發(fā)能夠自動(dòng)識(shí)別視頻的物體的應(yīng)用程序。到目前為止,多數(shù)類似的在云端提供的圖像
    發(fā)表于 05-05 05:52 ?2648次閱讀

    電力電容器為什么不允許短時(shí)間內(nèi)過電壓運(yùn)行

    在電力系統(tǒng),電容器是一種重要的電氣設(shè)備,常用于提高功率因數(shù)、改善電網(wǎng)穩(wěn)定性等方面。然而,電容器作為一種電壓敏感的元件,對(duì)于電壓波動(dòng)非常敏感,特別是在短時(shí)間內(nèi)的過電壓情況下,可能引發(fā)嚴(yán)
    的頭像 發(fā)表于 02-26 14:30 ?800次閱讀

    水位自動(dòng)識(shí)別攝像機(jī)

    隨著科技的不斷發(fā)展,水位自動(dòng)識(shí)別攝像機(jī)作為一種智能技術(shù)產(chǎn)品,正在逐漸應(yīng)用于各種領(lǐng)域,為監(jiān)測(cè)水位提供了更加便捷、準(zhǔn)確的方法。這種攝像機(jī)可以自動(dòng)識(shí)別水位的高低,實(shí)時(shí)監(jiān)測(cè)水域情況,為防洪排澇、水資源
    的頭像 發(fā)表于 07-31 10:34 ?302次閱讀
    水位<b class='flag-5'>自動(dòng)識(shí)別</b>攝像機(jī)