HOG + SVM 实现图片分类(python3)
前言
大家能看到這篇文章,想必對HOG還是有些了解了,那我就不贅述了,其實我自己不太懂,但是還是比剛開始好一些了。下面我的代碼是參考這位博主的:點我查看
上面那位博主是用的cifar-10數據集,但是我們的數據集很可能是普通的圖片,所以我進行了一些改進。
注意事項:
你的圖片長寬可以不相等,設置好image_height和image_width即可。
如果圖片大小不相等,可以使用change_size.py,把所有圖片大小resize成一樣的。
你圖片對應的標簽必須是這樣的:
001.jpg 1
003.jpg 2
前面是圖片名稱,后面是對應的類別(類別用數字表示),中間要用空格隔開,每個標簽占一行。
你要準備兩個文件,一個是訓練用的,一個是測試用的。
訓練樣本標簽和預測的都是一樣的格式
大家可以看github上面的實例.(image文件夾)
你的訓練和測試的圖片可以放在同一個文件夾下面,也可以不同,設置好train_image_path和test_image_path即可。
你要根據你圖片的大小,對這行代碼進行一些調整,這個調整需要你先了解hog的知識:
fd = hog(gray, orientations=18, pixels_per_cell=[8,8], cells_per_block=[4,4], visualise=False, transform_sqrt=True)
這是我為128x128大小圖片設置的提取hog特征的參數,你需要適當改變一些,到時候的效果也不同。
orientations我是選9或18,即梯度方向的個數
一般來說,圖片越大,pixels_per_cell?和cells_per_block里面的值可以相應變大。
如果你要進行多次,建議你把文件位置的參數寫死
#訓練集圖片的位置 train_image_path = '/home/icelee/Downloads/dataset/small_shixun/' #測試集圖片的位置 test_image_path = '/home/icelee/Downloads/dataset/small_shixun/' #訓練集標簽的位置 train_label_path = '/home/icelee/Downloads/dataset/mydata.txt' #測試集標簽的位置 test_label_path = '/home/icelee/Downloads/dataset/test.txt' #圖片大小 image_height = 128 image_width = 128- ?
你需要安裝sk-learn庫,hog,PIL庫等。可能還有一些零碎的庫,大家用pip安裝就好。
實驗都是彩色圖片,如果你的圖片是純黑白的,很有可能需要改一下代碼,看一下代碼注釋即可
采用這個測試cifar-10,準確率有50%多一點點(亂猜的準確率是10%),所以效果還是可以的,雖然比不上深度學習。
為了方便大家查看,代碼放在了github:https://github.com/xiaobingchan/HOG_SVM
可能出現的錯誤
ValueError: Expected 2D array, got 1D array instead: array=[]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
出現上面的錯誤說明沒有正常讀取到圖片,所以請檢查圖片寬高是不是和設置的size一樣,路徑是否正確。更改之后運行程序時,請選擇重新獲取特征。
總結
以上是生活随笔為你收集整理的HOG + SVM 实现图片分类(python3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何给APP开发属于自己的小程序
- 下一篇: python设置本机IP地址、子网掩码、