ImageAI實現完整的流程:資料集構建、模型訓練、識別預測
在前幾天的部落格裡面,我介紹了ImageAI模組,以及基於官方預訓練得到的模型進行了簡單的識別分析,整體的流程都是比較簡單的,今天想要基於ImageAI模組來完整地實現整個圖片分類識別的流程,也就是說:這裡的資料集構建和模型的訓練以及結果模型的呼叫預測都是自己完成的。ImageAI簡化了模型的搭建流程,所以整體來說還是比較簡單的。
按照官方的講解我們先來構建自己本地的資料集,我這裡採用的是之前kaggle比賽中使用到的貓狗大戰資料集,由於PC機計算能力有限,這裡的資料量我只使用了很少的一部分。
首先建立一個資料夾data,在data裡面建立兩個資料夾,分別是:train和test,看名字就是分別存放的是訓練資料集和測試資料集,在在train和test裡面分別建立各個不同類別的資料資料夾,每個類別單獨存放於一個資料夾中,我們從下面的截圖來簡單看看資料集整體的結構,如下所示:
進入data如下:
進入train如下:
進入cat如下:
完成了資料集的構建後,我們就要開始訓練了,具體實現如下:
#!usr/bin/env python
# encoding:utf-8
from __future__ import division
"""
__Author__:沂水寒城
功能: Python基於ImageAI實現完成的流程:資料集構建、模型訓練、識別預測
"""
import os
import threading
from imageai.Prediction import ImagePrediction
from imageai.Prediction.Custom import ModelTraining
from imageai.Prediction.Custom import CustomImagePrediction
def modelTrain(dataDir='data',classNum=2,epochs=100,batch_size=32):
'''
模型訓練部分
'''
#建立了ModelTraining類的新例項
model_trainer = ModelTraining()
#將模型型別設定為ResNet
model_trainer.setModelTypeAsResNet()
#設定我們想要訓練的資料集的路徑
model_trainer.setDataDirectory(dataDir)
#模型訓練
'''
num_objects:該引數用於指定影像資料集中物件的數量
num_experiments:該引數用於指定將對影像訓練的次數,也稱為epochs
enhance_data(可選):該引數用於指定是否生成訓練影像的副本以獲得更好的效能。
batch_size:該引數用於指定批次數量。由於記憶體限制,需要分批訓練,直到所有批次訓練集都完成為止。
show_network_summary:該引數用於指定是否在控制檯中顯示訓練的過程。
'''
model_trainer.trainModel(num_objects=classNum, num_experiments=epochs,enhance_data=True,
batch_size=batch_size, show_network_summary=True)
print('Model Train Finished!!!')
def modelPredict(model_path='data/models/model_ex-001_acc-0.500000.h5',
class_path='data/json/model_class.json',
pic_path='a.jpg',classNum=2,resNum=5):
'''
模型預測部分
prediction_speed[模型載入的速度]: fast faster fastest
'''
prediction=CustomImagePrediction()
prediction.setModelTypeAsResNet()
prediction.setModelPath(model_path)
prediction.setJsonPath(class_path)
prediction.loadModel(num_objects=classNum,prediction_speed='fastest')
predictions,probabilities=prediction.predictImage(pic_path,result_count=resNum)
for eachPrediction, eachProbability in zip(predictions, probabilities):
print(eachPrediction+" : "+str(eachProbability))
if __name__=='__main__':
#模型訓練
modelTrain(dataDir='data',classNum=2,epochs=10,batch_size=8)
#模型識別預測
modelPredict(model_path='data/models/model_ex-001_acc-0.500000.h5',
class_path='data/json/model_class.json',
pic_path='test.jpg',classNum=2,resNum=5)
基於ImageAI來構建模型和預測真的是程式碼量少了很多,上面60行左右的程式碼完成了整理流程的工作,不得不說還是很強大的。
接下來我們開始模型的訓練,具體輸出如下:
預設只設定了10次迭代,因為迭代次數越多計算時間越長,這裡只是一個demo,所以沒有迭代很多次,迭代輸出結果如下:
訓練完成截圖如下:
完成了訓練的工作後,在我們最初設定的資料集目錄data裡面會出現類別資料檔案和模型資料檔案,截圖如下:
接下來我們進行簡單的預測識別分析,從測試集合裡面分別選取一張貓和狗的影像,分別如下:
test.jpg
test2.jpg
接下來啟動模型預測,輸出如下:
從結果上來看,第一張圖片識別成了cat,識別錯誤了,第二張圖片識別正確了,這個肯定是由於模型訓練所用的資料量太少的問題,一共一個類別才十幾張,肯定是不夠的,這裡只是為了給一個demo,熟悉一下基於ImageAI模組來完整實現真個圖片識別的過程。
學習記錄一下!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2655245/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 首次!用合成人臉資料集訓練的識別模型,效能高於真實資料集模型
- 實驗12-使用keras預訓練模型完成貓狗識別Keras模型
- DeepLab 使用 Cityscapes 資料集訓練模型模型
- TensorFlow 呼叫預訓練好的模型—— Python 實現模型Python
- 【小白學PyTorch】5 torchvision預訓練模型與資料集全覽PyTorch模型
- Yolov8訓練識別模型YOLO模型
- Yolov5_v6.2訓練資料集進行預測YOLO
- 模型訓練:資料預處理和預載入模型
- 知識增強的預訓練語言模型系列之ERNIE:如何為預訓練語言模型注入知識模型
- 資料集訓練
- 如何構建自定義人臉識別資料集
- 基於pytorch實現Resnet對本地資料集的訓練PyTorch
- 海南話語音識別模型——模型訓練(一)模型
- 使用DeepKE訓練命名實體識別模型DEMO(官方DEMO)模型
- 資料集訓練+1
- fashion資料集訓練
- label studio 結合 MMDetection 實現資料集自動標記、模型迭代訓練的閉環模型
- 知識增廣的預訓練語言模型K-BERT:將知識圖譜作為訓練語料模型
- 機器學習實戰 | 性別預測模型的構建與優化機器學習模型優化
- yolov5 自建資料集訓練測試YOLO
- 文件智慧:通用文件預訓練模型與資料集,推動NLP落地升級模型
- 亮資料:高效率資料採集,加速大模型訓練!大模型
- 使用自己的資料集訓練MobileNet、ResNet實現影象分類(TensorFlow)
- PyTorch預訓練Bert模型PyTorch模型
- 自訓練 + 預訓練 = 更好的自然語言理解模型模型
- NLP領域預訓練模型的現狀及分析模型
- Alink漫談(七) : 如何劃分訓練資料集和測試資料集
- 預訓練模型時代:告別finetune, 擁抱adapter模型APT
- LUSE: 無監督資料預訓練短文字編碼模型模型
- 預訓練模型 & Fine-tuning模型
- 【AI】Pytorch_預訓練模型AIPyTorch模型
- 【預訓練語言模型】 使用Transformers庫進行BERT預訓練模型ORM
- MxNet預訓練模型到Pytorch模型的轉換模型PyTorch
- XLNet預訓練模型,看這篇就夠了!(程式碼實現)模型
- 訓練集、驗證集、測試集
- Mxnet速查_CPU和GPU的mnist預測訓練_模型匯出_模型匯入再預測_匯出onnx並預測GPU模型
- Keras速查_CPU和GPU的mnist預測訓練_模型匯出_模型匯入再預測_匯出onnx並預測KerasGPU模型
- Mxnet R FCN 訓練自己的資料集