import{s as Z,o as ee}from"../chunks/scheduler.a045fce0.js";import{S as te,i as se,e as c,s as i,c as b,h as ae,a as m,d as s,b as r,f as Y,g as C,j as y,k as U,l as ne,m as a,n as _,t as L,o as M,p as P,q as ie,r as re}from"../chunks/index.5135b896.js";import{T as oe}from"../chunks/Tip.872c1b89.js";import{C as ue,H as G,E as le}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.eb0af84c.js";function ce(S){let n;return{c(){n=ie("💡 Même si ici nous prétendons que les spectrogrammes sont comme les images, il existe des différences importantes. Par exemple, déplacer le contenu d'une image vers le haut ou vers le bas ne change généralement pas la signification de ce qui se trouve dans l'image. Cependant, déplacer un spectrogramme vers le haut ou vers le bas changera les fréquences qui sont dans le son et changera complètement son caractère. Les images sont invariantes sous translation mais les spectrogrammes ne le sont pas. Traiter les spectrogrammes comme des images peut très bien fonctionner dans la pratique, mais gardez à l'esprit que ce n'est pas vraiment la même chose.")},l(o){n=re(o,"💡 Même si ici nous prétendons que les spectrogrammes sont comme les images, il existe des différences importantes. Par exemple, déplacer le contenu d'une image vers le haut ou vers le bas ne change généralement pas la signification de ce qui se trouve dans l'image. Cependant, déplacer un spectrogramme vers le haut ou vers le bas changera les fréquences qui sont dans le son et changera complètement son caractère. Les images sont invariantes sous translation mais les spectrogrammes ne le sont pas. Traiter les spectrogrammes comme des images peut très bien fonctionner dans la pratique, mais gardez à l'esprit que ce n'est pas vraiment la même chose.")},m(o,d){a(o,n,d)},d(o){o&&s(n)}}}function me(S){let n,o,d,A,p,H,f,V,g,O="L’objectif de la classification d’audio est de prédire une étiquette de classe pour une entrée audio. Le modèle peut prédire une étiquette de classe unique qui couvre toute la séquence d’entrée, ou il peut prédire une étiquette pour chaque trame audio (généralement toutes les 20 millisecondes d’entrée audio), auquel cas la sortie du modèle est une séquence de probabilités d’étiquette de classe. Un exemple du premier cas est la détection des chants des oiseaux. Un exemple du second est la séparation des locuteurs où le modèle prédit quel locuteur parle à un moment donné.",z,h,E,q,B=`L’un des moyens les plus simples d’effectuer une classification audio est de prétendre qu’il s’agit d’un problème de classification d’image !
Rappelons qu’un spectrogramme est un tenseur bidimensionnel de forme <code>(frequencies, sequence length)</code>. Dans le [chapitre sur les données audio](.. /chapter1/audio_data) nous avons tracé ces spectrogrammes sous forme d’images. Devinez quoi ? Nous pouvons littéralement traiter le spectrogramme comme une image et le transmettre à un modèle de classification de type ConvNet standard tel qu’un ResNet ou ConvNext et obtenir de très bonnes prédictions. Même chose avec un modèle de type <em>transformer</em> tel que le ViT.
C’est ce que fait <strong>Audio Spectrogram Transformer</strong>. Il utilise le ViT et lui transmet des spectrogrammes en entrée au lieu d’images. Grâce aux couches d’auto-attention du <em>transformer</em>, le modèle est mieux en mesure de capturer le contexte global qu’un ConvNet.
Tout comme le ViT, le modèle AST divise le spectrogramme audio en une séquence de patchs d’image partiellement chevauchants de 16×16 pixels. Cette séquence de patchs est ensuite projetée dans une séquence d’enchâssement, et ceux-ci sont donnés à l’encodeur du <em>transformer</em> en entrée comme d’habitude. L’AST est un modèle de <em>transformer</em> encodeur et la sortie est donc une séquence d’états cachés, un pour chaque patch d’entrée 16×16. En plus de cela, il y a une couche de classification simple avec activation sigmoïde pour associer les états cachés aux probabilités de classification.`,j,u,J='<img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/ast.png" alt="The audio spectrogram transformer works on a sequence of patches taken from the spectrogram"/>',F,v,K='Image tirée du papier <a href="https://arxiv.org/pdf/2104.01778.pdf" rel="nofollow"><em>AST: Audio Spectrogram Transformer</em></a>',N,l,D,$,W,x,Q=`Dans une <a href="CTC">section précédente</a>, vous avez vu que CTC est une technique efficace pour effectuer une reconnaissance automatique de la parole à l’aide d’un <em>transformer</em> encodeur.  De tels modèles sont déjà des classifieurs, prédisant les probabilités pour les étiquettes de classe à partir d’un vocabulaire de <em>tokenizer</em>. Nous pouvons prendre un modèle avec CTC et le transformer en un classifieur d’audio à usage général en changeant les étiquettes et en l’entraînant avec une fonction de perte d’entropie croisée standard au lieu de la perte CTC spéciale.
Par exemple, 🤗 <em>Transformers</em> a un modèle <code>Wav2Vec2ForCTC</code> mais aussi <code>Wav2Vec2ForSequenceClassification</code> et <code>Wav2Vec2ForAudioFrameClassification</code>. Les seules différences entre les architectures de ces modèles sont la taille de la couche de classification et la fonction de perte utilisée.
En fait, n’importe quel <em>transformer</em> encodeur audio peut être transformé en classifieur d’audio en ajoutant une couche de classification au-dessus de la séquence d’états cachés. Les classifieurs n’ont généralement pas besoin du décodeur du <em>transformer</em>.
Pour prédire un score de classification unique pour l’ensemble de la séquence (<code>Wav2Vec2ForSequenceClassification</code>), le modèle prend la moyenne sur les états masqués et l’introduit dans la couche de classification. Le résultat est une distribution de probabilité unique.
Pour créer une classification distincte pour chaque trame audio (<code>Wav2Vec2ForAudioFrameClassification</code>), le classifieur est exécuté sur la séquence d’états masqués, et donc la sortie du classifieur est également une séquence.`,k,T,I,w,R;return p=new ue({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),f=new G({props:{title:"Architectures de classification d’audio",local:"architectures-de-classification-daudio",headingTag:"h1"}}),h=new G({props:{title:"Classification à l’aide de spectrogrammes",local:"classification-à-laide-de-spectrogrammes",headingTag:"h2"}}),l=new oe({props:{$$slots:{default:[ce]},$$scope:{ctx:S}}}),$=new G({props:{title:"Tout transformer peut être un classifieur",local:"tout-transformer-peut-être-un-classifieur",headingTag:"h2"}}),T=new le({props:{source:"https://github.com/huggingface/audio-transformers-course/blob/main/chapters/fr/chapter3/classification.mdx"}}),{c(){n=c("meta"),o=i(),d=c("p"),A=i(),b(p.$$.fragment),H=i(),b(f.$$.fragment),V=i(),g=c("p"),g.textContent=O,z=i(),b(h.$$.fragment),E=i(),q=c("p"),q.innerHTML=B,j=i(),u=c("div"),u.innerHTML=J,F=i(),v=c("p"),v.innerHTML=K,N=i(),b(l.$$.fragment),D=i(),b($.$$.fragment),W=i(),x=c("p"),x.innerHTML=Q,k=i(),b(T.$$.fragment),I=i(),w=c("p"),this.h()},l(e){const t=ae("svelte-u9bgzb",document.head);n=m(t,"META",{name:!0,content:!0}),t.forEach(s),o=r(e),d=m(e,"P",{}),Y(d).forEach(s),A=r(e),C(p.$$.fragment,e),H=r(e),C(f.$$.fragment,e),V=r(e),g=m(e,"P",{"data-svelte-h":!0}),y(g)!=="svelte-iw95ma"&&(g.textContent=O),z=r(e),C(h.$$.fragment,e),E=r(e),q=m(e,"P",{"data-svelte-h":!0}),y(q)!=="svelte-1hqv2ds"&&(q.innerHTML=B),j=r(e),u=m(e,"DIV",{class:!0,"data-svelte-h":!0}),y(u)!=="svelte-12cqizh"&&(u.innerHTML=J),F=r(e),v=m(e,"P",{"data-svelte-h":!0}),y(v)!=="svelte-1hhtjqt"&&(v.innerHTML=K),N=r(e),C(l.$$.fragment,e),D=r(e),C($.$$.fragment,e),W=r(e),x=m(e,"P",{"data-svelte-h":!0}),y(x)!=="svelte-1l8yd6t"&&(x.innerHTML=Q),k=r(e),C(T.$$.fragment,e),I=r(e),w=m(e,"P",{}),Y(w).forEach(s),this.h()},h(){U(n,"name","hf:doc:metadata"),U(n,"content",de),U(u,"class","flex justify-center")},m(e,t){ne(document.head,n),a(e,o,t),a(e,d,t),a(e,A,t),_(p,e,t),a(e,H,t),_(f,e,t),a(e,V,t),a(e,g,t),a(e,z,t),_(h,e,t),a(e,E,t),a(e,q,t),a(e,j,t),a(e,u,t),a(e,F,t),a(e,v,t),a(e,N,t),_(l,e,t),a(e,D,t),_($,e,t),a(e,W,t),a(e,x,t),a(e,k,t),_(T,e,t),a(e,I,t),a(e,w,t),R=!0},p(e,[t]){const X={};t&2&&(X.$$scope={dirty:t,ctx:e}),l.$set(X)},i(e){R||(L(p.$$.fragment,e),L(f.$$.fragment,e),L(h.$$.fragment,e),L(l.$$.fragment,e),L($.$$.fragment,e),L(T.$$.fragment,e),R=!0)},o(e){M(p.$$.fragment,e),M(f.$$.fragment,e),M(h.$$.fragment,e),M(l.$$.fragment,e),M($.$$.fragment,e),M(T.$$.fragment,e),R=!1},d(e){e&&(s(o),s(d),s(A),s(H),s(V),s(g),s(z),s(E),s(q),s(j),s(u),s(F),s(v),s(N),s(D),s(W),s(x),s(k),s(I),s(w)),s(n),P(p,e),P(f,e),P(h,e),P(l,e),P($,e),P(T,e)}}}const de='{"title":"Architectures de classification d’audio","local":"architectures-de-classification-daudio","sections":[{"title":"Classification à l’aide de spectrogrammes","local":"classification-à-laide-de-spectrogrammes","sections":[],"depth":2},{"title":"Tout transformer peut être un classifieur","local":"tout-transformer-peut-être-un-classifieur","sections":[],"depth":2}],"depth":1}';function pe(S){return ee(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ve extends te{constructor(n){super(),se(this,n,pe,me,Z,{})}}export{ve as component};
