Newer
Older
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"German Traffic Sign Recognition Benchmark (GTSRB)\n",
"=================================================\n",
"Introduction au Deep Learning (IDLE) - S. Aria, E. Maldonado, JL. Parouty - CNRS/SARI/DEVLOG - 2020\n",
"\n",
"## Episode 2 : First Convolutions\n",
" - Read dataset\n",
" - Build a model\n",
" - Train the model\n",
" - Model evaluation\n",
"\n",
"source": [
"import tensorflow as tf\n",
"from tensorflow import keras\n",
"from tensorflow.keras.callbacks import TensorBoard\n",
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import h5py\n",
"import os,time\n",
"\n",
"ooo.init()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We're going to retrieve a previously recorded dataset. \n",
"For example: set-24x24-L"
"#\n",
"filename='./data/'+dataset+'.h5'\n",
"with h5py.File(filename) as f:\n",
" x_train = f['x_train'][:]\n",
" y_train = f['y_train'][:]\n",
" x_test = f['x_test'][:]\n",
" y_test = f['y_test'][:]\n",
"\n",
"# ---- Dataset shape\n",
"#\n",
"(n,lx,ly,lz) = x_train.shape\n",
"data_shape = (lx, ly, lz)\n",
"\n",
"# ---- done\n",
"print('Dataset loaded ({:.1f} Mo)\\n'.format(os.path.getsize(filename)/(1024*1024)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We take a quick look as we go by..."
"print(\"x_train : \", x_train.shape)\n",
"print(\"y_train : \", y_train.shape)\n",
"print(\"x_test : \", x_test.shape)\n",
"print(\"y_test : \", y_test.shape)\n",
"ooo.plot_images(x_train, y_train, range(6), columns=3, x_size=4, y_size=3)\n",
"ooo.plot_images(x_train, y_train, range(36), columns=12, x_size=1, y_size=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4/ Create model\n",
"Nous allons maintenant construire un modèle et effectuer un apprentissage.. \n",
"\n",
"\n",
"Some hyperparameters :"
"metadata": {},
"outputs": [],
"source": [
"batch_size = 64\n",
"num_classes = 43\n",
"epochs = 16"
{
"cell_type": "markdown",
"metadata": {},
"source": [
"My models :"
]
},
"def get_model_v1():\n",
" model = keras.models.Sequential()\n",
" model.add( keras.layers.Conv2D(96, (3,3), activation='relu', input_shape=(lx,ly,lz)))\n",
" model.add( keras.layers.MaxPooling2D((2, 2)))\n",
" model.add( keras.layers.Conv2D(192, (3, 3), activation='relu'))\n",
" model.add( keras.layers.MaxPooling2D((2, 2)))\n",
" model.add( keras.layers.Flatten()) \n",
" model.add( keras.layers.Dense(500, activation='relu'))\n",
" model.add( keras.layers.Dense(500, activation='relu'))\n",
" model.add( keras.layers.Dense(43, activation='softmax'))\n",
" return model\n",
" \n",
"# A more sophisticated model\n",
"#\n",
"def get_model_v2():\n",
" model = keras.models.Sequential()\n",
"\n",
" model.add( keras.layers.Conv2D(64, (3, 3), padding='same', input_shape=(lx,ly,lz), activation='relu'))\n",
" model.add( keras.layers.Conv2D(64, (3, 3), activation='relu'))\n",
" model.add( keras.layers.MaxPooling2D(pool_size=(2, 2)))\n",
" model.add( keras.layers.Dropout(0.2))\n",
"\n",
" model.add( keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu'))\n",
" model.add( keras.layers.Conv2D(128, (3, 3), activation='relu'))\n",
" model.add( keras.layers.MaxPooling2D(pool_size=(2, 2)))\n",
" model.add( keras.layers.Dropout(0.2))\n",
"\n",
" model.add( keras.layers.Conv2D(256, (3, 3), padding='same',activation='relu'))\n",
" model.add( keras.layers.Conv2D(256, (3, 3), activation='relu'))\n",
" model.add( keras.layers.MaxPooling2D(pool_size=(2, 2)))\n",
" model.add( keras.layers.Dropout(0.2))\n",
"\n",
" model.add( keras.layers.Flatten())\n",
" model.add( keras.layers.Dense(512, activation='relu'))\n",
" model.add( keras.layers.Dropout(0.5))\n",
" model.add( keras.layers.Dense(43, activation='softmax'))\n",
" return model\n",
"\n",
"# My sphisticated model, but small and fast\n",
"#\n",
"def get_model_v3():\n",
" model = keras.models.Sequential()\n",
" model.add( keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(lx,ly,lz)))\n",
" model.add( keras.layers.MaxPooling2D((2, 2)))\n",
" model.add( keras.layers.Dropout(0.5))\n",
" model.add( keras.layers.Conv2D(64, (3, 3), activation='relu'))\n",
" model.add( keras.layers.MaxPooling2D((2, 2)))\n",
" model.add( keras.layers.Dropout(0.5))\n",
" model.add( keras.layers.Conv2D(128, (3, 3), activation='relu'))\n",
" model.add( keras.layers.MaxPooling2D((2, 2)))\n",
" model.add( keras.layers.Dropout(0.5))\n",
" model.add( keras.layers.Conv2D(256, (3, 3), activation='relu'))\n",
" model.add( keras.layers.MaxPooling2D((2, 2)))\n",
" model.add( keras.layers.Dropout(0.5))\n",
" model.add( keras.layers.Flatten()) \n",
" model.add( keras.layers.Dense(1152, activation='relu'))\n",
" model.add( keras.layers.Dropout(0.5))\n",
"\n",
" model.add( keras.layers.Dense(43, activation='softmax'))\n",
" return model\n"
]
},
{
"cell_type": "code",
"metadata": {},
"source": [
"# ---- The model I want to test..\n",
"#\n",
"model = get_model_v1()\n",
"model.summary()\n",
"model.compile(optimizer='adam',\n",
" loss='sparse_categorical_crossentropy',\n",
" metrics=['accuracy'])\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5/ Run model"
]
},
"history = model.fit( x_train[:3000], y_train[:3000],\n",
" batch_size=batch_size,\n",
" epochs=epochs,\n",
" verbose=1,\n",
" validation_data=(x_test, y_test))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 6/ Evaluation"
]
},
"\n",
"print('Test loss : {:5.4f}'.format(score[0]))\n",
"print('Test accuracy : {:5.4f}'.format(score[1]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"set-24x24-L : size=230 Mo, 90.67% \n",
"set-24x24-L-LHE : size=230 Mo, 93.90% \n",
"set-24x24-RGB : size=784 Mo, 92.82% \n",
"set-24x24-RGB-HE : size=784 Mo, 92.64% \n",
"set-48x48-L-LHE : size=230 Mo, 97.70% (v2) 1'52\" \n",
"set-48x48-RGB-HE : size=xxx Mo, 96.94% (v2) \n",
"set-48x48-L-LHE : size=784 Mo, 97.67% (v3) 42\" \n",
"...\n",
"```"
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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",
}
},
"nbformat": 4,
"nbformat_minor": 4
}