Trackers optiques: ASEF et MOSSE

L'une des sous-tĂąches importantes de l'analyse vidĂ©o est le suivi des objets sur une vidĂ©o. Ce n'est pas si primitif que j'ai dĂ» descendre au niveau pixel par pixel, mais ce n'est pas si complexe qu'il faut sans ambiguĂŻtĂ© un rĂ©seau neuronal multicouche pour la solution. Le suivi peut ĂȘtre utilisĂ© Ă  la fois comme une fin en soi et comme partie d'autres algorithmes:

  • Compter les personnes uniques qui sont entrĂ©es dans une certaine zone ou ont franchi la frontiĂšre dans un cadre
  • Identification des itinĂ©raires typiques des voitures dans un parking et des personnes dans un magasin
  • Rotation automatique de la camĂ©ra de surveillance lorsque l'objet est dĂ©placĂ©

Sans mĂȘme regarder la littĂ©rature, je peux dire avec confiance que la meilleure façon de rĂ©soudre le problĂšme est d'utiliser des rĂ©seaux de neurones. En gĂ©nĂ©ral, vous ne pouviez rien Ă©crire de plus, mais il n'est pas toujours possible de se prĂ©cipiter dans une tĂąche avec une paire de GTX 1080Ti. Qui se soucie de suivre des objets sur la vidĂ©o dans de tels cas, s'il vous plaĂźt, sous cat. Je vais essayer non seulement d'expliquer comment fonctionnent les trackers ASEF et MOSSE, mais aussi de vous apporter la solution pour que les formules semblent Ă©videntes.

Pour commencer, nous rĂ©pondrons Ă  une question prĂ©liminaire: pourquoi inventer quelque chose alors que vous pouvez alimenter une pile tensorflow de vidĂ©os et laisser l'ordinateur pendant quelques semaines? Les approches de rĂ©seau neuronal ont un sĂ©rieux inconvĂ©nient: mĂȘme sur les cartes vidĂ©o modernes, il est difficile d'obtenir une bonne cadence de tir Ă  partir des rĂ©seaux. Ce n'est pas un problĂšme si nous analysons la vidĂ©o enregistrĂ©e, mais cela insĂšre un bĂąton dans les roues si vous voulez travailler en temps rĂ©el. Supposons que nous voulons traiter la vidĂ©o de cinq camĂ©ras Ă  10 FPS. MĂȘme avec des conditions relativement douces, un rĂ©seau neuronal devrait avoir un temps d'infĂ©rence infĂ©rieur Ă   frac10005 fois10=20 millisecondes (dans des conditions de non-parallĂ©lisme complet). A titre de comparaison, YoloV3, un rĂ©seau de classificateurs avec une architecture relativement simple, peut cracher une image dans 50 $ millisecondes. De plus, les solutions basĂ©es sur des cartes graphiques puissantes peuvent coĂ»ter trĂšs cher.

Cet article suppose que vous avez déjà traité du traitement d'image machine, que vous connaissez les opérations de base de l'algÚbre linéaire (convolution, norme, inversion matricielle) et que vous comprenez en général la transformée de Fourier.

Ci-aprĂšs:

  • A odotB signifie multiplication matricielle par Ă©lĂ©ment A et B
  • A otimesB dĂ©note la convolution des matrices A et B
  •  hatA( omega, nu)= mathcalF(A(x,y)) signifie que  hatA( omega, nu) - matrice de frĂ©quence de la transformĂ©e de Fourier rapide appliquĂ©e Ă  l'image A .
  •  parallelA parallel2 - indique la somme des carrĂ©s des Ă©lĂ©ments de la matrice A

Décision triviale


À premiĂšre vue, la tĂąche de suivre un sujet spĂ©cifique ne semble pas si compliquĂ©e.

Puissions-nous avoir T images vidéo consécutives It la taille w sur h pixels. Dans l'image initiale de la vidéo I0 un rectangle est encerclé autour d'un objet F0m sur n . Il est nécessaire de trouver l'emplacement de ce corps sur tous les autres cadres It .

Nous supprimons le bruit dans les images, puis nous normalisons chacune d'entre elles dans la plage de -1 Ă  1 afin que les changements gĂ©nĂ©raux de luminositĂ© n'affectent pas la dĂ©tection. Prenez la premiĂšre image de la vidĂ©o sans balisage I1 . Si I0 et I1 - images vidĂ©o voisines avec un bon FPS, il est peu probable que l'objet souhaitĂ© soit Ă©loignĂ© de sa position d'origine. Profitez-en. DĂ©couper I1 rectangle F1 de l'endroit oĂč se trouvait auparavant le corps dĂ©sirĂ©. "Glisser" F0 Ă  travers F1 et Ă  chaque point, nous calculons le carrĂ© de la somme des diffĂ©rences

GL2(i,j)= parallelF1(i,j)−F0 parallel2,i in[0,m],j in[0,n]

oĂč calculer la diffĂ©rence GL2(i,j) besoin de combiner le centre F0 avec Ă©lĂ©ment (i,j) dans F1 et les valeurs manquantes Ă  zĂ©ro. AprĂšs cela dans la matrice GL2 le minimum est recherchĂ©; son emplacement moins les coordonnĂ©es du centre F1 et sera le dĂ©calage de l'objet souhaitĂ© par I1 .

Pour qu'une transition nette vers zĂ©ro ne «sonne» pas pendant la dĂ©tection, il est prĂ©fĂ©rable de prendre initialement le rectangle un peu plus que nĂ©cessaire et de rĂ©duire progressivement Ă  zĂ©ro les valeurs les plus proches des bordures F0 et F1 . Pour cela, chacun des F doivent ĂȘtre multipliĂ©s par le masque. Pour les objets carrĂ©s, le bon vieux exposant fera l'affaire. A= exp frac(x−i)2+(y−j)2 sigma2 (oĂč (x,y) Est le centre de la fenĂȘtre), mais dans le cas gĂ©nĂ©ral, il est prĂ©fĂ©rable de prendre une fenĂȘtre de Hanning en deux dimensions.

Pour I2 la fenĂȘtre F2 prise de la position prĂ©dite sur le cadre I1 , et ainsi de suite.

Exemple


Au lieu de cela L2 les normes peuvent ĂȘtre utilisĂ©es L1 ( GL1(i,j)=|F1(i,j)−F0| ) et moins la corrĂ©lation croisĂ©e des matrices ( GnCC(i,j)=− sumklF1,kl(i,j)F0,kl,k in[0,m],l in[0,n] ) Les deux sont considĂ©rĂ©s un peu plus vite que L2 mais ils ont leurs propres caractĂ©ristiques. L1 non diffĂ©renciable et moins sensible aux grandes diffĂ©rences de valeurs de pixels. La corrĂ©lation croisĂ©e peut produire des faux positifs si l'Ă©chantillon est Ă  faible contraste et que l'image prĂ©sente des zones trĂšs claires ou trĂšs sombres.

L2 -version de la métrique n'a pas un tel inconvénient:

GL2= sum(F1,kl(i,j)−F0,kl)2

= sum(F1,kl(i,j))2−2F1,kl(i,j)F0,kl+(F0,kl)2

= sum(F1,kl(i,j))2− sum2F1,kl(i,j)F0,kl+ sum(F0,kl)2

=EF1(i,j)+2GnCC(i,j)+EF0

EF1(i,j) , "L'Ă©nergie" du site sĂ©lectionnĂ© sur It agit comme un facteur d'Ă©quilibrage ( EF0 , la somme des carrĂ©s des valeurs de pixels de l'Ă©chantillon est la mĂȘme pour toutes les positions de fenĂȘtre et n'a aucune signification pratique ici).

MĂȘme un tel algorithme primitif s'adapte assez bien dans le cas d'un mouvement linĂ©aire d'objets (par exemple, une camĂ©ra regardant le convoyeur). Cependant, en raison de la simplicitĂ© du modĂšle et de son exĂ©cution, cette mĂ©thode de suivi prĂ©sente plusieurs inconvĂ©nients:

  1. Un simple mouvement linĂ©aire d'un objet sans changement de nature est rare. En rĂšgle gĂ©nĂ©rale, les corps dans le champ de vision de la camĂ©ra peuvent subir certaines classes de modifications. Par ordre croissant de complexitĂ©: augmentation / diminution de la taille, virages, transformations affines, transformations projectives, transformations non linĂ©aires, modifications d'un objet. MĂȘme si nous omettons les changements d'objet et les transformations non linĂ©aires, nous aimerions que l'algorithme puisse rĂ©cupĂ©rer Ă  partir de rotations et de changements de taille relativement simples. De toute Ă©vidence, la procĂ©dure ci-dessus n'a pas cette propriĂ©tĂ©. Probablement F0 il donnera toujours une rĂ©ponse perceptible sur l'objet, mais il sera difficile de dĂ©terminer l'emplacement exact de l'Ă©chantillon, et la piste sera discontinue.

    Exemple

  2. Nous avons montrĂ© Ă  l'algorithme un seul Ă©chantillon positif, il est difficile de dire quelle rĂ©ponse donnera F0 si un autre objet similaire pĂ©nĂštre dans la fenĂȘtre. Eh bien, si l'objet souhaitĂ© est contrastĂ© et a une structure rare, mais que faire si nous voulons surveiller une machine dans un flux d'autres machines? Un tracker peut sauter de façon imprĂ©visible d'une voiture Ă  l'autre.
  3. À chaque image, nous jetons la trame de fond entiĂšre. Probablement, il devrait Ă©galement ĂȘtre utilisĂ© d'une maniĂšre ou d'une autre.
  4. De plus, nous n'apprenons qu'Ă  un moment de l'image. Il sera prĂ©fĂ©rable que, prĂšs de l' emplacement correct de l'objet, le tracker donne Ă©galement une bonne rĂ©ponse. Un peu contre-intuitif, mais pensez: si le filtre est Ă  l'emplacement exact de l'objet dans l'image (x,y) donne la meilleure valeur, et (x+1,y+1) - Quelque chose d'alĂ©atoire, ce qui signifie qu'il est trop sensible aux petits dĂ©tails qui peuvent facilement changer. Inversement, si (x,y) et dans (x+1,y+1) environ les mĂȘmes bonnes valeurs, le filtre «accroché» sur des panneaux plus grands et, nous l'espĂ©rons, plus permanents.
  5. Avec la mise en Ɠuvre naĂŻve de la procĂ©dure de suivi, pour chaque pixel de l'image, nous multiplions la fenĂȘtre entiĂšre avec l'Ă©lĂ©ment sĂ©lectionnĂ© par la partie correspondante de cette image. La complexitĂ© de cette opĂ©ration est O(m2n2) . Dans de tels cas, il n'est pas trĂšs agrĂ©able de suivre mĂȘme des objets de 50 Ă  50 pixels. Ce problĂšme est partiellement rĂ©solu en rĂ©duisant la taille de la vidĂ©o, mais lors de la rĂ©duction de l'image Ă  moins de 240 pixels de largeur, mĂȘme de gros dĂ©tails importants commencent Ă  ĂȘtre perdus, ce qui rend l'algorithme vide de sens.

ASEF, MOSSE


Approche triviale ++?


Retroussez nos manches et essayez de résoudre les problÚmes ci-dessus.

Augmentez l'image originale. Nous lui appliquons plusieurs transformations affines lĂ©gĂšres. Vous pouvez Ă©galement ajouter du bruit ou modifier le gamma. Ainsi, au lieu d'une seule image, un ensemble de microdonnĂ©es de P des photos. Il y avait beaucoup d'images, mais une fenĂȘtre restait. Alors maintenant, nous allons non seulement couper un rectangle de l'image, mais chercher un filtre W qui donnera une bonne rĂ©ponse pour tout le monde Ip . Nous transformons le problĂšme en un problĂšme de minimisation:

W: minW parallelFp−W parallel2,p in[1,P]

oĂč  parallĂšleFp−W parallĂšle2 - la somme des carrĂ©s des diffĂ©rences de pixels entre W et la section correspondante de l'emplacement exact de l'objet sur p cette image synthĂ©tique créée Ă  partir d'un cadre qui a un vrai balisage.

De plus, vous pouvez échantillonner des rectangles loin de l'emplacement de l'objet suivi et maximiser la différence indiquée ci-dessus.

Il est plus difficile de suggĂ©rer que le filtre donne une bonne rĂ©ponse aux points proches de l'emplacement exact de l'objet. Nous savons que (x,y) application de filtre avec L2 -mĂ©trique devrait donner 0, ensuite - plus, loin - encore plus. De plus, nous n'avons pas de direction prĂ©fĂ©rĂ©e, la rĂ©ponse doit ĂȘtre symĂ©trique au centre par rapport Ă  (x,y) . Il semble que nous puissions exprimer mathĂ©matiquement Ă  quoi devrait ressembler la rĂ©ponse d'un filtre appliquĂ© aux images de rĂ©fĂ©rence! L'aspect exact peut varier en fonction de la fonction d'attĂ©nuation de rĂ©ponse spĂ©cifique, mais est-ce que tout le monde aime les gaussiens? Par consĂ©quent, nous supposons que W appliquĂ© Ă  Fp devrait idĂ©alement donner un rĂ©sultat Gp=1− exp frac(x−i)2+(y−j)2 sigma2 . Par consĂ©quent, le problĂšme de minimisation se transforme en:

Dp(i,j)= parallĂšleFp(i,j)−W parallel2

W: minW parallelDp(i,j)−Gp(i,j) parallel2,p in[1,P]

Maintenant, nous ne minimisons pas la réponse à un moment donné, mais minimisons la déviation de la réponse par rapport à celle souhaitée.

Attendez une seconde ... Nous l'avons fait P foism foisn Ă©quations avec m foisn variables Ă  minimiser. Il semble que nous en ayons trop fait. Revenons un peu en arriĂšre.

Astuce principale


De tous les problÚmes, la plus grande difficulté est la complexité. O(m2n2) . Est-il possible de trouver autre chose que le fractionnement délicat d'une boßte de recherche en plusieurs petites ou de rechercher l'image dans une petite résolution et un réglage fin pour une haute précision?

Il s'avĂšre que vous le pouvez! La matanalyse nous dit que le repliement des fonctions dans l'espace ordinaire est une multiplication de leurs images de Fourier. Nous pouvons appliquer une transformĂ©e de Fourier rapide aux images, multiplier leurs frĂ©quences Ă©lĂ©ment par Ă©lĂ©ment, puis reconvertir le rĂ©sultat en matrice pour O(mn logmn) , ce qui est beaucoup plus rapide que de minimiser honnĂȘtement la matrice. Fourier! Qui aurait pensĂ©! À l'Ăšre du tensorflow, il peut encore nous aider avec la vision par ordinateur.

(Cela montre d'ailleurs le principe mathématique général: si vous ne voulez pas résoudre le problÚme dans l'espace X le déplacer dans l'espace Y , décidez-y et transférez la décision. La solution de contournement est souvent plus courte que la solution directe.)

Comme indiqué ci-dessus, nous pouvons utiliser la corrélation croisée pour localiser l'échantillon dans l'image. Mais la corrélation croisée est une convolution avec une réflexion horizontale et verticale W . La matanalyse suggÚre que dans ce cas il faudra multiplier les fréquences F sur une matrice conjuguée complexe à une matrice de fréquence W :

 hatW( omega, nu)= mathcalF(W(x,y))

 hatF( omega, nu)= mathcalF(F(x,y))

 hatGconv( omega, nu)= mathcalF(Gconv(x,y))

Gconv=F otimesW rightarrow hatGconv= hatF odot hatW∗

oĂč Gconv= exp frac(x−i)2+(y−j)2 sigma2 - fonction de rĂ©ponse parfaite sur l'image de rĂ©fĂ©rence. Veuillez noter que L2 Nous avons minimisĂ© la mĂ©trique et maximisĂ© la mĂ©trique de convolution, alors maintenant, plus la rĂ©ponse est grande, mieux c'est.

Si nous avions une image, nous trouverions la matrice de fréquence de filtre exacte:

 hatW∗= frac hatGconv hatF

oĂč le cĂŽtĂ© droit fait rĂ©fĂ©rence Ă  la division par Ă©lĂ©ment. Mais un peu plus tĂŽt, nous avons gĂ©nĂ©rĂ© P images de la source. Nous pouvons les appliquer avec l'approche de Fourier. Il n'y a pas de filtre avec de telles frĂ©quences qui satisferait idĂ©alement toutes les images, mais vous pouvez obtenir quelque chose d'assez bon. Vous pouvez rĂ©soudre le problĂšme de deux maniĂšres:

  1. Vous pouvez trouver un ensemble de filtres idéaux, puis les faire la moyenne en un. C'est ainsi que les auteurs de la moyenne des filtres synthétiques exacts (ASEF):

     hatW∗= frac1P sumPp=1 hatW∗p= frac1P sumPp=1 frac hatGp hatFp

    Nous utilisons ici la propriété de linéarité des images de Fourier. En ajoutant des fréquences, comme indiqué ci-dessus, nous semblons faire la moyenne de plusieurs poids de filtre.
  2. Vous pouvez trouver des fréquences de filtre qui satisfont toutes les images en moyenne, approximativement L2 :

     hatW∗: min hatW∗ sumPp=1 parallel hatFp odot hatW∗− hatGp parallel2

    Pour trouver le minimum, vous devez prendre la dérivée des éléments filtrants:

     frac delta delta hatW∗ sumPp=1 parallel hatFp odot hatW∗− chapeauGp parallel2=0

    Une capture honnĂȘte de ce dĂ©rivĂ© peut ĂȘtre trouvĂ©e dans le suivi d'objet visuel Ă  l'aide de filtres de corrĂ©lation adaptatifs , qui offre la somme minimale de sortie des filtres d'erreur quadratique (filtres MOSSE). Le rĂ©sultat est le suivant:

     hatW∗= frac sumPp=1 hatGp odot hatFp∗ sumPp=1 hatFp odot hatFp∗


Hmm, comme si des Ă©lĂ©ments similaires Ă©taient impliquĂ©s dans les formules. À P=1 les formules pour ASEF et MOSSE sont exactement les mĂȘmes.  chapeauW∗ pour une image peut ĂȘtre reprĂ©sentĂ©e comme

 hatW∗= frac hatGp hatFp= frac hatGp odot hatFp∗ hatFp odot hatFp∗

Remplacez dans la formule pour ASEF et obtenez

 hatW∗= sumPp=1 frac hatGp odot hatFp∗ hatFp odot hatFp∗

Ouais! Maintenant, il est beaucoup mieux de voir que ASEF et MOSSE ne diffÚrent que par la méthode de moyenne du filtre! On fait valoir que MOSSE produit de meilleurs filtres que ASEF. Cela semble logique: il est préférable de s'ajuster à l'ensemble des images dans leur ensemble que de faire la moyenne des filtres.

AprĂšs avoir  chapeauW∗ , nous calculons la rĂ©ponse dans le domaine frĂ©quentiel  hatGconv= hatF odot hatW∗ , puis nous le traduisons dans le domaine spatial et recherchons le maximum dans la matrice rĂ©sultante G . LĂ  oĂč le maximum est, il y a la nouvelle position de l'objet.

Points supplémentaires


  • Les termes dans les dĂ©nominateurs des formules ont une signification physique intĂ©ressante.  hatFp odot hatFp∗ Est le spectre d'Ă©nergie d'un rectangle avec p cette image.
  • Faites attention Ă  une symĂ©trie intĂ©ressante. Il a fallu multiplier les frĂ©quences de filtrage par les frĂ©quences d'image pour obtenir une rĂ©ponse. Vous devez maintenant multiplier les frĂ©quences de rĂ©ponse par les frĂ©quences d'image (et normaliser) pour obtenir les frĂ©quences de filtre.
  • Dans la vie rĂ©elle, la division Ă©lĂ©ment par Ă©lĂ©ment peut provoquer une division par zĂ©ro, donc une constante de rĂ©gularisation est gĂ©nĂ©ralement ajoutĂ©e au dĂ©nominateur  epsilon . On fait valoir qu'une telle rĂ©gularisation oblige le filtre Ă  accorder plus d'attention aux basses frĂ©quences, ce qui amĂ©liore la capacitĂ© de gĂ©nĂ©ralisation.
  • Lors du traitement d'une vidĂ©o rĂ©elle, vous souhaitez gĂ©nĂ©ralement enregistrer des informations sur l'objet suivi obtenues Ă  partir des images prĂ©cĂ©dentes. Lorsque vous passez Ă  l'image suivante, vous ne pouvez pas calculer  chapeauW Ă  partir de zĂ©ro, et mettez Ă  jour le prĂ©cĂ©dent. Mettre Ă  jour la formule pour ASEF:

     hatW∗i= frac etaP sumPp=1 frac hatGp hatFp+(1− eta) hatW∗i−1

    Pour MOSSE, vous devez accumuler séparément le numérateur et le dénominateur:

    Ai= eta sumPp=1 hatGp odot hatFp∗+(1− eta)Ai−1

    Bi= eta sumPp=1 hatFp odot hatFp∗+(1− eta)Bi−1

     hatW∗i= fracAiBi

    oĂč  eta - vitesse d'apprentissage.
  • Il est important de se rappeler que la transformĂ©e de Fourier n'est pas tout Ă  fait la mĂȘme chose que le calcul G honnĂȘtement, comme dĂ©crit au dĂ©but de l'article. Lors du calcul de la FFT, les Ă©lĂ©ments manquants ne disparaissent pas, mais sont substituĂ©s au verso, comme si l'image Ă©tait bouclĂ©e de droite Ă  gauche et de bas en haut. Mais au tout dĂ©but de l'article, nous avons dĂ©jĂ  dĂ©cidĂ© d'assombrir les bords F , ce problĂšme n'aura donc pas d'effet notable.
  • Comme mentionnĂ© ci-dessus, la corrĂ©lation croisĂ©e a une caractĂ©ristique dĂ©sagrĂ©able: en gĂ©nĂ©ral, un filtre de lumiĂšre peut donner une forte rĂ©ponse dans les zones blanches de l'image, mĂȘme si elles ne coĂŻncident pas dans les zones contrastĂ©es. Les problĂšmes ne se limitent pas Ă  cela. MĂȘme un pixel correspondant avec une valeur fortement positive ou trĂšs nĂ©gative peut interfĂ©rer avec le filtre si l'Ă©chantillon dans son ensemble est Ă  faible contraste. Pour attĂ©nuer cet effet, une transformation non linĂ©aire des pixels de l'image doit ĂȘtre incluse dans le prĂ©traitement, ce qui «appuiera» les zones trop claires et trop sombres au milieu. Pour cette raison, la coĂŻncidence de ces zones contrastĂ©es contribue davantage Ă  la mĂ©trique. Les articles ASEF et MOSSE utilisent le logarithme:

    I= logI+1

    oĂč sont les pixels I de 0 Ă  255. À mon avis, cela est trop sĂ©vĂšre et ignore le problĂšme de la forte rĂ©ponse du filtre sombre dans les zones noires . Un tel schĂ©ma fonctionne mieux:

    I=signe(I−127) sqrt|I−127|

    Vient ensuite la normalisation, et il s'avÚre que la plupart des éléments sont centrés autour de zéro.
  • Comment un tel algorithme peut-il dĂ©terminer que l'objet suivi a disparu de l'image? Une analyse plus dĂ©taillĂ©e de la rĂ©ponse reçue de la trame suivante sera utile ici. Les crĂ©ateurs de MOSSE proposent un indicateur PSR - Peak to Sidelobe Ratio. Soit gmax - Ă©lĂ©ment maximum G correspondant Ă  la nouvelle position de l'objet (x,y) . Nous excluons le carrĂ© de la considĂ©ration 11 $ \ fois 11 $ autour de ce maximum. Nous calculons la moyenne et l'Ă©cart type pour les pixels restants (  musl, sigmasl ) Alors

    PSR= fracgmax− musl sigmasl

    Si cette valeur est supérieure à un certain seuil, la détection est considérée comme réussie. Le seuil est généralement pris dans la région entre 3 et 10. Pour des détections sûres, le PSR est généralement maintenu au-dessus de 20.

    (notez qu'ici PSR ne signifie pas du tout ce qu'il signifie habituellement dans la théorie du traitement du signal; alors ne le googlez pas, rien de bon ne sortira)
  • L'algorithme est extrĂȘmement simple. La procĂ©dure de suivi sur Core-i7 dans les images de 320 x 400 utilisant l'implĂ©mentation OpenCV prend de 0,5 Ă  2 millisecondes, selon la taille de l'objet suivi.

Algorithme MOSSE


Mettre tout cela ensemble.

État gĂ©nĂ©ral:

Matrice de frĂ©quence de filtre:  chapeauW
Matrices auxiliaires pour le calcul des fréquences de filtrage: A,B
Matrice de frĂ©quence de la rĂ©ponse idĂ©ale souhaitĂ©e:  chapeauG
Vitesse d'entraĂźnement pendant le suivi:  eta
Le rectangle de la position actuelle de l'objet: R
Nombre de transformations: P
Seuil de réponse: PSRthr

Fonction auxiliaire: formation . EntrĂ©e: Image I vitesse d'apprentissage actuelle  etacurrent

  1. Anouveau:=0,Bnouveau:=0
  2. Jusqu'Ă  ce que je l'aie P transformations:
    1. Appliquez une petite transformation affine aléatoire centrée sur le centre de l'image. R
    2. Couper Ă  partir d'une image rectangulaire avec un objet F
    3. Appliquez-y un masque pour annuler en douceur les bords
    4. Traduire F dans le domaine frĂ©quentiel:  chapeauF
    5. Anouveau=Anouveau+ chapeauG odot chapeauF∗
    6. Bnouveau=Bnouveau+ chapeauF odot chapeauF∗

  3. Si  etacurrent geq1.0 puis remplacez A et B sur Anouveau et Bnouveau . Sinon:

    B:= etaBnouveau+(1− eta)B

    A:= etaAnouveau+(1− eta)A

  4. Calculez les fréquences de filtrage:

     hatW∗= fracAB


Initialisation . Entrée: Image I rectangle autour de la position de l'objet Rinit

  1. R:=Rinit
  2. Préparez la réponse souhaitée G . Il s'agit généralement d'une matrice complÚtement nulle avec une petite gaussienne au centre.
  3. Formation : I , 1.0
  4. Traduire G dans le domaine frĂ©quentiel:  chapeauG

Suivi : entrée: image I

  1. Couper le rectangle F de I pour la position précédente existante de l'objet R
  2. Appliquez-y un masque pour annuler en douceur les bords
  3. Traduire F dans le domaine frĂ©quentiel:  chapeauF
  4.  hatGresponse= hatW odot hatF∗
  5. Traduire  hatGresponse au domaine spatial: Gresponse
  6. Trouvez le maximum dans Gresponse : gmax,(x,y)
  7. Calculer la puissance de rĂ©ponse PSR:= fracgmax− musl sigmasl
  8. Si PSR<PSRthr échec de sortie
  9. Mettre à jour la position R . Ajustez R s'il dépasse l'image ou s'il a été décidé que l'objet augmentait / diminuait.
  10. Formation : I ,  eta
  11. Retour R

Les dĂ©tails de mise en Ɠuvre peuvent varier. Par exemple

  • Seul peut prĂ©traiter F , pas l'image entiĂšre.
  • G peut ĂȘtre recréé pour chaque transformation d'image avec une fonction et une largeur de rĂ©ponse variables.
  • Vous pouvez entraĂźner plusieurs filtres diffĂ©rents en mĂȘme temps sur plusieurs Ă©chelles de l'objet afin de dĂ©tecter les mouvements Ă  distance et Ă  proximitĂ©.

À quoi ça ressemble


Pour commencer, quelques exemples de la transformée de Fourier bidimensionnelle.

Quelques exemples simples
Permettez-moi de vous rappeler que le résultat de la transformation a une valeur complexe. Les images ci-dessous montrent les groupes «image - valeurs absolues du domaine fréquentiel à une échelle normale - valeurs absolues du domaine fréquentiel à une échelle logarithmique».

Lignes verticales:





L'image change de gauche Ă  droite de la mĂȘme maniĂšre pour toute position verticale. De plus, le changement est pĂ©riodique, avec une pĂ©riode claire et un schĂ©ma clair. Par consĂ©quent, dans les images de frĂ©quences, vous ne voyez que les frĂ©quences le long de l'axe x=0 .

Cage:





Veuillez noter qu'il existe comme prévu des séries de fréquences le long des axes x=0 et y=0 et d'étranges fréquences parasites. Ils sont apparus du fait que, premiÚrement, l'image est finie, tandis que l'image de Fourier n'est décomposée en une belle quantité que pour un signal périodique infini. DeuxiÚmement, vous pouvez voir que l'image ne forme pas une période exacte sur les bords.

Lignes inclinées:





Là encore, les fréquences correspondant à la direction principale et les fréquences parasites sont visibles.

Lignes inclinées plus distorsion:





L'image des fréquences montre plusieurs directions caractéristiques, mais il devient déjà difficile de présenter intuitivement une image sur elles.

Pour les images du monde rĂ©el, il est encore plus difficile de prĂ©senter une image dans la tĂȘte par ses frĂ©quences:





(les fréquences au centre sont fermées pour ne pas «éclairer» le reste du spectre)

Passons maintenant à un exemple de travail réel:

Pack d'images
Image avec objet marqué:



Objet dĂ©coupĂ© et prĂ©traitĂ©, son spectre Ă  l'Ă©chelle habituelle et logarithmique ( F,| hatF|, log| hatF| ):





Réponse souhaitée ( G ):



Filtrer les frĂ©quences sur une Ă©chelle rĂ©guliĂšre et logarithmique ( W,| chapeauW| ):




Poids de filtre explicites (sans transformations) F ):



Veuillez noter qu'ils ne participent Ă  l'algorithme nulle part - ils ne peuvent ĂȘtre comptĂ©s que par intĂ©rĂȘt. Notez Ă©galement que le filtre ressemble Ă  l'enfer de cela . On pourrait s'attendre Ă  ce que le filtre soit quelque chose de similaire Ă  l'image d'origine, mais ce n'est en aucun cas toujours vrai. Un filtre similaire Ă  l'image elle-mĂȘme ne donnerait guĂšre la rĂ©ponse gaussienne souhaitĂ©e.

La réponse de la trame suivante:



Bien qu'il ne soit pas aussi propre que la réponse souhaitée, il est facile de déterminer le maximum à ce sujet.

Le mĂȘme exemple avec une rĂ©ponse souhaitĂ©e plus Ă©troite:

Pack d'images
Déjà:


W :


Plus déjà:


W :


Avec un maximum trĂšs Ă©troit sur le filtre, au lieu d'une tache noire, l'Ɠil devient clairement visible.

W pour les trois cas précédents G lorsqu'il est utilisé pour l'apprentissage de 16 transformations de l'image d'entrée:

Un autre tas de photos
Large maximum:



Maximum moyen:



Maximum étroit:



Plus il y a de transformations, moins le filtre s'accroche aux Ă©lĂ©ments alĂ©atoires. Il est particuliĂšrement clair que des taches noires et blanches alĂ©atoires du milieu ont disparu W . D'un autre cĂŽtĂ©, pour un gaussien Ă©troit, un entraĂźnement sur plusieurs images peut jouer un inconvĂ©nient: regardez la «sonnerie» formĂ©e dans le filtre autour de l'Ɠil.

Si vous voulez voir à quoi cela ressemble en direct, téléchargez ici mon référentiel de test avec l'implémentation de MOSSE avec la sortie des images de débogage. Vous pouvez trouver plus d' options MOSSE sur le github. De plus, il est en OpenCV .

Conclusion


Merci de votre attention, Habrovsk. Le suivi MOSSE et ASEF ne sont pas les algorithmes les plus complexes au monde. Plus il est facile non seulement de les appliquer efficacement, mais aussi de comprendre comment leurs crĂ©ateurs ont Ă©tĂ© guidĂ©s. J'espĂšre que mon explication vous a aidĂ© Ă  entrer dans la tĂȘte des chercheurs, Ă  suivre le cours de leurs rĂ©flexions. Cela peut ĂȘtre utile: l'apprentissage automatique n'est pas un domaine statique de la connaissance, il y a une place pour la crĂ©ativitĂ© et la recherche. Essayez de creuser plus profondĂ©ment dans un algorithme Ă©tabli: sciez les membres inutiles pour l'accĂ©lĂ©ration ou ajoutez-en un couple pour le faire fonctionner mieux dans votre cas particulier. Vous l'aimerez!

Cet article a été écrit avec le soutien de DSSL.

Source: https://habr.com/ru/post/fr421285/


All Articles