利用CNN进行图片简单分类

news/2024/11/29 12:31:46/

利用CNN进行图片简单6分类,数据集为6中车型网上爬取的,这里进行一系列数据预处理后,进行CNN卷积。

数据集部分展示
在这里插入图片描述
在这里插入图片描述
代码展示

#encoding = utf-8
"""
@author:syj
@file:img_分类.py
@time:2019/09/27 14:05:47
"""
#导库
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import cv2
from sklearn.model_selection import train_test_split# 使用GPU
import os
os.environ["CUDA_VISIBLE_DEVICES"]= "3"# 随机种子
tf.set_random_seed(77)# 数据集路径
cat_dir = r'C:\Users\Administrator\Desktop\car_datas\车1'#数据读取转换为矩阵   标签分类
def load_data(name_class):num = 0                 #数据集总数images_data = []        #样本labels_data = []        #标签# 循环读取for i in name_class:for k in os.listdir((cat_dir + '/' + i)):           #得到图片名字   房车_0.jpgimg = plt.imread(cat_dir + '/' + i + '/' + k)   #plt可以读取中文img = cv2.resize(img, (64,64))                  #所有图片转化为64*64*3img_array = np.array(img)                       #转化为数组img_array = img_array / 127.5 - 1               #归一化    -11images_data.append(img_array)                   #添加到列表# 分类if k[:2] == '卡车':labels_data.append(0)elif k[:2] == '房车':labels_data.append(1)elif k[:2] == '摩托':labels_data.append(2)elif k[:2] == '自行':labels_data.append(3)elif k[:2] == '越野':labels_data.append(4)else:labels_data.append(5)num += 1                    #数据集总数img_array = np.array(images_data)lab_array = np.array(labels_data)return img_array,lab_array,numname_class = os.listdir(cat_dir)        #路径
print(name_class)num_class = len(name_class)# 洗牌
def shuffle_data(imgage_data,labels_data,num):p = np.random.permutation(num)imgage_data = imgage_data[p]labels_data = labels_data[p]return imgage_data,labels_data# 调用
imgage_data,labels_data,num = load_data(name_class)
imgage_data,labels_data = shuffle_data(imgage_data,labels_data,num)print(imgage_data.shape)
print(labels_data.shape)# 切分
train_x,test_x,train_y,test_y = train_test_split(imgage_data,labels_data,test_size=0.2,random_state=7)# 站位
x = tf.placeholder(tf.float32,[None,64,64,3])
y = tf.placeholder(tf.int64,[None])# 失活   全连接防止过拟合
keep_prob = tf.placeholder(tf.float32)# 根据批次切分
x_image_arr = tf.split(x,num_or_size_splits=100,axis=0)result_x_image_arr = []# 循环读取优化数据
for x_single_image in x_image_arr:x_single_image = tf.reshape(x_single_image,[64,64,3])#随机翻转data_aug_1 = tf.image.random_flip_left_right(x_single_image)#调整光照data_aug_2 = tf.image.random_brightness(data_aug_1,max_delta=63)#改变对比度data_aug_3 = tf.image.random_contrast(data_aug_2,lower=0.2,upper=1.8)#白化data_aug_4 = tf.image.per_image_standardization(data_aug_3)x_single_image = tf.reshape(data_aug_4,[1,64,64,3])result_x_image_arr.append(x_single_image)
result_x_images = tf.concat(result_x_image_arr,axis=0)# 全连接
conv1 = tf.layers.conv2d(result_x_images,32,(3,3),padding='same',activation=tf.nn.relu)
conv1 = tf.layers.batch_normalization(conv1,momentum=0.7)       #防止过拟合
pooling1 = tf.layers.max_pooling2d(conv1,(2,2),(2,2))conv2 = tf.layers.conv2d(pooling1,64,(3,3),padding='same',activation=tf.nn.relu)
conv2 = tf.layers.batch_normalization(conv2,momentum=0.7)
pooling2 = tf.layers.max_pooling2d(conv2,(2,2),(2,2))conv3 = tf.layers.conv2d(pooling2,128,(3,3),padding='same',activation=tf.nn.relu)
conv3 = tf.layers.batch_normalization(conv3,momentum=0.7)
pooling3 = tf.layers.max_pooling2d(conv3,(2,2),(2,2))flatten = tf.layers.flatten(pooling3)# 全连接
fc = tf.layers.dense(flatten,625,activation=tf.nn.tanh)
fc = tf.nn.dropout(fc,keep_prob=keep_prob)
a5 = tf.layers.dense(fc,6)# 代价
cost = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y,logits=a5)# 优化器
optimizer = tf.train.AdamOptimizer(0.00005).minimize(cost)# 准确率
pre = tf.argmax(a5,1)
accuracy = tf.reduce_mean(tf.cast(tf.equal(pre,y),tf.float32))sess = tf.Session()
sess.run(tf.global_variables_initializer())# 利用批次循环训练
step = 0
for i in range(1,3001):c,a,_ = sess.run([cost,accuracy,optimizer],feed_dict={x:train_x[step:step+100],y:train_y[step:step+100],keep_prob:0.7})step += 100if step >= train_x.shape[0]:step = 0if i % 500 == 0:print(i,np.mean(c),a)step1 = 0
all_acc = []
for i in range(5):a1 = sess.run(accuracy,feed_dict={x:test_x[step1:step1+100],y:test_y[step1:step1+100],keep_prob:1})step1 += 100all_acc.append(a1)
print(np.mean(all_acc))

效果展示

['房车', '自行车图片', '跑车', '越野车', '摩托车', '卡车'](2752, 64, 64, 3)
(2752,)300 0.8921075 0.67
600 0.6069706 0.81
900 0.30461997 0.92
1200 0.3142417 0.93
1500 0.16324146 0.98
1800 0.08101442 0.99
2100 0.08600599 0.99
2400 0.040265616 1.0
2700 0.035595465 1.0
3000 0.016259683 1.0
0.764刚入手代码精度还在调,后期持续更新

http://www.ppmy.cn/news/371616.html

相关文章

HTML5 布加迪威龙跑车自动化制造过程模拟

Greensock公司的TweenMax是很好的HTML5动画操作JS库。 本例是演示如何使用TweenMax来模拟跑车的机械自动化制造/自动化装配过程。 思路就是把一些汽车零部件图片按时序以渐入动效入场到Web页面指定位置,从而形成汽车整体自动组装的动画。 $(document).ready(functi…

仿QQ发送图片时选中后加蒙版(想看跑车请进)

主要实现给GridView加CheckBox选中后可以加蒙版 FruitAdapter 添加CheckBox和蒙版只需在FruitAdapter中完成造作即可 public class FruitAdapter extends BaseAdapter {private LayoutInflater mInflater;private List<Fruit> mFruits;private boolean mCheckBoxManager…

Michael Dell来到了北京,迈凯伦的跑车开进了现场……

Michael Dell来到了北京&#xff0c;迈凯伦的跑车开进了现场…… 话说今年的戴尔科技峰会最最直观的吸睛之处&#xff0c;小编我首推这两点&#xff01; 听着依旧健步如飞的Michael Dell在台上声情并茂地讲述着一手建立起来的商业帝国在未来&#xff0c;在中国助力企业数字化转…

中国历史上的这几款跑车,你还记得它们么?

说起跑车&#xff0c;大多数人会联想到法拉利、保时捷这样的顶级超跑&#xff0c;又或是BRZ、86、MX5等相对亲民的小跑车。跑车大多对制造工艺要求非常严格&#xff0c;所以跑车的动力以及操控性都比普通的车型更加出色。我们国家的造车水平也越来越高&#xff0c;为什么就没有…

python爬虫设计图片大全_Spider-Python实战之通过Python爬虫爬取图片制作Win7跑车主题...

; Copyright ?Microsoft Corp. [Theme] ; Windows 7 - IDS_THEME_DISPLAYNAME_AERO DisplayName兰博基尼 # 个性化主题名称 SetLogonBackground0 ; Computer - SHIDI_SERVER [CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon] DefaultValue%SystemRoot%\System32\i…

探索iOS之Metal编程指南

iOS推出Metal渲染库为了取代OpenGL。Metal有自己的Shader语言&#xff0c;渲染效率比OpenGL高。在这里我们一起探索&#xff1a;Metal使用C限制、预处理定义、动态链接配置、GPU编译配置、设备坐标系、视口坐标系、纹理坐标系、矢量类型、矩阵类型、采样器状态、矩阵相乘。 1、…

iOS 战斗机跑车效果

原文地址::https://blog.csdn.net/qq_30513483/article/details/73650193 近来看到QQ音乐里面有一些酷酷的礼物效果&#xff0c;手痒&#xff0c;从网上找到一些素材&#xff0c;尝试做一下&#xff0c;效果有点粗糙&#xff0c;但是还是学到了一些东西&#xff0c;故和大家一起…

AE实践一:跑车动画

一、实践素材获取 1、关注“Genji是真想教会你”公众号 2、回复有关课堂序号&#xff0c;比如我应该回复“AE04”获取本次实践的素材 二、步骤 1、导入素材&#xff1a; Psd的文件拖到ae里。当把psd文件拖到左合成区时&#xff0c;会出现一个选框 导入素材。可以理解为把…