如何用Python和深度神經網絡識別圖像?

2021-01-15 玉樹芝蘭

(由於微信公眾號外部連結的限制,文中的部分連結可能無法正確打開。如有需要,請點擊文末的「閱讀原文」按鈕,訪問可以正常顯示外鏈的版本。)

視覺

進化的作用,讓人類對圖像的處理非常高效。

這裡,我給你展示一張照片。

如果我這樣問你:

你能否分辨出圖片中哪個是貓,哪個是狗?

你可能立即會覺得自己遭受到了莫大的侮辱。並且大聲質問我:你覺得我智商有問題嗎?!

息怒。

換一個問法:

你能否把自己分辨貓狗圖片的方法,描述成嚴格的規則,教給計算機,以便讓它替我們人類分辨成千上萬張圖片呢?

對大多數人來說,此時感受到的,就不是羞辱,而是壓力了。

如果你是個有毅力的人,可能會嘗試各種判別標準:圖片某個位置的像素顏色、某個局部的邊緣形狀、某個水平位置的連續顏色長度……

你把這些描述告訴計算機,它果然就可以判斷出左邊的貓和右邊的狗了。

問題是,計算機真的會分辨貓狗圖片了嗎?

我又拿出一張照片給你。

你會發現,幾乎所有的規則定義,都需要改寫。

當機器好不容易可以用近似投機取巧的方法正確分辨了這兩張圖片裡面的動物時,我又拿出來一張新圖片……

幾個小時以後,你決定放棄

彆氣餒。

你遭遇到的,並不是新問題。就連大法官,也有過同樣的煩惱。

1964年,美國最高法院的大法官Potter Stewart在「Jacobellis v. Ohio」一案中,曾經就某部電影中出現的某種具體圖像分類問題,說過一句名言「我不準備就其概念給出簡短而明確的定義……但是,我看見的時候自然會知道」(I know it when I see it)。

原文如下:

I shall not today attempt further to define the kinds of material I understand to be embraced within that shorthand description (「hard-core pornography」), and perhaps I could never succeed in intelligibly doing so. But I know it when I see it, and the motion picture involved in this case is not that.

考慮到精神文明建設的需要,這一段就不翻譯了。

人類沒法把圖片分辨的規則詳細、具體而準確地描述給計算機,是不是意味著計算機不能辨識圖片呢?

當然不是。

2017年12月份的《科學美國人》雜誌,就把「視覺人工智慧」(AI that sees like humans)定義為2017年新興技術之一。

你早已聽說過自動駕駛汽車的神奇吧?沒有機器對圖像的辨識,能做到嗎?

你的好友可能(不止一次)給你演示如何用新買的iPhone X做面部識別解鎖了吧?沒有機器對圖像的辨識,能做到嗎?

醫學領域裡,計算機對於科學影像(如X光片)的分析能力,已經超過有多年從業經驗的醫生了。沒有機器對圖像的辨識,能做到嗎?

你可能一下子覺得有些迷茫了——這難道是奇蹟?

不是。

計算機所做的,是學習

通過學習足夠數量的樣本,機器可以從數據中自己構建模型。其中,可能涉及大量的判斷準則。但是,人類不需要告訴機器任何一條。它是完全自己領悟和掌握的。

你可能會覺得很興奮。

那麼,下面我來告訴你一個更令你興奮的消息——你自己也能很輕易地構建圖片分類系統!

不信?請跟著我下面的介紹,來試試看。

數據

咱們就不辨識貓和狗了,這個問題有點不夠新鮮。

咱們來分辨機器貓,好不好?

對,我說的就是哆啦a夢。

把它和誰進行區分呢?

一開始我想找霸王龍,後來覺得這樣簡直是作弊,因為他倆長得實在差別太大

既然哆啦a夢是機器人,咱們就另外找個機器人來區分吧。

一提到機器人,我立刻就想起來了它。

對,機器人瓦力(WALLE)。

我給你準備好了119張哆啦a夢的照片,和80張瓦力的照片。圖片已經上傳到了這個Github項目。

請點擊這個連結,下載壓縮包。然後在本地解壓。作為咱們的演示目錄

解壓後,你會看到目錄下有個image文件夾,其中包含兩個子目錄,分別是doraemon和walle。

打開其中doraemon的目錄,我們看看都有哪些圖片。

可以看到,哆啦a夢的圖片真是五花八門。各種場景、背景顏色、表情、動作、角度……不一而足。

這些圖片,大小不一,長寬比例也各不相同。

我們再來看看瓦力,也是類似的狀況。

數據已經有了,下面我們來準備一下環境配置。

環境

我們使用Python集成運行環境Anaconda。

請到這個網址 下載最新版的Anaconda。下拉頁面,找到下載位置。根據你目前使用的系統,網站會自動推薦給你適合的版本下載。我使用的是macOS,下載文件格式為pkg。

下載頁面區左側是Python 3.6版,右側是2.7版。請選擇2.7版本。

雙擊下載後的pkg文件,根據中文提示一步步安裝即可。

安裝好Anaconda後,我們需要安裝TuriCreate。

請到你的「終端」(Linux, macOS)或者「命令提示符」(Windows)下面,進入咱們剛剛下載解壓後的樣例目錄。

執行以下命令,我們來創建一個Anaconda虛擬環境,名字叫做turi。

conda create -n turi python=2.7 anaconda

然後,我們激活turi虛擬環境。

source activate turi

在這個環境中,我們安裝最新版的TuriCreate。

pip install -U turicreate

安裝完畢後,執行:

jupyter notebook

這樣就進入到了Jupyter筆記本環境。我們新建一個Python 2筆記本。

這樣就出現了一個空白筆記本。

點擊左上角筆記本名稱,修改為有意義的筆記本名「demo-python-image-classification」。

準備工作完畢,下面我們就可以開始編寫程序了。

代碼

首先,我們讀入TuriCreate軟體包。它是蘋果併購來的機器學習框架,為開發者提供非常簡便的數據分析與人工智慧接口。

import turicreate as tc

我們指定圖像所在的文件夾image。

img_folder = 'image'

前面介紹了,image下,有哆啦a夢和瓦力這兩個文件夾。注意如果將來你需要辨別其他的圖片(例如貓和狗),請把不同類別的圖片也在image中分別存入不同的文件夾,這些文件夾的名稱就是圖片的類別名(cat和dog)。

然後,我們讓TuriCreate讀取所有的圖像文件,並且存儲到data數據框。

data = tc.image_analysis.load_images(img_folder, with_path=True)

這裡可能會有錯誤信息。

Unsupported image format. Supported formats are JPEG and PNG    file: /Users/wsy/Dropbox/var/wsywork/learn/demo-workshops/demo-python-image-classification/image/walle/.DS_Store

本例中提示,有幾個.DS_Store文件,TuriCreate不認識,無法當作圖片來讀取。

這些.DS_Store文件,是蘋果macOS系統創建的隱藏文件,用來保存目錄的自定義屬性,例如圖標位置或背景顏色。

我們忽略這些信息即可。

下面,我們來看看,data數據框裡面都有什麼。

data

可以看到,data包含兩列信息,第一列是圖片的地址,第二列是圖片的長寬描述。

因為我們使用了119張哆啦a夢圖片,80張瓦力圖片,所以總共的數據量是199條。數據讀取完整性驗證通過。

下面,我們需要讓TuriCreate了解不同圖片的標記(label)信息。也就是,一張圖片到底是哆啦a夢,還是瓦力呢?

這就是為什麼一開始,你就得把不同的圖片分類保存到不同的文件夾下面。

此時,我們利用文件夾名稱,來給圖片打標記。

data['label'] = data['path'].apply(lambda path: 'doraemon' if 'doraemon' in path else 'walle')

這條語句,把doraemon目錄下的圖片,在data數據框裡打標記為doraemon。反之就都視為瓦力(walle)。

我們來看看標記之後的data數據框。

data

可以看到,數據的條目數量(行數)是一致的,只是多出來了一個標記列(label),說明圖片的類別。

我們把數據存儲一下。

data.save('doraemon-walle.sframe')

這個存儲動作,讓我們保存到目前的數據處理結果。之後的分析,只需要讀入這個sframe文件就可以了,不需要從頭去跟文件夾打交道了。

從這個例子裡,你可能看不出什麼優勢。但是想像一下,如果你的圖片有好幾個G,甚至幾個T,每次做分析處理,都從頭讀取文件和打標記,就會非常耗時。

我們深入探索一下數據框。

TuriCreate提供了非常方便的explore()函數,幫助我們直觀探索數據框信息。

data.explore()

這時候,TuriCreate會彈出一個頁面,給我們展示數據框裡面的內容。

原先列印data數據框,我們只能看到圖片的尺寸,此時卻可以瀏覽圖片的內容。

如果你覺得圖片太小,沒關係。把滑鼠懸停在某張縮略圖上面,就可以看到大圖。

數據框探索完畢。我們回到notebook下面,繼續寫代碼。

這裡我們讓TuriCreate把data數據框分為訓練集合和測試集合。

train_data, test_data = data.random_split(0.8, seed=2)

訓練集合是用來讓機器進行觀察學習的。電腦會利用訓練集合的數據自己建立模型。但是模型的效果(例如分類的準確程度)如何?我們需要用測試集來進行驗證測試。

這就如同老師不應該把考試題目都拿來給學生做作業和練習一樣。只有考學生沒見過的題,才能區分學生是掌握了正確的解題方法,還是死記硬背了作業答案。

我們讓TuriCreate把80%的數據分給了訓練集,把剩餘20%的數據拿到一邊,等待測試。這裡我設定了隨機種子取值為2,這是為了保證數據拆分的一致性。以便重複驗證我們的結果。

好了,下面我們讓機器開始觀察學習訓練集中的每一個數據,並且嘗試自己建立模型。

下面代碼第一次執行的時候,需要等候一段時間。因為TuriCreate需要從蘋果開發者官網上下載一些數據。這些數據大概100M左右。

需要的時長,依你和蘋果伺服器的連接速度而異。反正在我這兒,下載挺慢的。

好在只有第一次需要下載。之後的重複執行,會跳過下載步驟。

model = tc.image_classifier.create(train_data, target='label')

下載完畢後,你會看到TuriCreate的訓練信息。

Resizing images...
Performing feature extraction on resized images...
Completed 168/168
PROGRESS: Creating a validation set from 5 percent of training data. This may take a while.
         You can set ``validation_set=None`` to disable validation tracking.

你會發現,TuriCreateh會幫助你把圖片進行尺寸變換,並且自動抓取圖片的特徵。然後它會從訓練集裡面抽取5%的數據作為驗證集,不斷迭代尋找最優的參數配置,達到最佳模型。

這裡可能會有一些警告信息,忽略就可以了。

當你看到下列信息的時候,意味著訓練工作已經順利完成了。

可以看到,幾個輪次下來,不論是訓練的準確度,還是驗證的準確度,都已經非常高了。

下面,我們用獲得的圖片分類模型,來對測試集做預測。

predictions = model.predict(test_data)

我們把預測的結果(一系列圖片對應的標記序列)存入了predictions變量。

然後,我們讓TuriCreate告訴我們,在測試集上,我們的模型表現如何。

先別急著往下看,猜猜結果正確率大概是多少?從0到1之間,猜測一個數字。

猜完後,請繼續。

metrics = model.evaluate(test_data)
print(metrics['accuracy'])

這就是正確率的結果:

0.967741935484

我第一次看見的時候,震驚不已。

我們只用了100多個數據做了訓練,居然就能在測試集(機器沒有見過的圖片數據)上,獲得如此高的辨識準確度。

為了驗證這不是準確率計算部分代碼的失誤,我們來實際看看預測結果。

predictions

這是列印出的預測標記序列:

dtype: str
Rows: 31
['doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'doraemon', 'walle', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'walle']

再看看實際的標籤。

test_data['label']

這是實際標記序列:

dtype: str
Rows: 31
['doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'doraemon', 'walle', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'walle']

我們查找一下,到底哪些圖片預測失誤了。

你當然可以一個個對比著檢查。但是如果你的測試集有成千上萬的數據,這樣做效率就會很低。

我們分析的方法,是首先找出預測標記序列(predictions)和原始標記序列(test_data['label'])之間有哪些不一致,然後在測試數據集裡展示這些不一致的位置。

test_data[test_data['label'] != predictions]

我們發現,在31個測試數據中,只有1處標記預測發生了失誤。原始的標記是瓦力,我們的模型預測結果是哆啦a夢。

我們獲得這個數據點對應的原始文件路徑。

wrong_pred_img_path = test_data[predictions != test_data['label']][0]['path']

然後,我們把圖像讀取到img變量。

img = tc.Image(wrong_pred_img_path)

用TuriCreate提供的show()函數,我們查看一下這張圖片的內容。

img.show()

因為深度學習的一個問題在於模型過於複雜,所以我們無法精確判別機器是怎麼錯誤辨識這張圖的。但是我們不難發現這張圖片有些特徵——除了瓦力以外,還有另外一個機器人。

如果你看過這部電影,應該知道兩個機器人之間的關係。這裡我們按下不表。問題在於,這個右上方的機器人圓頭圓腦,看上去與稜角分明的瓦力差別很大。但是,別忘了,哆啦a夢也是圓頭圓腦的。

原理

按照上面一節的代碼執行後,你應該已經了解如何構建自己的圖片分類系統了。在沒有任何原理知識的情況下,你研製的這個模型已經做得非常棒了。不是嗎?

如果你對原理不感興趣,請跳過這一部分,看「小結」。

如果你對知識喜歡刨根問底,那咱們來講講原理。

雖然不過寫了10幾行代碼,但是你構建的模型卻足夠複雜和高大上。它就是傳說中的卷積神經網絡(Convolutional Neural Network, CNN)。

它是深度機器學習模型的一種。最為簡單的卷積神經網絡大概長這個樣子:

最左邊的,是輸入層。也就是咱們輸入的圖片。本例中,是哆啦a夢和瓦力。

在計算機裡,圖片是按照不同顏色(RGB,即Red, Green, Blue)分層存儲的。就像下面這個例子。

根據解析度不同,電腦會把每一層的圖片存成某種大小的矩陣。對應某個行列位置,存的就是個數字而已。

這就是為什麼,在運行代碼的時候,你會發現TuriCreate首先做的,就是重新設置圖片的大小。因為如果輸入圖片大小各異的話,下面步驟無法進行。

有了輸入數據,就順序進入下一層,也就是卷積層(Convolutional Layer)。

卷積層聽起來似乎很神秘和複雜。但是原理非常簡單。它是由若干個過濾器組成的。每個過濾器就是一個小矩陣。

使用的時候,在輸入數據上,移動這個小矩陣,跟原先與矩陣重疊的位置上的數字做乘法後加在一起。這樣原先的一個矩陣,就變成了「卷積」之後的一個數字。

下面這張動圖,很形象地為你解釋了這一過程。

這個過程,就是不斷從一個矩陣上去尋找某種特徵。這種特徵可能是某個邊緣的形狀之類。

再下一層,叫做「池化層」(Pooling Layer)。這個翻譯簡直讓人無語。我覺得翻譯成「匯總層」或者「採樣層」都要好許多。下文中,我們稱其為「採樣層」。

採樣的目的,是避免讓機器認為「必須在左上角的方格位置,有一個尖尖的邊緣」。實際上,在一張圖片裡,我們要識別的對象可能發生位移。因此我們需要用匯總採樣的方式模糊某個特徵的位置,將其從「某個具體的點」,擴展成「某個區域」。

如果這樣說,讓你覺得不夠直觀,請參考下面這張動圖。

這裡使用的是「最大值採樣」(Max-Pooling)。以原先的2x2範圍作為一個分塊,從中找到最大值,記錄在新的結果矩陣裡。

一個有用的規律是,隨著層數不斷向右推進,一般結果圖像(其實正規地說,應該叫做矩陣)會變得越來越小,但是層數會變得越來越多。

只有這樣,我們才能把圖片中的規律信息抽取出來,並且儘量掌握足夠多的模式。

如果你還是覺得不過癮,請訪問這個網站。

它為你生動解析了卷積神經網絡中,各個層次上到底發生了什麼。

左上角是用戶輸入位置。請利用滑鼠,手寫一個數字(0-9)。寫得難看一些也沒有關係。

我輸入了一個7。

觀察輸出結果,模型正確判斷第一選擇為7,第二可能性為3。回答正確。

讓我們觀察模型建構的細節。

我們把滑鼠挪到第一個卷積層。停在任意一個像素上。電腦就告訴我們這個點是從上一層圖形中哪幾個像素,經過特徵檢測(feature detection)得來的。

同理,在第一個Max pooling層上懸停,電腦也可以可視化展示給我們,該像素是從哪幾個像素區塊裡抽樣獲得的。

這個網站,值得你花時間多玩兒一會兒。它可以幫助你理解卷積神經網絡的內涵。

回顧我們的示例圖:

下一層叫做全連接層(Fully Connected Layer),它其實就是把上一層輸出的若干個矩陣全部壓縮到一維,變成一個長長的輸出結果。

之後是輸出層,對應的結果就是我們需要讓機器掌握的分類。

如果只看最後兩層,你會很容易把它跟之前學過的深度神經網絡(Deep Neural Network, DNN)聯繫起來。

既然我們已經有了深度神經網絡,為什麼還要如此費力去使用卷積層和採樣層,導致模型如此複雜呢?

這裡出於兩個考慮:

首先是計算量。圖片數據的輸入量一般比較大,如果我們直接用若干深度神經層將其連接到輸出層,則每一層的輸入輸出數量都很龐大,總計算量是難以想像的。

其次是模式特徵的抓取。即便是使用非常龐大的計算量,深度神經網絡對於圖片模式的識別效果也未必盡如人意。因為它學習了太多噪聲。而卷積層和採樣層的引入,可以有效過濾掉噪聲,突出圖片中的模式對訓練結果的影響。

你可能會想,咱們只編寫了10幾行代碼而已,使用的卷積神經網絡一定跟上圖差不多,只有4、5層的樣子吧?

不是這樣的,你用的層數,有足足50層呢!

它的學名,叫做Resnet-50,是微軟的研發成果,曾經在2015年,贏得過ILSRVC比賽。在ImageNet數據集上,它的分類辨識效果,已經超越人類

我把對應論文的地址附在這裡,如果你有興趣,可以參考。

請看上圖中最下面的那一個,就是它的大略樣子。

足夠深度,足夠複雜吧。

如果你之前對深度神經網絡有一些了解,一定會更加覺得不可思議。這麼多層,這麼少的訓練數據量,怎麼能獲得如此好的測試結果呢?而如果要獲得好的訓練效果,大量圖片的訓練過程,豈不是應該花很長時間嗎?

沒錯,如果你自己從頭搭建一個Resnet-50,並且在ImageNet數據集上做訓練,那麼即便你有很好的硬體設備(GPU),也需要很長時間。

如果你在自己的筆記本上訓練……算了吧。

那麼,TuriCreate難道真的是個奇蹟?既不需要花費長時間訓練,又只需要小樣本,就能獲得高水平的分類效果?

不,數據科學裡沒有什麼奇蹟。

到底是什麼原因導致這種看似神奇的效果呢?這個問題留作思考題,請善用搜尋引擎和問答網站,來幫助自己尋找答案。

小結

通過本文,你已掌握了以下內容:

如何在Anaconda虛擬環境下,安裝蘋果公司的機器學習框架TuriCreate。

如何在TuriCreate中讀入文件夾中的圖片數據。並且利用文件夾的名稱,給圖片打上標記。

如何在TuriCreate中訓練深度神經網絡,以分辨圖片。

如何利用測試數據集,檢驗圖片分類的效果。並且找出分類錯誤的圖片。

卷積神經網絡(Convolutional Neural Network, CNN)的基本構成和工作原理。

但是由於篇幅所限,我們沒有提及或深入解釋以下問題:

如何批量獲取訓練與測試圖片數據。

如何利用預處理功能,轉換TuriCreate不能識別的圖片格式。

如何從頭搭建一個卷積神經網絡(Convolutional Neural Network, CNN),對於模型的層次和參數做到完全掌控。

如何既不需要花費長時間訓練,又只需要小樣本,就能獲得高水平的分類效果(提示關鍵詞:遷移學習,transfer learning)。

請你在實踐中,思考上述問題。歡迎留言和發送郵件,與我交流你的思考所得。

討論

你之前做過圖片分類任務嗎?你是如何處理的?用到了哪些好用的工具?比起咱們的方法,有什麼優缺點?歡迎留言,把你的經驗和思考分享給大家,我們一起交流討論。

如果你對我的文章感興趣,歡迎點讚,並且微信關注和置頂我的公眾號「玉樹芝蘭」(nkwangshuyi)。

如果本文可能對你身邊的親友有幫助,也歡迎你把本文通過微博或朋友圈分享給他們。讓他們一起參與到我們的討論中來。

如果喜歡我的文章,請微信掃描下方二維碼,關注並置頂我的公眾號「玉樹芝蘭」。

如果你希望支持我繼續輸出更多的優質內容,歡迎微信識別下方的讚賞碼,打賞本文。感謝支持!

歡迎微信掃碼加入我的「知識星球」圈子。第一時間分享給你我的發現和思考,優先解答你的疑問。

相關焦點

  • Python深度學習之圖像識別
    作者 | 周偉能 來源 | 小叮噹講SAS和Python Python在機器學習(人工智慧,AI)方面有著很大的優勢。談到人工智慧,一般也會談到其實現的語言Python。前面有幾講也是關於機器學習在圖像識別中的應用。今天再來講一個關於運用google的深度學習框架tensorflow和keras進行訓練深度神經網絡,並對未知圖像進行預測。
  • 第85講 Python深度學習之圖像識別
    前面有幾講也是關於機器學習在圖像識別中的應用。今天再來講一個關於運用google的深度學習框架tensorflow和keras進行訓練深度神經網絡,並對未知圖像進行預測。導入python模塊導入圖像數據
  • 深度卷積神經網絡CNNs的多GPU並行框架 及其在圖像識別的應用
    將深度卷積神經網絡(Convolutional Neural Networks, 簡稱CNNs)用於圖像識別在研究領域吸引著越來越多目光。由於卷積神經網絡結構非常適合模型並行的訓練,因此以模型並行+數據並行的方式來加速Deep CNNs訓練,可預期取得較大收穫。
  • 深度學習不是萬靈藥!神經網絡3D建模其實只是圖像識別?
    但近期一項研究表明,幾乎所有基於深度神經網絡的3D中重建工作,實際上並不是重建,而是圖像分類。深度學習並不是萬能的!深度學習並不是萬靈藥。近幾年,隨著深度學習的大熱,許多研究攻克了如何從單張圖片生成3D模型。從某些方面似乎再次驗證了深度學習的神奇——doing almost the impossible。
  • 深度學習與圖像識別 圖像檢測
    CNN等為什麼對圖像領域更加有效,因為其不但關注了全局特徵,更是利用了圖像識別領域非常重要的局部特徵,應該是將局部特徵抽取的算法融入到了神經網絡中。圖像本身的局部數據存在關聯性,而這種局部關聯性的特徵是其他算法無法提取的。深度學習很重要的是對全局和局部特徵的綜合把握(2)深度學習不是一個黑箱系統。
  • 如何通過人工神經網絡實現圖像識別?
    模式識別領域中大多數課題都會遇到的基本問題,並且在不同的課題中,由於具體的條件不同,解決的方法也不盡相同,因而目標識別的研究仍具有理論和實踐意義。這裡討論的是將要識別的目標物體用成像頭(紅外或可見光等)攝入後形成的圖像信號序列送入計算機,用神經網絡識別圖像的問題。一、BP 神經網絡BP 網絡是採用Widrow-Hoff 學習算法和非線性可微轉移函數的多層網絡。
  • 深度學習技術和卷積神經網絡(CNN)讓機器視覺識別更智能
    隨著人工智慧技術的進步,深度學習技術(DL)和卷積神經網絡技術(CNN)領域的人工智慧(AI)被引入到機器視覺圖像處理系統的應用中來,從而幫助機器學習和機器檢測缺陷更加高效,使機器視覺識別的過程更加精確。也讓使用這些技術的企業可以從智能化中獲得更高的生產經營效益。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    6背景圖像 7敵人飛機 8英雄飛機 9發射子彈以及碰撞檢測 4部分視頻課程 1網絡編程 2多任務 3web伺服器v3.1 4python高級語法v3.1 5mysql資料庫v3.1 6mini-web框架v3.1 7html和css
  • python|圖像識別
    影響力之大和最吸引人的技術就是圖像識別,圖像識別技術是人工智慧的一個重要領域,它是指利用計算機對圖像進行處理、分析和理解,以識別各種不同模式的目標和對象的技術。今天以女神宋慧喬的兩張不同照片為例,利用python識別其相似度,從而判定是否是同一人,同時讓我們對圖像識別有個初步的了解,什麼?照片可以換蒼老師和波老師嗎?我懷疑你們在開車,可是我沒有證據!
  • 圖像識別中的深度學習【香港中文大學王曉剛】
    深度學習是近十年來人工智慧領域取得的重要突破。它在語音識別、自然語言處理、計算機視覺、圖像與視頻分析、多媒體等諸多領域的應用取得了巨大成功。現有的深度學習模型屬於神經網絡。神經網絡的起源可追溯到20世紀40年代,曾經在八九十年代流行。神經網絡試圖通過模擬大腦認知的機理解決各種機器學習問題。
  • 神經網絡和深度學習簡史(全)
    讓我告訴你,說來話長——這不僅僅是一個有關神經網絡的故事,也不僅僅是一個有關一系列研究突破的故事,這些突破讓深度學習變得比「大型神經網絡」更加有趣,而是一個有關幾位不放棄的研究員如何熬過黑暗數十年,直至拯救神經網絡,實現深度學習夢想的故事。
  • 深度學習:神經網絡算法的昨天、今天和明天
    類似地,通過計算機編程,計算機科學家讓一層包含參數(Parameter)和權重(Weight)的函數模擬神經元內部的操作,用非線性運算的疊加模擬神經元之間的連接,最終實現對信息的重新整合,進而輸出分類或預測的結果。針對神經網絡輸出結果與真實結果之間的差異,神經網絡會通過梯度(Gradient)逐層調整相應的權重以縮小差異,從而達到深度學習的目的。
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    共4天8節,講解機器學習和深度學習的模型理論和代碼實踐,梳理機器學習、深度學習、計算機視覺的技術框架,從根本上解決如何使用模型、優化模型的問題;每次課中,首先闡述算法理論和少量公式推導,然後使用真實數據做數據挖掘、機器學習、深度學習的數據分析、特徵選擇、調參和結果比較。
  • 人工智慧黑盒揭秘:深度神經網絡可視化技術
    >深度神經網絡(Deep Neural Network,DNN)作為當前人工智慧應用的首選模型,在圖像識別,語音識別,自然語言處理,計算生物,金融大數據等領域成效顯著。深度神經網絡又是最為複雜的機器學習模型,其可解釋性與可視化性更加具有挑戰性。網絡模型為什麼起作用,它是否足夠好,圖像識別是如何抽象出「貓」這個概念的?本段分析了幾種典型深度神經網絡可視化技術,詳盡展示了前沿的可視化原理以及解釋性效果。
  • 機器視角:長文揭秘圖像處理和卷積神經網絡架構
    引言先坦白地說,有一段時間我無法真正理解深度學習。我查看相關研究論文和文章,感覺深度學習異常複雜。我嘗試去理解神經網絡及其變體,但依然感到困難。接著有一天,我決定一步一步,從基礎開始。我把技術操作的步驟分解開來,並手動執行這些步驟(和計算),直到我理解它們如何工作。這相當費時,且令人緊張,但是結果非凡。
  • 近年來深度神經網絡模型不斷迎來重大突破
    近年來深度神經網絡模型不斷迎來重大突破,由深度學習為代表的機器學習相關研究取得了長足進步。但對機器學習研究普及者和研究機構來說,由於對機器學習原理、應用實踐以及技術應用多方面的缺乏概念理解,這些機器學習技術發展存在顯著的「彎路」。
  • python人工智慧-圖像識別
    PIL:(Python Imaging Library)是Python平臺上的圖像處理標準庫,功能非常強大。pytesseract:圖像識別庫。我這裡使用的是python3.6,PIL不支持python3所以使用如下命令pip install pytesseractpip install pillow如果是python2,則在命令行執行如下命令:pip install pytesseractpip install PIL這時候我們去運行上面的代碼會發現如下錯誤
  • 深度| 2017 CV 技術報告之圖像分割、超解析度和動作識別
    ,它可以將圖像分割任務用於分析生物神經網絡的連接方式,其能力與最先進的電子顯微鏡分割方法不相上下。毫無疑問,風格遷移以新穎的方式使用了神經網絡,從而進入了公眾領域。比較著名的案例如 Facebook 去年進行的整合以及像 Prisma[74] 和 Artomatix[75] 等公司的成果。雖然風格遷移這種技術由來已久,但是直到 2015 年,它可以用神經網絡進行處理的方法才隨著《藝術風格的神經算法》[76] 的發表而被人知曉。
  • 手把手教你用TensorFlow搭建圖像識別系統(一)|...
    你可以在網上搜羅到一大堆相關話題的文章,而這篇文章也並不是討論人工智慧是否會奴役人類或搶走人們飯碗之類的話題,畢竟相關的各種推論和謠言已經滿天飛了。這只是一篇詳細描述如何開始搭建一個機器學習系統,並讓它可以識別所看到圖像的文章。作者Wolfgang Beyer目前現在正在學習人工智慧和機器學習的內容。
  • 盤點人臉識別中的黑科技——人工神經網絡
    他們發現大腦中編碼人臉的方式和成功地執行人工智慧系統(稱為深度神經網絡)的驚人相似性。當我們看一張面孔時,視覺皮層中的神經元群被激活並發射它們的信號。事實上,某些神經元對面部有選擇性的反應,而不是對其他物體的反應。但是單個神經元的激活是如何共同產生面部感知和識別的呢?