Building the interface of retail 1. e-commerce level convenience - - PowerPoint PPT Presentation

building the interface of retail 1 e commerce level
SMART_READER_LITE
LIVE PREVIEW

Building the interface of retail 1. e-commerce level convenience - - PowerPoint PPT Presentation

Building the interface of retail 1. e-commerce level convenience for shoppers 2. e-commerce level automation and insight for retailers Amazon Go and other shelf-based approaches provide a great proof of concept, but have large drawbacks.


slide-1
SLIDE 1
slide-2
SLIDE 2

Building the interface of retail

slide-3
SLIDE 3

1. e-commerce level convenience for shoppers 2. e-commerce level automation and insight for retailers

slide-4
SLIDE 4
slide-5
SLIDE 5

Amazon Go and other shelf-based approaches provide a great proof of concept, but have large drawbacks.

slide-6
SLIDE 6
slide-7
SLIDE 7
slide-8
SLIDE 8

Shelf-based approaches require thousands of sensors and a bottom-up restructuring of a store Gated entry changes the customer flow

slide-9
SLIDE 9

Our proof of concept store on Market st

slide-10
SLIDE 10

27 total sensors

slide-11
SLIDE 11

Our partners have consistently requested a ceiling-only solution Standard Market is a 1,900 sq foot convenience store It’s powered by 27 overhead cameras No shelf sensors, depth sensors, RFID, biometric trackers, or turnstiles

slide-12
SLIDE 12

Major Research Challenges in Autonomous Checkout

Tracking Action Recognition Item Classification

slide-13
SLIDE 13

Major Research Challenges in Autonomous Checkout

Who Who has what? What

slide-14
SLIDE 14

Major Research Challenges in Autonomous Checkout

Tracking Action Recognition Item Classification

slide-15
SLIDE 15
slide-16
SLIDE 16

Joint work between Karl Obermeyer, Kyle Dorman, Warren Green, Juan Lasheras, Dave Valdman, Jordan Fisher

slide-17
SLIDE 17

Major Research Challenges in Autonomous Checkout

Tracking Action Recognition Item Classification

slide-18
SLIDE 18

Major Research Challenges in Autonomous Checkout

Tracking

  • Dense, multi-object tracking in the wild
  • Multi-view consensus
  • Constant partial and full occlusions
  • Has to run in real time
  • Can’t use facial recognition
  • Off the shelf, cheap hardware
  • Has to be nearly 100% accurate
slide-19
SLIDE 19

Major Research Challenges in Autonomous Checkout

Tracking

  • Dense, multi-object tracking in the wild
  • Multi-view consensus
  • Constant partial and full occlusions
  • Has to run in real time
  • Can’t use facial recognition
  • Off the shelf, cheap hardware
  • Has to be nearly 100% accurate
slide-20
SLIDE 20
slide-21
SLIDE 21
slide-22
SLIDE 22

High level components of a tracker

Feature Extraction Association

slide-23
SLIDE 23

High level components of a tracker

Joint Association Temporal Association Spatial Association

slide-24
SLIDE 24

High level components of a tracker

Feature Extraction Association

You don’t necessarily want to isolate these systems!

slide-25
SLIDE 25

General Approach

  • Figure out your metric
  • Get good data
  • Invest in infrastructure
  • Hedge your research bets
  • Evaluate true metric
  • Productionize
slide-26
SLIDE 26

General Approach

  • Figure out your metric
  • Get good data
  • Invest in infrastructure
  • Hedge your research bets
  • Evaluate true metric
  • Productionize
slide-27
SLIDE 27

Figure out your metric

  • You don’t get to pick your metric, you need to

determine it

  • Whatever metric you pick, it will be leaky. Be prepared
  • The standard metric in the literature is probably not

what you want

slide-28
SLIDE 28

Correct Metric for Cascading Models

Model 1 Model 2 Final Metric

slide-29
SLIDE 29

Correct Metric for Cascading Models

Tracking Basket System Receipt Accuracy

slide-30
SLIDE 30

Correct Metric for Cascading Models

Tracking Basket System Receipt Accuracy

Intermediate Metric

slide-31
SLIDE 31
slide-32
SLIDE 32

Correct Metric for Cascading Models

Tracking Basket System Receipt Accuracy

Intermediate Metric

slide-33
SLIDE 33

Determining your intermediate metric

  • Improving the metric should almost always improve

your final metric, potentially with the need to retrain downstream models (We call this Firewalling)

  • Should be able to be optimized
  • Maximize one thing, satisfice everything else.

Alternatively, use blended metric.

  • Other metrics should be considered “debug” metrics
slide-34
SLIDE 34

Things we might care about

  • False negatives
  • False positives
  • Concentration of false negatives per person
  • Image plane swaps
  • True swaps
  • Impossible to optimize everything simultaneously. How

do we proceed?

slide-35
SLIDE 35

Blended metrics, or utility functions

slide-36
SLIDE 36

Blended metrics, or utility functions Does this assign the right amount of utility to each individual metric? Probably not. Does this firewall our final metric? Probably not

slide-37
SLIDE 37

Maximize and satisfice

  • For all metrics identify the minimum reasonable

requirements

  • Identify the one additional metric that improving

beyond the minimum would yield continued improvement for the downstream systems

slide-38
SLIDE 38

Maximize and satisfice

  • Satisfice
  • Swaps = 0
  • Untracked people = 0
  • Dropped tracks = 0
  • Maximize
  • Sum of image plane MOTA’s
  • Debug metric
  • Image plane swaps, false positives
slide-39
SLIDE 39

General Approach

  • Figure out your metric
  • Get good data
  • Invest in infrastructure
  • Hedge your research bets
  • Evaluate true metric
  • Productionize
slide-40
SLIDE 40

General Approach

  • Figure out your metric
  • Get good data
  • Invest in infrastructure
  • Hedge your research bets
  • Evaluate true metric
  • Productionize
slide-41
SLIDE 41

General Approach

  • Figure out your metric
  • Get good data
  • Invest in infrastructure
  • Hedge your research bets
  • Evaluate true metric
  • Productionize
slide-42
SLIDE 42

General Approach

  • Figure out your metric
  • Get good data
  • Invest in infrastructure
  • Hedge your research bets
  • Evaluate true metric
  • Productionize
slide-43
SLIDE 43

General Approach

  • Figure out your metric
  • Get good data
  • Invest in infrastructure
  • Hedge your research bets
  • Evaluate true metric
  • Productionize
slide-44
SLIDE 44

Results

slide-45
SLIDE 45
slide-46
SLIDE 46
slide-47
SLIDE 47

General Approach

  • Figure out your metric
  • Get good data
  • Invest in infrastructure
  • Hedge your research bets
  • Evaluate true metric
  • Productionize
slide-48
SLIDE 48

General Approach

  • Figure out your metric
  • Get good data
  • Invest in infrastructure
  • Hedge your research bets
  • Evaluate true metric
  • Productionize
slide-49
SLIDE 49

Problem

  • Algorithm is O(n^2 * p^2)
  • Runs at 0.5 FPS, needs to run at 30 FPS
slide-50
SLIDE 50

Solution

  • Modify the algorithm to reduce runtime complexity?
slide-51
SLIDE 51

Noop.

slide-52
SLIDE 52
slide-53
SLIDE 53

If we can get a 100x speedup, we don’t need to modify the algorithm.

slide-54
SLIDE 54

Why Rust?

  • 1. Very fast
  • 2. Fearless parallelism
  • 3. Easier to maintain
  • 4. Language of choice
slide-55
SLIDE 55
slide-56
SLIDE 56

Why not Rust?

  • 1. Poor support for scientific computing
  • 2. Hard to learn
  • 3. Smells “shiny”
slide-57
SLIDE 57

Case study We’re using Rust for high performance system code, but not yet for complex models Wanted a case study to demonstrate feasibility

slide-58
SLIDE 58

Approach

  • 1. Test harness
  • 2. Restructure code to be Rustic
  • 3. Full mypy type coverage
  • 4. Automatic transpilation
  • 5. Iterate with the Rust compiler
  • 6. Hand fix the rest
  • 7. Build needed library FFI’s
  • 8. dbg! and print pairs to isolate output divergence
slide-59
SLIDE 59

class SimpleClass: """ This is a simple class. Args: x: Some number here! """ def __init__(self, x) -> None: self.x = x def some_function(self): return self.x

slide-60
SLIDE 60

class SimpleClass: """ This is a simple class. Args: x: Some number here! """ def __init__(self, x: int) -> None: self.x = x def some_function(self) -> float: return self.x

slide-61
SLIDE 61

/// This is a simple class. pub struct SimpleClass { x: usize, } impl SimpleClass { /// Return a new SimpleClass. /// /// # Arguments /// /// * `x` - Some number here! pub fn new(x: usize) -> SimpleClass { SimpleClass { x: x, } } pub fn some_function(&self) -> f64 { self.x } }

pyout.py output transpiling rocks!

slide-62
SLIDE 62

Approach

  • 1. Test harness
  • 2. Restructure code to be Rustic
  • 3. Full mypy type coverage
  • 4. Automatic transpilation
  • 5. Iterate with the Rust compiler
  • 6. Hand fix the rest
  • 7. Build needed library FFI’s
  • 8. dbg! and print pairs to isolate output divergence
slide-63
SLIDE 63

Approach

  • 1. Test harness
  • 2. Restructure code to be Rustic
  • 3. Full mypy type coverage
  • 4. Automatic transpilation
  • 5. Iterate with the Rust compiler
  • 6. Hand fix the rest
  • 7. Build needed library FFI’s
  • 8. dbg! and print pairs to isolate output divergence
slide-64
SLIDE 64

Results

  • 30+ FPS for 20 people and 20 cameras on a single

core!

  • No parallelism! No algorithmic changes!
slide-65
SLIDE 65

What sucked

  • 1. Library ecosystem
  • 2. Poor opencv support, had to hand wrap FFI calls
  • 3. Poor, unergonomic multidimensional array support
slide-66
SLIDE 66

Major Research Challenges in Autonomous Checkout

Tracking Action Recognition Item Classification

slide-67
SLIDE 67

jordan@standard.ai