文章目录

  • 一.猫狗大战
    • 1.1 简介
    • 1.2 数据集
  • 二.代码:
    • dataset.py
    • train.py
    • predict.py
  • 三.程序输出:
    • train.py
    • predict.py

一.猫狗大战

1.1 简介

这是计算机视觉系列的第一篇博文,主要介绍用TensorFlow来实现猫狗分类、识别。该项目主要包括dataset、train、predict三部分。其中dataset.py主要是读取数据并对数据进行预处理;train.py主要是训练一个二分类模型;predict.py是用训练好的模型进行测试。GitHub地址:https://github.com/jx1100370217/dog-cat-master

1.2 数据集

该项目的数据主要包括1000张网上找的猫和狗的图片,其中猫,狗各500张。

二.代码:

dataset.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# author: JX
# data: 20181101import cv2
import os
import glob
from sklearn.utils import shuffle
import numpy as npdef load_train(train_path,image_size,classes):images = []labels = []img_names = []cls = []print('Going to read training images')for fields in classes:index = classes.index(fields)print('Now going to read {} file (Index: {})'.format(fields,index))path = os.path.join(train_path,fields,'*g')files = glob.glob(path)for f1 in files:image = cv2.imread(f1)image = cv2.resize(image,(image_size,image_size),0,0,cv2.INTER_LINEAR)image = image.astype(np.float32)image = np.multiply(image,1.0 / 255.0)images.append(image)label = np.zeros(len(classes))label[index] = 1.0labels.append(label)flbase = os.path.basename(f1)img_names.append(flbase)cls.append(fields)images = np.array(images)labels = np.array(labels)img_names = np.array(img_names)cls = np.array(cls)return images,labels,img_names,clsclass DataSet(object):def __init__(self,images,labels,img_names,cls):self._num_examples = images.shape[0]self._images = imagesself._labels = labelsself._img_names = img_namesself._cls = clsself._epochs_done = 0self._index_in_epoch = 0@propertydef images(self):return self._images@propertydef labels(self):return self._labels@propertydef img_names(self):return self._img_names@propertydef cls(self):return self._cls@propertydef num_examples(self):return self._num_examples@propertydef epochs_done(self):return self._epochs_donedef next_batch(self,batch_size):start = self._index_in_epochself._index_in_epoch += batch_sizeif self._index_in_epoch > self._num_examples:self._epochs_done += 1start = 0self._index_in_epoch = batch_sizeassert  batch_size <= self._num_examplesend = self._index_in_epochreturn self._images[start:end],self._labels[start:end],self._img_names[start:end],self.cls[start:end]def read_train_sets(train_path,image_size,classes,validation_size):class DataSets(object):passdata_sets = DataSets()images, labels, img_names, cls = load_train(train_path, image_size, classes)images, labels, img_names, cls = shuffle(images, labels, img_names, cls)if isinstance(validation_size, float):validation_size = int(validation_size * images.shape[0])validation_images = images[:validation_size]validation_labels = labels[:validation_size]validation_img_names = img_names[:validation_size]validation_cls = cls[:validation_size]train_images = images[validation_size:]train_labels = labels[validation_size:]train_img_names = img_names[validation_size:]train_cls = cls[validation_size:]data_sets.train = DataSet(train_images,train_labels,train_img_names,train_cls)data_sets.valid = DataSet(validation_images,validation_labels,validation_img_names,validation_cls)return data_sets

train.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# author: JX
# data: 20181101import dataset
import tensorflow as tf
import time
from datetime import timedelta
import math
import random
import numpy as np
from tensorflow import set_random_seed
from numpy.random import seed
seed(10)
set_random_seed(20)batch_size = 32classes = ['dogs','cats']
num_classes = len(classes)validation_size = 0.2
img_size = 64
num_channels = 3
train_path = 'training_data'data = dataset.read_train_sets(train_path,img_size,classes,validation_size=validation_size)print("Complete reading input data.Will Now print a snippet of it")
print("Number of files in Training-set:\t\t{}".format(len(data.train.labels)))
print("Number of files in Validation-set:\t\t{}".format(len(data.valid.labels)))session = tf.Session()
x = tf.placeholder(tf.float32,shape=[None,img_size,img_size,num_channels],name='x')y_true = tf.placeholder(tf.float32,shape=[None,num_classes],name='y_true')
y_true_cls = tf.argmax(y_true,dimension=1)filter_size_conv1 = 3
num_filters_conv1 = 32filter_size_conv2 = 3
num_filters_conv2 = 32filter_size_conv3 = 3
num_filters_conv3 = 64fc_layer_size = 1024def create_weights(shape):return tf.Variable(tf.truncated_normal(shape,stddev=0.05))def create_biases(size):return tf.Variable(tf.constant(0.05,shape=[size]))def create_convolutional_layer(input,num_input_channels,conv_filter_size,num_filters):weights = create_weights(shape=[conv_filter_size,conv_filter_size,num_input_channels,num_filters])biases = create_biases(num_filters)layer = tf.nn.conv2d(input=input,filter=weights,strides=[1,1,1,1],padding='SAME')layer += biaseslayer = tf.nn.relu(layer)layer = tf.nn.max_pool(value=layer,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')return layerdef create_flatten_layer(layer):layer_shape = layer.get_shape()num_features = layer_shape[1:4].num_elements()layer = tf.reshape(layer,[-1,num_features])return layerdef create_fc_layer(input,num_inputs,num_outputs,use_relu=True):weights = create_weights(shape=[num_inputs,num_outputs])biases = create_biases(num_outputs)layer = tf.matmul(input,weights) + biaseslayer = tf.nn.dropout(layer,keep_prob=0.7)if use_relu:layer = tf.nn.relu(layer)return layerlayer_conv1 = create_convolutional_layer(input=x,num_input_channels=num_channels,conv_filter_size=filter_size_conv1,num_filters=num_filters_conv1)
layer_conv2 = create_convolutional_layer(input=layer_conv1,num_input_channels=num_filters_conv1,conv_filter_size=filter_size_conv2,num_filters=num_filters_conv2)
layer_conv3 = create_convolutional_layer(input=layer_conv2,num_input_channels=num_filters_conv2,conv_filter_size=filter_size_conv3,num_filters=num_filters_conv3)layer_flat = create_flatten_layer(layer_conv3)layer_fc1 = create_fc_layer(input=layer_flat,num_inputs=layer_flat.get_shape()[1:4].num_elements(),num_outputs=fc_layer_size,use_relu=True)layer_fc2 = create_fc_layer(input=layer_fc1,num_inputs=fc_layer_size,num_outputs=num_classes,use_relu=False)y_pred = tf.nn.softmax(layer_fc2,name='y_pred')y_pred_cls = tf.argmax(y_pred,dimension=1)
session.run(tf.global_variables_initializer())
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=layer_fc2,labels=y_true)
cost = tf.reduce_mean(cross_entropy)
optimizer = tf.train.AdamOptimizer(learning_rate=1e-4).minimize(cost)
correct_prediction = tf.equal(y_pred_cls,y_true_cls)
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))session.run(tf.global_variables_initializer())def show_pregress(epoch,feed_dict_train,feed_dict_validata,val_loss,i):acc = session.run(accuracy,feed_dict=feed_dict_train)val_acc = session.run(accuracy,feed_dict=feed_dict_validata)msg = "Training Epoch {0}---iterations: {1}---Training Accuracy:{2:>6.1%}," \"Validation Accuracy:{3:>6.1%},Validation Loss:{4:.3f}"print(msg.format(epoch+1,i,acc,val_acc,val_loss))total_iterations = 0saver = tf.train.Saver()
def train(num_iteration):global  total_iterationsfor i in range(total_iterations,total_iterations + num_iteration):x_batch,y_true_batch,_,cls_batch = data.train.next_batch(batch_size)x_valid_batch,y_valid_batch,_,valid_cls_batch = data.valid.next_batch(batch_size)feed_dict_tr = {x: x_batch,y_true:y_true_batch}feed_dict_val = {x: x_valid_batch, y_true: y_valid_batch}session.run(optimizer,feed_dict=feed_dict_tr)if i % int(data.train.num_examples/batch_size) == 0:val_loss = session.run(cost,feed_dict=feed_dict_val)epoch = int(i / int(data.train.num_examples/batch_size))show_pregress(epoch,feed_dict_tr,feed_dict_val,val_loss,i)saver.save(session,'./dogs-cats-model/dog-cat.ckpt',global_step=i)total_iterations += num_iterationtrain(num_iteration=10000)

predict.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# author: JX
# data: 20181101import tensorflow as tf
import numpy as np
import os
import glob
import cv2
import sysimage_size = 64
num_channels = 3
images = []path = 'cat.1.jpg'
image = cv2.imread(path)
image = cv2.resize(image,(image_size,image_size),0,0,cv2.INTER_LINEAR)
images.append(image)
images = np.array(images,dtype=np.uint8)
images = images.astype('float32')
images = np.multiply(images,1.0/255.0)
x_batch = images.reshape(1,image_size,image_size,num_channels)sess = tf.Session()
saver = tf.train.import_meta_graph('./dogs-cats-model/dog-cat.ckpt-9975.meta')
saver.restore(sess,'./dogs-cats-model/dog-cat.ckpt-9975')
graph = tf.get_default_graph()y_pred = graph.get_tensor_by_name("y_pred:0")x = graph.get_tensor_by_name("x:0")
y_true = graph.get_tensor_by_name("y_true:0")
y_test_images = np.zeros((1,2))feed_dict_testing = {x:x_batch,y_true:y_test_images}
result = sess.run(y_pred,feed_dict=feed_dict_testing)res_label = ['dog','cat']
print(res_label[result.argmax()])

三.程序输出:

train.py


predict.py


计算机视觉-猫狗大战相关推荐

  1. 近期计算机视觉相关算法竞赛汇总—高额奖金等你来拿!

    点击我爱计算机视觉标星,更快获取CVML新技术 计算机视觉是应用性很强的学科,学术界和产业界有很多知名的来自实际应用场景的算法问题大赛,很多还有巨额奖金,今天把搜集到的一些现在还能报名的有奖金的计算机 ...

  2. P7毕业项目,猫狗大战。详解,含全部代码

    准备工作: 1.申请一个aws云机器,因为本地训练实在太慢了,当然,土豪请略过-- 2.申请一个kaggle账号,数据集可以利用winscp上传到云端,但上传速度过慢,建议利用kaggle-cli下载 ...

  3. python猫狗大战游戏_Kaggle猫狗大战图片分类项目研究

    本文以研究报告形式描述了使用TensorFlow Slim 提供的预训练模型 Inception-ResNet-V2 进行猫狗图片分类的研究. 题图来自于网络,如侵权请留言,立即删除. 一. 问题定义 ...

  4. python猫狗大战游戏下载_带你少走弯路:强烈推荐的TensorFlow快速入门资料和翻译(可下载)...

    知识更新非常快,需要一直学习才能跟上时代进步,举个例子:吴恩达老师在深度学习课上讲的TensorFlow使用,这个肯定是他近几年才学的,因为谷歌开源了TensorFlow也就很短的时间. 吴恩达老师以 ...

  5. 基于Keras实现猫狗大战,25000张猫狗图像的精准分类

    文章目录 1. 建立简单版CNN网络模型 1.1 将下载好的文件分为训练集.测试集.验证集. 1.2 构建神经网络 1.3 数据预处理 1.4 绘制训练过程中的损失曲线和精度曲线 2. 使用数据增强 ...

  6. 人工智能——猫狗大战

    人工智能--猫狗大战 简介 代码运行 AI研习社测试 总结 简介 Cats vs. Dogs(猫狗大战)是Kaggle大数据竞赛某一年的一道赛题,利用给定的数据集,用算法实现猫和狗的识别.我们希望通过 ...

  7. python猫狗大战讲解_机器学习 | 猫狗大战

    建议阅读时长 8 分钟 前言 对于机器学习来说,数据的重要性无可厚非,大部分处理机器学习的问题都是在处理数据,包括数据的清洗,归一化等,好的数据质量能大大提高模型的预测性能 但是对与初学者来说,数据变 ...

  8. python猫狗大战讲解_Kaggle猫狗大战图片分类项目研究

    本文以研究报告形式描述了使用TensorFlow Slim 提供的预训练模型 Inception-ResNet-V2 进行猫狗图片分类的研究. 题图来自于网络,如侵权请留言,立即删除. 一. 问题定义 ...

  9. Pytorch实战第一步--用经典神经网络实现猫狗大战

    文章目录 前言 一.猫狗大战数据集 二.pytorch实战 1.程序整体结构 2.读入数据 3.网络结构 4.网络结构 5测试 总结 总结 前言 随着人工智能的不断发展,机器学习这门技术也越来越重要, ...

最新文章

  1. Parallels Desktop 重装系统
  2. 从39个kaggle竞赛中总结出来的图像分割的Tips和Tricks(附资源)
  3. The Guy Who Ran Microsoft And Google In China Clones US Startups
  4. 【数理知识】《矩阵论》方保镕老师-第4章-赋范线性空间与矩阵范数
  5. 检测空指针 静态检测_动态扭矩和静态扭矩的区分及其应用
  6. msys2软件包管理工具pacman常用命令
  7. scipy.ndimage.filters.gaussian_filter()
  8. 刷 携程 地面业务 前端面试经历
  9. python线程监控_Python多线程的事件监控
  10. 从程序员到技术总监,分享10年开发经验
  11. 利用python批量创建文件夹、批量创建文件、批量复制文件到指定文件夹
  12. 爬虫:深度爬取网易云音乐所有歌手及其对应热门歌曲
  13. 2020滑铁卢大学计算机科学学费,滑铁卢大学专业
  14. 在寂静的夜中、独自沉沦_悲伤QQ个人签名
  15. 八国离线谷歌卫星影像地图内网发布
  16. 【汇智学堂】基于Socket实现的网络版梅花易数一撮金游戏
  17. google 输入栏不显示历史搜索记录方法
  18. Android检测手机是否安装app
  19. flutter常用库整理
  20. 匿名科创--ANO_OPENMV视觉开发板介绍

热门文章

  1. python opencv 连通域_OpenCV中一个连通域处理函数
  2. Mybatis 默认插入当前时间
  3. 单身程序员如何找对象?#罗志祥时间管理
  4. 拜日式精准引导词_拜日式的教学引导词(转)
  5. SpringBoot整合OrientDB
  6. 队列 - Queue
  7. 干掉360的方法-Windows7
  8. 【跟我学apache-commons】【四】commons-io的使用
  9. php k线15分钟 30分钟,5分钟K线、15分钟K线、30分钟K线和60分钟K线各代表
  10. 网络安全是什么?为什么要学网络安全 ?网络安全怎么学习?