使用mobilenet训练自己的数据
来源:互联网 发布:提高淘宝店铺流量 编辑:程序博客网 时间:2024/06/05 07:10
使用mobilenet训练自己的数据
实现背景:keras+ tensorflow
一、数据预处理文件:car2626data.py
#coding:utf-8 import os import numpy as np import cv2import pdb def load_data(): x_train = np.empty((263171,3,224,224),dtype="float32") y_train = np.empty((263171,),dtype="uint8") x_test = np.empty((9940,3,224,224),dtype="float32") y_test = np.empty((9940,),dtype="uint8") i = 0 j = 0 for line in open('/home/zhanghh/train_label_year.txt'): ss = line.split(' ') ori_img = "/home/zhanghh/data/" + ss[0]# pdb.set_trace() img1 = cv2.imread(ori_img) img2 = cv2.resize(img1,(224,224),interpolation=cv2.INTER_CUBIC) arr = np.asarray(img2,dtype="float32") x_train[i,:,:,:] = [arr[:,:,0],arr[:,:,1],arr[:,:,2]]# pdb.set_trace() y_train[i] = int(ss[-1]) i+=1 y_train = np.reshape(y_train,(len(y_train),1)) for line in open('/home/zhanghh/test_label_year.txt'): nn = line.split(' ') or_img = "/home/zhanghh/data/" + nn[0]##把图像resize到224*224大小 img3 = cv2.imread(or_img) img4 = cv2.resize(img3,(224,224),interpolation=cv2.INTER_CUBIC) arr = np.asarray(img4,dtype="float32") x_test[j,:,:,:] = [arr[:,:,0],arr[:,:,1],arr[:,:,2]] y_test[j] = int(nn[-1]) j+=1 y_test = np.reshape(y_test,(len(y_test),1))#change channels last = 'tf' x_train = x_train.transpose(0,2,3,1) x_test = x_test.transpose(0,2,3,1) return (x_train,y_train),(x_test,y_test)
二、mobilenet模型架构文件:mobilenet.py
# coding: utf-8from keras.models import Sequential, Modelfrom keras.layers import Dense, Activation, Flatten, Input, BatchNormalization, AveragePooling2Dfrom keras.layers import Conv2D, SeparableConv2Dclass MobileNet(): def mobile_block(self, filter_1, filter_2): model = self.model model.add(SeparableConv2D(filter_1,kernel_size=(3,3), strides=(1,1),padding='same')) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(Conv2D(filter_1,kernel_size=(1,1),strides=(1,1), padding='same')) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(SeparableConv2D(filter_2, kernel_size=(3,3), strides=(2,2),padding='same')) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(Conv2D(filter_2 * 2,kernel_size=(1,1),strides=(1,1), padding='same')) model.add(BatchNormalization()) model.add(Activation('relu')) def final_conv_block(self): model = self.model model.add(SeparableConv2D(512,kernel_size=(3,3), strides=(2,2),padding='same')) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(Conv2D(1024,kernel_size=(1,1),strides=(1,1), padding='same')) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(SeparableConv2D(1024,kernel_size=(3,3), strides=(1,1),padding='same')) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(Conv2D(1024,kernel_size=(1,1),strides=(1,1), padding='same')) model.add(BatchNormalization()) model.add(Activation('relu')) def separable_filters(self): model = self.model for i in range(5): model.add(SeparableConv2D(512,kernel_size=(3,3), strides=(1,1),padding='same')) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(Conv2D(512,kernel_size=(1,1),strides=(1,1), padding='same')) model.add(BatchNormalization()) model.add(Activation('relu')) def pool_and_classify(self): model = self.model model.add(AveragePooling2D(pool_size=(7,7),strides=(1,1))) model.add(Flatten()) model.add(Dense(2626)) #按照自己的分类数目进行修改Dense() model.add(Activation('softmax')) def __init__(self, size=(224,224,3)): self.create(size) def create(self, size): self.model = Sequential() self.model.add(Conv2D(32,kernel_size=(3,3),strides=(2,2), padding='same', input_shape=size)) self.mobile_block(32,64) self.mobile_block(128,128) self.mobile_block(256,256) self.separable_filters() self.final_conv_block() self.pool_and_classify()
三、运行文件:mobile_cnn.py
from __future__ import print_functionimport kerasimport car2626dataimport mobilenetfrom keras.preprocessing.image import ImageDataGeneratorfrom keras.models import Sequentialfrom keras.layers import Dense, Dropout, Activation, Flattenfrom keras.layers import Conv2D, MaxPooling2Dfrom mobilenet import MobileNetbatch_size = 128num_classes = 2626epochs = 95# The data, shuffled and split between train and test sets:(x_train, y_train), (x_test, y_test) = car2626data.load_data()print('x_train shape:', x_train.shape)print(x_train.shape[0], 'train samples')print(x_test.shape[0], 'test samples')# Convert class vectors to binary class matrices.y_train = keras.utils.to_categorical(y_train, num_classes)y_test = keras.utils.to_categorical(y_test, num_classes)MODEL = MobileNet()# initiate RMSprop optimizeropt = keras.optimizers.rmsprop(lr=0.0004, decay=1e-6)# Let's train the model using RMSpropMODEL.model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])x_train /= 255x_test /= 255MODEL.model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, y_test))score = MODEL.model.evaluate(x_test, y_test, verbose=0)print('Test loss:', score[0])print('Test accuracy:', score[1])MODEL.model.save_weights('mobilenet_car2626_model.h5')
2 0
- 使用mobilenet训练自己的数据
- mobileNet训练自己的样本
- tensorflow object_detection 用自己的数据训练目标检测模型Mobilenet
- 【SSD】用caffe-ssd框架MobileNet网络训练自己的数据集
- caffe-MobileNet-ssd环境搭建及训练自己的数据集模型
- Caffe上训练使用自己的数据
- 使用caffe训练自己的图像数据
- Caffe上训练使用自己的数据
- 使用caffe训练自己的数据
- 使用Tensorflow训练自己的分割数据
- 使用自己的数据训练Faster-RCNN
- 使用faster_rcnn训练自己的数据
- 使用tensorflow训练自己的数据
- 使用yolov2训练自己的数据集
- 使用SSD检测训练自己的数据
- 训练自己的数据
- 训练自己的数据
- 使用faster rcnn训练自己的数据-制作数据集
- Appium(二) 官网下载+安装(win7)
- 算法--计算当天在该年是第几天
- 浅谈translate属性与相对定位、绝对定位的区别
- binary-tree-level-order-traversal-ii
- Spring 使用 DefaultAdvisorAutoProxyCreator创建AOP 小结
- 使用mobilenet训练自己的数据
- 行内元素,块级元素和空元素
- Service 简单的音乐播放服务
- Spring MVC 新增跨域支持
- Java学习笔记_11
- Android动画案例(三)属性动画
- CCF NOI1145 数字金字塔【DP】
- Java开发模式-单例模式
- 简易Android播放器