用 Python 圖像識別打造一個小狗分類器

2021-01-18 Python中文社區

項目介紹
通過這個分類器,你只需要上傳照片,就可以得到小狗的品種,以及更多的信息。這就是所謂的「機器學習」,讓機器自己去「學習」。我們今天要做的這個分類任務,是一個「監督學習」的過程。監督學習的主要目標是從有標籤的訓練數據中學習模型,以便對未知或未來的數據做出預測。我給大家講一個例子。
用「房子的尺寸」預測「房子的價格」

    X-房子的尺寸(小狗的圖片)
    Y-房子的價格(小狗的類別)

如圖,我們根據已經有的數據集(圖上的坐標),可以擬合出一條近似符合規律的直線。這樣,再有新的房子尺寸(1250),我們就可以估算出房子的價格(220k)了。效果展示說明過擬合了,可以再增加一些圖片,或者使用數據增強,來減少過擬合。


編寫思路我們可以通過爬蟲技術,把4類圖像(京巴、拉布拉多、柯基、泰迪)保存到本地。總共有840張圖片做訓練集,188張圖片做測試集。1) 統一尺寸為100*100*3(RGB彩色圖像)


img = Image.open(img_path)
new_img = img.resize((100, 100), Image.BILINEAR)
new_img.save(os.path.join('./dog_kinds_after/' + dog_name, jpgfile))

2) 由於數據是自己下載的,需要製作標籤(label),可提取圖像名稱的第一個數字作為類別。(重命名圖片)

kind = 0


images = os.listdir(images_path)
for name in images:
    image_path = images_path + '/'
    os.rename(image_path + name, image_path + str(kind) +'_' + name.split('.')[0]+'.jpg')


ima_train = os.listdir('./train')

# 1.把圖片轉換為矩陣
def read_train_image(filename):
    img = Image.open('./train/' + filename).convert('RGB')
    return np.array(img)

x_train = []

for i in ima_train:
    x_train.append(read_train_image(i))x_train = np.array(x_train)
# 3.提取kind類別作為標籤
y_train = []
for filename in ima_train:
    y_train.append(int(filename.split('_')[0]))


y_train = np.array(y_train)



y_train = y_train - 1  



y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
print(y_test)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')

x_train /= 255
x_test /= 255print(x_train.shape)  
print(y_train.shape)  


3 搭建卷積神經網絡


Keras是基於TensorFlow的深度學習庫,是由純Python編寫而成的高層神經網絡API,也僅支持Python開發。它是為了支持快速實踐而對Tensorflow的再次封裝,讓我們可以不用關注過多的底層細節,能夠把想法快速轉換為結果。

model = Sequential()






model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(100, 100, 3)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))


model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))



對上圖來說,就是根據數據集,不斷的迭代,找到一條最近似的直線(y = kx + b),把參數k,b保存下來,預測的時候直接加載。


sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])



model.fit(x_train, y_train, batch_size=10, epochs=32)



model.save_weights('./dog_weights.h5', overwrite=True)

score = model.evaluate(x_test, y_test, batch_size=10)
print(score)

此時k、b(參數)和x(小狗的圖像)都是已知的了,求k(類別)就完了。


name = input('上傳圖片的名稱(例如:XX.jpg)為:')




model.load_weights('dog_weights.h5')


classes = model.predict_classes(x_test)[0]

target = ['京巴', '拉布拉多', '柯基', '泰迪']



print("識別結果為:" + target[classes])

依賴環境3 Pycharm/Jupyter notebook總結


相關焦點

  • python|圖像識別
    影響力之大和最吸引人的技術就是圖像識別,圖像識別技術是人工智慧的一個重要領域,它是指利用計算機對圖像進行處理、分析和理解,以識別各種不同模式的目標和對象的技術。今天以女神宋慧喬的兩張不同照片為例,利用python識別其相似度,從而判定是否是同一人,同時讓我們對圖像識別有個初步的了解,什麼?照片可以換蒼老師和波老師嗎?我懷疑你們在開車,可是我沒有證據!
  • Serverless 架構下 Python 輕鬆搞定圖像分類
    簡介: 本文將會通過一個有趣的 Python 庫,快速將圖像分類的功能搭建在雲函數上,並且和 API 網關結合,對外提供 API 功能,實現一個 Serverless 架構的「圖像分類 API」。前言圖像分類是人工智慧領域的一個熱門話題。通俗解釋就是,根據各自在圖像信息中所反映的不同特徵,把不同類別的目標區分開來的圖像處理方法。
  • python人工智慧-圖像識別
    PIL:(Python Imaging Library)是Python平臺上的圖像處理標準庫,功能非常強大。pytesseract:圖像識別庫。我這裡使用的是python3.6,PIL不支持python3所以使用如下命令pip install pytesseractpip install pillow如果是python2,則在命令行執行如下命令:pip install pytesseractpip install PIL這時候我們去運行上面的代碼會發現如下錯誤
  • 手把手教你用PyTorch實現圖像分類器(第一部分)
    最後一個項目是用PyTorch創建一個102種不同類型的花的圖像分類器。在做這個final project的時候,很多同學都遇到了類似的問題和挑戰。當我接近完成的時候,我決定與大家分享一些在未來對他人有益的建議和見解。通過3篇短文,介紹如何實現圖像分類器的概念基礎——這是一種能夠理解圖像內容的算法。
  • 如何用Python和深度神經網絡識別圖像?
    Ohio」一案中,曾經就某部電影中出現的某種具體圖像分類問題,說過一句名言「我不準備就其概念給出簡短而明確的定義……但是,我看見的時候自然會知道」(I know it when I see it)。沒有機器對圖像的辨識,能做到嗎?你的好友可能(不止一次)給你演示如何用新買的iPhone X做面部識別解鎖了吧?沒有機器對圖像的辨識,能做到嗎?
  • Python深度學習之圖像識別
    前面有幾講也是關於機器學習在圖像識別中的應用。今天再來講一個關於運用google的深度學習框架tensorflow和keras進行訓練深度神經網絡,並對未知圖像進行預測。導入python模塊導入圖像數據合併列表數據將圖片數據轉化為數組顯示一張圖片訓練神經網絡我們可以看到測試集的準確率達到99.67%
  • 基於python+OpenCV模塊的人臉識別定位技術
    本文將基於OpenCV模塊,在windows作業系統上,利用python語言,進行人臉識別技術的研究。當然OpenCV的應用領域很廣,除了人臉識別之外,它還支持圖像分割、動作識別、視頻處理等技術。代碼的第3行(以上圖為準,空行也算一行),導入別人已經訓練好的臉部識別資料庫。這裡用到的數據是在github上開源的已經訓練好的分類器,如圖所示:需要將對應的數據文件(.xml文件)下載到指定目錄(代碼中的示例,展示的是與.py文件同一目錄下)。第4行的函數cv2.VideoCapture(0)表示調用相機。第6行是讀取攝像機中的影像。
  • python實現高斯樸素貝葉斯分類器
    python實現高斯樸素貝葉斯分類器    在這篇文章中,我們將使用我最喜歡的機器學習庫scikit-learn在Python中實現樸素貝葉斯分類器。接下來,我們將使用經過訓練的樸素貝葉斯(監督分類法)模型來預測人口收入。
  • 掌握深度學習,數據不足也能進行圖像分類!
    ——吳恩達圖像分類即根據固定類別對輸入的圖像設置標籤。儘管計算機視覺過於簡單,但是它在實際中仍有廣泛的應用,而圖像分類就是其中的核心問題之一。在本文中,小芯將示範如何在數據不足的情況下應用深度學習。現已創建特製汽車和巴士分類器兩個數據集,每個數據集包含100個圖像。其中,訓練集有70個圖像,驗證集有30個。挑戰1.
  • 基於多個特徵分塊貝葉斯分類器融合策略的人臉識別方法
    摘要:提出一種基於奇異值分解和貝葉斯決策的人臉特徵提取與識別算法。通過對人臉圖像樣本進行幾何歸一化和灰度均衡化後,結合分塊與加權,運用奇異值分解,分別獲得特徵臉和標準臉,然後採用多個基於特徵分塊的貝葉斯分類器(FBBC)的融合策略進行分類識別。實驗驗證了該方法的有效性,具有良好的精煉和實時性品質指標。
  • 第85講 Python深度學習之圖像識別
    前面有幾講也是關於機器學習在圖像識別中的應用。今天再來講一個關於運用google的深度學習框架tensorflow和keras進行訓練深度神經網絡,並對未知圖像進行預測。導入python模塊導入圖像數據
  • 用python識別驗證碼
    今天,我們就簡單的說下,怎麼用python來處理驗證碼。(注意:我所有的python相關的文章用的都是python3。)準備工作1、tesseract-ocr軟體Tesseract的OCR引擎最先由HP實驗室於1985年開始研發,至1995年時已經成為OCR業內最準確的三款識別引擎之一。然而,HP不久便決定放棄OCR業務,Tesseract也從此塵封。
  • 如何用PyTorch訓練圖像分類器
    醬番梨 整理 | 菠蘿妹原文連結:https://medium.com/@chrisfotache/how-to-train-an-image-classifier-in-pytorch-and-use-it-to-perform-basic-inference-on-single-images-99465a1e9bf5如果你剛剛開始使用PyTorch並想學習如何進行基本的圖像分類
  • Agora新增支持Python:視頻通話中也可做圖像識別了
    Python 擁有很活躍的社區和豐富的第三方庫,Web 框架、爬蟲框架、數據分析框架、機器學習框架等,開發者無需重複造輪子,可以用 Python 進行 Web 編程、網絡編程,開發多媒體應用,進行數據分析,或實現圖像識別等應用。其中圖像識別是最熱門的應用場景之一,也是與實時音視頻契合度最高的應用場景之一。
  • 如何使用Python進行面部識別?
    在本例中,我們將使用opencv庫,該庫支持對圖像進行分區並幫助我們確定感興趣領域。Haar庫本項目中將使用現成的分類器:級聯的Haar分類器,這種特定的分類器將始終適用於灰度圖像。該算法生成了一個幾何圖形,該幾何圖形將識別與我們所分析的相似點。
  • 手把手教你用TensorFlow搭建圖像識別系統(一)|...
    這只是一篇詳細描述如何開始搭建一個機器學習系統,並讓它可以識別所看到圖像的文章。作者Wolfgang Beyer目前現在正在學習人工智慧和機器學習的內容。他認為最好的學習方式不是僅僅閱讀各類材料,而是要真正地去動手搭建一個系統。這就是雷鋒網翻譯本文的目的,也是作者要向你介紹的。
  • Python驗證碼識別:利用pytesser識別簡單圖形驗證碼
    三、一般思路驗證碼識別的一般思路為:1、圖片降噪2、圖片切割3、圖像文本輸出3.1 圖片降噪所謂降噪就是把不需要的信息通通去除,比如背景,幹擾線,幹擾像素等等,只剩下需要識別的文字,讓圖片變成2進位點陣最好。
  • 深度學習與圖像識別 圖像檢測
    CNN等為什麼對圖像領域更加有效,因為其不但關注了全局特徵,更是利用了圖像識別領域非常重要的局部特徵,應該是將局部特徵抽取的算法融入到了神經網絡中。圖像本身的局部數據存在關聯性,而這種局部關聯性的特徵是其他算法無法提取的。深度學習很重要的是對全局和局部特徵的綜合把握(2)深度學習不是一個黑箱系統。
  • 使用Wasserstein GAN生成小狗圖像
    最初我參照JensLee大神的講解,使用keras構造了一個DCGAN(深度卷積生成對抗網絡)模型,來對數據集中的256張小狗圖像進行學習,都是一些類似這樣的狗狗照片:他的方法是通過隨機生成的維度為1000的向量,生成大小為64*64的狗狗圖。
  • 用Python實現一個SVM分類器策略
    正好最近自己學習機器學習,看到reddit上 Please explain Support Vector Machines (SVM) like I am a 5 year old 的帖子,一個字贊!於是整理一下和大家分享。(如有錯歡迎指教!)