1. 程式人生 > >使用CNN神經網路進行圖片識別分類

使用CNN神經網路進行圖片識別分類

這個程式碼比較老舊,請移步最新實現link:https://blog.csdn.net/zh_JNU/article/details/81018352,可在本文檢視資料說明和在末尾下載資料集,謝謝~~~~~

接觸深度學習3個月以來,從當初的小白零基礎學習,過程十分艱苦,看了幾章大牛 YoshuaBengio 寫的deep learning一書,粗略瞭解了基本常用的神經網路以及梯度更新策略,引數優化,也瞭解以及簡單的使用常用的深度學習開發框架caffe,tensorflow,theano,sklearn機器學習庫,目前keras比較火,所以使用keras來簡單的進行圖片識別分類。

資料集準備:

看caffe部落格的時候看到的資料集,然後就下載使用,資料集可以在最後下載。

資料集一共有5類圖片,一共500張,每類圖片100張,訓練集400張,每類80張,測試集100張,每類20張

第一步:

資料集進行處理:

使用opencv對圖片進行處理,縮放圖片大小為128×128大小,通道為單通道灰度影象
#coding:utf8
import os
import cv2.cv as cv
import cv2
# 遍歷指定目錄,顯示目錄下的所有檔名
width_scale = 192 #縮放尺寸寬度
height_scale = 128#縮放尺寸高度
write_path = "/home/zhanghao/data/classification/test_scale/"#要寫入的圖片路徑

#遍歷每一張圖片進行處理

def eachFile(filepath):
    pathDir =  os.listdir(filepath)
    for allDir in pathDir:
        child = os.path.join('%s%s' % (filepath,allDir))
    write_child = os.path.join('%s%s' % (write_path,allDir))
    image = cv.LoadImage(child,0)
    des_image = cv.CreateImage((width_scale,height_scale),image.depth,1)
    cv.Resize(image,des_image,cv2.INTER_AREA)
#    cv.ShowImage('afe',des_image)
    cv.SaveImage(write_child,des_image)
#    break
if __name__ == '__main__':
     filePathC = "/home/zhanghao/data/classification/test/"
     eachFile(filePathC)

第二步

把圖片集製作成keras識別的資料集

#製作資料集
def data_label(path,count):
    data = np.empty((count,1,128,192),dtype = 'float32')#建立空的四維張量型別32位浮點
    label = np.empty((count,),dtype = 'uint8')
    i = 0
    pathDir = os.listdir(path)
    for each_image in pathDir:
        all_path = os.path.join('%s%s' % (path,each_image))#路徑進行連線
        image = cv2.imread(all_path,0)
        mul_num = re.findall(r"\d",all_path)#尋找字串中的數字,由於影象命名為300.jpg 標籤設定為0
        num = int(mul_num[0])-3
#        print num,each_image
#        cv2.imshow("fad",image)
#        print child
        array = np.asarray(image,dtype='float32')
        data[i,:,:,:] = array
        label[i] = int(num)
        i += 1
    return data,label

第三步

構建卷積神經網路進行訓練和測試

#構建卷積神經網路
def cnn_model(train_data,train_label,test_data,test_label):
    model = Sequential()
    model.add(Convolution2D(
        nb_filter = 12,
        nb_row = 3,
        nb_col = 3,
        border_mode = 'valid',
        dim_ordering = 'th',
        input_shape = (1,128,192)))
    model.add(Activation('relu'))#啟用函式使用修正線性單元
    model.add(MaxPooling2D(
        pool_size = (2,2),
        strides = (2,2),
        border_mode = 'valid'))
    model.add(Convolution2D(
        24,
        3,
        3,
        border_mode = 'valid',
        dim_ordering = 'th'))
    model.add(Activation('relu'))
#池化層 24×29×29
    model.add(MaxPooling2D(
        pool_size = (2,2),
        strides = (2,2),
        border_mode = 'valid'))
    model.add(Convolution2D(
        48,
        3,
        3,
        border_mode = 'valid',
        dim_ordering = 'th'))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(
        pool_size = (2,2),
        strides =(2,2),
        border_mode = 'valid'))
    model.add(Flatten())
    model.add(Dense(20))
    model.add(Activation(LeakyReLU(0.3)))
    model.add(Dropout(0.5))
    model.add(Dense(20))
    model.add(Activation(LeakyReLU(0.3)))
    model.add(Dropout(0.4))
    model.add(Dense(5,init = 'normal'))
    model.add(Activation('softmax'))
    adam = Adam(lr = 0.001)
    model.compile(optimizer = adam,
            loss =  'categorical_crossentropy',
            metrics = ['accuracy'])
    print '----------------training-----------------------'
    model.fit(train_data,train_label,batch_size = 12,nb_epoch = 35,shuffle = True,show_accuracy = True,validation_split = 0.1)
    print '----------------testing------------------------'
    loss,accuracy = model.evaluate(test_data,test_label)
    print '\n test loss:',loss
    print '\n test accuracy',accuracy

第四步

呼叫上述函式進行訓練預測

train_path = '/home/zhanghao/data/classification/train_scale/'
test_path = '/home/zhanghao/data/classification/test_scale/'
train_count = getnum(train_path)
test_count = getnum(test_path)
train_data,train_label = data_label(train_path,train_count)
test_data,test_label = data_label(test_path,test_count)
train_label = np_utils.to_categorical(train_label,nb_classes = 5)
test_label = np_utils.to_categorical(test_label,nb_classes = 5)
cnn_model(train_data,train_label,test_data,test_label)

用到的標頭檔案

import re
import cv2
import os
import numpy as np
import cv2.cv as cv
from keras.models import Sequential
from keras.layers.core import Dense,Activation,Flatten
from keras.layers.convolutional import Convolution2D,MaxPooling2D
from keras.optimizers import Adam

from keras.layers.advanced_activations import LeakyReLU

from keras.utils import np_utils


cpu執行,迭代50次,預測準確率達到92%,還算可以的準確率

具體實現程式碼:https://github.com/zhanghao-JNU/keras-training

路漫漫其修遠兮,吾將上下而求索

資料集網盤連結連結:https://pan.baidu.com/s/1boDvWTL 密碼:vxrb

有什麼問題可以發郵件聯絡([email protected])共同討論進步,這個程式碼太老啦太low啦,有什麼錯誤不要介意!!!!

相關推薦

使用CNN神經網路進行圖片識別分類

這個程式碼比較老舊,請移步最新實現link:https://blog.csdn.net/zh_JNU/article/details/81018352,可在本文檢視資料說明和在末尾下載資料集,謝謝~~~~~接觸深度學習3個月以來,從當初的小白零基礎學習,過程十分艱苦,看了幾章

使用卷積神經網路進行圖片分類 1

卷積神經網路原理一、實驗介紹1.1 實驗內容本課程將會先帶你理解卷積神經網路的原理,瞭解卷積神經網路的一些特性。然後動手使用caffe深度學習框架訓練一個卷積神經網路模型,並用訓練好的模型進行圖片分類。學習本課程之前,請先學習課程814 使用python實現深度神經網路以瞭解必要的基本概念,本實驗中涉及到的深

使用卷積神經網路進行圖片分類 3

控制caffe模型的訓練過程一、實驗介紹1.1 實驗內容上次實驗,我們已經構建好了卷積神經網路,我們的模型已經蓄勢待發,準備接受訓練了。為了控制訓練程序,記錄訓練過程中的各種資料,caffe還需要定義另一個solver.prototxt檔案,這次實驗我們就來完成它,並開始激動人心的訓練過程。1.2 實驗知識點

使用卷積神經網路進行圖片分類 2

使用caffe構建卷積神經網路一、實驗介紹1.1 實驗內容上一次實驗我們介紹了卷積神經網路的基本原理,本次實驗我們將學習如何使用深度學習框架caffe構建卷積神經網路,你將看到在深度學習框架上搭建和訓練模型是一件非常簡單快捷的事情(當然,是在你已經理解了基本原理的前提下)。如果上一次實驗中的一些知識點你還理解

使用卷積神經網路進行圖片分類 4

利用訓練好的模型開發圖片分類程式一、實驗介紹1.1 實驗內容在snapshot目錄下已經有我們訓練好的模型的引數,為了利用我們的卷積神經網路模型和這些引數去對影象進行分類,我們這次實驗就來編寫程式碼實現一個圖片分類程式。1.2 實驗知識點caffe python api1.3 實驗環境python 2.7 o

一種利用語音深度神經網路進行語音識別的新方案

A NOVEL SCHEME FOR SPEAKER RECOGNITION USING A PHONETICALLY-AWARE DEEP NEURAL NETWORK Yun Lei Nicolas Scheffer Luciana Ferrer Mitchell McLaren 美國加

吳裕雄 python神經網路 水果圖片識別(4)

# coding: utf-8 # In[1]:import osimport numpy as npfrom skimage import color, data, transform, io # In[34]: import tensorflow as tfimport numpy as np t

吳裕雄 python神經網路 花朵圖片識別(9)

import osimport numpy as npimport matplotlib.pyplot as pltfrom PIL import Image, ImageChopsfrom skimage import color,data,transform,io #獲取所有資料資料夾名稱fileLis

蘋果解密:如何在手機上用深度神經網路進行人臉識別

千平 編譯整理 量子位 出品 | 公眾號 QbitAI 蘋果公司的計算機視覺機器學習團隊,最近發表了一篇部落格,介紹了蘋果如何在手機上實現用深度神經網路進行人臉識別。 蘋果首次公開發布人臉檢測API,是通過Core Image框架的CIDetector識別類。這個API也用在“照片”等蘋果的Ap

基於深度卷積神經網路進行人臉識別的原理是什麼?

我這裡簡單講下OpenFace中實現人臉識別的pipeline,這個pipeline可以看做是使用深度卷積網路處理人臉問題的一個基本框架,很有學習價值,它的結構如下圖所示:1、Input Image -> Detect輸入:原始的可能含有人臉的影象。輸出:人臉位置的bounding box。這一步一般我

單樣本學習:使用孿生神經網路進行人臉識別

這篇文章簡要介紹單樣本學習,以孿生神經網路(Siamese neural network)進行人臉識別的例子,分享了作者從論文 FaceNet 以及 deeplearning.ai 中學到的內容。

keras快速搭建神經網路進行電影文字評論二分類

        在本次部落格中,將討論英語文字分類問題,可同樣適用於文字情感分類,屬性分類等文字二分類問題。 1、資料準備       &nbs

利用卷積神經網路進行手寫數字識別詳解

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data ‘’‘可分別用這兩個函式建立卷積核(kernel)與偏置(bias)’’’ #返回一個給定形狀的變數,並自動以截斷正態分佈

利用卷積神經網路進行阿爾茨海默病分類神經影像模式融合 論文研讀筆記

原文連結 發表: 2018.11.13 摘要 阿爾茨海默病(AD)分類的自動化方法具有巨大的臨床益處,並可為防治該疾病提供見解。深層神經網路演算法通常使用諸如MRI和PET的神經學成像資料,但是還沒有對這些模式進行全面和平衡的比較。為了準確確定每個成像變體的相對強度,本研究使用阿爾茨海默病神經成像倡議(A

【TensorFlow】3-2構建簡單單層神經網路進行【手寫字元識別

 自動下載並轉化MNIST資料集格式到TF中 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #載入MNIST資料集,如果不存在,將自動在預設網址

幾種使用了CNN(卷積神經網路)的文字分類模型

下面就列舉了幾篇運用CNN進行文字分類的論文作為總結。 1 yoon kim 的《Convolutional Neural Networks for Sentence Classification》。(2014 Emnlp會議)   他用的結構比較簡單,就是使用長度不同的 filter 對文字矩陣進行

【python keras實戰】利用VGG卷積神經網路進行手寫字型識別

# encoding: utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') import numpy as np from keras.datasets import mnist impor

【深度學習】基於Numpy實現的神經網路進行手寫數字識別

直接先用前面設定的網路進行識別,即進行推理的過程,而先忽視學習的過程。 推理的過程其實就是前向傳播的過程。 深度學習也是分成兩步:學習 + 推理。學習就是訓練模型,更新引數;推理就是用學習到的引數來處理新的資料。 from keras.datasets.mnist impor

【深度學習】5:CNN卷積神經網路原理、識別MNIST資料集

前言:先坦白的說,深度神經網路的學習在一開始對我造成的困擾還是很大的,我也是通過不斷地看相關的視訊資料、文獻講解嘗試去理解記憶。畢竟這些內容大多都是不可查的,我們看到的都只是輸入輸出的東西,裡面的內部運作以及工作原理,都需要沉心靜思。 這篇CNN卷積神經網路的

基於神經網路的人臉識別(Tensorflow,opencv,dlib,cnn,)

訓練一個神經網路 這段時間正在學習tensorflow的卷積神經網路部分,為了對卷積神經網路能夠有一個更深的瞭解,自己動手實現一個例程是比較好的方式,所以就選了一個這樣比較有點意思的專案。專案的github地址:github 喜歡的話就給個Star吧。想要她認得我,就需要給她一些我的照片,讓她記住我的人臉特徵