自监督学习在计算机视觉中的应用
作者&編輯:李中梁
自監(jiān)督學(xué)習(xí)介紹
對(duì)于預(yù)訓(xùn)練技術(shù)大家一定不陌生,在訓(xùn)練我們的深度學(xué)習(xí)模型時(shí),我們一般會(huì)選擇一個(gè)預(yù)先訓(xùn)練好的模型,并對(duì)其進(jìn)行微調(diào)得到想要的模型。如果從隨機(jī)權(quán)重開始,意味著需要花費(fèi)大量的數(shù)據(jù)和時(shí)間進(jìn)行訓(xùn)練。
那么,如果在你的領(lǐng)域中沒有預(yù)訓(xùn)練模型,該怎么辦呢?例如,在醫(yī)學(xué)圖像領(lǐng)域,很少有預(yù)先訓(xùn)練過(guò)的模型。最近發(fā)表的一篇有趣的論文《Transfusion: Understanding Transfer Learning for Medical Imaging》研究了這個(gè)問題,并發(fā)現(xiàn)即使使用來(lái)自預(yù)先訓(xùn)練過(guò)的ImageNet模型的幾個(gè)早期層,也可以提高醫(yī)學(xué)圖像模型的訓(xùn)練速度和最終準(zhǔn)確性。因此,您應(yīng)該使用一個(gè)通用的預(yù)先訓(xùn)練的模型,即使它不屬于您正在處理的問題的領(lǐng)域。
然而,正如本文所指出的,將ImageNet預(yù)訓(xùn)練模型應(yīng)用于醫(yī)學(xué)成像時(shí),其改進(jìn)程度并不大。我們想要模型工作更好,但不需要大量的數(shù)據(jù),秘訣就是“自監(jiān)督學(xué)習(xí)”。在自監(jiān)督學(xué)習(xí)中,標(biāo)簽來(lái)自數(shù)據(jù),而不需要單獨(dú)的外部標(biāo)簽(外部標(biāo)簽就是指我們手工標(biāo)注的標(biāo)簽)。
這個(gè)想法有著悠久的歷史,早在1989年,Jurgen Schmidhuber就在他1989年(甚至更早)的論文《Making the World Differentiable》中討論過(guò)。到1994年,這個(gè)術(shù)語(yǔ)還被用來(lái)涵蓋一種相關(guān)的方法,即使用一種模態(tài)作為另一種模態(tài)的標(biāo)簽,例如論文Learning Classification with Unlabeled Data,該論文使用音頻數(shù)據(jù)作為標(biāo)簽,使用視頻數(shù)據(jù)作為預(yù)測(cè)任務(wù)。例如下面這個(gè)例子:
聽到“哞哞”聲和看到奶牛往往同時(shí)出現(xiàn)
論文《Universal Language Model Fine-tuning for Text Classification》中也研究了自監(jiān)督學(xué)習(xí)對(duì)文本分類任務(wù)的效果。預(yù)訓(xùn)練模型的任務(wù)是預(yù)測(cè)句子中的下一個(gè)單詞。我們并不一定對(duì)語(yǔ)言模型本身感興趣,但事實(shí)證明,能夠完成這一任務(wù)的模型必須在訓(xùn)練過(guò)程中了解語(yǔ)言的本質(zhì),甚至“了解”一點(diǎn)世界。當(dāng)我們把這個(gè)預(yù)先訓(xùn)練好的語(yǔ)言模型,fine-tune到另一個(gè)任務(wù)中,比如情緒分析,結(jié)果是我們可以用很少的數(shù)據(jù)很快得到最新的結(jié)果。
在計(jì)算機(jī)視覺任務(wù)中應(yīng)用無(wú)監(jiān)督學(xué)習(xí)
在自監(jiān)督學(xué)習(xí)中,我們把用于預(yù)訓(xùn)練的任務(wù)稱為“pretext task”,把用于fine-tune的任務(wù)稱為“downstream task”。盡管自監(jiān)督學(xué)習(xí)在當(dāng)今的自然語(yǔ)言處理中幾乎被普遍使用,但考慮到它的工作效果,它在計(jì)算機(jī)視覺模型中的使用要比我們預(yù)期的少得多。也許這是因?yàn)镮mageNet的預(yù)訓(xùn)練已經(jīng)獲得了廣泛的成功,所以像醫(yī)學(xué)成像這樣的社區(qū)中的人們可能不太熟悉自監(jiān)督學(xué)習(xí)的必要性。在這篇文章的其余部分,我將努力提供一個(gè)簡(jiǎn)短的自監(jiān)督學(xué)習(xí)在計(jì)算機(jī)視覺中的應(yīng)用介紹,希望這可能有助于更多的人利用這一非常有用的技術(shù)。
在計(jì)算機(jī)視覺中使用自我監(jiān)督學(xué)習(xí)最需要回答的問題是:“你應(yīng)該使用什么pretext task?”“其實(shí)你有很多選擇。下面展示了一些相關(guān)的工作。
Colorization
著色任務(wù)就是輸入一張灰度圖,讓網(wǎng)絡(luò)預(yù)測(cè)其彩色圖的色彩分布。由于原始圖片是彩色的的,所以可以自動(dòng)構(gòu)建好輸入和輸出標(biāo)簽對(duì)。
相關(guān)工作有:
《Colorful Image Colorization》
《Learning Representations for Automatic Colorization》
《Tracking Emerges by Colorizing Videos》Placing image patches in the right place
對(duì)一張圖像分塊。例如將其分成九宮格,輸入中心小塊周圍的任意一小塊,讓網(wǎng)絡(luò)預(yù)測(cè)其相對(duì)中心小塊的位置,這是是一個(gè)典型的8分類問題,其學(xué)習(xí)到的特征可以用于下游任務(wù)。可以參考以下工作:
《Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles》
《Unsupervised Visual Representation Learning by Context Prediction》Placing frames in the right order
既然圖像中有對(duì)某一個(gè)patch的位置進(jìn)行預(yù)測(cè),那么視頻中就可以對(duì)某一幀的位置進(jìn)行預(yù)測(cè):
《Unsupervised Representation Learning by Sorting Sequences》
《Shuffle and Learn: Unsupervised Learning using Temporal Order Verification》Classify corrupted images
在《Self-Supervised Feature Learning by Learning to Spot Artifacts》這篇論文中,pretext task 是對(duì)損壞的圖像進(jìn)行分類,注意到綠色的圖像沒有被破壞,紅色的圖像被破壞。同時(shí),過(guò)于簡(jiǎn)單的破壞機(jī)制可能會(huì)導(dǎo)致任務(wù)過(guò)于簡(jiǎn)單,并且不會(huì)產(chǎn)生有用的特性。上面的文章使用了一種聰明的方法,它破壞了自動(dòng)編碼器的特性,然后試圖重建它們,使其成為一個(gè)具有挑戰(zhàn)性的任務(wù)。
選擇pretext task
如何選擇合適的pretext task呢?您選擇的pretext task必須是這樣的:如果解決了這些任務(wù),就需要提取這些數(shù)據(jù)的特征,而這些特征也是解決downstream task所需要的。例如,大家經(jīng)通常使用autoencoder作為pretext task。這個(gè)模型可以將一個(gè)輸入圖像轉(zhuǎn)換成一個(gè)大大簡(jiǎn)化的形式,然后將其轉(zhuǎn)換回盡可能接近原始圖像的內(nèi)容。它有效地利用壓縮作為的任務(wù)。然而,解決這個(gè)問題不僅需要重新生成原始圖像的內(nèi)容,還需要重新生成原始圖像中的任何噪聲。因此,如果您的downstream task是您想要生成更高質(zhì)量的圖像,那么這將是一個(gè)糟糕的pretext task的選擇。
你還應(yīng)該確保借口任務(wù)是人類可以做的事情。例如,您可以使用生成視頻下幾幀的問題作為pretext task。但是如果你試圖生成的視頻幀太靠后,那么它可能是一個(gè)完全不同的場(chǎng)景的一部分,因此沒有模型能夠自動(dòng)生成它。
微調(diào) downstream tasks
一旦你用一個(gè)pretext task預(yù)先訓(xùn)練了您的模型,你就可以繼續(xù)進(jìn)行微調(diào)了。在這一點(diǎn)上,你應(yīng)該把這當(dāng)作一個(gè)遷移學(xué)習(xí)的問題,因此你應(yīng)該小心不要損失你預(yù)先訓(xùn)練的權(quán)重。可以借鑒ULMFiT論文中討論的內(nèi)容,例如逐步解凍權(quán)重、有區(qū)別的學(xué)習(xí)率和單周期訓(xùn)練。如果您正在使用fastai2,那么您可以簡(jiǎn)單地調(diào)用fine_tune方法來(lái)完成這些工作。
總的來(lái)說(shuō),我建議不要花太多時(shí)間來(lái)創(chuàng)建完美的pretext task模型,而應(yīng)該盡可能地快速、簡(jiǎn)單地構(gòu)建里所能構(gòu)建的任何東西。然后你就可以知道它是否適合你的下游任務(wù)。通常情況下,你并不需要一個(gè)特別復(fù)雜的pretext task來(lái)完成你的下游任務(wù)。
還需要注意的是,你可以進(jìn)行多輪的自我監(jiān)督前訓(xùn)練和有規(guī)律的預(yù)訓(xùn)練。例如,你可以使用上述方法中的一種來(lái)進(jìn)行初始的與預(yù)訓(xùn)練,然后進(jìn)行細(xì)分以進(jìn)行額外的預(yù)訓(xùn)練,最后再訓(xùn)練你的downstream任務(wù)。你也可以在一個(gè)或兩個(gè)階段同時(shí)做多個(gè)任務(wù)(多任務(wù)學(xué)習(xí))。先做最簡(jiǎn)單的事情,然后只有在您確定確實(shí)需要它時(shí)才增加復(fù)雜性。
一致性損失
最后補(bǔ)充講解一下Consistency loss(一致性損失)。
在自監(jiān)督訓(xùn)練的基礎(chǔ)上,你可以增加一個(gè)非常有用的技巧,這在NLP中被稱為“一致性損失”,在計(jì)算機(jī)視覺中被稱為“噪聲對(duì)比估計(jì)”。基本思想是這樣的:你的pretext task 是一些損壞你數(shù)據(jù)的事情,比如模糊部分,旋轉(zhuǎn)它,移動(dòng)補(bǔ)丁,或者(在NLP中)改變單詞或者把一個(gè)句子翻譯成外語(yǔ)然后再翻譯回來(lái)。在這種情況下,你都希望原始數(shù)據(jù)和“混亂”數(shù)據(jù)在pretext task中給出相同的預(yù)測(cè),并在中間層有相同的表達(dá)。你也希望同樣的東西,當(dāng)以兩種不同的方式“搞砸”時(shí)(例如,一個(gè)圖像旋轉(zhuǎn)了兩個(gè)不同的量),也應(yīng)該有相同的一致表示。
因此,我們?cè)趌oss函數(shù)中添加了一些內(nèi)容,以懲罰為相同數(shù)據(jù)的不同版本(比如旋轉(zhuǎn)了)獲取不同的預(yù)測(cè)的訓(xùn)練。這張圖來(lái)自谷歌的文章《 Advancing Semi-supervised Learning with Unsupervised Data Augmentation.》,提出了半監(jiān)督學(xué)習(xí)和非監(jiān)督的數(shù)據(jù)增強(qiáng)。
說(shuō)這是“有效的”將是一個(gè)巨大的輕描淡寫…例如,在谷歌的文章中討論的方法完全和絕對(duì)打破了我們之前ULMFiT文本分類的結(jié)果。他們使用的標(biāo)簽數(shù)據(jù)少了1000倍!
Facebook人工智能最近發(fā)表了兩篇論文,在計(jì)算機(jī)視覺環(huán)境中使用了這一想法:《Self-Supervised Learning of Pretext-Invariant Representations》和《https://www.fast.ai/2020/01/13/self_supervised》。就像NLP中的谷歌論文一樣,這些方法超越了以前最先進(jìn)的方法,并且需要更少的數(shù)據(jù)。
很可能你可以為你選擇的幾乎任何的pretext task來(lái)添加一致性損失。既然它是如此有效,我強(qiáng)烈建議你嘗試一下!
參考文獻(xiàn)
- https://www.fast.ai/2020/01/13/self_supervised/
好消息!
小白學(xué)視覺知識(shí)星球
開始面向外開放啦👇👇👇
下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講 在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講 在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。交流群歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~總結(jié)
以上是生活随笔為你收集整理的自监督学习在计算机视觉中的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux d14 Apache、 Vs
- 下一篇: TLV2333IDR的工作原理?