利用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,3

base_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 ModelCheckpoint

batch_size = 32
epochs = 50

train_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 directory
        target_size=(224, 224),  # all images will be resized to 150x150
        batch_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 + 1
    names = newpath+str(i)+'.jpg'
    all_names.append(names)

预测

times = 0
for i in range(1531):
    times += 1
    img_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.shape

    x = np.float32(x/255.)

    preds = model.predict(x,verbose=0)
    print(np.max(preds))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值