GitHub 上有哪些有關圖像處理或是機器學習的有趣項目?
**************************** 求同好者 ***************************
這個回答最重要的目的已經寫在第一行了。。。
都是自己寫的,性能還不完美,提前放出來開源(當年Linus不就是這麼乾的?)~項目有人關注就更新補充更多的文檔 =。=
項目名稱: E-Face
EFace by jasonleaster
適用對象: 圖像處理或機器學習相關童鞋
項目內容: 簡易的人臉檢測系統.
之前我在 如何從0學習opencv,完成類似人臉檢測的畢設? - 知乎用戶的回答
說過,調用API是很簡單的,如何實現背後的最核心的技術,才是最有價值的(當然,如果你想讓自己more valuable),很多人調用API也說自己搞face detection的。有興趣的話也可以去嘗試一下Object Detection的另外一個應用,汽車車體檢測。我利用OpenCV和公開可獲得的數據集做了一點實踐工作,有興趣的可以看看我的記錄 Training Cascade With OpenCV項目性質: 源碼學習,技術交流。非工業級別圖像處理庫(O(∩_∩)O現在達不到那標準。。。)
硬體平台要求:一台PC基本上就能跑。(intel core i5/ 8G RAM / Ubuntu).
對於14000幅左右解析度為19*19的訓練集:
對於feature總數為32746(即,數據規模為14000 * 32746) 特徵提取耗時約3000+秒 模型訓練約為(35s * 300,單個弱分類器訓練耗時,35s,預期最大選取300個弱分類器)上面我簡要介紹了一下EFace的性能情況,可能無腦黑又會說Python寫的又low又慢。下面是,
Yi-Qing Wang 在論文[2]中有關於他們在訓練中對於他們系統性能的描述
A few words on the actual cascade training carried out on a 8-core Linux machine with 48G memory.
... ...The training process lasted for around 24 hours before producing a 31-layer cascade. -- Yi-Qing Wang
在其個人網站上可以找到前輩的研究領域作品和論文。
這個Face Detection的實現還不perfect,Cascade也還在寫,Cascade的主要目的就是降低訓練耗時,Yi-Qing Wang 說31層的Cascade都耗時24小時。
目前Cascade的部分還在實現中ing,儘可能的對自己半年前的Python代碼進行了優化。研究了一下關於Python性能的優化,從一開始基本上就能跑 (18小時左右 )到現在的性能算提升了很大,而且數據處理量也提升了更多(一開始我寫出來的內存消耗很大,6G的內存只能跑3000幅19*19的圖片的樣子,到現在能跑12k幅)。
EFace的相關特性肯定這裡講不完,有興趣的話可以Project Home Page of EFace看看。實現細節的各種斟酌考慮也很有意思,還是那句話,有興趣看代碼,一起交流。
下面是Viola的ROC曲線
EFace的ROC曲線,270+ feature classifier(做個簡單對比):但是我的後期檢測部分表現的並不是很好,希望有興趣的童鞋一起交流一改進。
EFace的人臉檢測測試樣例:
上面你們能看到這個帥哥被綠色的框框框住了,這個單幅圖像的檢測結果表現還不錯。但是多幅人臉圖像的話,可能就表現的不是很好(或者說我的detector有問題(*@ο@*) 哇~)會出現漏檢和錯檢的情況(能做到這個樣子,我已經非常開心了)。Reference:
1. &<&< Robust Real-Time Face Detection &>&> PAUL VIOLA, MICHAEL J. JONES2. &<&< An Analysis of the Viola-Jones Face Detection Algorithm &>&> -- Yi-Qing Wang3. &<&< Robust Real-time Object Detection &>&> Paul Viola, Michael Jones4. 《High Performance Python》Micha Gorelick / lan OzsvaldEFace 期待有興趣的童鞋加入哈~
Update : 2016.09.09
人臉檢測擴展的說,甚至於目標檢測的實際項目中,對於目標的準確檢測其實有很多困難的。CV界有個不好的風氣,某些人、團隊為了金錢利益而使用極其差勁的低劣手段發paper,很多垃圾論文數據造假,結果造假。說這些,目的也很簡單,還是希望能夠促成對Face Detection 甚至廣義的Object detection方向感興趣的同學,去看看EFace的源代碼,有興趣的話,我們可以聊聊。
Face Detection一些困難的點,從演算法模型的根源產生的困難和目標問題兩個方面,我講講自己遇到的一些困難。
1. 演算法模型的根源產生的困難
1.1 要得到魯棒性強的商用系統,基於統計的學習需要大量的樣本數據做訓練集
大多數經典的演算法都是基於Data-driven的演算法模型,都是基於統計學習的方式去訓練模型,最後得到一個魯棒性還不錯的模型參數。這就需要大量的訓練樣本。1.2. 大量的樣本數據,一方面需要很強的計算平台,另一方面可能會需要很大容量的緩存空間
說白了,折騰機器學習想要產生點經濟效益,特別是CV領域,得有強有力的硬體資源作支撐。一般玩家很難進入,當然稍微捨得花錢的公司下決心要搞機器視覺的,那點錢都是小錢了。但是一個優秀的程序員想單獨在家裡完成這個lab?很困難。這是現實基礎問題。2.目標問題本身的困難
我們這裡的目標問題,就是把人臉給他檢測出來嘛~這個問題很簡單嗎?誠然,不簡單。
2.1 現實生活中人臉位於圖像中可能是有很多角度的給人對這個答案有興趣的夥伴可以直接把上面這幅圖直接拿去測當前人臉應用商業化的一些非常優秀的公司,他們的模型也不能完全檢測出這裡面所有的人臉(5個人臉哦,有的公司檢測出來2個人臉,有的公司的公測API檢測出0個人臉)
說到這裡,這些公司難道是騙子?不然,不點名了,我所知道的這兩家公司都是我非常尊敬的公司,正是他們實事求是的態度,能夠把人臉技術「落地化,產品化」,更加務實。再次表達我的敬意。如果有對OpenCV做一點了解的同學也會發現,OpenCV的人臉檢測模塊也是不能完美完成目標檢測這個任務的。
我說了,問題的本身還是在於人臉檢測確實不是個簡單的活兒,系統的輸入---- 訓練樣本,大多數也都是訓練的正臉樣本,很少有斜著臉的樣本,這也從根本上造成了檢測結果對rotated face不敏感。
對於這樣的問題,我的一點簡單的看法:僅針對,可能存在人臉倒著的情況,訓練的過程可以保持不變,只是最後檢測的時候,增加一步,把輸入圖像翻轉180°之後再進行檢測,取翻轉前和翻轉後兩者檢測結果的「並集」,即可。
2.2 終極問題,你覺得什麼是人臉?
本質上,圖像在計算機中呈現出來是由於有顏色模型的存在,RGB等等,黑白的也罷,像素取值區間在0~255之間,一副圖像中,所謂的人臉區域,不過是一些特殊「亮暗模式」,而誰又能構建出一個準確的數學模型去對這個問題進行定位呢?現在流行的方法是,基於統計訓練模型,利用大數據本身對模型參數進行求解。談不上對CV有很深入的研究,但是這其中引發了我思考很多有意思的問題,比方說「客官,你怎麼定義人臉呢?難道半張人臉不是人臉?四分之一張人臉是人臉嗎?...(Object detection以及目標模型的模糊性)」 「閣下,不知道你能不能幫個忙,給我解釋一下,什麼叫做藍天啊?(圖像分割)」
有沒有興趣去看看EFace的代碼呢?
Github 上有關注的的話:
- vispy/vispy · GitHub:python 一個高性能的數據可視化視覺庫
- stackgl · GitHub:WebGL 各種組件以及一些 demos(詳見:stack.gl)
- Shadertoy:我最喜歡的視覺技術網站之一,shader 編程共享網站,裡面很多很酷的例子。有一些已經被我移植到 opengl es 上了(詳見:nekocode/murmur · GitHub)
- OpenProcessing:圖像處理,可視化的話 也不要忘記了 Processing ,這個站點上很多很酷的,甚至可交互的例子,有點 java 底子,又想研究可視化技術的話,它是一個十分經典而且不錯的選擇
- GLSL.io – Open Collection of GLSL Transitions:也是一個 glsl shader 分享網站,主要關注於圖片切換效果上
Vlfeat, Matconvnet, Piotr"s Toolbox, Caffe, 可以隨便玩,隨便折騰。。
與圖像處理和機器學習都有關的我想到waifu2x, 屬於是Image scaling領域的內容.
waifu2x
Github: nagadomi/waifu2x · GitHub
Single-Image Super-Resolution for anime/fan-art using Deep Convolutional Neural Networks.
使用卷積神經網路(Convolutional Neural Network, CNN)針對漫畫風格的圖片進行放大.
效果還是相當不錯的, 下面是官方的Demo圖:https://raw.githubusercontent.com/nagadomi/waifu2x/master/images/slide.pngEasyPR 開源的中文車牌識別項目,Opencv 實現代碼清晰易讀。GitHub - liuruoze/EasyPR: An open source project for chinese plate recognition. It aims to be Easy, Flexible, and Accurate. Welcome to contribute your expertise !
1. TensorFlow
GitHub項目地址:
https://github.com/tensorflow/tensorflow
TensorFlow是谷歌發布的第二代機器學習系統。
2. Scikit-Learn
GitHub項目地址:
https://github.com/scikit-earn/scikit-learn
Scikit-Learn是用於機器學習的Python模塊,它建立在SciPy之上。
3. Caffe
GitHub項目地址:
https://github.com/BVLC/caffe
Caffe是由神經網路中的表達式、速度、模塊化產生的深度學習框架。
4. PredictionIO
GitHub項目地址:
https://github.com/PredictionIO/PredictionIO
PredictionIO是面向開發人員和數據科學家的開源機器學習伺服器。它支持事件採集、演算法調度、評估,以及經由REST APIs的預測結果查詢。
5. Brain
GitHub項目地址:
https://github.com/harthur/brain
Brain是JavaScript中的神經網路庫。
6. Keras
GitHub項目地址:
https://github.com/fchollet/keras
Keras是極其精簡併高度模塊化的神經網路庫,在TensorFlow或Theano上都能夠運行,是一個高度模塊化的神經網路庫,支持GPU和CPU運算。
7. CNTK
GitHub項目地址:
https://github.com/Microsoft/CNTK
CNTK(Computational Network Toolkit )是一個統一的深度學習工具包,該工具包通過一個有向圖將神經網路描述為一系列計算步驟。
8. Convnetjs
GitHub項目地址:
https://github.com/karpathy/convnetjs
ConvNetJS是利用Javascript實現的神經網路,同時還具有非常不錯的基於瀏覽器的Demo。
9. Pattern
GitHub項目地址:
https://github.com/clips/pattern
Pattern是Python的一個Web挖掘模塊。
10. NuPIC
GitHub項目地址:
https://github.com/numenta/nupic
NuPIC是一個實現了HTM學習演算法的機器智能平台。
11. Theano
GitHub項目地址:
https://github.com/Theano/Theano
Theano是一個Python庫,它允許使用者有效地定義、優化和評估涉及多維數組的數學表達式,同時支持GPUs和高效符號分化操作。
12. MXNet
GitHub項目地址:
https://github.com/dmlc/mxnet
MXNet是一個兼具效率和靈活性的深度學習框架。它允許使用者將符號編程和命令式編程相結合,以追求效率和生產力的最大化。
13. Vowpal Wabbit
GitHub項目地址:
https://github.com/JohnLangford/vowpal_wabbit
Vowpal Wabbit是一個機器學習系統,該系統推動了如在線、散列、Allreduce、Learning2search、等方面機器學習前沿技術的發展。
14. Ruby Warrior
GitHub項目地址:
https://github.com/ryanb/ruby-warrior
Ruby Warrior通過設計了一個遊戲使得Ruby語言和人工智慧學習更加有樂趣和互動起來。
15. XGBoost
GitHub項目地址:
https://github.com/dmlc/xgboost
XGBoot是設計為高效、靈活、可移植的優化分散式梯度Boosting庫。它實現了Gradient Boosting框架下的機器學習演算法。
16. GoLearn
GitHub項目地址:
https://github.com/sjwhitworth/golearn
GoLearn是Go語言中「功能齊全」的機器學習庫,簡單性及自定義性是其開發目標。
17. ML_for_Hackers
GitHub項目地址:
https://github.com/johnmyleswhite/ML_for_Hackers
ML_for_Hackers是針對黑客機器學習的代碼庫,該庫包含了所有針對黑客的機器學習的代碼示例(2012)。
18. H2O-2
GitHub項目地址:
https://github.com/h2oai/h2o-2
H2O使得Hadoop能夠做數學運算!它可以通過大數據衡量統計數據、機器學習和數學。
19. neon
GitHub項目地址:
https://github.com/NervanaSystems/neon
neon是Nervana基於Python語言的深度學習框架,在諸多常見的深層神經網路中都能夠獲得較高的性能,比如AlexNet、VGG或者GoogLeNet。
20. Oryx 2
GitHub項目地址:
https://github.com/cloudera/oryx
開源項目Oryx提供了簡單且實時的大規模機器學習、預測分析的基礎設施。它可實現一些常用於商業應用的演算法類:協作式過濾/推薦、分類/回歸、集群等。
21. Shogun
GitHub項目地址:
https://github.com/shogun-toolbox/shogun
Shogun是一個機器學習工具箱,由Soeren Sonnenburg 和GunnarRaetsch(創建,其重點是大尺度上的內核學習方法,特別是支持向量機SVM(Support Vector Machines)的學習工具箱。
22. HLearn
GitHub項目地址:
https://github.com/mikeizbicki/HLearn
HLearn是由Haskell語言編寫的高性能機器學習庫,目前它對任意維度空間有著最快最近鄰的實現演算法。
23. MLPNeuralNet
GitHub項目地址:
https://github.com/nikolaypavlov/MLPNeuralNet
MLPNeuralNet是一個針對iOS和Mac OS系統的快速多層感知神經網路庫,可通過已訓練的神經網路預測新實例。
24. Apache Mahout
GitHub項目地址:
https://github.com/apache/mahout
Mahout是Apache Software Foundation(ASF)旗下的一個開源項目,提供一些可擴展的機器學習領域經典演算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序。
25. Seldon Server
GitHub項目地址:
https://github.com/SeldonIO/seldon-server
Seldon是一個開放式的預測平台,提供內容建議和一般的功能性預測。
26. Datumbox – Framework
GitHub項目地址:
https://github.com/datumbox/datumbox-framework
Datumbox機器學習框架是用Java編寫的一個開源框架,該框架的涵蓋大量的機器學習演算法和統計方法,並能夠處理大尺寸的數據集。
27. Jubatus
GitHub項目地址:
https://github.com/jubatus/jubatus
Jubatus庫是一個運行在分散式環境中的在線機器學習框架,即面向大數據數據流的開源框架。
28. Decider
GitHub項目地址:
https://github.com/danielsdeleo/Decider
Decider是另一個Ruby機器學習庫,兼具靈活性和可擴展性。
(來源:數盟)
想知道AI加教育領域有哪些最新研究成果?請在智能觀(zhinengguanym)對話界面回復「論文」;
想要AI領域更多的乾貨?請在對話界面回復「乾貨」;
想了解更多專家的「智能觀」,請在對話界面回復「觀點」,去獲取你想要的內容吧。
看了一圈竟然沒有匿名用戶點出來 有些人就不要強答...可能大佬時間線上沒出現?
推薦閱讀:
※軟體工程和計算機科學與技術這兩個專業哪個好?還有以後分別能從事什麼工作?
※C++適合做什麼?
※如果只讓你推薦一本 Python 入門書籍,你會推薦什麼?
※產品經理和程序員如何才能和諧共處?
※IT行業應屆生薪資那麼高,老員工都是怎麼想的?