Skip to content

Commit

Permalink
Add fact sheet
Browse files Browse the repository at this point in the history
  • Loading branch information
MuellerDominik committed Feb 17, 2020
1 parent f7e06dd commit ffd4bde
Show file tree
Hide file tree
Showing 7 changed files with 630 additions and 0 deletions.
124 changes: 124 additions & 0 deletions doc/fact-sheet/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# Makefile for LaTeX documents
#
# Intended for use in Linux and Git Bash
# TeXstudio (MiKTeX) compatibility through TeX directives
#
# by Dominik Mueller (@MuellerDominik)
#
# Targets:
#
# all Build document if necessary
# build Always (re)build document
# pdflatex Run pdfLaTeX
# debug Run pdfLaTeX in verbose mode
# bibliography, bib Run biber
# glossary, makeglossaries Run makeglossaries
# snapshot Create snapshot
# remove-snapshots Remove all snapshots
# directives Add proper TeX directives
# remove-directives Remove all TeX directives
# clean Remove auxiliary files
# purge Remove all generated files

# Document name
DOCUMENT = fact-sheet
OUTPUT = p5_aionfpga_fact-sheet_canzani_mueller

# Directories and auxiliary files
TEMP_DIR = temp
BUILD_DIR = build
SECTIONS_DIR = sections
SNAPSHOTS_DIR = snapshots
PDF_FILE = $(BUILD_DIR)/$(OUTPUT).pdf
BIB_FILE = $(BUILD_DIR)/$(OUTPUT).bcf
GLOSS_FILE = $(BUILD_DIR)/$(OUTPUT).glo

# Source files (omit whitespaces) and timestamp
TEX_FILES := $(shell find . -name "*.tex")
TIMESTAMP := $(shell date +%Y-%m-%d_%H-%M-%S)

# Document ID (sliced for TeX directive 'document-id')
DOC_ID := $(shell echo -n $(TIMESTAMP) | sha256sum | cut -c1-32)
DOC_ID1 := $(shell echo -n $(DOC_ID) | cut -c1-8)
DOC_ID2 := $(shell echo -n $(DOC_ID) | cut -c9-12)
DOC_ID3 := $(shell echo -n $(DOC_ID) | cut -c13-16)
DOC_ID4 := $(shell echo -n $(DOC_ID) | cut -c17-20)
DOC_ID5 := $(shell echo -n $(DOC_ID) | cut -c21-32)

# Commands (with their respective arguments)
PDFLATEX_ARGS = -output-directory=$(BUILD_DIR) -jobname=$(OUTPUT) $(DOCUMENT)
PDFLATEX = pdflatex -interaction=batchmode $(PDFLATEX_ARGS) > /dev/null 2>&1
PDFLATEX_DEBUG = pdflatex -interaction=nonstopmode -halt-on-error $(PDFLATEX_ARGS)
BIBLIOGRAPHY = biber --onlylog --output-directory $(BUILD_DIR) $(OUTPUT)
GLOSSARY = makeglossaries -q -d $(BUILD_DIR) $(OUTPUT)

# TeX directives for TeXstudio with MiKTeX on Windows (Perl installed)
DIR_ID = % !TeX document-id = {$(DOC_ID1)-$(DOC_ID2)-$(DOC_ID3)-$(DOC_ID4)-$(DOC_ID5)}
DIR_COMPILE = % !TeX TXS-program:compile = pdflatex -synctex=1 -interaction=nonstopmode $(PDFLATEX_ARGS).tex
DIR_BIB = % !TeX TXS-program:bibliography = biber --output-directory $(BUILD_DIR) $(OUTPUT)
DIR_GLOSS = % !TeX TXS-program:glossary = makeglossaries -d $(BUILD_DIR) $(OUTPUT)
DIR_VIEW = % !TeX TXS-program:view = txs:///view-pdf ./$(BUILD_DIR)/$(OUTPUT).pdf
DIRECTIVES = $(DIR_ID)\n$(DIR_COMPILE)\n$(DIR_BIB)\n$(DIR_GLOSS)\n$(DIR_VIEW)\n\n

# Rebuilds document if source files (*.tex only) have been changed
.PHONY: all
all: $(PDF_FILE)

.PHONY: build
build $(PDF_FILE): $(TEX_FILES)
@mkdir -p $(BUILD_DIR)/$(SECTIONS_DIR)/
@$(PDFLATEX)
@$(BIBLIOGRAPHY)
@$(GLOSSARY)
@$(PDFLATEX)
@$(PDFLATEX)

.PHONY: pdflatex
pdflatex $(BIB_FILE) $(GLOSS_FILE):
@$(PDFLATEX)

.PHONY: debug
debug:
@$(PDFLATEX_DEBUG)

.PHONY: bibliography bib
bibliography bib: $(BIB_FILE)
@$(BIBLIOGRAPHY)

.PHONY: glossary makeglossaries
glossary makeglossaries: $(GLOSS_FILE)
@$(GLOSSARY)

.PHONY: snapshot
snapshot:
@mkdir -p $(SNAPSHOTS_DIR)/
@cp -f $(PDF_FILE) $(SNAPSHOTS_DIR)/$(OUTPUT)_$(TIMESTAMP).pdf

.PHONY: remove-snapshots
remove-snapshots:
@rm -rf $(SNAPSHOTS_DIR)/

# Removes all TeX directives and prepends the ones specified in this Makefile
.PHONY: directives
directives:
@sed -i '/^% !TeX/d' $(DOCUMENT).tex
@sed -i '/./,$$!d' $(DOCUMENT).tex
@sed -i '1s;^;$(DIRECTIVES);' $(DOCUMENT).tex

# Removes all TeX directives and leading blank lines
.PHONY: remove-directives
remove-directives:
@sed -i '/^% !TeX/d' $(DOCUMENT).tex
@sed -i '/./,$$!d' $(DOCUMENT).tex

.PHONY: clean
clean:
@mkdir -p $(TEMP_DIR)/
@cp -f $(PDF_FILE) $(TEMP_DIR)/$(OUTPUT).pdf > /dev/null 2>&1 || :
@rm -rf $(BUILD_DIR)/* > /dev/null 2>&1 || :
@cp -f $(TEMP_DIR)/$(OUTPUT).pdf $(PDF_FILE) > /dev/null 2>&1 || :
@rm -rf $(TEMP_DIR)/

.PHONY: purge
purge:
@rm -rf $(BUILD_DIR)/ $(TEMP_DIR)/
102 changes: 102 additions & 0 deletions doc/fact-sheet/content.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
\title{AI High-Performance Solution on FPGA}

\team{Nico Canzani, Dominik M\"uller}

% \client{FHNW Institute for Sensors and Electronics}
\client{Inst. for Sensors and Electronics}
% \client{FHNW / ISE}

\coaches{%
Prof. Michael Pichler,\\
Prof. Dr. Hanspeter Schmid
}

\repo{https://git.io/p5-aionfpga}
% curl -i https://git.io -F "url=https://github.com/MuellerDominik/P5-AIonFPGA/" -F "code=p5-aionfpga"

\fssummary{
In a world of self-driving cars and automated quality control in manufacturing, real-time image classification is becoming increasingly important.
% Artificial intelligence, and deep learning in particular, are achieving excellent classification accuracies, but there are some challenges.
Artificial intelligence (AI), and deep learning in particular, are achieving excellent classification accuracies.
% However, a large labeled dataset of training data is required to train deep convolutional neural networks.
% However, a large labeled dataset of training data is required to train a convolutional neural networks (CNN).
However, the training of a convolutional neural network (CNN) requires a sufficiently large labeled dataset.
% However, the training of a deep convolutional neural network (CNN) required a sufficiently large labeled dataset.
}

\fsgraphics{
\begin{minipage}[t]{0.5\textwidth}
\begin{minipage}[t]{0.98\textwidth}
\includegraphics[width=\textwidth]{graphics/1574952009_278_10_stuffed-bunny.png}
\graphicscaption{Image of the \textit{Stuffed Bunny}} % Example / Sample
\end{minipage}
\end{minipage}%
\begin{minipage}[t]{0.5\textwidth}
\begin{flushright}
\begin{minipage}[t]{0.98\textwidth}
\includegraphics[width=\textwidth]{graphics/1574943825_125_8_hand-featherball.png}
\graphicscaption{Image of the \textit{Hand Featherball}} % Example / Sample
\end{minipage}
\end{flushright}
\end{minipage}
}

\fscontent{
% \section{Problem Statement}
\section{Difficulty}
Collecting a sufficiently large dataset of pictures is not trivial.
When done manually, the camera has to be started and stopped for each throw.
This likely creates many empty frames at the beginning and at the end of the capture.
Those empty and therefore invalid frames must be removed to avoid errors during the training of the CNN later on.
Furthermore, each valid frame must be labeled.
This procedure is very error-prone if it is performed manually for each individual frame.

\newcol
\section{Software}
% To reliably detect a throw, a simple image change detection algorithm is implemented.
% It requires a repeated difference computation and therefore a circular buffer is used.
% To simplify this task, a camera throw detection mechanism is implemented and various Python scripts are used.
To simplify the image collection, a camera throw detection mechanism is implemented and various Python scripts are used.
The goal of the throw detection is to extract valid frames of a throw --- with objects on them --- from the continuous data stream of the camera.
Therefore, the throw detection needs to work in real time.
% At a frame rate of \SI{200}{fps}, there is $<\SI{5}{ms}$ to process a single frame (without the use of parallel computing).
At a frame rate of \SI{200}{fps}, there is less than \SI{5}{ms} to process a single frame.
% Due to this time constraint, a simple image change detection algorithm is employed.
Due to this time constraint, a simple image change detection algorithm is implemented.

\newcol
% \section{Labeled Dataset}
\section{Dataset}
% The dataset contains images of 22 different throwing objects.
The dataset contains images of 22 different throwing objects, ranging from sports equipment to toys.
It is fully labeled and consists of more than \num{15000} usable images with at least 480 images of each object.
% All images were collected over the course of two days.
% The employed software allowed to collected all images over the course of two days.
The employed software made it possible to collect all images over the course of only two days.
% The above images show an example image of the \textit{Stuffed Bunny} and of the \textit{Hand Featherball}.
The above images are two examples from the labeled dataset.
The first one shows the \textit{Stuffed Bunny} and the second one shows the \textit{Hand Featherball}.
}

\infobox{Throwing Booth}{
% \begin{minipage}[t][][b]{0.45\textwidth}
% \includegraphics[height=50mm]{graphics/top_assembly.png}
% \end{minipage}\hfill%
\begin{minipage}{0.65\textwidth}
The throwing booth is constructed from general-purpose aluminium profiles.
% The rear panel is made of a white ABS plastic sheet for its robust impact strength and has a target hole. % features a target hole
Due to its robust impact strength, the rear panel is made of a white ABS plastic sheet and has a target hole.
% The side panel is made of a foamed PVC sheet to reduce light reflections.
The white side panel serves as a consistent background for the images.
It is made of a foamed PVC sheet with a fine-textured surface to reduce light reflections.
% The image acquisition system consists of a Baumer industrial camera and a suitable lens.
The image acquisition system consists of a Baumer industrial camera combined with a suitable lens. % imaging environment
% Strong diffuse lighting is used to minimize the required exposure time and to evenly illuminate the side panel.
Strong diffuse lighting is used to minimize the required exposure time and to illuminate the side panel as evenly as possible.
% A monitor is used to display the detected object. % display the result
Finally, a monitor is used to display the detected object.
\end{minipage}\hfill%
\begin{minipage}{0.32\textwidth}
\includegraphics[width=\textwidth]{graphics/top_assembly.png}
\end{minipage}
}
13 changes: 13 additions & 0 deletions doc/fact-sheet/fact-sheet.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
% !TeX document-id = {f144be9f-d20a-6673-972c-41c90886e461}
% !TeX TXS-program:compile = pdflatex -synctex=1 -interaction=nonstopmode -output-directory=build -jobname=p5_aionfpga_fact-sheet_canzani_mueller fact-sheet.tex
% !TeX TXS-program:bibliography = biber --output-directory build p5_aionfpga_fact-sheet_canzani_mueller
% !TeX TXS-program:glossary = makeglossaries -d build p5_aionfpga_fact-sheet_canzani_mueller
% !TeX TXS-program:view = txs:///view-pdf ./build/p5_aionfpga_fact-sheet_canzani_mueller.pdf

\documentclass[english]{fhnwfactsheet}
% \usepackage{tikz}
% \usepackage{lipsum}

\begin{document}
\includefactsheet{content.tex}
\end{document}
Loading

0 comments on commit ffd4bde

Please sign in to comment.