#import "@preview/not-jku-thesis:0.1.0": jku-thesis #import "utils.typ": inwriting, draft, todo, flex-caption, flex-caption-styles #import "glossary.typ": glossary #import "@preview/glossarium:0.2.6": make-glossary, print-glossary, gls, glspl #import "@preview/equate:0.2.1": equate #show: make-glossary #show: flex-caption-styles /** Drafting Set the boolean variables `inwriting` and `draft` inside utils.typ. The "draft" variable is used to show DRAFT in the header and the title. This should be true until the final version is handed-in. The "inwriting" is used to change the appearance of the document for easier writing. Set to true for yourself but false for handing in a draft or so. **/ // global text settings #set text(lang: "en", weight: "regular", font: "Arial", size: 11pt) #set text(ligatures: false) #set par(leading: 1em, first-line-indent: 0em, justify: true) #show par: set block(spacing: 1.5em) // spacing after a paragraph #show raw: set text( size: 9pt) // set text for code-blocks (``) #set page(margin: (left: 2.5cm+1cm, // binding correction of 1cm for single sided printing right: 2.5cm, y: 2.9cm), // margin: (inside: 2.5cm+1cm, // binding correction of 1cm for double sided printing // outside: 2.5cm, // y:2.5cm), // binding: left ) #let date = datetime.today() // not today: datetime(year: 1969, month: 9, day: 6,) #let k-number = "k12104785" #show: jku-thesis.with( thesis-type: "Bachelor", degree: "Bachelor of Science", program: "Artifical Intelligence", supervisor: "Josef Scharinger, a.Univ.-Prof, Dr.", advisors: (), // singular advisor like this: ("Dr. Felix Pawsworth",) and no supervisor: "" department: "Institute of Computational Perception", author: "Lukas Heiligenbrunner", date: date, place-of-submission: "Linz", title: "Few shot learning for anomaly detection", abstract-en: [//max. 250 words This thesis explores the application of Few-Shot Learning (FSL) in anomaly detection, a critical area in industrial and automotive domains requiring robust and efficient algorithms for identifying defects. Traditional methods, such as PatchCore and EfficientAD, achieve high accuracy but often demand extensive training data and are sensitive to environmental changes, necessitating frequent retraining. FSL offers a promising alternative by enabling models to generalize effectively from minimal samples, thus reducing training time and adaptation overhead. The study evaluates three FSL methods—ResNet50, P>M>F, and CAML—using the MVTec AD dataset. Experiments focus on tasks such as anomaly detection, class imbalance handling, //and comparison of distance metrics. and anomaly type classification. Results indicate that while FSL methods trail behind state-of-the-art algorithms in detecting anomalies, they excel in classifying anomaly types, showcasing potential in scenarios requiring detailed defect identification. Among the tested approaches, P>M>F emerged as the most robust, demonstrating superior accuracy across various settings. This research underscores the limitations and niche applicability of FSL in anomaly detection, advocating its integration with established algorithms for enhanced performance. Future work should address the scalability and domain-specific adaptability of FSL techniques to broaden their utility in industrial applications. ], abstract-de: none,// or specify the abbstract_de in a container [] acknowledgements: none,//acknowledgements: none // if you are self-made show-title-in-header: false, draft: draft, ) // set equation and heading numbering #show: equate.with(breakable: true, sub-numbering: true) #set math.equation(numbering: "(1.1)") #set heading(numbering: "1.1") // Allow references to a line of the equation. //#show ref: equate // Set font size #show heading.where(level: 3): set text(size: 1.05em) #show heading.where(level: 4): set text(size: 1.0em) #show figure: set text(size: 0.9em) // Set spacings #set table(inset: 6.5pt) #show table: set par(justify: false) #show figure: it => [#v(1em) #it #v(1em)] #show heading.where(level: 1): set block(above: 1.95em, below: 1em) #show heading.where(level: 2): set block(above: 1.85em, below: 1em) #show heading.where(level: 3): set block(above: 1.75em, below: 1em) #show heading.where(level: 4): set block(above: 1.55em, below: 1em) // Pagebreak after level 1 headings #show heading.where(level: 1): it => [ #pagebreak(weak: true) #it ] // Set citation style // #set cite(style: "iso-690-author-date") // page info visible //#set cite(style: "iso-690-numeric") // page info visible #set cite(style: "springer-basic")// no additional info visible (page number in square brackets) //#set cite(style: "alphanumeric")// page info not visible // Table stroke #set table(stroke: 0.5pt + black) // show reference targets in brackets #show ref: it => { let el = it.element if el != none and el.func() == heading { [#it (#el.body)] } else [#it] } // color links and references for the final document // #show link: set text(fill: blue) // #show ref: set text(fill: color.olive) // style table-of-contents #show outline.entry.where( level: 1 ): it => { v(1em, weak: true) strong(it) } // Draft Settings // #show cite: set text(fill: purple) if inwriting // highlight citations #show footnote: set text(fill: purple) if inwriting #show ref: set text(fill: purple) if inwriting // Custom Footer // #set page(footer: context [ #text(size:9pt)[ #table( stroke: none, columns: (1fr, auto, 1fr), align: (left, center, right), inset: 5pt, [#date.display("[month repr:long] [day], [year]")],[#k-number],[#counter(page).display( "1", )], ) ] ]) // ------ Content ------ // Table of contents. #outline( title: { text(1.3em, weight: 700, "Contents") v(10mm) }, indent: 2em, depth: 2 ) #pagebreak(weak: false) #include "introduction.typ" #include "materialandmethods.typ" #include "implementation.typ" #include "experimentalresults.typ" #include "conclusionandoutlook.typ" #set par(leading: 0.7em, first-line-indent: 0em, justify: true) #bibliography("sources.bib", style: "ieee")