Image classification using cnn

Post on 08-Feb-2017

84 views 2 download

transcript

image classification using cnn[no math version]

@debarko

Practo

whoamiDebarko De

Practo

Talk : twitter/debarko

Code : github/debarko

Practo : dd@practo.comwhat to expectWhy use CNN and not regular image processing

How to easily build one for your tasks

How you can implement

This is NOT a tutorial for any of the libraries involved

Where to study more?

We will NOT be talking maths… This is strictly applications of CNN talk

AgendaFeatures

Problem statement & Impact

Trainable Feature Extractors

What is a CNN

Transfer Learning

Libraries

Projects

Fanciness

References

Problem Statement & Impact

Hand Crafted Feature Extractor

Simple classifiers

Trainable FeatureExtractor

Trainable Classifiers

CNN

if x input then y output

x * W = y’

W is kernel/filter

y != y’

E = f(Y,Y’)

CNN

Convolution Layer(Dot Product)

1 0 10 1 01 0 1Kernel

Pooling Layer(Max, Mean, Avg)

Gradient Descent

Why now?

2006 DeepNet paper [Link]

Computational power

Libraries

Lot of data → Imagenet

GPU Power

# Create first network with Kerasfrom keras.models import Sequentialfrom keras.layers import Denseimport numpy

# Create first network with Kerasfrom keras.models import Sequentialfrom keras.layers import Denseimport numpy

# fix random seed for reproducibilityseed = 7numpy.random.seed(seed)

# Create first network with Kerasfrom keras.models import Sequentialfrom keras.layers import Denseimport numpy

# fix random seed for reproducibilityseed = 7numpy.random.seed(seed)# load pima indians datasetdataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")

# Create first network with Kerasfrom keras.models import Sequentialfrom keras.layers import Denseimport numpy

# fix random seed for reproducibilityseed = 7numpy.random.seed(seed)# load pima indians datasetdataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")# split into input (X) and output (Y) variablesX = dataset[:,0:8]Y = dataset[:,8]

# create modelmodel = Sequential()

# create modelmodel = Sequential()model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))

# create modelmodel = Sequential()model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))model.add(Dense(8, init='uniform', activation='relu'))

# create modelmodel = Sequential()model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))model.add(Dense(8, init='uniform', activation='relu'))model.add(Dense(1, init='uniform', activation='sigmoid'))

# create modelmodel = Sequential()model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))model.add(Dense(8, init='uniform', activation='relu'))model.add(Dense(1, init='uniform', activation='sigmoid'))# Compile modelmodel.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# create modelmodel = Sequential()model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))model.add(Dense(8, init='uniform', activation='relu'))model.add(Dense(1, init='uniform', activation='sigmoid'))# Compile modelmodel.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])# Fit the modelmodel.fit(X, Y, nb_epoch=150, batch_size=10)

# create modelmodel = Sequential()model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))model.add(Dense(8, init='uniform', activation='relu'))model.add(Dense(1, init='uniform', activation='sigmoid'))# Compile modelmodel.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])# Fit the modelmodel.fit(X, Y, nb_epoch=150, batch_size=10)# evaluate the modelscores = model.evaluate(X, Y)

# create modelmodel = Sequential()model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))model.add(Dense(8, init='uniform', activation='relu'))model.add(Dense(1, init='uniform', activation='sigmoid'))# Compile modelmodel.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])# Fit the modelmodel.fit(X, Y, nb_epoch=150, batch_size=10)# evaluate the modelscores = model.evaluate(X, Y)print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

Entire Code

# Create first network with Kerasfrom keras.models import Sequentialfrom keras.layers import Denseimport numpy

# fix random seed for reproducibilityseed = 7numpy.random.seed(seed)# load pima indians datasetdataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")# split into input (X) and output (Y) variablesX = dataset[:,0:8]Y = dataset[:,8]

# create modelmodel = Sequential()model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))model.add(Dense(8, init='uniform', activation='relu'))model.add(Dense(1, init='uniform', activation='sigmoid'))# Compile modelmodel.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])# Fit the modelmodel.fit(X, Y, nb_epoch=150, batch_size=10)# evaluate the modelscores = model.evaluate(X, Y)print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

VGGNet

Layer 1

Layer 2

Layer 3

Layer 4

Layer 5

Visual Geometry Group ImageNet

Few projects that you guys can easily work on

Review sentiment analysis on Practo / Zomato / Flipkart

Customer Conversion Analysis based on behavioural data

Inventory Stocking based on Search queries w.r.t location

Auto analysis and tagging of Support calls

Transcribe audio based on audio in phone calls and create tickets automatically

Any data understanding which can be spread out in a visual format or any time series data

References

Basic Upto Speed Slideshow

Basic Lingo Catchup video for CNN

CS231n → Defacto & Best Online Course Work for CNNs

CS231n Assignments → http://cs231n.github.io/

Follow

@karpathy @drfeifei

Book

Fundamentals of Deep Learning: Designing Next-Generation Machine Intelligence Algorithms 1st Edition by Nikhil Buduma

धन्यवाद

twitter.com/debarko