Skip to content
This repository has been archived by the owner on Jul 15, 2022. It is now read-only.

遗失宠物的智能寻找-红鲤鱼 #30

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# 赛题一:遗失宠物的智能寻找

伴随着人们物质生活水平的提高,越来越多的家庭选择饲养小动物,它们不仅是家庭的宠物,很多人也将他们视作家庭成员之一,给予百般宠爱和呵护。然而即便如此,意外还是难免发生——宠物的意外走失给很多宠物家庭带来了困扰,满大街发传单、贴广告不仅浪费时间,成效也甚微。

- 作品介绍:使用cnn网络,使得宠物的识别准确率提高。
- 作品截图:见文件夹
- 安装、编译指南:使用ipynb训练和识别,便于使用和训练,并且适合在多种平台上使用
- 团队介绍:林君瑶 13101581895
- 使用到的 AWS 技术:得益于AmazonSageMaker提供的高效的GPU服务,使得在训练cnn网络可以完成较大规模的网络训练,并且较快的速度带来了极佳的使用体验

Original file line number Diff line number Diff line change
@@ -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
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.