> For example, NN-512 can exceed 48 effective FMADDs per cycle (on the 27 peak FMADD machine) with Winograd-Cook-Toom-Lavin, if the tensor is deep enough (enough channels)
Roughly how many channels do you need for this approach to be worthwhile?
The AWS Rekognition study I believe you are referring to was fundamentally flawed in two ways.
First, the threshold used was the default suggested for one-to-one matching (lower false reject rate, higher false accept rate). It doesn't make sense to use this threshold for search applications, and when the study was reproduced with a more appropriate (higher) threshold there were 0 mis-identifications.
Second, law enforcement use of face recognition doesn't even involve the algorithm making a lights-out identification decision. Instead, the most similar faces are presented to the user in ranked order by similarity (like a search engine). It's a tool for generating investigative leads, often preferable to publishing the face image of a wanted perpetrator on local news.
I've seen this argument made a lot, but have never found it convincing. Is there any empirical evidence to back it up? A quick Google search suggests it is a myth.
Rank One Computing | Denver, CO | Onsite | Full-Time
Rank One Computing is an employee-owned small business specializing in computer vision and facial recognition algorithm development. Our technology is licensed by numerous organizations around the world, and our facial recognition SDK is increasingly found to be second to none.
We are interested in hiring a full-stack web developer to satisfy both client projects and internal R&D demands:
http://www.rankone.io/jobs/WebDevJobReq.pdf
30 minute phone screening followed by onsite interview.
Flexible work schedule, competitive salary commensurate with experience and equity. Come ski with us when we close the office for a powder day!
True, but unlike other commodities it's easy to take a long position on gold with ETFs like GLD which actually store the physical gold. For other commodities (like oil with ticker USO) it's not so simple to take a long position. The best you can do is trade options, with the added risk of a contango market.
Targeting FPGAs is something we've been keeping our eye on as well. Most of the pieces are in place. I think the last non-trivial part is removing any malloc()/free() calls. This should be possible as the size and lifetime of memory allocations are known at compile time and can be either moved to the stack or made global as desired.
One of the reasons I opted against Halide myself was the feeling that for this domain there ought to be enough information available to the compiler to intelligently pick tiling and vectorization parameters. For example, using Polly [0]. However in practice, manual tiling and vectorization is hard to beat.
Going to take this opportunity to plug my related project [Likely](www.liblikely.org), a DSL for lowering machine learning inference algorithms.
One of the projects we've built on top of it is a static compiler for Caffe model files. This allows you to execute Caffe models _without_ a runtime dependency on Caffe libraries. Thus you can target OSes and CPUs not supported by mainline Caffe. If you have commercial interest in this capability please reach out to me.
Very exciting! I wonder how the short-term nature of the pilot program might have some inherent biases compared to the long-term study? Presumably there would be less dramatic changes in behavior / lifestyle?
We published a paper on this a few years ago! Short answer: algorithms exhibit different accuracies on different races, genders, and ages.
B. F. Klare, M. J. Burge, J. C. Klontz, R. W. Vorder Bruegge and A. K. Jain, "Face Recognition Performance: Role of Demographic Information," in IEEE Transactions on Information Forensics and Security, vol. 7, no. 6, pp. 1789-1801, Dec. 2012.
You might be interested in [Likely](http://liblikely.org/), the programming language I've been working on. One of its core tenants is that "training == compilation". I haven't given much thought to departures from von Neumann style architectures, but with emerging/de-facto standards like OpenCL and LLVM I don't see any reason why, at least for computer vision algorithms (my domain) we can't train/compile to FPGA.
This is _not_ a post about auto-vectorization in Rust (which would have been a lot more interesting!). The provided Mandelbrot Set example is algorithmically similar to loop unrolling with a 4x unroll factor. The strategy works well in this case because neighboring locations in the Mandelbrot Set tend to require similar numbers of iterations to compute.
Roughly how many channels do you need for this approach to be worthwhile?