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