diff --git "a/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/README.md" "b/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/README.md" new file mode 100644 index 00000000..e3c94077 --- /dev/null +++ "b/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/README.md" @@ -0,0 +1,10 @@ +# 赛题一:遗失宠物的智能寻找 + +伴随着人们物质生活水平的提高,越来越多的家庭选择饲养小动物,它们不仅是家庭的宠物,很多人也将他们视作家庭成员之一,给予百般宠爱和呵护。然而即便如此,意外还是难免发生——宠物的意外走失给很多宠物家庭带来了困扰,满大街发传单、贴广告不仅浪费时间,成效也甚微。 + +- 作品介绍:使用cnn网络,使得宠物的识别准确率提高。 +- 作品截图:见文件夹 +- 安装、编译指南:使用ipynb训练和识别,便于使用和训练,并且适合在多种平台上使用 +- 团队介绍:林君瑶 13101581895 +- 使用到的 AWS 技术:得益于AmazonSageMaker提供的高效的GPU服务,使得在训练cnn网络可以完成较大规模的网络训练,并且较快的速度带来了极佳的使用体验 + diff --git "a/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/main.ipynb" "b/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/main.ipynb" new file mode 100644 index 00000000..4b663c5b --- /dev/null +++ "b/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/main.ipynb" @@ -0,0 +1,138 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy\n", + "import pandas\n", + "from PIL import Image\n", + "from keras import backend as K\n", + "from keras.utils import np_utils\n", + "\n", + "def load_data(dataset_path):\n", + " img = Image.open(dataset_path)\n", + " img_ndarray = numpy.asarray(img, dtype='float64') / 256\n", + " print(img_ndarray.shape)\n", + " faces = numpy.empty((400,57,47))\n", + " for row in range(20):\n", + " for column in range(20):\n", + " faces[row * 20 + column] = img_ndarray[row * 57:(row + 1) * 57, column * 47:(column + 1) * 47]\n", + " label = numpy.empty(400)\n", + " for i in range(40):\n", + " label[i * 10:i * 10 + 10] = i\n", + " label = label.astype(numpy.int)\n", + " label = np_utils.to_categorical(label, 40) \n", + "\n", + "\n", + " train_data = numpy.empty((320, 57,47))\n", + " train_label = numpy.empty((320,40))\n", + " valid_data = numpy.empty((40, 57,47))\n", + " valid_label = numpy.empty((40,40))\n", + " test_data = numpy.empty((40, 57,47))\n", + " test_label = numpy.empty((40,40)) \n", + "\n", + " for i in range(40):\n", + " train_data[i * 8:i * 8 + 8] = faces[i * 10:i * 10 + 8]\n", + " train_label[i * 8:i * 8 + 8] = label[i * 10:i * 10 + 8]\n", + " valid_data[i] = faces[i * 10 + 8]\n", + " valid_label[i] = label[i * 10 + 8]\n", + " test_data[i] = faces[i * 10 + 9]\n", + " test_label[i] = label[i * 10 + 9]\n", + "\n", + " return [(train_data, train_label), (valid_data, valid_label),(test_data, test_label)]\n", + "\n", + "\n", + "if __name__ == '__main__':\n", + " [(train_data, train_label), (valid_data, valid_label), (test_data, test_label)] = load_data('olivettifaces.gif')\n", + " oneimg = train_data[0]*256\n", + " print(oneimg)\n", + " im = Image.fromarray(oneimg)\n", + " im.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "np.random.seed(1337)\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense, Activation, Flatten\n", + "from keras.layers import Conv2D, MaxPooling2D,AveragePooling2D\n", + "from PIL import Image\n", + "import FaceData\n", + "\n", + "batch_size = 128 \n", + "nb_classes = 40 \n", + "epochs = 600 \n", + "img_rows, img_cols = 57, 47\n", + "nb_filters = 32 \n", + "pool_size = (2, 2) \n", + "kernel_size = (5, 5)\n", + "input_shape = (img_rows, img_cols,1)\n", + "\n", + "[(X_train, Y_train), (X_valid, Y_valid),(X_test, Y_test)] =FaceData.load_data('olivettifaces.gif')\n", + "\n", + "X_train=X_train[:,:,:,np.newaxis] \n", + "X_valid=X_valid[:,:,:,np.newaxis]\n", + "X_test=X_test[:,:,:,np.newaxis]\n", + "\n", + "print('样本数据集的维度:', X_train.shape,Y_train.shape)\n", + "print('测试数据集的维度:', X_test.shape,Y_test.shape)\n", + "\n", + "\n", + "model = Sequential()\n", + "model.add(Conv2D(6,kernel_size,input_shape=input_shape,strides=1))\n", + "model.add(AveragePooling2D(pool_size=pool_size,strides=2)) \n", + "model.add(Conv2D(12,kernel_size,strides=1))\n", + "model.add(AveragePooling2D(pool_size=pool_size,strides=2))\n", + "model.add(Flatten())\n", + "model.add(Dense(nb_classes))\n", + "model.add(Activation('sigmoid'))\n", + "\n", + "\n", + "model.compile(loss='categorical_crossentropy',optimizer='adadelta',metrics=['accuracy'])\n", + "\n", + "model.fit(X_train, Y_train, batch_size=batch_size, epochs=epochs,verbose=1, validation_data=(X_test, Y_test))\n", + "\n", + "score = model.evaluate(X_test, Y_test, verbose=0)\n", + "print('Test score:', score[0])\n", + "print('Test accuracy:', score[1])\n", + "\n", + "y_pred = model.predict(X_test)\n", + "y_pred = y_pred.argmax(axis=1) \n", + "for i in range(len(y_pred)):\n", + " oneimg = X_test[i,:,:,0]*256\n", + " im = Image.fromarray(oneimg)\n", + " im.show()\n", + " print('第%d只狗识别为第%d个狗'%(i,y_pred[i]))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git "a/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/\346\225\210\346\236\234\345\233\2761.jpg" "b/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/\346\225\210\346\236\234\345\233\2761.jpg" new file mode 100644 index 00000000..e40df173 Binary files /dev/null and "b/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/\346\225\210\346\236\234\345\233\2761.jpg" differ diff --git "a/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/\346\225\210\346\236\234\345\233\2762.png" "b/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/\346\225\210\346\236\234\345\233\2762.png" new file mode 100644 index 00000000..0397bd39 Binary files /dev/null and "b/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/\346\225\210\346\236\234\345\233\2762.png" differ diff --git "a/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/\346\225\210\346\236\234\345\233\2763.png" "b/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/\346\225\210\346\236\234\345\233\2763.png" new file mode 100644 index 00000000..f3739a16 Binary files /dev/null and "b/1 \351\201\227\345\244\261\345\256\240\347\211\251\347\232\204\346\231\272\350\203\275\345\257\273\346\211\276/\345\245\275\347\224\250\347\232\204\345\256\240\347\211\251\350\257\206\345\210\253-\347\272\242\351\262\244\351\261\274/\346\225\210\346\236\234\345\233\2763.png" differ