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

    文章

    4842

    浏览量

    108178
  • 数据集
    +关注

    关注

    4

    文章

    1240

    浏览量

    26261
  • 深度学习
    +关注

    关注

    73

    文章

    5608

    浏览量

    124634

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    京东图片搜索API深度解析:以图搜货赋能电商全场景

    品分析、智能推荐等场景。 一、前言 随着人工智能和图像识别技术的发展,传统的文本搜索已无法满足用户对商品识别的多样化需求。京东图片搜索API应运而生,它允许开发者通过简单的接口调用,实
    的头像 发表于 02-08 14:56 895次阅读

    语音识别IC分类,语音识别芯片的工作原理

    语音识别芯片,也叫语音识别集成电路,是一种集声音存储、播放、录音及语音识别功能于一体的专用芯片。语音识别IC的核心功能在于实现语音识别,即让
    的头像 发表于 01-14 15:22 409次阅读
    语音<b class='flag-5'>识别</b>IC<b class='flag-5'>分类</b>,语音<b class='flag-5'>识别</b>芯片的工作原理

    渣土车识别检测系统 基于YOLOv8与RNN

    渣土车识别检测系统是基于卡口图片的视觉图像分析,渣土车识别检测系统对前端卡口相机抓拍上传图像至系统服务器的图片进行实时检测,实时分析。当监控
    的头像 发表于 12-19 20:28 513次阅读
    渣土车<b class='flag-5'>识别</b>检测系统 基于YOLOv8与RNN

    1688拍立淘图片搜索API概述

    1688 拍立淘是基于图像识别技术的商品搜索服务,允许用户通过上传图片搜索相似商品。 1.主要功能特点 以图搜图:通过图片内容识别相似商品
    的头像 发表于 12-17 14:56 477次阅读

    淘宝图片搜索商品API指南

    一、摘要 淘宝图片搜索商品API是基于图像识别技术的智能搜索接口,允许用户通过上传商品图片搜索相似或同款商品。该接口广泛应用于比价、找同款、商品
    的头像 发表于 12-08 14:26 1346次阅读

    【启扬方案】基于RK3576的智能垃圾分类站应用解决方案

    的智能技术,结合传感器、人工智能和互联网技术,实现了自动化的垃圾分类和管理。通过智能识别系统,可以准确识别分类不同垃圾,提高分类的准确性和效
    的头像 发表于 12-04 17:29 1104次阅读
    【启扬方案】基于RK3576的智能垃圾<b class='flag-5'>分类</b>站应用解决方案

    电能质量在线监测装置是如何进行电压中断事件的分类的?

    电能质量在线监测装置严格按照 国家标准 (GB/T 30137-2013/2024) 和国际标准 (IEC 61000-4-30)对电压中断事件进行分类,主要基于幅值阈值 和 持续时间 两个核心维度
    的头像 发表于 11-27 16:30 1186次阅读
    电能质量在线监测装置是如何<b class='flag-5'>进行</b>电压中断事件的<b class='flag-5'>分类</b>的?

    发布元服务配置应用分类、标签和资质信息(仅分发手表设备)

    进行筛选。 说明 运动手表设备只需设置分类,暂不支持设置标签。 配置版权信息 登录AppGallery Connect,点击“APP与元服务”。 选择要发布的元服务。 左侧导航选择“应用上架 &
    发表于 10-30 17:47

    基于级联分类器的人脸检测基本原理

    关系检测人脸。基于统计的方法将人脸看成统一的二维像素矩阵,通过大量的样本构建人脸子空间,通过相似度的大小判断人脸是否存在。 2) 基于灰度特征的人脸级联分类器 基于灰度特征的人脸检测级联
    发表于 10-30 06:14

    RFID在垃圾分类中的核心优势

    居民投放垃圾时,系统自动识别投放者身份,并判断是否正确分类,提升分类准确率。激励与监督机制系统可根据正确分类行为自动积分奖励,鼓励居民积极参与;对错误投放行为可
    的头像 发表于 09-23 11:08 681次阅读
    RFID在垃圾<b class='flag-5'>分类</b>中的核心优势

    如何对电能质量在线监测装置的应用场景进行分类

    、功能配置、数据精度要求差异显著,分类结果可直接指导装置选型、校准频率设定及运维策略制定。以下从 4 个核心维度进行详细分类: 一、按电力系统 “发 - 输 - 配 - 用” 层级分类
    的头像 发表于 09-02 17:48 930次阅读
    如何对电能质量在线监测装置的应用场景<b class='flag-5'>进行</b><b class='flag-5'>分类</b>?

    基于米尔瑞芯微RK3576开发板部署运行TinyMaix:超轻量级推理框架

    vww测试,主要是将图片信息转化为数组格式提供给网络输入。 手写数字识别的例程也是十分简单,只需要: 库文件已经是高度封装且兼容,所以很轻松地就可以在linux以及其它平台上移植,在RK3576这种高性能soc的加持下,
    发表于 07-25 16:35

    ocr识别时数据集上传压缩包,上传成功,但不显示图片图片数量仍显示0,为什么?

    ocr识别时数据集上传压缩包,上传成功,但不显示图片图片数量仍显示0
    发表于 07-23 08:11

    【嘉楠堪智K230开发板试用体验】01 Studio K230开发板Test2——手掌,手势检测,字符检测

    这篇发完就继续去整比赛了,后续看电赛上k230的发挥吧 之前的颜色识别和二维码识别功能,类似于使用基础工具进行图像分析,适用于简单任务,但在复杂场景下能力有限。 KPU(神经网络处理器
    发表于 07-10 09:45

    基于LockAI视觉识别模块:手写数字识别

    分类,适合处理较为规范的手写数字。 K近邻算法(KNN):基于相似度的分类方法,通过比较待识别数字与训练样本的距离进行
    发表于 06-30 16:45