Skip to content

Commit

Permalink
Refactor: facenet->openface.
Browse files Browse the repository at this point in the history
  • Loading branch information
bamos committed Oct 11, 2015
1 parent 245a833 commit 6958664
Show file tree
Hide file tree
Showing 22 changed files with 57 additions and 57 deletions.
4 changes: 2 additions & 2 deletions batch-represent/opts.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ end
function M.parse(arg)
local cmd = torch.CmdLine()
cmd:text()
cmd:text('FaceNet')
cmd:text('OpenFace')
cmd:text()
cmd:text('Options:')

Expand All @@ -21,7 +21,7 @@ function M.parse(arg)
paths.concat(script_path(), '..', 'data', 'lfw', 'dlib-affine-sz:96'),
'Home of dataset')
cmd:option('-model',
paths.concat(script_path(), '..', 'models', 'facenet', 'nn4.v1.t7'),
paths.concat(script_path(), '..', 'models', 'openface', 'nn4.v1.t7'),
'Path to model to use.')
cmd:option('-imgDim', 96, 'Image dimension. nn1=224, nn4=96')
cmd:option('-batchSize', 50, 'mini-batch size')
Expand Down
2 changes: 1 addition & 1 deletion cloc.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash

cloc batch-represent evaluation facenet models training util \
cloc batch-represent evaluation openface models training util \
examples/web/{*.{py,html,sh},js,css}
18 changes: 9 additions & 9 deletions demos/compare.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@
fileDir = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(fileDir, ".."))

import facenet
import facenet.helper
from facenet.data import iterImgs
import openface
import openface.helper
from openface.data import iterImgs

modelDir = os.path.join(fileDir, '..', 'models')
dlibModelDir = os.path.join(modelDir, 'dlib')
facenetModelDir = os.path.join(modelDir, 'facenet')
openfaceModelDir = os.path.join(modelDir, 'openface')

parser = argparse.ArgumentParser()

Expand All @@ -52,7 +52,7 @@
default=os.path.expanduser("~/src/dlib-18.16/python_examples"),
help="dlib directory with the dlib.so Python library.")
parser.add_argument('--networkModel', type=str, help="Path to Torch network model.",
default=os.path.join(facenetModelDir, 'nn4.v1.t7'))
default=os.path.join(openfaceModelDir, 'nn4.v1.t7'))
parser.add_argument('--imgDim', type=int, help="Default image dimension.", default=96)
parser.add_argument('--cuda', action='store_true')
parser.add_argument('--verbose', action='store_true')
Expand All @@ -62,15 +62,15 @@
sys.path.append(args.dlibRoot)
import dlib

from facenet.alignment import NaiveDlib # Depends on dlib.
from openface.alignment import NaiveDlib # Depends on dlib.
if args.verbose:
print("Argument parsing and loading libraries took {} seconds.".format(time.time()-start))

start = time.time()
align = NaiveDlib(args.dlibFaceMean, args.dlibFacePredictor)
net = facenet.TorchWrap(args.networkModel, imgDim=args.imgDim, cuda=args.cuda)
net = openface.TorchWrap(args.networkModel, imgDim=args.imgDim, cuda=args.cuda)
if args.verbose:
print("Loading the dlib and FaceNet models took {} seconds.".format(time.time()-start))
print("Loading the dlib and OpenFace models took {} seconds.".format(time.time()-start))

def getRep(imgPath):
if args.verbose:
Expand Down Expand Up @@ -98,7 +98,7 @@ def getRep(imgPath):
start = time.time()
rep = net.forwardImage(alignedFace)
if args.verbose:
print(" + FaceNet forward pass took {} seconds.".format(time.time()-start))
print(" + OpenFace forward pass took {} seconds.".format(time.time()-start))
print("Representation:")
print(rep)
print("-----\n")
Expand Down
12 changes: 6 additions & 6 deletions demos/web/create-unknown-vectors.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,16 @@

from skimage import io

import facenet
from facenet.alignment import NaiveDlib
from facenet.data import iterImgs
import openface
from openface.alignment import NaiveDlib
from openface.data import iterImgs

if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('imgDir', type=str, help="Input image directory.")
parser.add_argument('--numImages', type=int, default=1000)
parser.add_argument('--model', type=str, help="TODO",
default="./models/facenet/nn4.v1.t7")
default="./models/openface/nn4.v1.t7")
parser.add_argument('--outputFile', type=str,
help="Output file, stored in numpy serialized format.",
default="./unknown.npy")
Expand All @@ -46,14 +46,14 @@

align = NaiveDlib("models/dlib/",
"shape_predictor_68_face_landmarks.dat")
facenet = facenet.TorchWrap(args.model, imgDim=args.imgDim, cuda=False)
openface = openface.TorchWrap(args.model, imgDim=args.imgDim, cuda=False)

allImgs = list(iterImgs(args.imgDir))
imgObjs = random.sample(allImgs, args.numImages)

reps = []
for imgObj in imgObjs:
rep = facenet.forward(imgObj.path)
rep = openface.forward(imgObj.path)
rep = np.array(rep)
reps.append(rep)

Expand Down
2 changes: 1 addition & 1 deletion demos/web/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ <h2>Training
<script src="vendor/js/handlebars.min.js"></script>
<script src="vendor/js/jstat.min.js"></script>
<script src="js/utils.js"></script>
<script src="js/facenet-demo.js"></script>
<script src="js/openface-demo.js"></script>
<script type="text/javascript">
registerHbarsHelpers();

Expand Down
File renamed without changes.
14 changes: 7 additions & 7 deletions demos/web/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@
import matplotlib.pyplot as plt
import matplotlib.cm as cm

import facenet
import openface

import tempfile

modelDir = os.path.join(fileDir, '..', '..', 'models')
dlibModelDir = os.path.join(modelDir, 'dlib')
facenetModelDir = os.path.join(modelDir, 'facenet')
openfaceModelDir = os.path.join(modelDir, 'openface')

parser = argparse.ArgumentParser()
parser.add_argument('--dlibFaceMean', type=str, help="Path to dlib's face predictor.",
Expand All @@ -59,7 +59,7 @@
default=os.path.expanduser("~/src/dlib-18.15/python_examples"),
help="dlib directory with the dlib.so Python library.")
parser.add_argument('--networkModel', type=str, help="Path to Torch network model.",
default=os.path.join(facenetModelDir, 'nn4.v1.t7'))
default=os.path.join(openfaceModelDir, 'nn4.v1.t7'))
parser.add_argument('--imgDim', type=int, help="Default image dimension.", default=96)
parser.add_argument('--cuda', type=bool, default=False)
parser.add_argument('--unknown', type=bool, default=False, help='Try to predict unknown people')
Expand All @@ -68,10 +68,10 @@

sys.path.append(args.dlibRoot)
import dlib
from facenet.alignment import NaiveDlib # Depends on dlib.
from openface.alignment import NaiveDlib # Depends on dlib.

align = NaiveDlib(args.dlibFaceMean, args.dlibFacePredictor)
net = facenet.TorchWrap(args.networkModel, imgDim=args.imgDim, cuda=args.cuda)
net = openface.TorchWrap(args.networkModel, imgDim=args.imgDim, cuda=args.cuda)

class Face:
def __init__(self, rep, identity):
Expand All @@ -84,7 +84,7 @@ def __repr__(self):
self.rep[0:5]
)

class FaceNetServerProtocol(WebSocketServerProtocol):
class OpenFaceServerProtocol(WebSocketServerProtocol):
def __init__(self):
self.images = {}
self.training = True
Expand Down Expand Up @@ -337,7 +337,7 @@ def processFrame(self, dataURL, identity):
log.startLogging(sys.stdout)

factory = WebSocketServerFactory("ws://localhost:9000", debug=False)
factory.protocol = FaceNetServerProtocol
factory.protocol = OpenFaceServerProtocol

reactor.listenTCP(9000, factory)
reactor.run()
4 changes: 2 additions & 2 deletions evaluation/lfw.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,8 @@ def plotClassifyExp(workDir):
'DeepFace Ensemble [{:.2f}]'.format(deepfaceAUC),
'OpenBR v1.1.0 [{:.2f}]'.format(brAUC),
'Eigenfaces (img-restrict) [{:.2f}]'.format(eigAUC),
'CMU FaceNet nn4.v1 [{:.2f}]'.format(fnAUC),
'CMU FaceNet nn4.v1 folds'],
'OpenFace nn4.v1 [{:.2f}]'.format(fnAUC),
'OpenFace nn4.v1 folds'],
loc='lower right')

plt.plot([0,1], color='k', linestyle='dashed')
Expand Down
10 changes: 5 additions & 5 deletions models/get-models.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash
#
# Download FaceNet models.
# Download OpenFace models.

cd "$(dirname "$0")"

Expand All @@ -13,10 +13,10 @@ if [ ! -f dlib/shape_predictor_68_face_landmarks.dat ]; then
bunzip2 dlib/shape_predictor_68_face_landmarks.dat.bz2
fi

exit -1 # TODO - Add FaceNet nn4.v1 URL below
exit -1 # TODO - Add OpenFace nn4.v1 URL below

mkdir -p facenet
if [ ! -f facenet/nn4.v1.t7 ]; then
mkdir -p openface
if [ ! -f openface/nn4.v1.t7 ]; then
wget TODO \
-O facenet/nn4.v1.t7
-O openface/nn4.v1.t7
fi
File renamed without changes.
File renamed without changes.
10 changes: 5 additions & 5 deletions facenet/__init__.py → openface/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@
class TorchWrap:
# Warning: This is very unstable!
# Please join us in improving it at:
# https://github.com/cmusatyalab/facenet/issues/1
# https://github.com/cmusatyalab/facenet/issues/4
def __init__(self, model=os.path.join(myDir, '..', 'models', 'facenet', 'nn4.v1.t7'),
# https://github.com/cmusatyalab/openface/issues/1
# https://github.com/cmusatyalab/openface/issues/4
def __init__(self, model=os.path.join(myDir, '..', 'models', 'openface', 'nn4.v1.t7'),
imgDim=96, cuda=False):
cmd = ['/usr/bin/env', 'th', os.path.join(myDir,'facenet_server.lua'),
cmd = ['/usr/bin/env', 'th', os.path.join(myDir,'openface_server.lua'),
'-model', model, '-imgDim', str(imgDim)]
if cuda:
cmd.append('-cuda')
Expand All @@ -42,7 +42,7 @@ def forwardPath(self, imgPath):
return [float(x) for x in self.p.stdout.readline().strip().split(',')]

def forwardImage(self, rgb):
t = '/tmp/facenet-torchwrap-{}.png'.format(binascii.b2a_hex(os.urandom(8)))
t = '/tmp/openface-torchwrap-{}.png'.format(binascii.b2a_hex(os.urandom(8)))
cv2.imwrite(t, rgb)
rep = np.array(self.forwardPath(t))
os.remove(t)
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
6 changes: 3 additions & 3 deletions facenet/facenet_server.lua → openface/openface_server.lua
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@

-- Warning: This is very unstable!
-- Please join us in improving it at:
-- https://github.com/cmusatyalab/facenet/issues/1
-- https://github.com/cmusatyalab/facenet/issues/4
-- https://github.com/cmusatyalab/openface/issues/1
-- https://github.com/cmusatyalab/openface/issues/4

require 'torch'
require 'nn'
Expand All @@ -34,7 +34,7 @@ cmd:text('Face recognition server.')
cmd:text()
cmd:text('Options:')

cmd:option('-model', './models/facenet/nn4.v1.t7', 'Path to model.')
cmd:option('-model', './models/openface/nn4.v1.t7', 'Path to model.')
cmd:option('-imgDim', 96, 'Image dimension. nn1=224, nn4=96')
cmd:option('-cuda', false)
cmd:text()
Expand Down
6 changes: 3 additions & 3 deletions training/FaceNetOptim.lua → training/OpenFaceOptim.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

local pl = require('pl.import_into')()

local FaceNetOptim, parent = torch.class('FaceNetOptim', 'nn.Optim')
local OpenFaceOptim, parent = torch.class('OpenFaceOptim', 'nn.Optim')

function FaceNetOptim:__init(model, optState, checkpoint_data)
function OpenFaceOptim:__init(model, optState, checkpoint_data)
parent.__init(self, model, optState, checkpoint_data)
end

Expand All @@ -31,7 +31,7 @@ local function on_device_for_module(mod, f)
return f()
end

function FaceNetOptim:optimizeTriplet(optimMethod, inputs, criterion)
function OpenFaceOptim:optimizeTriplet(optimMethod, inputs, criterion)
assert(optimMethod)
assert(inputs)
assert(criterion)
Expand Down
2 changes: 1 addition & 1 deletion training/dataset.lua
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
-- Source: https://github.com/facebook/fbcunn/blob/master/examples/imagenet/dataset.lua
-- Modified by Brandon Amos in Sept 2015 for FaceNet by adding
-- Modified by Brandon Amos in Sept 2015 for OpenFace by adding
-- `samplePeople` and `sampleTriplet`.

require 'torch'
Expand Down
6 changes: 3 additions & 3 deletions training/opts.lua
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ function M.parse(arg)

local cmd = torch.CmdLine()
cmd:text()
cmd:text('FaceNet')
cmd:text('OpenFace')
cmd:text()
cmd:text('Options:')

Expand All @@ -21,7 +21,7 @@ function M.parse(arg)
paths.concat(script_path(), 'work'),
'subdirectory in which to save/log experiments')
cmd:option('-data',
paths.concat(os.getenv('HOME'), 'facenet', 'data',
paths.concat(os.getenv('HOME'), 'openface', 'data',
'casia-facescrub',
'dlib-affine-sz:96'),
-- 'dlib-affine-224-split'),
Expand All @@ -42,7 +42,7 @@ function M.parse(arg)

---------- Model options ----------------------------------
cmd:option('-retrain', 'none', 'provide path to model to retrain with')
cmd:option('-modelDef', '../models/facenet/nn4.def.lua', 'path to model definiton')
cmd:option('-modelDef', '../models/openface/nn4.def.lua', 'path to model definiton')
cmd:option('-imgDim', 96, 'Image dimension. nn1=224, nn4=96')
cmd:text()

Expand Down
4 changes: 2 additions & 2 deletions training/train.lua
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ require 'optim'
require 'fbnn'
require 'image'

paths.dofile("FaceNetOptim.lua")
paths.dofile("OpenFaceOptim.lua")


local optimMethod = optim.adadelta
local optimState = {} -- Use for other algorithms like SGD
local optimator = FaceNetOptim(model, optimState)
local optimator = OpenFaceOptim(model, optimState)

trainLogger = optim.Logger(paths.concat(opt.save, 'train.log'))

Expand Down
14 changes: 7 additions & 7 deletions util/align-dlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,21 +70,21 @@ def computeMeanMain(args):


def alignMain(args):
facenet.helper.mkdirP(args.outputDir)
openface.helper.mkdirP(args.outputDir)

imgs = list(iterImgs(args.inputDir))

# Shuffle so multiple versions can be run at once.
random.shuffle(imgs)

dlibAlign = facenet.alignment.NaiveDlib(args.modelDir,
dlibAlign = openface.alignment.NaiveDlib(args.modelDir,
args.facePredictorName)

nFallbacks = 0
for imgObject in imgs:
outDir = os.path.join(args.outputDir, imgObject.cls)
imgName = "{}/{}.png".format(outDir, imgObject.name)
facenet.helper.mkdirP(outDir)
openface.helper.mkdirP(outDir)
if not os.path.isfile(imgName):
rgb = imgObject.getRGB(cache=False)
out = dlibAlign.alignImg(args.method, args.size, rgb)
Expand Down Expand Up @@ -133,10 +133,10 @@ def alignMain(args):
args = parser.parse_args()

sys.path.append(args.dlibRoot)
import facenet
import facenet.helper
from facenet.data import iterImgs
from facenet.alignment import NaiveDlib
import openface
import openface.helper
from openface.data import iterImgs
from openface.alignment import NaiveDlib

if args.mode == 'computeMean':
computeMeanMain(args)
Expand Down

0 comments on commit 6958664

Please sign in to comment.