竞赛圈   > 猫狗大战全代码 - yinjh战队分享

来自竞赛: 猫狗大战

DC竞赛

  • 关注者 1
  • 关注了

DC竞赛

官方

猫狗大战竞赛进行了一段时间了,大家的参赛热情很高,也不断有队伍提交新的代码和分析方法。yinjh战队向我们分享了在这个竞赛中的代码,希望大家参考,并能给大家带来帮助。


以下是全部代码:


import os

import glob



from keras.models import Sequential

from keras.layers.core import Flatten, Dense, Dropout

from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D

from keras.optimizers import SGD

import cv2, numpy as np



def VGG_16(weights_path=None):

    model = Sequential()

    model.add(ZeroPadding2D((1,1),input_shape=(3,224,224)))

    model.add(Convolution2D(64, 3, 3, activation='relu'))

    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(64, 3, 3, activation='relu'))

    model.add(MaxPooling2D((2,2), strides=(2,2)))



    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(128, 3, 3, activation='relu'))

    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(128, 3, 3, activation='relu'))

    model.add(MaxPooling2D((2,2), strides=(2,2)))



    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(256, 3, 3, activation='relu'))

    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(256, 3, 3, activation='relu'))

    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(256, 3, 3, activation='relu'))

    model.add(MaxPooling2D((2,2), strides=(2,2)))



    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(512, 3, 3, activation='relu'))

    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(512, 3, 3, activation='relu'))

    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(512, 3, 3, activation='relu'))

    model.add(MaxPooling2D((2,2), strides=(2,2)))



    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(512, 3, 3, activation='relu'))

    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(512, 3, 3, activation='relu'))

    model.add(ZeroPadding2D((1,1)))

    model.add(Convolution2D(512, 3, 3, activation='relu'))

    model.add(MaxPooling2D((2,2), strides=(2,2)))



    model.add(Flatten())

    model.add(Dense(4096, activation='relu'))

    model.add(Dropout(0.5))

    model.add(Dense(4096, activation='relu'))

    model.add(Dropout(0.5))

    model.add(Dense(1000, activation='softmax'))



    if weights_path:

        model.load_weights(weights_path)



    return model



if __name__ == "__main__":



    # Test pretrained model

    model = VGG_16('vgg16_weights.h5')

    sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)

    model.compile(optimizer=sgd, loss='categorical_crossentropy')



    dogs=[251, 268, 256, 253, 255, 254, 257, 159, 211, 210, 212, 214, 213, 216, 215, 219, 220, 221, 217, 218, 207, 209, 206, 205, 208, 193, 202, 194, 191, 204, 187, 203, 185, 192, 183, 199, 195, 181, 184, 201, 186, 200, 182, 188, 189, 190, 197, 196, 198, 179, 180, 177, 178, 175, 163, 174, 176, 160, 162, 161, 164, 168, 173, 170, 169, 165, 166, 167, 172, 171, 264, 263, 266, 265, 267, 262, 246, 242, 243, 248, 247, 229, 233, 234, 228, 231, 232, 230, 227, 226, 235, 225, 224, 223, 222, 236, 252, 237, 250, 249, 241, 239, 238, 240, 244, 245, 259, 261, 260, 258, 154, 153, 158, 152, 155, 151, 157, 156]



    cats=[281,282,283,284,285,286,287]



    path = os.path.join('imgs', 'test', '*.jpg')

    files = glob.glob(path)

    result=[]



    for fl in files:

        flbase = os.path.basename(fl)



        im = cv2.resize(cv2.imread(fl), (224, 224)).astype(np.float32)

        im[:,:,0] -= 103.939

        im[:,:,1] -= 116.779

        im[:,:,2] -= 123.68

        im = im.transpose((2,0,1))

        im = np.expand_dims(im, axis=0)



        out = model.predict(im)

        p = np.sum(out[0,dogs]) / (np.sum(out[0,dogs]) + np.sum(out[0,cats]))

        result.append((flbase,p))



    result=sorted(result, key=lambda x:x[1], reverse=True)

    for x in result:

        #print x[0],x[1]

        print x[0]


此次代码由yinjh战队的Yin分享,在此感谢!大家可以参考代码和分析方式,也可以提出不同的意见。




4条评论

分享

4条评论
意见反馈
关注微信公众号 关注微信公众号

扫一扫分享给周围朋友