2019 第 40 篇,總第 64 篇文章
本文大約7000字,建議收藏閱讀
之前通過三篇文章簡單介紹了機器學習常用的幾種經典算法,當然也包括了目前很火的 CNNs 算法了
這些算法各有各的優缺點和適用的領域,了解熟悉它們是很有必要的,但如何應用它們還需要具體問題具體分析,而機器學習常見的應用方向,包括以下幾個:
計算機視覺(CV)
自然語言處理(NLP)
語音識別
推薦系統
廣告
等等
更詳細的可以參考之前推薦過的一個網站:
https://paperswithcode.com/sota
這個網站非常詳細劃分了 16 個大方向,包括總共 1081 個子方向。如果想進入機器學習領域,首先還是選擇一個方向領域,然後了解和熟悉該方向領域內所需要的算法,特定的解決技巧等。
當然,這篇文章主要介紹的是計算機視覺的應用,計算機視覺也算是這 16 個方向裡面最熱門也是發展最成熟的其中一個方向了。
計算機視覺可以分為以下幾大方向:
圖像分類
目標檢測
圖像分割
風格遷移
圖像重構
超解析度
圖像生成
人臉
其他
雖然這裡說的都是圖像,但其實視頻也屬於計算機視覺的研究對象,所以還有視頻分類、檢測、生成,以及追蹤,但篇幅的關係,以及目前研究工作方向也集中於圖像,暫時就不介紹視頻方面應用的內容。
每個方向會簡單介紹該方向需要解決的問題,以及推薦一些 Github 項目、論文或者是綜述文章。
因為公眾號不支持外鏈,所以文中部分連結無法直接點開,可以點擊文末「閱讀原文」,查看原文來直接跳轉連結。
圖像分類,也可以稱為圖像識別,顧名思義,就是辨別圖像是什麼,或者說圖像中的物體屬於什麼類別。
圖像分類根據不同分類標準可以劃分為很多種子方向。
比如根據類別標籤,可以劃分為:
根據分類對象,可以劃分為:
根據類別數量,還可以分為:
推薦的 Github 項目如下:
Awesome Image Classification
awesome-few-shot-learning
awesome-zero-shot-learning
論文:
ImageNet Classification With Deep Convolutional Neural Networks, 2012
Very Deep Convolutional Networks for Large-Scale Image Recognition, 2014.
Going Deeper with Convolutions, 2015.
Deep Residual Learning for Image Recognition, 2015.
Inceptionv4 && Inception-ResNetv2,2016
RexNext,2016
NasNet,2017
ShuffleNetV2,2018
SKNet,2019
文章:
常用的圖像分類數據集:
Mnist:手寫數字數據集,包含 60000 張訓練集和 10000 張測試集。
Cifar:分為 Cifar10 和 Cifar100。前者包含 60000 張圖片,總共10個類別,每類 6000 張圖片。後者是 100 個類別,每個類別 600 張圖片。類別包括貓狗鳥等動物、飛機汽車船等交通工具。
Imagenet:應該是目前最大的開源圖像數據集,包含 1500 萬張圖片,2.2 萬個類別。
2. 目標檢測(Object Detection)目標檢測通常包含兩方面的工作,首先是找到目標,然後就是識別目標。
目標檢測可以分為單物體檢測和多物體檢測,即圖像中目標的數量,例子如下所示:
以上兩個例子是來自 VOC 2012 數據集的圖片,實際上還有更多更複雜的場景,如 MS COCO 數據集的圖片例子:
目標檢測領域,其實有很多方法,其發展史如下所示:
從上圖可以知道有幾個方法系列:
R-CNN 系列,從 R-CNN 到 Fast R-CNN、Faster R-CNN,Mask R-CNN;
YOLO 系列,從 v1 到 2018 年的 v3 版本
Github 項目:
awesome-object-detection
https://github.com/facebookresearch/Detectron
https://github.com/jwyang/faster-rcnn.pytorch
論文:
R-CNN,2013
Fast R-CNN,2015
Faster R-CNN,2015
Mask R-CNN,2017
YOLO,2015
YOLOv2,2016
YOLOv3,2018
SSD,2015
FPN,2016
文章:
常用的數據集:
3. 圖像分割(Object Segmentation)圖像分割是基於圖像檢測的,它需要檢測到目標物體,然後把物體分割出來。
圖像分割可以分為三種:
普通分割:將不同分屬於不同物體的像素區域分開,比如前景區域和後景區域的分割;
語義分割:普通分割的基礎上,在像素級別上的分類,屬於同一類的像素都要被歸為一類,比如分割出不同類別的物體;
實例分割:語義分割的基礎上,分割出每個實例物體,比如對圖片中的多隻狗都分割出來,識別出來它們是不同的個體,不僅僅是屬於哪個類別。
一個圖形分割的例子如下所示,下圖就是一個實例分割的例子,用不同的顏色表示不同的實例。
Github:
論文:
U-Net,2015
DeepLab,2016
FCN,2016
文章:
4. 風格遷移(Style Transfer)風格遷移是指將一個領域或者幾張圖片的風格應用到其他領域或者圖片上。比如將抽象派的風格應用到寫實派的圖片上。
一個風格遷移的例子如下, 圖 A 是原圖,後面的 B-F 五幅圖都是根據不同風格得到的結果。
一般數據集採用常用的數據集加一些著名的藝術畫作品,比如梵谷、畢卡索等。
Github:
A simple, concise tensorflow implementation of style transfer (neural style)
TensorFlow (Python API) implementation of Neural Style
TensorFlow CNN for fast style transfer
論文:
A Neural Algorithm of Artistic Style,2015
Image Style Transfer Using Convolutional Neural Networks, 2016
Deep Photo Style Transfer,2017
文章:
5. 圖像重構(Image Reconstruction)圖像重構,也稱為圖像修復(Image Inpainting),其目的就是修復圖像中缺失的地方,比如可以用於修復一些老的有損壞的黑白照片和影片。通常會採用常用的數據集,然後人為製造圖片中需要修復的地方。
一個修復的例子如下所示,總共是四張需要修復的圖片,例子來自論文"Image Inpainting for Irregular Holes Using Partial Convolutions"。
論文:
Pixel Recurrent Neural Networks, 2016.
Image Inpainting for Irregular Holes Using Partial Convolutions, 2018.
Highly Scalable Image Reconstruction using Deep Neural Networks with Bandpass Filtering, 2018.
Generative Image Inpainting with Contextual Attention, 2018
Free-Form Image Inpainting with Gated Convolution,2018
EdgeConnect: Generative Image Inpainting with Adversarial Edge Learning,2019
Github:
Awesome-Image-Inpainting
generative_inpainting
edge-connect
文章:
6. 超解析度(Super-Resolution)超解析度是指生成一個比原圖解析度更高、細節更清晰的任務。一個例子如下圖所示,圖例來自論文"Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network"。
通常超解析度的模型也可以用於解決圖像恢復(image restoration)和修復(inpainting),因為它們都是解決比較關聯的問題。
常用的數據集主要是採用現有的數據集,並生成解析度較低的圖片用於模型的訓練。
Github:
論文:
Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network, 2017.
Deep Laplacian Pyramid Networks for Fast and Accurate Super-Resolution, 2017.
Deep Image Prior, 2017.
ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks,2018
文章:
7. 圖像生成(Image Synthesis)圖像生成是根據一張圖片生成修改部分區域的圖片或者是全新的圖片的任務。這個應用最近幾年快速發展,主要原因也是由於 GANs 是最近幾年非常熱門的研究方向,而圖像生成就是 GANs 的一大應用。
一個圖像生成例子如下:
Githubs:
論文:
Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks, 2015.
Conditional Image Generation with PixelCNN Decoders, 2016.
Pix2Pix--Image-to-image translation with conditional adversarial networks,2016
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017.
bigGAN--LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS,2018
文章:
8. 人臉人臉方面的應用,包括人臉識別、人臉檢測、人臉匹配、人臉對齊等等,這應該是計算機視覺方面最熱門也是發展最成熟的應用,而且已經比較廣泛的應用在各種安全、身份認證等,比如人臉支付、人臉解鎖。
這裡就直接推薦幾個 Github 項目、論文、文章和數據集
Github:
論文:
FaceNet: A Unified Embedding for Face Recognition and Clustering,2015
Face Recognition: From Traditional to Deep Learning Methods,2018
MSFD:Multi-Scale Receptive Field Face Detector,2018
DSFD: Dual Shot Face Detector,2018
Neural Architecture Search for Deep Face Recognition,2019
文章:
數據集:
LFW
CelebA
MS-Celeb-1M
CASIA-WebFace
FaceScrub
MegaFace
10. 其他實際上還有其他很多方向,包括:
Show and Tell: A Neural Image Caption Generator, 2014.
AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks, 2017.
Colorful Image Colorization, 2016.
Cascaded Pyramid Network for Multi-Person Pose Estimation, 2017
還有包括 3D、視頻、醫學圖像、問答、自動駕駛、追蹤等等方向,具體可以查看下面這個網站:
https://paperswithcode.com/area/computer-vision
而如果認定一個方向,想開始學習這方面的內容,首先推薦可以先查找中文方面的綜述文章或者論文,當然如果英語閱讀能力比較好的,也可以查看英文的綜述文章,通過看綜述來查看下自己需要閱讀的論文,論文推薦先看最近3-5年內的論文,太過久遠的論文,除非需要更加深入了解某個算法,否則都不太需要閱讀。
此外,就是需要結合實際項目來加深對算法的了解,通過跑下代碼,也可以更好了解某個算法具體是如何實現的。
參考
推薦閱讀
漫畫:程式設計師一時單身一時爽,一直單身...有點慘
2019年,又一個埋下伏筆的一年!
程式設計師有了孩子,老大叫玲玲,老二叫玲依,老三叫...
一個程式設計師要被打多少次臉?
親愛的,給我一個在看哈!