liuyuqi-dellpc 6 years ago
commit
021202014c
2 changed files with 208 additions and 0 deletions
  1. 10 0
      mian.py
  2. 198 0
      vgg16模型图像识别.ipynb

+ 10 - 0
mian.py

@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+'''
+@Auther :liuyuqi.gov@msn.cn
+@Time :2018/4/10 17:35
+@File :mian.py
+'''
+
+if __name__ == '__main__':
+    pass

+ 198 - 0
vgg16模型图像识别.ipynb

@@ -0,0 +1,198 @@
+{
+ "cells": [
+  {
+   "cell_type": "heading",
+   "metadata": {
+    "collapsed": true
+   },
+   "level": 1,
+   "source": [
+    "## 数据下载\n",
+    "对应的模型在 'vgg16' 可以下载链接: https://pan.baidu.com/s/1qgx5LfTOen9MDlTdfGKFhw 密码: s4m5"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 导入包\n",
+    "from keras.models import Sequential\n",
+    "from keras.layers.core import Flatten, Dense, Dropout\n",
+    "from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D\n",
+    "from keras.optimizers import SGD\n",
+    "import cv2, numpy as np"
+   ]
+  },
+  {
+   "cell_type": "heading",
+   "metadata": {},
+   "level": 1,
+   "source": [
+    "定义模型"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def VGG_16(weights_path=None):\n",
+    "    model = Sequential()\n",
+    "    model.add(ZeroPadding2D((1,1),input_shape=(3,224,224)))\n",
+    "    model.add(Convolution2D(64, 3, 3, activation='relu'))\n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(64, 3, 3, activation='relu'))\n",
+    "    model.add(MaxPooling2D((2,2), strides=(2,2)))\n",
+    "    \n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(128, 3, 3, activation='relu'))\n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(128, 3, 3, activation='relu'))\n",
+    "    model.add(MaxPooling2D((2,2), strides=(2,2)))\n",
+    "    \n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(256, 3, 3, activation='relu'))\n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(256, 3, 3, activation='relu'))\n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(256, 3, 3, activation='relu'))\n",
+    "    model.add(MaxPooling2D((2,2), strides=(2,2)))\n",
+    "    \n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(512, 3, 3, activation='relu'))\n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(512, 3, 3, activation='relu'))\n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(512, 3, 3, activation='relu'))\n",
+    "    model.add(MaxPooling2D((2,2), strides=(2,2)))\n",
+    "    \n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(512, 3, 3, activation='relu'))\n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(512, 3, 3, activation='relu'))\n",
+    "    model.add(ZeroPadding2D((1,1)))\n",
+    "    model.add(Convolution2D(512, 3, 3, activation='relu'))\n",
+    "    model.add(MaxPooling2D((2,2), strides=(2,2)))\n",
+    "    \n",
+    "    model.add(Flatten())\n",
+    "    model.add(Dense(4096, activation='relu'))\n",
+    "    model.add(Dropout(0.5))\n",
+    "    model.add(Dense(4096, activation='relu'))\n",
+    "    model.add(Dropout(0.5))\n",
+    "    model.add(Dense(1000, activation='softmax'))\n",
+    "    \n",
+    "    if weights_path:\n",
+    "    model.load_weights(weights_path)\n",
+    "    \n",
+    "    return model"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model = VGG_16('vgg16_weights.h5')  "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)\n",
+    "model.compile(optimizer=sgd, loss='categorical_crossentropy')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def load_image(imageurl):\n",
+    "    im = cv2.resize(cv2.imread(imageurl),(224,224)).astype(np.float32)\n",
+    "    im[:,:,0] -= 103.939\n",
+    "    im[:,:,1] -= 116.779\n",
+    "    im[:,:,2] -= 123.68\n",
+    "    im = im.transpose((2,0,1))\n",
+    "    im = np.expand_dims(im,axis=0)\n",
+    "    return im"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "f = open('synset_words.txt','r')\n",
+    "lines = f.readlines()\n",
+    "f.close()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def predict(url):\n",
+    "im = load_image(url)\n",
+    "pre = np.argmax(model.predict(im))\n",
+    "print lines[pre]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%pylab inline\n",
+    "from IPython.display import Image\n",
+    "Image('cat1.jpg')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "predict('cat1.jpg')\n",
+    "Image('zebra.jpg')\n",
+    "predict('zebra.jpg')\n",
+    "Image('airplane.jpg')\n",
+    "predict('airplane.jpg')\n",
+    "predict('airplane.jpg')"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 2",
+   "language": "python",
+   "name": "python2"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 2
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython2",
+   "version": "2.7.6"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}