您的位置:首页 > 理论基础 > 计算机网络

基于深度残差网络的图像识别案例

2017-06-10 10:31 585 查看

1、深度残差网络介绍

由何凯明发表的2016年CVPR最佳论文—图像识别中的深度残差学习(Deep Residual Learning for Image Recognition), 这个152层ResNet架构深的网络的错误率低得惊人,在imagenet上达到了3.6%,人类都大约在5%~10%的水平。

在五个主要任务轨迹中都获得了第一名的成绩:

ImageNet分类任务:“超级深”的152层网络

ImageNet检测任务:超过第二名16%

ImageNet定位任务:超过第二名27%

COCO检测任务:超过第二名11%

COCO分割任务:超过第二名12%

2、基于tensorflow框架的模型搭建

数据集我用了我自己在公司实习的数据,所以不方便透露,也就是不同车型的图片用以识别图片。

2、1导入相关库

import os
import pandas as pd
import numpy as np
import keras.layers.core as core
import keras.layers.convolutional as conv
import keras.models as models
import keras.utils.np_utils as kutils
import sklearn.metrics as metrics
import keras.preprocessing.image as image
import keras.callbacks as callbacks
import tensorflow as tf
from keras.applications import ResNet50
from keras.layers import Input,Dense,Flatten
from keras.models import Model
from keras.callbacks import EarlyStopping


2、2模型搭建

模型使用的也就是大名鼎鼎的resnet,因为在keras有预训练好的模型构建,所以我的主模型也就是导入这部分模型,如下所示

img_input = Input(shape=(img_rows,img_cols,img_dim))
basemodel = ResNet50(include_top=False,input_tensor=img_input,weights=None)
#####权重已经下载在本地
basemodel.load_weights('e:/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5')


解释:

大家可以看到我在include_top设置了false,也就是说我们只用到resnet中间的模型,后续的全连接我们自己定义

全连接如下:

x = basemodel.output
x = Flatten()(x)
x = Dense(1024,activation='relu')(x)
x = Dense(nb_class,activation='softmax')(x)
model = Model(input=img_input,output=x)


3、模型训练

model.fit_generator(
train_generator,
samples_per_epoch=400,
nb_epoch=100,
validation_data=validation_generator,
nb_val_samples=40,
nb_worker=8,
callbacks=[EarlyStopping(monitor='val_loss',patience=3)])


最后准确率达到了90啪以上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐