Open Source Digital Camera on Field Programmable Gate Arrays

Similar documents
Open Source Digital Camera on Field Programmable Gate Arrays

Journal of Engineering Science and Technology Review 9 (5) (2016) Research Article. L. Pyrgas, A. Kalantzopoulos* and E. Zigouris.

DESIGN AND DEVELOPMENT OF CAMERA INTERFACE CONTROLLER WITH VIDEO PRE- PROCESSING MODULES ON FPGA FOR MAVS

Digital Systems Design

Image processing with the HERON-FPGA Family

VLSI Implementation of Image Processing Algorithms on FPGA

CMOS OV7725 Camera Module 1/4-Inch 0.3-Megapixel Module Datasheet

Colour Recognizing Robot Arm Equipped with a CMOS Camera and an FPGA

A HIGH PERFORMANCE HARDWARE ARCHITECTURE FOR HALF-PIXEL ACCURATE H.264 MOTION ESTIMATION

LOW-POWER SOFTWARE-DEFINED RADIO DESIGN USING FPGAS

Implementation of a Streaming Camera using an FPGA and CMOS Image Sensor. Daniel Crispell Brown University

Real-Time License Plate Localisation on FPGA

CMOS MT9D111Camera Module 1/3.2-Inch 2-Megapixel Module Datasheet

Implementing Logic with the Embedded Array

Implementation of Face Detection System Based on ZYNQ FPGA Jing Feng1, a, Busheng Zheng1, b* and Hao Xiao1, c

Lecture 3, Handouts Page 1. Introduction. EECE 353: Digital Systems Design Lecture 3: Digital Design Flows, Simulation Techniques.

Zybo Z7 Pcam 5C Demo

Face Detection System on Ada boost Algorithm Using Haar Classifiers

FPGA-based Digital Signal Processing Trainer

A COMPARISON ANALYSIS OF PWM CIRCUIT WITH ARDUINO AND FPGA

PARALLEL IMAGE PROCESSING AND COMPUTER VISION ARCHITECTURE

CMOS MT9D112 Camera Module 1/4-Inch 3-Megapixel Module Datasheet

Digital Systems Design

Preliminary Design Report. Project Title: Search and Destroy

Aerial Photographic System Using an Unmanned Aerial Vehicle

Terasic TRDB_D5M Digital Camera Package TRDB_D5M. 5 Mega Pixel Digital Camera Development Kit

Figures from Embedded System Design: A Unified Hardware/Software Introduction, Frank Vahid and Tony Givargis, New York, John Wiley, 2002

Single Chip FPGA Based Realization of Arbitrary Waveform Generator using Rademacher and Walsh Functions

Implementation of Number Plate Extraction for Security System using Raspberry Pi Processor

TRDB_DC2 TRDB_DC2. 1.3Mega Pixel Digital Camera Development Kit

A High Definition Motion JPEG Encoder Based on Epuma Platform

Cyclone II Filtering Lab

Real-Time Face Detection and Tracking for High Resolution Smart Camera System

Imaging serial interface ROM

I hope you have completed Part 2 of the Experiment and is ready for Part 3.

PLazeR. a planar laser rangefinder. Robert Ying (ry2242) Derek Xingzhou He (xh2187) Peiqian Li (pl2521) Minh Trang Nguyen (mnn2108)

ArduCAM USB Camera Shield

VLSI Implementation of Impulse Noise Suppression in Images

CMOS MT9V034 Camera Module 1/3-Inch 0.36MP Monochrome Module Datasheet

High-Speed Transceiver Toolkit

Stratix II Filtering Lab

FPGA-BASED DESIGN AND IMPLEMENTATION OF THREE-PRIORITY PERSISTENT CSMA PROTOCOL

Stratix Filtering Reference Design

Efficient Construction of SIFT Multi-Scale Image Pyramids for Embedded Robot Vision

Sampling. A Simple Technique to Visualize Sampling. Nyquist s Theorem and Sampling

ELEN W4840 Embedded System Design Final Project Button Hero : Initial Design. Spring 2007 March 22

Design of a Hardware/Software FPGA-Based Driver System for a Large Area High Resolution CCD Image Sensor

Using Infrared Array Devices in Smart Home Observation and Diagnostics

FPGA based Real-time Automatic Number Plate Recognition System for Modern License Plates in Sri Lanka

Using an FPGA based system for IEEE 1641 waveform generation

COMPARATIVE PERFORMANCE ANALYSIS OF HAND GESTURE RECOGNITION TECHNIQUES

Data Sheet SMX-160 Series USB2.0 Cameras

CHAPTER 5 NOVEL CARRIER FUNCTION FOR FUNDAMENTAL FORTIFICATION IN VSI

EXPERIMENT 12: DIGITAL LOGIC CIRCUITS

AUTOMATIC IMPLEMENTATION OF FIR FILTERS ON FIELD PROGRAMMABLE GATE ARRAYS

Design of background and characters in mobile game by using image-processing methods

Doc: page 1 of 6

The Architecture of the BTeV Pixel Readout Chip

Decision Based Median Filter Algorithm Using Resource Optimized FPGA to Extract Impulse Noise

Globally Asynchronous Locally Synchronous (GALS) Microprogrammed Parallel FIR Filter

CMOS Image Sensor Testing An Intetrated Approach

Performance Evaluation of Edge Detection Techniques for Square Pixel and Hexagon Pixel images

Hardware Implementation of BCH Error-Correcting Codes on a FPGA

A10-Gb/slow-power adaptive continuous-time linear equalizer using asynchronous under-sampling histogram

FIR Filter for Audio Signals Based on FPGA: Design and Implementation

Specifications and Interfaces

Implementation of Edge Detection Digital Image Algorithm on a FPGA

4.5.1 Mirroring Gain/Offset Registers GPIO CMV Snapshot Control... 14

Implementation of a Visible Watermarking in a Secure Still Digital Camera Using VLSI Design

Bidirectional Buck-Boost Controller for Electric Vehicle Using FPGA Board

Specification. Product Model: JDEPC-OV04. Camera Board s Version: VER:1.01. Camera Board s Dimension: 60*9.0mm MANUFACTURER

CHAPTER 4 GALS ARCHITECTURE

Watec USB Camera. User s Manual

EE307. Frogger. Project #2. Zach Miller & John Tooker. Lab Work: 11/11/ /23/2008 Report: 11/25/2008

Watec USB Camera. User s Manual

ECE 241 Digital Systems. Basic Information

Field Programmable Gate Arrays based Design, Implementation and Delay Study of Braun s Multipliers

Implementation of Separable & Steerable Gaussian Smoothers on an FPGA

Signal Processing and Display of LFMCW Radar on a Chip

Low Power Microphone Acquisition and Processing for Always-on Applications Based on Microcontrollers

ADVANCED EMBEDDED MONITORING SYSTEM FOR ELECTROMAGNETIC RADIATION

Prosilica GT 1930L Megapixel machine vision camera with Sony IMX CMOS sensor. Benefits and features: Options:

Design of FIR Filter on FPGAs using IP cores

An Embedded Pointing System for Lecture Rooms Installing Multiple Screen

DIGITAL SIGNAL PROCESSING WITH VHDL

Digital Logic, Algorithms, and Functions for the CEBAF Upgrade LLRF System Hai Dong, Curt Hovater, John Musson, and Tomasz Plawski

4. Embedded Multipliers in Cyclone IV Devices

OV7670 Software Application Note

WHAT ARE FIELD PROGRAMMABLE. Audible plays called at the line of scrimmage? Signaling for a squeeze bunt in the ninth inning?

Simulation and Experimental Based Four Switch Three Phase Inverter Fed Induction Motor Drive

An Efficient Method for Implementation of Convolution

Connect 4. Figure 1. Top level simplified block diagram.

EC 1354-Principles of VLSI Design

Exercise 3: Sound volume robot

Available online at ScienceDirect. Ehsan Golkar*, Anton Satria Prabuwono

SOLIMAN A. MAHMOUD Department of Electrical Engineering, Faculty of Engineering, Cairo University, Fayoum, Egypt

Part Number SuperPix TM image sensor is one of SuperPix TM 2 Mega Digital image sensor series products. These series sensors have the same maximum ima

An Efficient Color Image Segmentation using Edge Detection and Thresholding Methods

Image processing. Case Study. 2-diemensional Image Convolution. From a hardware perspective. Often massively yparallel.

Image Filtering in VHDL

Transcription:

Open Source Digital Camera on Field Programmable Gate Arrays Cristinel Ababei, Shaun Duerr, Joe Ebel, Russell Marineau, Milad Ghorbani Moghaddam, and Tanzania Sewell Dept. of Electrical and Computer Engineering, Marquette University, WI, USA ABSTRACT We present an open source digital camera implemented on a field programmable gate array (FPGA). The camera functionality is completely described in VHDL and tested on the DE2-115 educational FPGA board. Some of the current features of the camera include video mode at 30 fps, storage of taken snapshots into SDRAM memories, and grayscale and edge detection filters. The main contributions of this project include 1) the actual system level design of the camera, tested and verified on an actual FPGA chip, and 2) the public release of the entire implementation including source code and documentation. While the proposed camera is far from being able to compete with commercial offerings, it can serve as a framework to test new research ideas related to digital camera systems, image processing, computer vision, etc., as well as an educational platform for advanced digital design with VHDL and FPGAs. As examples of that, we report two spin-off projects developed on top of or starting from the presented digital camera system. Keywords: Field programmable gate arrays; digital camera; grayscale filter; Sobel operator; edge detection; face detection. INTRODUCTION Field programmable gate arrays (FPGAs) have become extremely popular in virtually all application domains. If in the early days FPGAs were used mostly as digital glue logic or for prototyping purposes, today they are used as integral parts of complex designs ranging from consumer electronics to communications, military, and space systems. The popularity of FPGAs has continuously increased not only because of the reduced performance gap between FPGAs and ASICs but also because of the great flexibility that reconfiguration offers when it comes to product development, maintenance and updates. Today, FPGAs represent the hardware platform of choice to implement and test digital designs for many circuit designers and educators. These include also contributors to online design resources such as Opencores (Opencores, 2016) who test and validate their open source designs on various FPGA chips. Testing and validation on real FPGA chips increase the credibility and confidence in the correctness of these publicly available design resources. In this paper, we present an open source baremetal digital camera completely described in VHDL and tested and validated on an FPGA chip. While one can find portions of the presented camera design publicly available, we are not aware of any publicly available, self-contained open source design that integrates the same functionality presented here. We make our implementation publicly available (including complete source code and documentation) with the hope that it will 1

serve as a framework to test new research ideas related to digital camera systems, image processing, computer vision, etc., as well as an educational platform for advanced digital design with VHDL and FPGAs. Note that an early version of this paper was reported as a conference paper in (Ababei et al., 2016). Here, we report two additional projects, which were developed starting from the digital camera project. The remainder of the presentation is structured as follows. First, we present details about the current implementation of the digital camera system. Then, we discuss experimental results achieved with an actual FPGA board. Spin-off projects developed on top of or starting from the framework provided by the digital camera design are then reported. We then discuss the main merits of this paper as well as future work. Finally, we conclude our presentation in the last section. BAREMETAL DIGITAL CAMERA SYSTEM In this section, we present the proposed baremetal digital camera system. We discuss some of the design decisions and the main features. Block Diagram The simplified block diagram of the proposed baremetal digital camera system on FPGA is shown in Figure 1. The main functionality of the camera includes video mode at 30 fps, the ability to take a snapshot and store it on the SDRAM memory or on the SD Card, the ability to fetch a snapshot from the SDRAM or SD Card and display it on the VGA display, grayscale filtering, and edge detection based on Sobel operator. Figure 1: Block diagram of the proposed baremetal digital camera system. 2

Next, we present details about each of the main features shown in the block diagram in Figure 1. Video mode feature. This is the simplest operation mode of the digital camera. In this mode, the video stream coming out of the OV7670 CMOS camera module (OV7670, 2016) is buffered inside the RAM Frame Buffer 1 at a rate of 30 fps and a default frame size of 320x240 pixels. This buffer, like the RAM Frame Buffer 2 in Figure 1, is implemented using existing RAM memory blocks in the Cyclone IV E FPGA. These buffers can be written and read asynchronously at different write and read clocks. Each frame is used to drive, via the VGA Driver, the VGA display connected to the DE2-115 evaluation board. Writing and reading from the RAM Frame Buffer 1 is completed with a 25 MHz clock generated by one of the four PLL blocks within the Cyclone IV E FPGA chip. Thus, the Capture Logic, RAM Frame Buffer 1, and the VGA Driver form a datapath that pipelines the video frame data to the VGA display. The Capture Logic block from Figure 1 has the ability to program the camera module by writing into its registers desired values to control image format, color saturation, hue, and gamma. This is done through an I2C like interface connecting the camera module and the Capture Logic block. The camera module is connected using 16 of the GPIO connectors available on the DE2-115 board. Take and display snapshot feature. Two of the four push buttons of the DE2-115 board are used to control the process of recording and displaying on request a single snapshot. In this case, when the take-snapshot button is pressed, a frame from RAM Frame Buffer 1 is taken and stored inside either SDRAM or SDCard memory. When the display-snapshot button is pressed, the frame or image data previously saved is retrieved from SDRAM or SDCard and buffered inside RAM Frame Buffer 2. The output of RAM Frame Buffer 2 is then steered through a multiplexer to the VGA Driver. The multiplexer shown in Figure 1 is controlled such that the snapshot is displayed on the VGA display only while the display-snapshot button is pressed. Grayscale filter feature. A third push button of the board is used to apply a grayscale filter to the snapshot that is displayed. When this grayscale button is pressed, the image data from RAM Frame Buffer 2 is read pixel by pixel, processed using the averaging technique, and then written back into the buffer at a clock rate of 25 MHz. The averaging technique calculates the average of three colors and is the simplest one among other grayscale techniques. For a given RGB image, we compute the grayscale value for a pixel with the following expression: Grayscale = R+G+B 3 (1) where R, G, and B are the color codes for each of the three color channels red, green, and blue of the given pixel. This filter can be implemented using two adders and a divider circuit that can be implemented using very little FPGA resources. 3

Edge detection filter feature. The fourth push button of the board is used to apply the popular Sobel operator to the snapshot that is displayed. This effectively implements an edge detection filter, which can be very useful for various realtime computer vision applications. The implementation of this filter is a bit more involved and requires more FPGA resources. Our implementation is similar to that described in (Moore, Devos, & Stroobandt, 2009; Singh, 2013). It basically uses a shift register (whose length is 2W, where W = 320 is the width of the image as number of pixels per row or line) and an approximate calculation of the so called gradient magnitude as illustrated in Figure 2. Figure 2: (a) Illustration of the application of Sobel kernels using a sliding window approach that starts with being centered on pixel (0, 0), labeled a1 and ends on pixel (W-1, H-1). (b) The hardware implementation uses two shift registers (Wx8 bits), three simple load registers (Wx3), a comparator, and a circuit to compute Gx + Gy. The Sobel operator is a discrete differentiation operator, which computes an approximation of the gradient of the image intensity function (Sobel, 2013). Because the Sobel operator is based on convolving the image with a small, separable, and integer valued filter in both horizontal and vertical directions, it is relatively inexpensive in terms of computations - hence easily implemented on an FPGA. The operator uses two 3x3 kernels, which are convolved with the original image to calculate approximations of the derivatives - for horizontal and vertical changes. If we define A as the source image, and Gx and Gy are two images which at each point contain the horizontal and vertical derivative approximations, then, the computations are as follows: 1 0 1 G x = [ 2 0 2] A (2) 1 0 1 1 2 1 G y = [ 0 0 0 ] A (3) 1 2 1 4

where * denotes the 2-dimensional convolution operation. The gradient magnitude is given by the following equation: G = G x 2 + G y 2 G x + G y (4) The circuit from Figure 2.b generates the value in the above equation for each pixel of the grayscale image and compares it to a threshold (e.g., decimal 127 when working with colors represented on 8 bits per channel; but this threshold can be fine-tuned by the user) and then sets the final result as either white or the value itself (which can also be replaced with black if black and white type edge detection is desired). Current Status While the block diagram from Figure 1 includes a JPEG encoder/decoder component, our current implementation (discussed in the next section) does not include this component yet. The implementation of the JPEG encoder/decoder block is under development. Currently, images are saved to memory and fetched from memory as raw pixel data, in an uncompressed format. Note that while the JPEG compression is desirable for the sake of reducing the amount of storage space, working with raw pixel data is preferable in realtime computer vision like image processing applications. EXPERIMENTAL RESULTS In this section, we present the experimental setup and results obtained with the current implementation of the digital camera system. The entire functionality of the camera, as discussed in the previous section, was coded in VHDL, synthesized, placed, and routed with Quartus II Web Edition 14.1 design environment (Quartus II, 2015). The camera design was tested and verified on the DE2-115 development board (DE- 115, 2015), which contains Altera's Cyclone IV E FPGA chip (Cyclone IV, 2016). Relevant key aspects of the summary report provided by Quartus II tool are reported in Table 1. Note that the overall resource utilization is very small at around 1%. This leaves plenty of room for additional functionality that may be added to the system. Also note that, most of the embedded block RAMs existing on the Cyclone IV E FPGA chip are used (79%). This higher memory utilization is due to the two buffers, RAM Frame Buffer 1 and RAM Frame Buffer 2 from Figure 1, which are sized such that they can store data for 320x240 pixel images. The design uses one of the four PLLs available on the FPGA chip. The PLL is used to generate four different clock signals with frequencies of 25 MHz, 50 MHz, 100 MHz, and 100 MHz with a clock phase shift of -3 ns. The 50 MHz signal is used by the capture logic block, the 100 MHz signals are required by the SDRAM controller, and the 25 MHz signal is used by most other blocks in the design. 5

Table 1: Summary of the fitter report as given by Quartus II tool. Item Report Family Cyclone IV E Device EP4CE115F29C7 Total logic elements 1,616 / 114,480 ( 1% ) Dedicated logic registers 818 / 114,480 ( < 1% ) Total registers 818 Total pins 94 / 529 ( 18% ) Total memory bits 3,152,384 / 3,981,312 ( 79% ) Total PLLs 1 / 4 ( 25% ) The experimental set-up from Figure 3 includes the DE2-115 with an OV7670 camera module attached via the GPIO connector and a 640x480 VGA monitor attached via the VGA port available on the board. The four push buttons (already debounced, by design of the DE2-115 board) available on the DE2-115 board are used as take-snapshot, display-snapshot, grayscale, and edge-detection buttons to control the system. The default mode of operation is the video mode, which works at 30 fps. Figure 3: The experimental setup includes the DE2-115 board that has the OV7670 camera module and a VGA monitor attached to it. Images are captured by the camera and displayed on the VGA display as 320x240 pixel images. Figures 4 and 5 illustrate the operation of the camera system when a snapshot is taken, saved, and displayed (parts (a) of these figures), when the grayscale filter is applied to the snapshot 6

retrieved from the memory (parts (b)), and when the edge detection (i.e., Sobel) filter is applied (parts (c)). (a) (b) (c) Figure 4: (a) Example of taken snapshot; objects in the image are within 30 cm of the camera module. (b) The grayscale filter applied to the snapshot. (c) The edge detection filter applied to the snapshot. 7

(a) (b) (c) Figure 5: (a) Example of taken snapshot; objects in the image are within 3 m of the camera module. (b) The grayscale filter applied to the snapshot. (c) The edge detection filter applied to the snapshot. 8

ADDITIONAL PROJECTS DEVELOPED USING THE CAMERA FRAMEWORK In this section, we describe two extensions that we have worked on as two separate projects forked out from the digital camera project. Both of these projects are also made publicly available as documentation and complete source code. Edge Detection in Video Mode In the first project, we modify the camera framework in order to investigate the achievable performance with the implementation of the edge detection algorithm operated in video mode in realtime. Basically, the video stream from the camera is either displayed normally or first processed as grey-filter + edge-detection and displayed on the VGA monitor. The block diagram of this project in Figure 6. Figure 7 shows an operation example of this design. This design is capable of operating at 5 fps on the same FPGA board. The entire Quartus II project files can be downloaded from (MESS Lab, 2016). Figure 6: Block diagram of the edge detection system for video mode operation. 9

(a) Figure 7: Example snapshots when the edge detection system is operated in video mode. The normal and edge detection modes can be switched with the help of a push button on the development board. Face Detection System (b) In the second project, we start from the framework provided by the digital camera project to develop a complete implementation in VHDL of the popular Viola-Jones (VJ) face detection algorithm (Viola & Jones, 2001). The primary objective of this project is to study the achievable performance with a low-end FPGA chip based implementation. We found that the face detection design achieves an average performance of 4.4 fps irrespective of the number of faces in the video frame, for tests that we performed with up to ten faces in the frame. Complete description of this project is presented in great details in another paper (Irgens et al., 2016). The block diagram of this project in Figure 8. Figure 9 shows an operation example of this design. 10

Figure 8: Block diagram of the face detection system. Figure 9: Snapshot of the experimental setup for the face detection design. Images are captured by the camera and displayed on the VGA display as 320x240 pixel images. Detected faces are indicated as red color rectangle indicators superimposed on the video frames. 11

DISCUSSION AND FUTURE WORK The proposed baremetal digital camera has been successfully prototyped and tested on real hardware. We consider as its main contributions and merits the following: The system level design in VHDL and deployment for testing and verification on a widely popular FPGA board. The actual implementation requires a very small amount of existing resources on the Altera's Cyclone IV E FPGA chip. The entire design sources are made publicly available. This includes completed and working VHDL source code as well as detailed documentation. Our hope is that this open source digital camera design will encourage further research and educational ideas in the areas of image processing and advanced VHDL design and FPGAs. The entire project can be downloaded from (MESS Lab, 2016). As ongoing and future work, we are designing and will manufacture a small PCB board - which will also be made open source - to implement the presented digital camera as a stand-alone yet extendable application. This PCB board is built around the same FPGA chip and will also include one SDRAM memory chip, one SD Card slot, a small Flash memory, a USB driver, a driver for 3.2-inch color TFT 320X240 display, four push buttons, and four LEDs. The footprint of this custom PCB is similar to that of a regular Arduino board. CONCLUSION We introduced an open source baremetal digital camera, which was entirely specified in VHDL. The camera system was tested and validated on the popular DE2-115 educational FPGA board, which is constructed around the Cyclone IV FPGA family. The entire design is made publicly available including source code and documentation. We hope that this project will serve as a framework to test new research ideas related to digital camera systems, image processing, computer vision, etc., as well as an educational platform for advanced digital design with VHDL and FPGAs. ACKOWLEDGMENT This work was supported by the Department of Electrical and Computer Engineering and the OPUS College of Engineering at Marquette University. REFERENCES Ababei, C., Duerr, S., Ebel, J., Marineau, R., Moghaddam, M.G., & Sewell, T. (2016, May). Open source digital camera on field programmable gate arrays. Paper presented at IEEE Int. Conf. on Electro Information Technology (EIT), Grand Forks, ND. 12

Cyclone IV FPGA Family: Lowest Cost, Lowest Power, Integrated Transceivers, (2015). Retrieved September 13, 2016, from http://www.altera.com/devices/fpga/cyclone-iv/cyivindex.jsp DE2-115 Development and Education Board, (2015). Retrieved September 13, 2016, from http://www.altera.com/education/univ/materials/boards/de2-115/unv-de2-115-board.html Irgens, P., Bader, C., Le, T., Saxena, D., & Ababei, C. (2016, under review). An efficient and cost effective FPGA based implementation of the Viola-Jones face detection algorithm. Submitted for consideration of publication. MESS Lab, Open Source HW Projects, Marquette University, (2016). Retrieved September 13, 2016, from http://dejazzer.com/hardware.html Moore, C., Devos, D., & Stroobandt, D. (2009). Optimizing the FPGA memory design for a Sobel edge detector. Paper presented at Int. Conf. on Engineering of Reconfigurable Systems and Algorithms (ERSA). Opencores - community for development of hardware IP cores as open source, (2016). Retrieved September 13, 2016, from http://opencores.org OV7670 Camera Module with OmniVision CMOS Sensor, Datasheet, (2015). Retrieved September 13, 2016, from http://www.cutedigi.com/pub/sensor/imaging/ov7670- Datasheet.pdf Quartus II Web Edition Software 14.1, (2015). Retrieved September 13, 2016, from http://www.altera.com/products/software/quartus-ii/web-edition/qts-we-index.html Singh, S., Saini, A.K., Saini, R., Mandal, A.S., Shekhar, C., & Vohra, A. (2013). Area optimized FPGA-based implementation of the Sobel compass edge detector. Hindawi ISRN Machine Vision. Sobel, I. (2014), History and Definition of the Sobel Operator. Retrieved September 13, 2016, https://www.researchgate.net/publication/239398674_an_isotropic_3_3_image_gradient_o perator Viola, P.A., & Jones, M.J. (2001). Rapid object detection using a boosted cascade of simple features. Paper presented at IEEE Computer Society Conf. on Computer Vision and Pattern Recognition (CVPR). 13