【全面】人工智慧所有技術棧與學習方案
謝邀,今天受朋友邀請寫下這篇文章~
謹以本文送給所有愛好人工智慧的愛好者,完全原創,乾貨,建議收藏~(點擊最下方原文,可以查看許多裡面的項目和超連結)
一 概述
首先你需要數學基礎:高等數學,線性代數,概率論數理統計和隨機過程,離散數學,數值分析。
其次需要算法的積累:人工神經網絡,支持向量機(SVM),遺傳算法等等算法;當然還有各個領域需要的算法,比如你要讓機器人自己在位置環境導航和建圖就需要研究SLAM;總之算法很多需要時間的積累;
人工智慧專業的主要領域是:自動控制原理,傳感器,單片機,微機原理,模式識別,人工智慧導論,計算機視覺,數字圖像處理,MATLAB ,機器人,電機控制,機器學習,數字視頻技術等等,分軟硬兩個方向; 機器學習 人工智慧導論(搜索法等) 圖像識別 智能信息獲取 語音識別 生物演化論 自然語言處理 語義網 博弈論等。需要的前置課程主要有,信號處理,線性代數,微積分,還有編程(最好有數據結構基礎)。
人工智慧一般要到研究生才會去學,本科也就是蜻蜓點水看看而已,畢竟需要的基礎課過於龐大。
二 人工智慧程式語言/數據結構與算法
2.1 程式語言
基礎知識語言:C語言(為了基礎知識與學習數據結構與算法)
學習與應用型語言:Python (語言簡潔,方便學習,代碼,庫多等)
嵌入部署語言:C++(計算速度快,落地必備語言)
Cuda 編程:深度學習編程加分項(精通的工程師很少)
不建議使用Java語言,計算等不太好,除非使用NLP的斯坦福等模型。
2.2 數據結構與算法
數據結構與算法,建議刷上百道Leetcode 或者劍指Offer
數據結構與算法是算法工程師必備技能,在人工智慧中應用不是特別多,但是卻可以在寫代碼的時候更精練,並且能計算速度更快。
一些必備算法:
廣度優先搜索
深度優先搜索
背包問題
動態規劃
蟻群問題
等
三 人工智慧基礎原理
這門課,你將學習:
知識系統:分為確定性只是系統和不確定性知識系統 你將學習基礎的知識表示和推理方式
智能搜索技術:你將學習啟發式搜索算法例如A*算法和博弈樹以及遺傳算法
機器學習:這門課程中學習:線性回歸 與 決策樹與支持向量機Adaboost以及Bagging算法。
深度學習:這門課程:人工神經網絡 單層/多層感知機 BP神經網絡 Hopfield網絡 卷積神經網絡 LeNet5
這本書:《人工智慧原理及其應用》特別全面,還有很多知識上述沒列出來,剩下的知識下面將詳細介紹。
四 智能信息獲取(簡稱爬蟲)
爬蟲,網絡資源特別多
我來大致說說:
爬蟲的簡單理解:向網站發起請求,獲取資源後分析並提取有用數據的程序
1、發起請求使用庫向目標站點發起請求,即發送一個Request Request包含:請求頭、請求體等
2、獲取響應內容如果伺服器能正常響應,則會得到一個Response Response包含:html,json,圖片,視頻等
3、解析內容解析html數據:正則表達式,第三方解析庫如Beautifulsoup,pyquery等 解析json數據:json模塊 解析二進位數據:以b的方式寫入文件
4、保存數據資料庫 文件
二、Requests庫介紹2.1基本介紹requests是基於urllib3的一個用於發起http請求的庫。這個庫相較於urllib更快,更易用。
requests 易用性強,定製簡單,可用性好,文檔豐富,入門簡單 ,屬於頁面級爬蟲。
本身沒有處理js、提交表單、對應驗證碼等功能(可擴展)
重點在於頁面下載。
Requests只是一個構建網頁請求,獲取網頁響應的模塊,並不是框架。在構建request方面,簡單易實現,且功能強大。Requests 幾乎滿足如今網絡的需求。
requests的基本使用流程爬蟲三部曲1.發送請求def get_page(url): respone=requests.get(url) return respone
2.解析數據import redef parse_index(html):findall匹配所有re.findall(「匹配所有」,html,re.S)re.S(對全部文本進行匹配)detail_urls=re.findall('<a href="(.*?)"',html,re.S) return detail_urls解析詳情頁def parse_detail(html): movie_url=re.findall('',html,re.S) if movie_url:3.保存數據三、selenium一:效率問題
從啟動,到模擬種種用戶行為,他都沒有直接訪問接口快。
二:資源浪費爬虫部署在伺服器,大量爬蟲啟動,極其消耗資源,你在開幾個selenium,分分鐘爆炸。所以,進公司,基本見不到selenium的蹤跡。
三:能被識別雖然selenium模擬瀏覽器進行用戶行為,但其實他還是會被識別。比如淘寶的模擬登陸。所以對於我們初步50w的數據,而且網站反爬措施一般的情況下,可以直接不考慮seleenium。
四、scrapy框架scrapy是一個功能非常強大的爬蟲框架,它不僅能便捷地構建request,還有強大的selector能夠方便地解析response,然而它最受歡迎的還是它的性能,既抓取和解析的速度,它 的downloader是多線程的,request是異步調度和處理的。這兩點使它的爬取速度非常之快。 另外還有內置的logging,exception,shell等模塊,為爬取工作帶來了很多便利。
所以在性能方面,scrapy >= Requests + lxml/Beautiful Soup + twisted/tornado + threading + Queue.
然而在易用性方面,他卻比requests難很多, 初學入手,難度遠高於requests
這一框架就像一條爬蟲流水線,有工作隊列、有下載器、有分配任務的引擎,有對爬取數據寫邏輯的地方、也有寫保存處理數據的資料庫SQL的地方。對於scrapy而言,更多的時候是在配置scrapy。先要繼承一個spider寫爬蟲的主體,然後還要在setting裡寫配置,在pipeline裡寫資料庫。而且還要注意在主函數parse裡的返回值,返回item時是交給pipline做數據處理,返回Request回調函數時是向爬取隊列註冊二級連結等等。
五、Bs4整體使用步驟:bs4裡面有一個類,BeautifulSoup,然後通過這個類將網頁html格式字符串生成一個對象,然後通過對象的方法來進行查找指定元素
Beautiful Soup 是一個可以從HTML或XML文件中提取數據的Python庫.它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.Beautiful Soup會幫你節省數小時甚至數天的工作時間.
Beautiful Soup在解析時實際上依賴解析器,它除了支持Python標準庫中的HTML解析器外,還支持一些第三方解析器(比如lxml)。下面我列出Beautiful Soup支持的幾種解析器。
一般常用的是lxml解析器,它有解析HTML和XML的功能,而且速度快,容錯能力強,如果使用lxml,在初始化的時候Beautiful Soup時,可以把第二個參數改為lxml即可,其他都是一致的。
6、欄位匹配方案CSS selecor, Xpath ,Re正則表達式
在易用度上:css selector > Xpath> Re
速度上:CSS selector > Xpath > Re
這個方案使用css 優先,當然使用xpath也可以(可選),並不影響大局。應該可以根據喜好寫。當然有個標準規定也是有必要的。
7:數據存儲與隊列任務(MongoDB與Rabbitmq)在上面確定好使用的技術棧,包括框架,請求庫,解析庫後,接下來到數據存儲,使用MongoDB會比較方便,首先,使用MongoDB做存儲,簡單實用,方便拓展爬蟲的數據。
其次,如果可以,將任務分解成N個子任務,放到一個MessageQueue中。接著,在寫程序的時候,不要考慮任何多線程多進程gevent或者任何會讓你的程序「提速」的東西,爬蟲只要完成一個簡單的功能:接受一個輸入,這裡就是某一頁的頁碼,得到的輸出是這一頁的15條數據,最好直接存儲到資料庫中。最後一步,將上兩步具體實現,使用RabbitMQ,然後在上一步的接受輸入變成從Queue中取一條任務。
如果源網站不會因為訪問頻率過高而封你的IP,那麼可以在一臺機器上多部幾個爬蟲實例,否則的話,你可以將你的代碼部署到多臺機器上。阿里雲按時間付費的機器很便宜,可以開多點機器以加快速度。這樣的好處是,可以隨時新增或減少一個爬蟲實例,而不會影響之前已經部署的任何爬蟲,也可以隨時將抓取失敗的頁碼數再次放入Queue中,而不影響正在抓取任務的爬蟲
8、總結requests vs Scrapyrequests
Scrapy
頁面級爬蟲
網站級爬蟲
功能庫
框架
並發性考慮不足,性能較差
並發性好,性能較高
重點在於頁面下載
重點在於爬蟲結構
定製靈活
一般定製靈活,深度定製困難
上手十分簡單
入門稍難
兩個方法看情況用非常小的需求,用requests庫
不太小的需求,Scrapy框架(持續周期性不間斷爬取)
定製程度很高的需求(不考慮規模),自搭框架,requests>Scrapy
相同點兩者都可以進行頁面請求和爬取,python爬蟲的兩個重要技術路線。
兩者可用性都好,文檔豐富,入門簡單。
兩者都沒有處理js、提交表單、應對驗證碼等功能(可擴展)。
五 統計學原理/離散數學/概率論與數理統計/微積分
這是一些必備數學知識,如果你不會,很難堅持學完機器學習基礎算法。
詳見各科書本,其中統計學原理最重要,是機器學習的前身,例如支持向量機,決策樹算法 ,Adaboost等算法都會學原理。
六 機器學習(必學)
這一節很重要,我詳細給大家說說要學哪些算法:強調一下,以下算法建議必會,就算自己沒有用於項目中,也建議跑一炮算法和簡單應用。
1:線性回歸與多項式回歸
參見博客:傳送門
2:梯度下降法:傳送門
3:決策樹 ID3和C4.5算法:傳送門 與簡單使用
4:SVM 算法從原理到實戰(必學算法):SVM原理
支持向量機SVM基礎實戰篇(一);
支持向量機SVM基礎實戰篇(二);
SVM基礎實戰篇之經典預測(三);
基於OpenCv的SVM實現車牌檢測與識別(一)
【實戰】基於OpenCv的SVM實現車牌檢測與識別(二)
5、kNN: k-nearest neighbor classification
K最近鄰(k-Nearest Neighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。該方法的思路是:如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。
6、The k-means algorithm即K-Means算法
k-means algorithm算法是一個聚類算法,把n的對象根據他們的屬性分為k個分割,k < n。它與處理混合正態分布的最大期望算法很相似,因為他們都試圖找到數據中自然聚類的中心。它假設對象屬性來自於空間向量,並且目標是使各個群組內部的均方誤差總和最小。
7、最大期望(EM)算法
在統計計算中,最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic)模型中尋找參數最大似然估計的算法,其中概率模型依賴於無法觀測的隱藏變量(Latent Variabl)。最大期望經常用在機器學習和計算機視覺的數據集聚(Data Clustering)領域。
8、AdaBoost
Adaboost是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。其算法本身是通過改變數據分布來實現的,它根據每次訓練集之中每個樣本的分類是否正確,以及上次的總體分類的準確率,來確定每個樣本的權值。將修改過權值的新數據集送給下層分類器進行訓練,最後將每次訓練得到的分類器最後融合起來,作為最後的決策分類器。
9、Naive Bayes樸素貝葉斯
在眾多的分類模型中,應用最為廣泛的兩種分類模型是決策樹模型(Decision Tree Model)和樸素貝葉斯模型(Naive Bayesian Model,NBC)。樸素貝葉斯模型發源於古典數學理論,有著堅實的數學基礎,以及穩定的分類效率。同時,NBC模型所需估計的參數很少,對缺失數據不太敏感,算法也比較簡單。理論上,NBC模型與其他分類方法相比具有最小的誤差率。但是實際上並非總是如此,這是因為NBC模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,這給NBC模型的正確分類帶來了一定影響。在屬性個數比較多或者屬性之間相關性較大時,NBC模型的分類效率比不上決策樹模型。而在屬性相關性較小時,NBC模型的性能最為良好。
10,隨機森林(集成算法中最簡單的,模型融合算法)
隨機森林如何緩解決策樹的過擬合問題,又能提高精度?
a. Random Forest, 本質上是多個算法平等的聚集在一起。每個單個的決策樹,都是隨機生成的訓練集(行),隨機生成的特徵集(列),來進行訓練而得到的。
b. 隨機性的引入使得隨機森林不容易陷入過擬合,具有很好的抗噪能力,有效的緩解了單棵決策樹的過擬合問題。
c. 每一顆決策樹訓練樣本是隨機的有樣本的放回抽樣。11,馬爾可夫
12、Gradient Boosting 和 AdaBoost 算法
a. 馬爾可夫線沒有箭頭,馬爾可夫模型允許有環路。
b. affinity親和力關係,energy(A,B,C),發現A,B,C之間有某種規律性東西,但不一定是概率,但是可以表示ABC之間的一種親和力。
c. potential = e1*e2*e3*en potential函數一般來說不是概率
d. 歸一化 -> 概率分布probability
e. 貝葉斯模型與馬爾可夫模型:任何一個貝葉斯模型對應於唯一的一個馬爾可夫模型,而任意一個馬爾可夫模型,可以對應於多個貝葉斯模型。
f. 貝葉斯模型類似於象棋,等級分明;馬爾可夫模型類似於圍棋,人人平等。
g. 馬爾可夫模型(Markov Model)是一種統計模型,廣泛應用在語音識別,詞性自動標註,音字轉換,概率文法等各個自然語言處理等應用領域。當我們要處理很多數據來做一個有高預測能力的預測時,我們會用到 GBM 和 AdaBoost 這兩種 boosting 算法。boosting 算法是一種集成學習算法。它結合了建立在多個基礎估計值基礎上的預測結果,來增進單個估計值的可靠程度。這些 boosting 算法通常在數據科學比賽如 Kaggl、AV Hackathon、CrowdAnalytix 中很有效。
7深度學習經典算法(必學)
1:學習Tensorflow框架/Pytorch/Paddle框架
2:將上述機器學習算法使用這些框架復現
3:實現簡單的回歸預測與分類
4:BP神經網絡
5:卷積神經網絡
6學習激活函數,參數初始化方法,歸一化方法 池化 最優化方法 學習率策略 正則化方法
7淺層卷積神經網絡:LeNet, Neocognitron網絡, TDNN ,Cresceptron網絡
8:經典網絡的深度設計:AlexNet VGGNet
9:殘差學習
10:分組卷積,卷積拆分,移動短高效模型
11:多尺度網絡與非正常卷積,更豐富的感受野與不變性
12:多輸入網絡:Siamese網絡,Triplet
13:時序神經網絡,RNN,雙向RNN, LSTM
14:三維卷積
15:注意力機制
16:生成對抗網絡
基於深度學習GAN的Ai換裝(比賽記錄)
8 計算機視覺經典算法(與9二選一或皆學)
1:計算機視覺的常用圖像處理技術
2:其他計算機視覺經典算法
3:基於傳統計算機視覺的應用,例如:
基於OpenCv的SVM實現車牌檢測與識別(一)
【實戰】基於OpenCv的SVM實現車牌檢測與識別(二)
4:基於深度學習與計算機視覺
5:影像分類,目標檢測,語義分割,實例分割等
6:基於深度學習與計算機視覺的項目
由淺入深:
視覺識別入門之人臉識別——基於FACENET的高精度人臉識別
視覺識別入門之識別 ——口罩識別
【項目實戰】基於PeLee的多目標實時檢測
基於深度學習的醫學圖像分割(一)
基於深度學習的語義分割與實例分割(一)
【項目實戰】YOLOV5 +實時吸菸目標檢測+手把手教學+開源全部
【你只需看一次】YOLO 全系列目標檢測算法
Cv要從基礎視覺到圖像處理都熟悉,能用傳統視覺做數據與處理,數據增強等。
9 自然語言處理與語音識別(與8二選一或皆學)
NLP
1:NLP從入門到實戰(一)
2:NLP入門到實戰(二)時間提取
3:詞袋模型與句子相似度計算
4: NLP入門到實戰(四)關鍵詞權重計算算法
5:文本分類器
6:分析句子情感
7:主題建模識別文本
8詞法分析
9句法分析
10 語義分析
11 NLP實戰 文本分類,文本生成與問答與情感分析
12:【項目實戰全解】基於深度學習與自然語言處理的AI文本生成(自動寫作)
13:實體命名識別
學language model, 然後依次學POS tagging, 語法分析PCFG,接著接觸NLP的第一個實際應用,學習機器翻譯(機器翻譯真是融合了各種NLP知識到裡面),先從基於統計的機器翻譯開始學,IBM model1, IBM model 2,再到phrase based machine translation,然後再學log linear model。再往後就可以學習各種應用啦,情感分析,文本分類等,這個可以上斯坦福的那門NLP課程,也是非常棒的課程。
其他介紹
我們平常說地自然語言處理究竟能做些什麼呢?NLP是計算機以一種聰明而有用的方式分析,理解和從人類語言中獲取意義的一種方式。通過利用NLP,開發者可以組織和構建知識來執行自動摘要,翻譯,命名實體識別,關係提取,情感分析,語音識別和話題分割等任務。NLP用於分析文本,使機器了解人的說話方式。這種人機互動使現實世界的應用,如自動文摘,情感分析,主題提取,命名實體識別,零部件,詞性標註,關係提取,詞幹,等等。NLP通常用於文本挖掘,機器翻譯和自動問答。
早期的NLP方法涉及更基於規則的方法,在這種方法中,簡單的機器學習算法被告知要在文本中查找哪些單詞和短語,並在這些短語出現時給出特定的響應。但深度學習是一個更靈活,直觀的方法,在這個方法中,算法學會從許多例子中識別說話者的意圖,就像孩子如何學習人類語言一樣。
常用技術盤點
1.分詞 Word Segmentation
chqiwang/convseg ,基於CNN做中文分詞,提供數據和代碼。(python2.7 )
對應的論文Convolutional Neural Network with Word Embeddings for Chinese Word Segmentation IJCNLP2017.
2.詞預測 Word Prediction
Kyubyong/word_prediction ,基於CNN做詞預測,提供數據和代碼。代碼的準確對比的是Iphone7的鍵盤輸入,最新跟新是2019年7月。
文本蘊涵 Textual Entailment
Steven-Hewitt/Entailment-with-Tensorflow,基於Tensorflow做文本蘊涵,提供數據和代碼。"Textual entailment with TensorFlow: Using neural networks to explore natural language,"的作者開發,但是代碼很久沒更新了,文章發表於2017年。
語音識別 Automatic Speech Recognition
buriburisuri/speech-to-text-wavenet,基於DeepMind WaveNet和Tensorflow 1.0做句子級語音識別。17年的代碼
自動摘要 Automatic Summarisation
PKULCWM/PKUSUMSUM,北大萬小軍老師團隊的自動摘要方法匯總,包含了他們大量paper的實現,支持單文檔摘要、多文檔摘要、topic-focused多文檔摘要。
文本糾錯 Text Correct
atpaino/deep-text-corrector,基於深度學習做文本糾錯,提供數據和代碼。
7.字音轉換 Grapheme to Phoneme
cmusphinx/g2p-seq2seq,基於網紅transformer做, 提供數據和代碼。
複述檢測 Paraphrase Detection 和 問答 Question Answering
Paraphrase-Driven Learning for Open Question Answering, 基於複述驅動學習的開放域問答。
音漢互譯 Pinyin-To-Chinese
Kyubyong/neural_chinese_transliterator,基於CNN做音漢互譯。
情感分析 Sentiment Analysis
情感分析包括的內容太多了,目前沒發現比較全的。推薦兩個適合練手的吧:Deeply Moving: Deep Learning for Sentiment Analysis,http://sentic.net/about/。
手語識別 Sign Language Recognition
Home - SignAll, 該項目在手語識別做的非常成熟。
詞性標註(POS)、 命名實體識別(NER)、 句法分析(parser)、 語義角色標註(SRL) 等。
HIT-SCIR/ltp, 語言技術平臺(Language Technology Platform,LTP)是哈工大社會計算與信息檢索研究中心歷時十年開發的一整套中文語言處理系統。LTP制定了基於XML的語言處理結果表示,並在此基礎上提供了一整套自底向上的豐富而且高效的中文語言處理模塊(包括詞法、句法、語義等6項中文處理核心技術),以及基於動態連結庫(Dynamic Link Library, DLL)的應用程式接口、可視化工具,並且能夠以網絡服務(Web Service)的形式進行使用。
官方網站:http://ltp.ai
詞幹 Word Stemming
snowballstem/snowball, C語言版本。
snowballstem/pystemmer,Python版本,代碼較新。
還有go 語言實現的,這裡不列舉了。
語言識別 Language Identification
(https://github.com/saffsd/langid.py),語言識別比較好的開源工具。
機器翻譯 Machine Translation
OpenNMT/OpenNMT-py, 基於PyTorch的神經機器翻譯,很適合練手。代碼較新,持續有更新。
複述生成 Paraphrase Generation
vsuthichai/paraphraser,基於Tensorflow的句子級複述生成,適合練手。
關係抽取 Relationship Extraction
ankitp94/relationship-extraction,基於核方法的關係抽取。
句子邊界消歧 Sentence Boundary Disambiguation
https://github.com/Orekhov/SentenceBreaking,很有意思。
19.事件抽取 Event Extraction
liuhuanyong/ComplexEventExtraction, 中文複合事件抽取,包括條件事件、因果事件、順承事件、反轉事件等事件抽取,並形成事理圖譜。
詞義消歧 Word Sense Disambiguation
alvations/pywsd,代碼不多,方法簡單,適合練手。
命名實體消歧 Named Entity Disambiguation
dice-group/AGDISTIS,實體消歧是很重要的,尤其對於實體融合(比如知識圖譜中多源數據融合)、實體連結。
幽默檢測 Humor Detection
pln-fing-udelar/pghumor 針對西班牙推文做的,一般用不上,不過可以參考學習一下。
諷刺檢測 Sarcasm Detection
AniSkywalker/SarcasmDetection,基於神經網絡的諷刺檢測。最新更新是2019年9月份
https://www.aclweb.org/anthology/W16-0425.pdf
1
實體連結 Entity Linking
hasibi/EntityLinkingRetrieval-ELR, 參考的ACM論文Exploiting Entity Linking in Queries for Entity Retrieval,實體連結用途非常廣,非常適合練手。
指代消歧 Coreference Resolution
huggingface/neuralcoref,基於神經網絡的指代消歧。持續有更新維護。
NeuralCoref是spaCy 2.1+的管道擴展,它使用神經網絡注釋和解析指代消歧。NeuralCoref已投入生產,已集成到spaCy的NLP管道中,並可擴展到新的培訓數據集。
關鍵詞/短語抽取和社會標籤推薦 Keyphrase Extraction and Social Tag Suggestion
thunlp/THUTag, 用多種方法 實現了多種關鍵詞/短語抽取和社會標籤推薦。
以上整理的庫和連結並不一定是最經典的和最新的,請在學習和使用時注意區分是否是自己需要學習的庫。
語音識別
1讀取和繪製音頻數據
2:將音頻信號轉化為頻閾
3:自定義參數生成音頻信號
4:合成音樂
5:提取頻閾特徵
6:創建隱馬爾科夫模型
7:創建一個語音識別器
8:語音識別實戰項目
10 推薦系統
1:學習基本知識:【詳解】多元的智能推薦系統
2:學習NLP
3:學習分類算法等,KNN等
5:距離計算算法,歐式距離,皮爾遜相關係數
6:相似用戶尋找
7:協同過濾算法:
協同過濾(Collaborative Filtering)作為推薦算法中最經典的類型,包括在線的協同和離線的過濾兩部分。所謂在線協同,就是通過在線數據找到用戶可能喜歡的物品,而離線過濾,則是過濾掉一些不值得推薦的數據,比如推薦值評分低的數據,或者雖然推薦值高但是用戶已經購買的數據。
協同過濾的模型一般為m個物品,m個用戶的數據,只有部分用戶和部分數據之間是有評分數據的,其它部分評分是空白,此時我們要用已有的部分稀疏數據來預測那些空白的物品和數據之間的評分關係,找到最高評分的物品推薦給用戶。
一般來說,協同過濾推薦分為三種類型。第一種是基於用戶(user-based)的協同過濾,第二種是基於項目(item-based)的協同過濾,第三種是基於模型(model based)的協同過濾。
8基於內容,基於物體,基於模型算法
9項目實戰
11 模型優化
Openvino模型優化
OpenVINO是英特爾基於自身現有的硬體平臺開發的一種可以加快高性能計算機視覺和深度學習視覺應用開發速度工具套件,支持各種英特爾平臺的硬體加速器上進行深度學習,並且允許直接異構執行。支持在Windows與Linux系統,Python/C++語言。優化工具包 OpenVINO 讓不懂電腦視覺和深度學習原理的小白可以在很短的時間上手,不必擔心如何建置開發平臺、選擇深度學習框架、訓練及優化模型和硬體加速等問題,只需利用預先訓練及優化過的語義分割模型,很快就可以做出一組看起來很專業的自駕車視覺分析系統。
主要特點:
1:在Intel平臺上提升計算機視覺相關深度學習性能達19倍以上
2:解除CNN-based的網絡在邊緣設備的性能瓶頸
3:對OpenCV,OpenXV*視覺庫的傳統API實現加速與優化
4:基於通用API接口在CPU、GPU、FPGA等設備上運行加上OpenVINO 有2個大模塊,第一個是 OR 他是用於把深度學習訓練好的模型轉換成engine可識別的文件(xml和bin) ,另一個是inference engine 是OpenVINO具體實施單元,利用一個智能引擎完成相應的應用 。
一般流程:
1:根據自己的訓練模型需要配置Mode Optimizer.
2: 根據設置的模型參數運行Model Optimizer,生成相對應的IR(主要是xml和bin)
xml-主要用來描述網絡拓撲結構
bin-包括生成的weights and biases 二進位數據
3: 在實際應用場景種使用Inference Engine測試生成的IR
4: 在應用程式種調用Inference Engine相應接口,將生成的模型IR部署到實際環境中。
Model Optimizer
Model Optimizer 是一個跨平臺命令行工具,用於促進訓練與具體實施平臺中的過渡,主要是進行靜態模型分析 以及根據配置參照自動調整深度模型
Model Optimizer 被用來設計成支持常用的框架(Caffe, TensofFlow, MXNet, Kaldi, ONNX等),相當於封裝了一層,便於進行開發。
Model Optimizer主要工作流程:
1:根據需要所用到的框架,配置Model Optimizer
2: 提供訓練模型作為輸入,包括網絡拓撲以及參數
3:運行Model Optimizer(根據選擇的網絡拓撲進行訓練)
4:IR作為Model Optimizer輸出
Inference Engine:Inference Engine是主要運行單元,並提供相應API
將IR作為輸入
在目標硬體優化執行
提供嵌入式平臺最佳執行性能方案
1:入門:仁兄,可曾聽聞OpenVINO
2:配置:【OpenVino】從入門到實戰篇(二)Ubuntu18.04+Windows 10雙系統環境配置與坑解決
3:【Openvino】從入門到實戰(三)人臉識別+表情檢測+行人檢測+人臉關鍵點檢測
4:推理優化與部署步驟,見官方網站
十二 深度學習算法交流群個人公眾號:內有群連結
本文原創,自己敲出來的,感興趣的點讚關注~