Monday, May 21, 2018

AI 從頭學(三六):YOLO v1

AI 從頭學(三六):YOLO v1

2018/05/21

前言:

YOLO 可說是 object detection 第一個成功的 end-to-end(整合良好,不是好幾個演算法湊成一個)的演算法。而後的 YOLO v2 與 v3 更在效能與準確率都取得了極大的成功。本文簡介 YOLO v1 的架構與原理。

-----

Summary:

在學習 YOLO [1], [2] 之前,必須對 mAP [3] 與 NMS [4] 有基本的認識,才能夠進一步探討 YOLO 這個 object detection 演算法。本文參考了網路上 YOLO 的說明文章 [5]-[16] 與程式碼[17]-[21]。最後說明為何使用 Leaky ReLU 這個 activation function [22]-[24]。

-----


Fig. 1. The YOLO Detection System [1].

-----

Outline

一、YOLO
二、Model
三、Loss Function
四、NMS
五、Leaky ReLU

-----

一、YOLO

YOLO 這個 object detection 的演算法主要可分為三個步驟。第一、輸入的圖片先把它更新到 448x448 的正方形大小。第二、整張圖片放入一個 CNN 網路運算。第三、演算法最後的輸出是幾個物件的中心、大小、與類別的 confidence。參考圖1,左邊 0.64 的可能是人,中間 0.30 的可能性是狗,右邊 0.28 的可能性是馬(示範圖片不能算是一個好的結果)。
 
-----

二、Model

YOLO 的作法是先把正方形平均分為 7x7 個小塊。每個小塊可以預測兩個物件框的中心位置、大小、與類別。限制條件是中心位置必須落在小塊裡面。

所以一開始的輸出會有 98 個可能物件,去掉無效的框框(演算法認為不是一個物體),然後透過 NMS [4] 把重複的物件去除。然後再根據這個物件框的最大可能類別,最後就是圖2右邊識別出來的三個物件。

圖2是模型的原理,可以搭配圖3.1與圖3.2一起理解。

首先分成 7x7 個小塊。每個小塊分別可以產生兩個建議框,資訊包含框的中心 (x, y)(必須落於小塊內)、框的寬高 w, h,以及框框是物件,或者非物件。如圖2中間上方所示。這 10 個 bytes 也就是圖3.1最後輸出的前十個資訊。

圖2中間下方則是每個小塊最有可能的類別(二十種其可信度最高者),類別的資訊是由上面的框框決定。這 20 個 bytes 也就是圖3.1最後輸出的後二十個資訊。二十個可信度由兩個框框共享,所以這小塊延伸的兩個框框預測的是同一種物件(可信度最高那種)。如果小塊內有兩個物件,那只能預測出比較大的那一個。

由圖2中間上方可以看到重複性非常高,所以 NMS 是很有必要的。



Fig. 2. The Model [1].

-----

三、Loss Function

Loss function 可說是整個 YOLO 演算法的重點。重點中的重點則在於圖3.1最右邊,CNN 的輸出。 也就是圖2在論文中的說明:S × S × (B * 5 + C) tensors。

S = 7。
B = 2。
C = 20。

S = 7,7 X 7 個預測框。B = 2,每個框預測 2 個物件(屬於同一種類別)。5 分別是中心 (x, y) 與寬高 w, h,以及是物件或不是物件。然後 C = 20 是這兩個物件屬於二十種類別的 confidences。



Fig. 3.1. The Architecture [1].

-----

如圖3.2,Loss function 希望中心點 (x, y) 要對(第一行)。框框 w, h 要 match(第二行),由於希望減低大框框位移錯誤的比重,所以加上根號 [6], [7], [10], [11]。這個參考圖3.4很容易理解,小 box 的橫軸值較小,發生偏移時,反應到 y 軸上相比大 box 要大 [7]。第三、四行分別為框框被判定是物件還是非物件,非物件重要性降低,係數設為0.5。另外,座標的重要性比較高,係數設為5,如圖3.3所說明。最後則是分類(第五行)。

這邊有個補充,Sheng-min Huang:「7*7 所以會有 49個 cells,x, y 其實只有在算物件在這一格 cell 裡的位置,真正圖裡的位置要先找出 cell 的位置再加上 x, y。」

基本上,就是希望透過訓練集的資料更新網路的 weighting values,以達到較小的誤差值。這跟一般 CNN 沒有不同,只是 YOLO 連物件座標都預測了!


Fig. 3.2. Loss function [1].



Fig. 3.3. Parameters [1].



Fig. 3.4. Root function [7].

-----

四、NMS

比較特別的一點是,圖3.1的網路輸出之後,要先經過 NMS 去除重複的物件,然後再計算第三節的 loss。

「接下來,我們要去解析網絡的預測結果,這裡採用了第一種預測策略,即判斷預測框類別,再 NMS,多虧了 TF 提供了 NMS 的函數 tf.image.non_max_suppression,其實實現起來很簡單,所有的細節前面已經交代了。」[17]

-----

五、Leaky ReLU

在 AlexNet 大獲成功之後,ReLU 廣受歡迎,YOLO 使用更新的 Leaky ReLU [22]-[24]。

因為「ReLU 會使部分神經元的輸出為0,可以讓神經網路變得稀疏,緩解過度擬合的問題。但衍生出另一個問題是,如果把一個神經元停止後,就難以再次開啟(Dead ReLU Problem),因此又有 Leaky ReLU 類等方法」來解決這個問題 [22]。

-----

結論:

YOLO 這篇論文前後看了很久,但只要先搞清楚 mAP、NMS,那 YOLO 其實只是利用 CNN 同時判斷框框的位置與大小。講是容易,但能夠想到這一層,YOLO 可說是天才之作。

-----

References

[1] 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.
https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Redmon_You_Only_Look_CVPR_2016_paper.pdf

[2] YOLO论文翻译——中文版
http://noahsnail.com/2017/08/02/2017-8-2-YOLO%E8%AE%BA%E6%96%87%E7%BF%BB%E8%AF%91%E2%80%94%E2%80%94%E4%B8%AD%E6%96%87%E7%89%88/

[3] Machine Learning Concept(一):Mean Average Precision(mAP)
http://hemingwang.blogspot.tw/2018/04/machine-learning-conceptmean-average.html

[4] Machine Learning Concept(二):Non-Maximum Suppression(NMS)
http://hemingwang.blogspot.tw/2018/04/machine-learning-conceptnon-maximum.html

-----

基本說明

[5] YOLO — You Only Look Once 介紹 – Chenchou LO – Medium
https://medium.com/@chenchoulo/yolo-%E4%BB%8B%E7%B4%B9-4307e79524fe

[6] 论文阅读笔记:You Only Look Once  Unified, Real-Time Object Detection - CSDN博客
https://blog.csdn.net/tangwei2014/article/details/50915317

[7] 图解YOLO
https://zhuanlan.zhihu.com/p/24916786 

[8] YOLO详解
https://zhuanlan.zhihu.com/p/25236464 

[9] YOLO模型原理-大数据算法
http://x-algo.cn/index.php/2017/02/28/1767/

[10] You Only Look Once  Unified, Real-Time Object Detection(YOLO)
https://zhuanlan.zhihu.com/p/31427164

[11] RCNN学习笔记(6):You Only Look Once(YOLO) Unified, Real-Time Object Detection - CSDN博客
https://blog.csdn.net/u011534057/article/details/51244354

-----

非基本說明

[12] 深度学习之目标检测-YOLO算法(一) – Eric Fan
https://www.fanyeong.com/2018/01/30/cnn-object-detection-yolo-part1/

[13] 深度学习之目标检测-YOLO算法(二) – Eric Fan
https://www.fanyeong.com/2018/01/31/cnn-object-detection-yolo-part2/

[14] YOLO解读 - 任广辉的博客 _ Sundrops Blog
http://renguanghui.com/2017/11/30/yolo/ 

[15] IOU
DEEP LEARNING之三十六:YOLO 算法(You Only Look Once) – Rethink
http://www.rethink.fun/index.php/2018/03/05/deep-learning36/

[16] C4W3L09 YOLO Algorithm - YouTube
https://www.youtube.com/watch?v=9s_FpMpdYW8

-----

代碼

[17] YOLO算法的原理与实现 - 云+社区 - 腾讯云
https://cloud.tencent.com/developer/article/1052865
 
[18] YOLO,一种简易快捷的目标检测算法 _ 雷锋网
https://www.leiphone.com/news/201801/VfYDZHC7Xa6hJXEK.html 

[19] GitHub - MashiMaroLjc_YOLO  implement the YOLO algorithm using MXNet_Gluon
https://github.com/MashiMaroLjc/YOLO

[20] Darknet  Open Source Neural Networks in C
https://pjreddie.com/darknet/

[21] GitHub - pjreddie_darknet  Convolutional Neural Networks
https://github.com/pjreddie/darknet

-----

Leaky ReLU

[22] 深度學習:使用激勵函數的目的、如何選擇激勵函數 Deep Learning   the role of the activation function _ Mr. Opengate
http://mropengate.blogspot.tw/2017/02/deep-learning-role-of-activation.html

[23] cs231n_2017_lecture6
http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture6.pdf

[24] Ramachandran, Prajit, Barret Zoph, and Quoc V. Le. "Searching for activation functions." (2018).
https://openreview.net/pdf?id=Hkuq2EkPf
https://arxiv.org/pdf/1710.05941.pdf  

Tuesday, May 15, 2018

AI創業日記(六):Minimum Viable Product(MVP)

AI創業日記(六):Minimum Viable Product(MVP)

2017/03/02

前言:

核心成員與商業模式簡介。

-----

Summary:

本「音樂生理學」的研究已進行十年以上,並有多篇論文發表 [1]。以美國為例,安眠藥在美國的市場規模是美金$1.5 billion (2014),可以作為「睡眠音樂」市場預估的參考[2]。

MVP 的部分,目前屬於機密,對此有興趣者,請透過 LinkedIn 聯繫,謝謝!

本團隊從原本三人 [5] 擴增到四人。目前成員以交大博士為主,更多的訊息列於下方。

-----



* Top 10 Best One Piece Characters.

-----

◎ 執行長(CEO):交大電控 PhD。
https://www.linkedin.com/in/marcel-wang-3a988b7a/

-----

研發部:

工業4.0的架構為 ABCI(AI、Big Data、Cloud、IoT)以方便記憶,列舉時則以資料流為順序,前端為物聯網,資料透過雲端儲存,最後是大數據與人工智慧的分析。

◎ IoT
經理:美國賓州大學資工碩士。
專長:Android、Front-end、Back-end。目前負責開發 proto-type。

◎ Cloud

◎ Big Data
大數據架構師:交大資管 PhD。
專長:Hadoop 生態系。目前為海外某公司首席大數據架構師。

◎ AI
資料科學家:交大電控 PhD。
專長:Machine Learning / Deep Learning。目前為某公司資料科學家。

-----

Note *
Top 10 Best One Piece Characters - YouTube
https://www.youtube.com/watch?v=Mz6icVxFr3c  

-----

References


[1] AI創業日記(一):音樂生理學
http://hemingwang.blogspot.tw/2017/09/blog-post.html

[2] AI創業日記(二):市場調查
http://hemingwang.blogspot.tw/2017/09/ai.html

[3] AI創業日記(三):商業模式
http://hemingwang.blogspot.tw/2017/11/aibusiness-model.html

[4] AI創業日記(四):商業模式的討論
http://hemingwang.blogspot.tw/2017/11/ai-1.html

[5] AI創業日記(五):團隊介紹
http://hemingwang.blogspot.tw/2017/11/ai.html

Tuesday, May 08, 2018

Machine Learning Concept(二):Non-Maximum Suppression(NMS)

Machine Learning Concept(二):Non-Maximum Suppression(NMS)

2018/05/08

前言:

物件偵測時,難免會發生重複偵測的現象,大部分演算法都會附加一個 NMS 演算法來處理,但這個功能有沒有可能直接嵌入 CNN 呢?

Summary:

本文討論 object detection [1] 中,YOLO 演算法 [2] 與 Non-Maximum Suppression(NMS,刪除相似偵測)[3]-[8] 的關係。

-----



Fig. 1. Non-Maximum Suppression(NMS)[4].

-----

Outline

一、Non-Maximum Suppression(NMS)
二、YOLO and NMS

-----

一、Non-Maximum Suppression(NMS)

如圖1 所示,在 object detection 中,有時會出現重複偵測的狀況,譬如圖1左有三個相似的偵測結果,置信度分別是 0.9、0.8、0.7,這時你只能留下一個置信度最高的框框,把其餘的刪除,這就是 Non-Maximum Suppression(NMS)。

「非極大值抑制的流程如下:

a. 根據置信度得分進行排序。
b. 選擇置信度最高的比邊界框添加到最終輸出列表中,將其從邊界框列表中刪除。
c. 計算所有邊界框的面積。
d. 計算置信度最高的邊界框與其它候選框的 IoU。
e. 刪除IoU大於閾值的邊界框 重複上述過程,直至邊界框列表為空。」[4]

根據以上的演算法加以說明:

a. 必須是要同一類別。
b. 先找出一個置信度最高的框框,假定命名為 T (Target)。輸出列表數目為1。
c ~ e. 設定一個閾值,把跟 T 的 IoT [5] 高於閾值的框框都刪除掉。假定邊界框列表還有一些,那要再挑一個到輸出列表,這時輸出列表數目為2,然後再根據閾值刪除框框,依此原則反覆進行。

重點在於閾值的設定,以圖1為例,如果閾值設為 0.6,則會留下 3 個建議框,0.5 會留下 2 個,0.4 才能剩下一個 [4]。
 
-----

二、YOLO and NMS 

如圖2 所示,YOLO 的最後一步驟是 NMS。

以 YOLO 的演算法,出現圖1左的三個框框可能性應該很低(?),最多就是出現兩個框框,這時就可以套用 NMS 去掉一個。

TensorFlow 有提供 NMS 的函式:tf.image.non_max_suppression [6]-[8],YOLO 使用 NMS 的時機則在 CNN 輸出之後,計算 loss 之前。

-----


Fig. 2. YOLO [2].

-----

Conclusion

以 NMS 使用的時機而言,YOLO 「勉強」稱的上是 ent-to-end 的設計,如果 NMS 能由神經網路直接完成,那就更酷了!

-----

References

[1] 關於影像辨識,所有你應該知道的深度學習模型 – Steven Shen – Medium
https://medium.com/@syshen/%E7%89%A9%E9%AB%94%E5%81%B5%E6%B8%AC-object-detection-740096ec4540 

[2]  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.
https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Redmon_You_Only_Look_CVPR_2016_paper.pdf

[3] 非極大值抑制(Non-Maximum Suppression,NMS) - 掃文資訊
https://hk.saowen.com/a/ee16d85c2614981f2c5bc9f20ce37b806546b4b954fdbea87cba09774e02267f

[4] 非極大值抑制(Non-Maximum Suppression) - 掃文資訊
https://hk.saowen.com/a/be0b7a61e12326c4d8c6b509b2d2c4a9fce9331ea3bfd81271c1e63dd2e78f18

[5] Machine Learning Concept(一):Mean Average Precision(mAP)
http://hemingwang.blogspot.tw/2018/04/machine-learning-conceptmean-average.html

[6] YOLO算法的原理与实现 - 云+社区 - 腾讯云
https://cloud.tencent.com/developer/article/1052865 

[7] tf.image.non_max_suppression  _  TensorFlow
https://www.tensorflow.org/api_docs/python/tf/image/non_max_suppression

[8] tensorflow_image_ops_impl.py at r1.8 · tensorflow_tensorflow · GitHub
https://cloud.tencent.com/developer/article/1052865

Machine Learning Concept(一):Mean Average Precision(mAP)

Machine Learning Concept(一):Mean Average Precision(mAP)

2018/05/08

前言:

R-CNN 系列已經看了一陣子,YOLO 系列是目前正在看的。要知道這些演算法有多好,你得先知道「好」的標準何在?

Summary:

物件偵測 [1] 的第一步應該是瞭解 mAP 的計算方式 [2]-[11]。本文從基本觀念 [2]-[6] 出發,另外找了相關討論 [7]-[9] 與原始碼 [10],最後是補充資料 [11]。相關資料再配上本文的說明,讀者應可對物件偵測有初步的瞭解。

-----



Fig. 1. Object detection [1].

-----

Outline

一、Object Detection
二、IoU
三、Precision / Recall
四、Average Precision(11-point interpolated average precision)
五、Average Precision(PASCAL VOC 2010)
六、Mean Average Precision
七、mAP@[.5 .95]
八、公式(程式)

-----

一、Object Detection

Mean average precision(mAP)是 object detection 演算法的評估標準。

Object detection,一般翻譯為物件偵測或物體偵測。如圖1 所示,一張圖片,或一個影片的停格,先框出物件,再根據框框裡的物件加以分類,標示名稱,這就是 object detection。

傳統較有名的物件偵測演算法有 DPM、Selective Search 等,新一代的深度學習演算法則有 R-CNN 系列與 YOLO 系列 [1]。

-----
 
二、IoU

一般 object detection 演算法會先在一些資料集上進行訓練與測試,例如 PASCAL 等 [4]。資料集先由人工(或專家)將物件的框框與類別設定好。

演算法選出的框框,不會(不一定會)百分之百與人工設定的框框符合,將這兩個框框的交集除以聯集,是一個判斷標準,一般是設定為 0.5,高於這個值,則表示演算法「偵測」到一個物件,如圖2 所示 [2]。

至於偵測的「物件」是否「存在」,或者這個物件是否被標示為正確的類別,這在下方會繼續說明。



Fig. 2. Intersection over union [2].

-----

三、Precision / Recall

Precision / Recall 有一些不同的翻譯名稱,在此直接以英文跟圖片加以理解。

Precision / Recall,看圖3 則一目了然。

圓圈裡,是所有檢測到的物件(positives),淺綠色的部分是標示正確的(true positives),粉紅色的部分是標示錯誤的(false positives)。

左邊的矩形,是所有應該檢測出來的物件,半圓裡的部分是檢測出來的(true positives),半圓以外的部分,是沒有檢測出來的(false negatives)。

Precision,是演算法偵測到的物件總數裡,有幾成是正確的物件。
Recall 則是全部該偵測出來的物體,演算法檢測出幾成。



Fig. 3. Precision and Recall [3].

-----

四、Average Precision(11-point interpolated average precision)

圖4.1a 是一個測試結果,類別假定為汽車好了。

你偵測出「可能」有 20 輛汽車,其「可能性」從 0.91 遞減到 0.01。但是實際上,真正的汽車只有 4 號的 0.91、2 號的 0.76、9 號的 0.38 等六輛。




Fig. 4.1a. Top 20 [4].

以圖4.1b 為例,假定你「選」前五名好了,那你的正確率就是 2 / 5,也就是 0.4。




Fig. 4.1b. Top 5 [4].

「實際多類別分類任務中,我們通常不滿足只通過 top-5 來衡量一個模型的好壞,而是需要知道從 top-1到 top-N(N 是所有測試樣本個數,本文中為20)對應的 precision 和 recall。顯然隨著我們選定的樣本越來也多,recall 一定會越來越高,而 precision 整體上會呈下降趨勢。把 recall 當成橫坐標,precision 當成縱坐標,即可得到常用的 precision-recall 曲線。」[4]




Fig. 4.1c. Top 6 - 20 [4].

圖4.2 可以看到,Top 1 是 1 / 1,Top 2 是 2 / 2。
Top 3 到 Top 5 分別是 2 / 3、2 / 4、2 / 5。垂直遞減。
Top 6 與 Top 7 分別是 3 / 6、4 / 7。遞增。 
Top 8 到 Top 20 以此類推。


 

Fig. 4.2. Average Precision(11-point interpolated average precision)[4].

-----

五、Average Precision(PASCAL VOC 2010)

PASCAL 競賽在 2010 年開始,使用不同的計算方式。

圖4.3 跟 圖4.1 是同一份資料,但呈現、與計算的方式不同。主要是它沒有遞增的片段,全部是單調遞減。

執行上是以 Recall 為主,同樣 Recall 的取為一組,這組後面如果有更大的 Precision,就以後面為主。

以圖4.3為例。第三組的 Precision 是 3/6,但因為第四組的 4/7 更高,所以就採用第四組的 Precision 當成第三組的。因此得到圖4.4。



Fig. 4.3. Top 20 [4].



Fig. 4.4. Average Precision(PASCAL VOC 2010)[4].

-----

圖4.5 可以看出兩種方法的差別。AP 則是計算藍色部分所佔的比率。



Fig. 4.5. Precision monotonically decreasing [2].

-----

六、Mean Average Precision

瞭解了 AP 之後,mAP 其實就是把多個類別的 AP 再取平均。如圖5.1 所示。



Fig. 5.1 mAP [2].

圖5.2 則是 FP 跟 TP 個數的統計。這邊會有一個小問題,就是每個類別的物件要一樣多才公平嗎?




Fig. 5.2. Detected classes (36) [2].

-----

七、mAP@[.5 .95]

mAP@[.5:.95](someone denoted mAP@[.5,.95]) means average mAP over different IoU thresholds, from 0.5 to 0.95, step 0.05 (0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95). [6]

IoU 取 0.5 可以計算 mAP,從 0.5 到 0.95 每 0.05 都來算一次 mAP 再平均,又是一種衡量的標準。

-----

八、公式(程式)

以上的觀念都瞭解之後,程式部分請自行參考 [7], [10]。

-----

Conclusion

瞭解 mAP 是 object detection 的第一步,至於如果同一物件被重複偵測,有好幾個類似的框框,那要如何處理?這也是很重要,後續會再討論!

-----

References

一、背景

[1] 關於影像辨識,所有你應該知道的深度學習模型 – Steven Shen – Medium
https://medium.com/@syshen/%E7%89%A9%E9%AB%94%E5%81%B5%E6%B8%AC-object-detection-740096ec4540

二、基本

[2] GitHub - Cartucho_mAP  mean Average Precision - This code will evaluate the performance of your neural net for object recognition
https://github.com/Cartucho/mAP 

[3] Precision and recall - Wikipedia
https://en.wikipedia.org/wiki/Precision_and_recall

[4] 多标签图像分类任务的评价方法-mAP_花心大罗博_新浪博客
http://blog.sina.com.cn/s/blog_9db078090102whzw.html

[5] The PASCAL Visual Object Classes Challenge 2010 (VOC2010)
http://host.robots.ox.ac.uk/pascal/VOC/voc2010/

[6] computer vision - What does the notation mAP@[.5 .95] mean  - Data Science Stack Exchange
https://datascience.stackexchange.com/questions/16797/what-does-the-notation-map-5-95-mean 
 
-----

三、討論

[7] mean average precision(MAP)在计算机视觉中是如何计算和应用的? - 知乎
https://www.zhihu.com/question/41540197

[8] machine learning - mAP metric in object detection and computer vision - Stack Overflow
https://stackoverflow.com/questions/36274638/map-metric-in-object-detection-and-computer-vision

[9] machine learning - How to calculate mAP for detection task for the PASCAL VOC Challenge  - Data Science Stack Exchange
https://datascience.stackexchange.com/questions/25119/how-to-calculate-map-for-detection-task-for-the-pascal-voc-challenge

-----

四、code

[10] 深度学习  mAP (Mean Average Precision) - CSDN博客
https://blog.csdn.net/JNingWei/article/details/78955536

-----

五、其他

[11] What you wanted to know about Mean Average Precision - FastML
http://fastml.com/what-you-wanted-to-know-about-mean-average-precision/