Hacker News new | ask | show | jobs
by lennyevans 2687 days ago
Lena here: Certainly, other people can do it, but it would be quite an investment for them. Here are some reasons why:

• The on-device tools are still in their infancy, and so it was actually a lot of work for us just to figure out what configuration of framework would work in a production system. For example, we can't use coreml for our iOS framework since it is only supported on iOS 11+ and many apps still support iOS 9+.

• There's very strict model size and performance constraints that require us to really optimize our model. App binary sizes are often tightly controlled in mobile first companies so we don't have much wiggle room in terms of how large our network can be. On top of that, we want the model to run reliably and quickly on phones from 5 years ago (which are still used today), when the hardware was much worse than it is today.

• Getting the training data for the model isn't easy.

• The model needs to be maintained, so any company that tries to do this would need to have a dedicated team on it. Credit card providers are constantly changing the style of cards they make (for example the new Visa Quickread format), and the framework has to be updated to keep up with this.

3 comments

I would add: Stripe might build this for themselves, and Apple might one day provide a native API. But there is also a good chance that they buy this tiny YC startup instead - gets them two former Uber engineers and an instant working API. Another credible path to exit is to sell to a dumber, slower company - like Visa. Fraud is a huge issue and big companies in the payment space are always hungry for pragmatic solutions like this.
If it's not revealing too much, can you tell us a bit more about how you got the necessary training data? And any tips on optimizing models for on-device ML?
Sorry, I unfortunately can't reveal too much about the training data. As for tips on optimizing models for device, choosing a fully convolutional architecture is almost a requirement as any substantial fully connected layer is going to take up too much space. For convolutional layers you want to use more efficient versions like depthwise separable convolutions. Using quantization is a pretty easy way to reduce the size of the model without sacrificing too much performance as well.
Ah, gotcha. This is a really cool idea. All the best.