1. 程式人生 > >如何用深度學習玩轉影象處理

如何用深度學習玩轉影象處理

本文轉自知乎專欄:https://zhuanlan.zhihu.com/p/32177354

一方面為做資料整理用,方便後期回顧,另一方面轉需

--------------------------------------------------

第一個重境界: 影象識別

如果你開始瞭解深度學習的影象處理, 你接觸的第一個任務一定是影象識別 :比如把你的愛貓輸入到一個普通的CNN網路裡, 看看它是喵咪還是狗狗。

一個最普通的CNN, 比如像這樣幾層的CNN鼻祖Lenet, 如果你有不錯的資料集(比如kaggle貓狗大戰)都可以給出一個還差強人意的分類結果(80%多準確率), 雖然不是太高。

當然,如果你再加上對特定問題的一些知識, 也可以順便識別個人臉啥的,開個startup叫face 減減什麼:

會玩的, 也可以順別識別個豬臉什麼噠(我覺得長得都一樣哦), 這樣搞出來每個豬的身份, 對於高質量豬肉的銷售, 真是大有裨益的。

或者看看植物都有個什麼病害什麼的,像這樣不同的病斑, 人都懶得看的, 它可以給你看出來。 植物保護的人可以拿著手機下田了。

Ronneberger, Olaf, Philipp Fischer, and Thomas Brox. "U-net: Convolutional networks for biomedical image segmentation." International Conference on Medical Image Computing and Computer-Assisted Intervention. Springer, Cham, 2015.

雖然植物保護真的很好用,分類問做就了還真是挺無聊的。

我們進化的方向,也就是用更高階的網路結構取得更好的準確率,比如像下圖這樣的殘差網路(已經可以在貓狗資料集上達到99.5%以上準確率)。分類做好了你會有一種成為深度學習大師,拿著一把斧子眼鏡裡都是釘子的幻覺。 分類問題之所以簡單, 一要歸功於大量標記的影象, 二是分類是一個邊界非常分明的問題, 即使機器不知道什麼是貓什麼是狗, 看出點區別還是挺容易的, 如果你給機器幾千幾萬類區分, 機器的能力通過就下降了(再複雜的網路,在imagenet那樣分1000個類的問題裡,都很難搞到超過80%的準確率)。

He, Kaiming, et al. "Identity mappings in deep residual networks." European Conference on Computer Vision. Springer International Publishing, 2016.

第二重境界 : 物體檢測

很快你發現,分類的技能在大部分的現實生活裡並沒有鳥用。因為現實中的任務啊, 往往是這樣的:

或者這樣的:

那麼多東西在一起,你拿貓狗大頭照訓練的分類網路一下子就亂了陣腳。 即使是你一個圖片裡有一個貓還有一個狗,甚至給貓加點噪聲,都可以使你的分類網路分寸大亂。

現實中, 哪有那麼多圖片, 一個圖裡就是一個貓或者美女的大圖,更多的時候, 一張圖片裡的東西, 那是多多的, 亂亂的,沒有什麼章法可言的, 你需要自己做一個框, 把你所需要看的目標給框出來, 然後, 看看這些東西是什麼 。

於是你來到機器視覺的下一層挑戰 - 目標檢測(從大圖中框出目標物體並識別), 隨之而來的是一個新的網路架構, 又被稱為R - CNN, 圖片檢測網路 , 這個網路不僅可以告訴你分類,還可以告訴你目標物體的座標, 即使圖片裡有很多目標物體, 也一一給你找出來。

Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal networks." Advances in neural information processing systems. 2015.

萬軍斬你首級那是槓槓的,在眾多路人甲中識別嫌疑犯,也是輕而易舉, 安防的人聽著要按捺不住了。

今年出現的YOLO演算法更是實現了快速實時的物體檢測,你一路走過就告訴你視線裡都有什麼在哪裡,要知道這在無人駕駛裡是何等的利器。

YOLO快速檢測法Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

當然, 到這裡你依然最終會覺得無聊, 即使網路可以已經很複雜, 不過是一個CNN網路(推薦區域),在加上一層CNN網路做分類和迴歸。 能不能幹點別的?

第三重境界 : 影象切割

啊哈, 這就來到了第三個關卡, 你不僅需要把圖片中邊邊角角的物體給檢測出來, 你還要做這麼一個猛料的工作, 就是把它從圖片中扣出來。 要知道, 剛出生的嬰兒分不清物體的邊界, 比如桌上有蘋果這種事, 什麼是桌子,什麼是蘋果,為什麼蘋果不是佔在桌子上的? 所以, 網路能不能把物體從一個圖裡摳出來, 事關它是否真的像人一樣把握了視覺的本質。 這也算是對它的某種“圖靈測試” 。 而把這個問題簡化,我們無非是在原先圖片上生成出一個原圖的“mask”, 面具,有點像phtoshop裡的蒙版的東西。

所謂摳圖

Drozdzal, Michal, et al. "The importance of skip connections in biomedical image segmentation." International Workshop on Large-Scale Annotation of Biomedical Data and Expert Label Synthesis. Springer International Publishing, 2016.

注意,這個任務裡,我們是要從一個圖片裡得到另一個圖片哦! 生成的面具是另一個圖片, 這時候,所謂的U型網路粉墨登場,注意這是我們的第一個生成式的模型。 它的組成單元依然是卷積,但是卻加入了maxpooling的反過程升維取樣。

這個Segmentation任務, 作用不可小瞧哦, 尤其對於科研口的你, 比如現在私人衛星和無人機普及了,要不要去看看自己小區周圍的地貌, 看是不是隱藏了個金庫? 清清輸入, 衛星圖片一欄無餘。 哪裡有樹, 哪裡有水,哪裡有軍事基地,不需要人,全都給你摳出來。

如果你要數個細胞啥的 ,都是挺容易的,給它變成這樣的輪廓不就你得了。

第四重境界:

我們開始fashion起來, 如果你是淘寶服裝小店的老闆 ,想讓客戶輸入一張服裝的圖片,然後得到一組推薦的服裝, 來個以圖搜圖的功能怎麼搞呢? 注意啊,我可以從網路上爬一大堆圖出來,但是這些資料是沒有標註的。怎麼辦? 鐵哥告你還是有的搞,這個搞法,就是聚類。

鐵哥教你最簡單的一招聚類哦,那就是, 把圖片統統放進卷積網路,但是我們不提取分類,而只是提取一些網路中間層的特徵, 這些特徵有點像每個圖片的視覺二維碼,然後我們對這些二維碼做一個k-means聚類, 也會得到意想不到的效果。 為什麼要深度? 因為深度提取的特徵,那是與眾不同的。

然後以圖搜圖呢? 不過是找到同一聚類裡的其它圖片啊。

在聚類的基礎上, 就可以做個搜尋!

第五層境界 :

我們開始晉升為仰望星空的人, 之前那些分類賺錢的應用太無聊了。 機器視覺搞科學怎麼港? 作為一群仰望星空後觀察細胞的人,我們最常發現的是我們得到的天文或者細胞圖片的噪聲實在太大了, 這簡直沒法忍啊, 然後, 深度學習給了你一套降噪和恢復影象的方法。 一個叫auto-encoder的工具, 起到了很大的作用 , 刷的一下,影象就清楚了。

這還不是最酷炫的,那個應用了博弈理論的對抗學習, 也可以幫你謀殺噪點! 如果你會對抗所謂GAN, 也是一種影象生成的工具, 讓網路去掉噪聲的圖片,與沒有噪聲的自然圖片, 連卷積網路都判別不出來,對, 就是這樣!

Schawinski, Kevin, et al. "Generative adversarial networks recover features in astrophysical images of galaxies beyond the deconvolution limit." Monthly Notices of the Royal Astronomical Society: Letters 467.1 (2017): L110-L114.

第六重境界 :

在工業界賺夠了錢,科學也太nerd了, 我們來玩藝術思考哲學 ,第一招, 影象風格遷移,請見怎麼樣用深度學習取悅你的女朋友(有程式碼):

然而真正能玩好這一事項的,還是那個剛剛提過的對抗學習GAN, 比如大名鼎鼎的CycleGAN, 幾乎可以實現一種你自定義的“影象翻譯” 功能,而且你不用做標註哦, 拿出冬天和夏天的兩組圖片, 它會自動的在兩組圖片中找出對應來。

Zhu, Jun-Yan, et al. "Unpaired image-to-image translation using cycle-consistent adversarial networks." arXiv preprint arXiv:1703.10593 (2017).

第七重境界:

影象翻譯也懶的玩了, 你神經網路不是號稱能夠理解影象,看你來個無中生有,在噪聲裡生成圖片來?

對,依然是GAN,而且是最基礎的卷積GAN (DCGAN)就可以給你幹出來。

看看GAN所幻想的賓館情景, 你能想到是計算機做的圖嗎? 哈哈哈!

Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems. 2014.

寫到這裡, 我自己都覺得GAN是非常有前途的,有前途的,有前途的,以前我還以為只是好玩呢。

這裡展示的七級浮屠,也不過深度學習被人類discover的冰山一角, 醉臥沙場君莫笑, 古來征戰幾人回。

給你一個稍微清晰一些的大綱:


本文轉自知乎專欄:https://zhuanlan.zhihu.com/p/32177354

一方面為做資料整理用,方便後期回顧,另一方面轉需

--------------------------------------------------

第一個重境界: 影象識別

如果你開始瞭解深度學習的影象處理, 你接觸的第一個任務一定是影象識別 :比如把你的愛貓輸入到一個普通的CNN網路裡, 看看它是喵咪還是狗狗。

一個最普通的CNN, 比如像這樣幾層的CNN鼻祖Lenet, 如果你有不錯的資料集(比如kaggle貓狗大戰)都可以給出一個還差強人意的分類結果(80%多準確率), 雖然不是太高。

當然,如果你再加上對特定問題的一些知識, 也可以順便識別個人臉啥的,開個startup叫face 減減什麼:

會玩的, 也可以順別識別個豬臉什麼噠(我覺得長得都一樣哦), 這樣搞出來每個豬的身份, 對於高質量豬肉的銷售, 真是大有裨益的。

或者看看植物都有個什麼病害什麼的,像這樣不同的病斑, 人都懶得看的, 它可以給你看出來。 植物保護的人可以拿著手機下田了。

Ronneberger, Olaf, Philipp Fischer, and Thomas Brox. "U-net: Convolutional networks for biomedical image segmentation." International Conference on Medical Image Computing and Computer-Assisted Intervention. Springer, Cham, 2015.

雖然植物保護真的很好用,分類問做就了還真是挺無聊的。

我們進化的方向,也就是用更高階的網路結構取得更好的準確率,比如像下圖這樣的殘差網路(已經可以在貓狗資料集上達到99.5%以上準確率)。分類做好了你會有一種成為深度學習大師,拿著一把斧子眼鏡裡都是釘子的幻覺。 分類問題之所以簡單, 一要歸功於大量標記的影象, 二是分類是一個邊界非常分明的問題, 即使機器不知道什麼是貓什麼是狗, 看出點區別還是挺容易的, 如果你給機器幾千幾萬類區分, 機器的能力通過就下降了(再複雜的網路,在imagenet那樣分1000個類的問題裡,都很難搞到超過80%的準確率)。

He, Kaiming, et al. "Identity mappings in deep residual networks." European Conference on Computer Vision. Springer International Publishing, 2016.

第二重境界 : 物體檢測

很快你發現,分類的技能在大部分的現實生活裡並沒有鳥用。因為現實中的任務啊, 往往是這樣的:

或者這樣的:

那麼多東西在一起,你拿貓狗大頭照訓練的分類網路一下子就亂了陣腳。 即使是你一個圖片裡有一個貓還有一個狗,甚至給貓加點噪聲,都可以使你的分類網路分寸大亂。

現實中, 哪有那麼多圖片, 一個圖裡就是一個貓或者美女的大圖,更多的時候, 一張圖片裡的東西, 那是多多的, 亂亂的,沒有什麼章法可言的, 你需要自己做一個框, 把你所需要看的目標給框出來, 然後, 看看這些東西是什麼 。

於是你來到機器視覺的下一層挑戰 - 目標檢測(從大圖中框出目標物體並識別), 隨之而來的是一個新的網路架構, 又被稱為R - CNN, 圖片檢測網路 , 這個網路不僅可以告訴你分類,還可以告訴你目標物體的座標, 即使圖片裡有很多目標物體, 也一一給你找出來。

Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal networks." Advances in neural information processing systems. 2015.

萬軍斬你首級那是槓槓的,在眾多路人甲中識別嫌疑犯,也是輕而易舉, 安防的人聽著要按捺不住了。

今年出現的YOLO演算法更是實現了快速實時的物體檢測,你一路走過就告訴你視線裡都有什麼在哪裡,要知道這在無人駕駛裡是何等的利器。

YOLO快速檢測法Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

當然, 到這裡你依然最終會覺得無聊, 即使網路可以已經很複雜, 不過是一個CNN網路(推薦區域),在加上一層CNN網路做分類和迴歸。 能不能幹點別的?

第三重境界 : 影象切割

啊哈, 這就來到了第三個關卡, 你不僅需要把圖片中邊邊角角的物體給檢測出來, 你還要做這麼一個猛料的工作, 就是把它從圖片中扣出來。 要知道, 剛出生的嬰兒分不清物體的邊界, 比如桌上有蘋果這種事, 什麼是桌子,什麼是蘋果,為什麼蘋果不是佔在桌子上的? 所以, 網路能不能把物體從一個圖裡摳出來, 事關它是否真的像人一樣把握了視覺的本質。 這也算是對它的某種“圖靈測試” 。 而把這個問題簡化,我們無非是在原先圖片上生成出一個原圖的“mask”, 面具,有點像phtoshop裡的蒙版的東西。

所謂摳圖

Drozdzal, Michal, et al. "The importance of skip connections in biomedical image segmentation." International Workshop on Large-Scale Annotation of Biomedical Data and Expert Label Synthesis. Springer International Publishing, 2016.

注意,這個任務裡,我們是要從一個圖片裡得到另一個圖片哦! 生成的面具是另一個圖片, 這時候,所謂的U型網路粉墨登場,注意這是我們的第一個生成式的模型。 它的組成單元依然是卷積,但是卻加入了maxpooling的反過程升維取樣。

這個Segmentation任務, 作用不可小瞧哦, 尤其對於科研口的你, 比如現在私人衛星和無人機普及了,要不要去看看自己小區周圍的地貌, 看是不是隱藏了個金庫? 清清輸入, 衛星圖片一欄無餘。 哪裡有樹, 哪裡有水,哪裡有軍事基地,不需要人,全都給你摳出來。

如果你要數個細胞啥的 ,都是挺容易的,給它變成這樣的輪廓不就你得了。

第四重境界:

我們開始fashion起來, 如果你是淘寶服裝小店的老闆 ,想讓客戶輸入一張服裝的圖片,然後得到一組推薦的服裝, 來個以圖搜圖的功能怎麼搞呢? 注意啊,我可以從網路上爬一大堆圖出來,但是這些資料是沒有標註的。怎麼辦? 鐵哥告你還是有的搞,這個搞法,就是聚類。

鐵哥教你最簡單的一招聚類哦,那就是, 把圖片統統放進卷積網路,但是我們不提取分類,而只是提取一些網路中間層的特徵, 這些特徵有點像每個圖片的視覺二維碼,然後我們對這些二維碼做一個k-means聚類, 也會得到意想不到的效果。 為什麼要深度? 因為深度提取的特徵,那是與眾不同的。

然後以圖搜圖呢? 不過是找到同一聚類裡的其它圖片啊。

在聚類的基礎上, 就可以做個搜尋!

第五層境界 :

我們開始晉升為仰望星空的人, 之前那些分類賺錢的應用太無聊了。 機器視覺搞科學怎麼港? 作為一群仰望星空後觀察細胞的人,我們最常發現的是我們得到的天文或者細胞圖片的噪聲實在太大了, 這簡直沒法忍啊, 然後, 深度學習給了你一套降噪和恢復影象的方法。 一個叫auto-encoder的工具, 起到了很大的作用 , 刷的一下,影象就清楚了。

這還不是最酷炫的,那個應用了博弈理論的對抗學習, 也可以幫你謀殺噪點! 如果你會對抗所謂GAN, 也是一種影象生成的工具, 讓網路去掉噪聲的圖片,與沒有噪聲的自然圖片, 連卷積網路都判別不出來,對, 就是這樣!

Schawinski, Kevin, et al. "Generative adversarial networks recover features in astrophysical images of galaxies beyond the deconvolution limit." Monthly Notices of the Royal Astronomical Society: Letters 467.1 (2017): L110-L114.

第六重境界 :

在工業界賺夠了錢,科學也太nerd了, 我們來玩藝術思考哲學 ,第一招, 影象風格遷移,請見怎麼樣用深度學習取悅你的女朋友(有程式碼):

然而真正能玩好這一事項的,還是那個剛剛提過的對抗學習GAN, 比如大名鼎鼎的CycleGAN, 幾乎可以實現一種你自定義的“影象翻譯” 功能,而且你不用做標註哦, 拿出冬天和夏天的兩組圖片, 它會自動的在兩組圖片中找出對應來。

Zhu, Jun-Yan, et al. "Unpaired image-to-image translation using cycle-consistent adversarial networks." arXiv preprint arXiv:1703.10593 (2017).

第七重境界:

影象翻譯也懶的玩了, 你神經網路不是號稱能夠理解影象,看你來個無中生有,在噪聲裡生成圖片來?

對,依然是GAN,而且是最基礎的卷積GAN (DCGAN)就可以給你幹出來。

看看GAN所幻想的賓館情景, 你能想到是計算機做的圖嗎? 哈哈哈!

Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems. 2014.

寫到這裡, 我自己都覺得GAN是非常有前途的,有前途的,有前途的,以前我還以為只是好玩呢。

這裡展示的七級浮屠,也不過深度學習被人類discover的冰山一角, 醉臥沙場君莫笑, 古來征戰幾人回。

給你一個稍微清晰一些的大綱: