本文主要是介绍利用vgg-16登上kaggle Invasive Species Monitoring图像识别比赛五十强,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、简介
比赛简介我用google翻译了一下
葛兰荼哥在格鲁吉亚压倒树木,而甘蔗蟾蜍威胁到全球十几个国家的栖息地。 这些只是许多可以对环境,经济甚至人类健康造成破坏性影响的两种入侵物种。 尽管受到广泛影响,追踪入侵物种的位置和扩散的努力非常昂贵,难以进行规模化。
目前,生态系统和植物分布监测取决于专家知识。 有经验的科学家访问指定的地区,并注意到居住在这些地区的物种。 使用这样高素质的劳动力是昂贵的,时间低效的,不足以满足人类在抽样时不能覆盖大面积的地区。
由于科学家无法对大量地区进行抽样,因此使用一些机器学习算法来预测未被采样的地区入侵物种的存在或不存在。 这种方法的准确性远非最佳,但仍然有助于解决生态问题的方法。
在这次比赛中,参赛者面临挑战,开发算法,以更准确地确定森林和树叶的图像是否含有侵入性绣球。 计算机视觉技术与其他当前技术如航空成像技术可以使入侵物种监测更便宜,更快速,更可靠。
比赛地址:https://www.kaggle.com/c/invasive-species-monitoring/leaderboard
2、操作
首先贴一下自己的排名
接下来我就具体讲讲应该怎么做,代码会全部贴上去,贡献给各位
1、下载数据
大家可以在kaggle上自行下载数据集,然后利用python os模块把数据分成一个训练集跟验证集。这部分代码就不贴了,操作完的结构如下:
以上是训练集的结构,验证集类似。
2、vgg-16
接下来就是利用vgg-16进行预测了,代码贴上来
# coding: utf-8
# In[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
from keras import optimizers
from keras.models import Sequential, Model, load_model
from keras import applications
from keras import optimizers
from keras.layers import Dropout, Flatten, Dense
from keras.callbacks import ModelCheckpoint
# In[8]:dir_data_train = '/home/etcp/szx/flower_data/my_new_train_v1'
dir_data_test = '/home/etcp/szx/flower_data/validation'
# dir_model = "/etcp/cartype/zoo/sample100/"
img_rows,img_cols,img_dim = 224,224,3base_model = applications.VGG16(weights='imagenet', include_top=False, input_shape=(img_rows, img_cols, img_dim))x = base_model.output
x = Flatten()(x)
x = Dense(256,activation='relu')(x)
x = Dense(1,activation='sigmoid')(x)
model = Model(input=base_model.input, output=x)
model.compile(loss='binary_crossentropy', optimizer=optimizers.SGD(lr=1e-4, momentum=0.9),metrics=['accuracy'])model.summary()
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import ModelCheckpointbatch_size = 32
epochs = 50train_datagen = ImageDataGenerator(rescale=1./255,shear_range=0.2,zoom_range=0.2,horizontal_flip=True)# this is the augmentation configuration we will use for testing:
# only rescaling
test_datagen = ImageDataGenerator(rescale=1./255)# this is a generator that will read pictures found in
# subfolers of 'data/train', and indefinitely generate
# batches of augmented image data
train_generator = train_datagen.flow_from_directory('/home/etcp/szx/flower_data/my_new_train_v1', # this is the target directorytarget_size=(224, 224), # all images will be resized to 150x150batch_size=32,class_mode='binary') # since we use binary_crossentropy loss, we need binary labels# this is a similar generator, for validation data
validation_generator = test_datagen.flow_from_directory('/home/etcp/szx/flower_data/validation',target_size=(224, 224),batch_size=32,class_mode='binary')
# model.fit_generator(
# train_generator,
# samples_per_epoch=200,
# nb_epoch = 500,
# validation_data=validation_generator,
# nb_val_samples=800,# callbacks=[ModelCheckpoint('VGG16-transferlearning.model', monitor='val_acc', save_best_only=True)])
# model.load_model('VGG16-transferlearning.model')#model.load_weights('/home/etcp/szx/flower_data/vgg4.h5')
model.save_weights('/home/etcp/szx/flower_data/vgg3.h5')
3、模型的预测
将每个图片路径存在all_names
newpath = '/home/etcp/szx/flower_data/test/'
import os
all_names = []
for i in range(1531):i = i + 1names = newpath+str(i)+'.jpg'all_names.append(names)
预测
times = 0
for i in range(1531):times += 1img_path = all_names[i]img = image.load_img(img_path, target_size=(224, 224))x = image.img_to_array(img)x = np.expand_dims(x, axis=0)# print x.shapex = np.float32(x/255.)preds = model.predict(x,verbose=0)print(np.max(preds))
这篇关于利用vgg-16登上kaggle Invasive Species Monitoring图像识别比赛五十强的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!