{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hide_input": false
},
"outputs": [],
"source": [
"from fastai.vision import * # Quick access to computer vision functionality"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Vision example"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Images can be in labeled folders, or a single folder with a CSV."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"PosixPath('/home/ubuntu/.fastai/data/mnist_sample')"
]
},
"execution_count": null,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"path = untar_data(URLs.MNIST_SAMPLE)\n",
"path"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Image folder version"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a `DataBunch`, optionally with transforms:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAAcABwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD8IfhL8JfiT8d/iTo3wf8Ag/4NvfEPifxDeraaLounR757udskIgyOcAn8K+1f+IYX/gub/aP9l/8ADDE3m+R5u7/hYnhvy9ucY8z+0dm7P8Od2OcY5r4W8N+JvEng3XbXxR4Q8QX2lanZS+ZZ6jpt28E8D/3kkQhlPuCDX9Xf/BFL9nPxB+y9+yVo8lx/wU5h+Knxh+J3gWTUvB/h3xV8R5dV8O6fO8Iu/wDRLBbhZ7pE3wmecHzNitsMSuQQD+VH4k/Dbx78HfH+sfCz4o+Er7QfEXh/UJbHWdH1KAxz2lxGxV43U9CCPoRyMg5rEr079tXWPi9rv7X3xOvfj947g8T+NY/Hmq23ijxBaTb4L+9hupIZJYTtX90WQ7PlUBNoAAGB5jQBoeFfCfijx14is/CHgrw5favq2oTiGw0zTLR57i5kPREjQFnPsBX7Pa9qvg//AINgf2DtI03wlofh/Wf2z/jbpUx1bX5gLhvh9pDpG4gVHUFZBvi+QgCWYM7744Y0b8gPgH8efiv+zB8ZPD3x/wDgZ4q/sPxd4V1Bb7QdW+wwXP2WcAgP5VwkkT8E8OjDnpVn9o39pL44/tcfGPWv2gP2jfiNfeKvF/iC4E2q6xfqiGQgBVRI41WOGNVAVY41VEAAVQOKAOMvr261K9m1G+mMk1xK0k0jdWZjkn8SaioooA//2Q==\n",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABHNCSVQICAgIfAhkiAAAAbFJREFUSInt1q+rwlAUB/Cv8oK4iZoFQW5xoGA0C4KLA8E/weBfIBrsFotLJkHwHzCZRRwTFkzaTKLJVdk9Lznc071t/lh4vAMnbFzOZ+dw77YIAEKIEQ0T+wf/OFgsFtHpdMA5B+ccRITVagVN0+x7nHO0Wq3AKD3KbrdLlmV55vl8pkaj8bDGo/xyewpd1zEcDu3rSqUCSZLu1omiCMbY6x3+TMYYlctlqtfrjg6XyyVlMhnfHfoGAZAkSbTZbBxgqVQKgvkDE4kEqapK+/3ehg6HA+XzeYrFYu8HR6PR3WYxTZP6/X7QcXqDvV6PLpeL6y5dLBaBQM+DLwgColH3Zclk0quEI1yPxTXa7TbS6bRdeDAYoFAoQFVVAICmaYFAINj8SRAE0nX9s7v0mrlczoEZhkHZbPYzYCqVovV6bWPb7ZYYY0Ex/+Dt0TAM41nMH6goCp1OJ7Isi3a73TNj9A/KskymadrdKYryCvY7KIoiTSYTG5vNZhSPxz8DyrJM0+nUxsbjMdVqtVcxd/D2A3w8Hqlarb4D8361AUCz2cR8Pvez1DMi1zbDitD/2r4B9QGiYzfORjUAAAAASUVORK5CYII=\n",
"text/plain": [
"Image (3, 28, 28)"
]
},
"execution_count": null,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = ImageDataBunch.from_folder(path, ds_tfms=(rand_pad(2, 28), []), bs=64)\n",
"data.normalize(imagenet_stats)\n",
"img,label = data.train_ds[0]\n",
"img"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create and fit a `Learner`:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"Total time: 00:05
\n",
" \n",
" | epoch | \n",
" train_loss | \n",
" valid_loss | \n",
" accuracy | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.047818 | \n",
" 0.012341 | \n",
" 0.997056 | \n",
"
\n",
"
\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"learn = create_cnn(data, models.resnet18, metrics=accuracy)\n",
"learn.fit_one_cycle(1, 0.01)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor(0.9971)"
]
},
"execution_count": null,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"accuracy(*learn.get_preds())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### CSV version"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Same as above, using CSV instead of folder name for labels"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAAcABwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD8CNH0fV/EOr2ugaBpdzfX99cpb2VlZwNLNcTOwVI0RQWdmYgBQCSSAK/QS3/4Nwf2lNP8S6L8KviR+3J+yv4L+JmufZorf4Q+Kfi88fiaC8uI1kt7KW1hs5VSeQPGEXzCrGRQGO4V8R/s9/EH4o/Cn45+EviL8Eddt9L8YaRr9rP4Y1O6W2KWl8JAIZSbkGFdrlW3yfKpAYkYyP19/wCCX/8AwTp/Zl+FX/BRvQfjB+19/wAFPPhJ8Y/j8bmfWfBfww0TxXdamms+L/J8+2Go64Y2iEizkHaA5eUKQX2mNgD8d/jR8HviH+z58XPE3wL+LWgHSvE/hDXLnSNf04zJJ9nu7eRo5EDoSrgMpwykqwwQSCK5mvTf20fHHxo+JX7XfxN8d/tGaQmn+PtT8d6pN4x06O28lbTUvtUguIQn8ISQMgHX5eSTzXmVAHe/sz/sw/Hf9sT4yaX+z9+zZ8OrvxV4v1mOeTTtHs5Y42kSGF5pWLysqIFjjY5ZhnAAySAfoL9gT/glr/wVE+JP7WngA/CP9lj4meFtQ0vxppl0PGuseB720sfDzR3KSC9nmnjSNRHsMmwtl9hVQScV8qeCvG/jT4beLNP8ffDrxfqmga7pF0lzpWtaLqElrd2U6nKyxTRMrxuDyGUgj1r1Xxl/wUk/4KJ/EXQ7jwx8Qf2+PjTrum3cDwXWn6z8U9XuoJonxuR45bhlZTgZBGDgUAeuf8F+/il8BPjL/wAFd/jV4/8A2bjbS+HLnxFFBNf2MqPb6hqMNrDDfXURTKsklzHMwYEhyS+fnr46oooA/9k=\n",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABHNCSVQICAgIfAhkiAAAAjpJREFUSIntlrtr6gAUxk9UghEFweKSQXEocdBBKC4OpuDWgg4OruL/4OTqoIt/gQ5SXNw6dPCx2I7tItjFqToIPiEqKPR8d6qXWx9EtN473AMfGb6c/HIeeQhEBLpgGC4J+w/8O0CHw0HFYpE0TSMAxMybY61WI0VRjobikF5eXsDMG/V6PTSbTUwmEzAzRqMRrq6uDl7jm/abuVwOn5+fmE6ncLlcMJvNEEURBoMBsixvoOFw+HSgoihYLpeYTCYIhUJbvsPhwGAwOBq4d4bBYJDe3t5IURR6fn7e8uPxODmdTl0z+x4770QURUiStNPzer2b6srlMkRRPM8Md0mSJDw+PoKZ0e12IcvyUfm6gH6/H5FIBLlcDp1OZ7Oxt7e3x8IOA61WKwqFAtbr9R+PxpcajQbcbvf5gNlsFsyMxWKBh4cHZDIZ3NzcIBqNot/vg5mRTqfPB/T7/YjFYvB4PFteIpEAM2M4HMJisfzc0nzJbrej1+uBmXF3d/fzQCJCqVQCM6PZbF4G6PP5wMyYz+dwuVy6ck76PI3HYyIislgsdH19rSvnJGAqlSIiIk3T6PX1VXfeztJNJtPB7bNareh2u2Bm5PP502ZoNBpRr9fRarUgCMLv/hsMkCQJgUAA1WoVzAxN0+D1enUDTbtKVlWVVFUlQRDo6emJVqsVERHZbDYKh8Ob85iZkskkvb+/627n3pbe399jNpttvc7a7TY+Pj5QqVSgqurRmy189fVS8e/9tZ07fgE2HZxMxtUJEAAAAABJRU5ErkJggg==\n",
"text/plain": [
"Image (3, 28, 28)"
]
},
"execution_count": null,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = ImageDataBunch.from_csv(path, ds_tfms=(rand_pad(2, 28), []), bs=64)\n",
"data.normalize(imagenet_stats)\n",
"img,label = data.train_ds[0]\n",
"img"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"Total time: 00:04 \n",
" \n",
" | epoch | \n",
" train_loss | \n",
" valid_loss | \n",
" accuracy | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.056097 | \n",
" 0.014536 | \n",
" 0.994802 | \n",
"
\n",
"
\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"learn = create_cnn(data, models.resnet18, metrics=accuracy)\n",
"learn.fit_one_cycle(1, 0.01)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}