0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用keras来简单的进行图片识别分类

新机器视觉 来源:深度学习科研平台 作者:深度学习科研平台 2021-03-20 09:45 次阅读

接触深度学习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)

5439c10a-88ef-11eb-8b86-12bb97331649.png

第二步

把图片集制作成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 ' test loss:',loss

print ' 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

路漫漫其修远兮,吾将上下而求索

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4732

    浏览量

    100368
  • 数据集
    +关注

    关注

    4

    文章

    1200

    浏览量

    24604
  • 深度学习
    +关注

    关注

    73

    文章

    5456

    浏览量

    120848

原文标题:使用CNN神经网络进行图片识别分类

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于高光谱数据的典型地物分类识别方法研究

    随着成像光谱仪器的广泛应用,利用光谱数据进行物质分类识别已经成为一项重要的研究内容,研究不同分类算法对最终的目标识别准确度具有重要意义。
    的头像 发表于 07-18 14:43 225次阅读
    基于高光谱数据的典型地物<b class='flag-5'>分类</b><b class='flag-5'>识别</b>方法研究

    基于PYNQ的智能垃圾分类系统

    的准确率。市民将垃圾投入到垃圾桶后,桶内的摄像头会对垃圾进行拍照,通过数据库对比识别垃圾的种类,判定结果通过开发板回传至垃圾桶,控制舵机转动隔板完成分类。 可实现功能: (1)在图像识别
    发表于 07-09 18:44

    keras模型转tensorflow session

    在这篇文章中,我们将讨论如何将Keras模型转换为TensorFlow session。 Keras和TensorFlow简介 Keras是一个高级神经网络API,它提供了一种简单、快
    的头像 发表于 07-05 09:36 417次阅读

    keras的模块结构介绍

    Keras是一个高级深度学习库,它提供了一个易于使用的接口构建和训练深度学习模型。Keras是基于TensorFlow、Theano或CNTK等底层计算库构建的。以下是Keras的模
    的头像 发表于 07-05 09:35 277次阅读

    导入keras或者onnx模型到cubeai进行分析,为什么会报错?

    请问我导入keras或者onnx模型到cubeai进行分析,为什么会报错,而且没有报错内容,cubeai版本9.0.0。换成8.1.0版本后报错内容是invalid network。该怎么入手解决。
    发表于 07-03 07:55

    【Vision Board创客营连载体验】TinyMaix进行手写数字识别

    打开r-tinymaix安装包即可。 最后运行效果如下: 1.cifar10实例,分类检测,识别图片是一只鸟: 2. mnist实例,数字识别
    发表于 06-15 08:40

    基于神经网络的呼吸音分类算法

    出的方法与其他机器学习模型在不同情况下的性能和鲁棒性进行比较。1.用于初始模型检查的简单噪声二值分类实验。2.使用个体呼吸周期作为输入的4类异常分类。3.使用每个声音样本中有几个呼吸周
    发表于 05-31 12:05

    基于毫米波的人体跟踪和识别算法

    。雷达已被提议作为粗粒度活动识别的替代模式,使用微多普勒频谱图捕捉环境信息的最小子集。然而,由于低成本毫米波雷达系统产生稀疏和不均匀的点云,训练细粒度、准确的活动分类器是一个挑战。在本文中,我们提出
    发表于 05-14 18:40

    基于FPGA进行DNN设计的经验总结

    DNN中应用最广泛的是CNN和RNN,CNN是一种卷积网络,在图片识别分类中用的较多,RNN可以处理时间序列的信息,比如视频识别和语音识别
    发表于 04-07 10:23 526次阅读
    基于FPGA<b class='flag-5'>进行</b>DNN设计的经验总结

    cube AI导入Keras模型出错怎么解决?

    我尝试过cube AI的version7.1.0、6.0.0、5.1.2、4.1.0,导入Keras都是这个报错,求解答 E010(InvalidModelError): Couldn&
    发表于 03-18 06:39

    基于TensorFlow和Keras的图像识别

    TensorFlow和Keras最常见的用途之一是图像识别/分类。通过本文,您将了解如何使用Keras达到这一目的。定义如果您不了解图像识别
    的头像 发表于 01-13 08:27 742次阅读
    基于TensorFlow和<b class='flag-5'>Keras</b>的图像<b class='flag-5'>识别</b>

    如何使用Python进行图像识别的自动学习自动训练?

    如何使用Python进行图像识别的自动学习自动训练? 使用Python进行图像识别的自动学习和自动训练需要掌握一些重要的概念和技术。在本文中,我们将介绍如何使用Python中的一些常用
    的头像 发表于 01-12 16:06 511次阅读

    简单认识射频识别技术

    技术无须识别系统与目标间建立机械或者光学连接,应用灵活、识别速度快,相关设备具有使用简单、寿命长、安全性高的特点。RFID技术是构建物联网的核心技术之一,目前已广泛应用于商业自动化、交通运输管理、物流等众多领域。
    的头像 发表于 01-08 09:43 1085次阅读

    CNN图像分类策略

    在深度学习出现之前,自然图像中的对象识别过程相当粗暴简单:定义一组关键视觉特征(“单词”),识别每个视觉特征在图像中的存在频率(“包”),然后根据这些数字对图像进行
    发表于 12-25 11:36 263次阅读
    CNN图像<b class='flag-5'>分类</b>策略

    使用Python卷积神经网络(CNN)进行图像识别的基本步骤

    Python 卷积神经网络(CNN)在图像识别领域具有广泛的应用。通过使用卷积神经网络,我们可以让计算机从图像中学习特征,从而实现对图像的分类识别和分析等任务。以下是使用 Python 卷积神经网络
    的头像 发表于 11-20 11:20 5162次阅读