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

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.
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:
- 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.
- 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.
- Ă chaque image, nous jetons la trame de fond entiĂšre. Probablement, il devrait Ă©galement ĂȘtre utilisĂ© d'une maniĂšre ou d'une autre.
- 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.
- 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:
- 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. - 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
autour de ce maximum. Nous calculons la moyenne et l'Ă©cart type pour les pixels restants ( musl, sigmasl ) AlorsPSR= 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:
chapeauWMatrices auxiliaires pour le calcul des fréquences de filtrage:
A,BMatrice de fréquence de la réponse idéale souhaitée:
chapeauGVitesse d'entraĂźnement pendant le suivi:
etaLe rectangle de la position actuelle de l'objet:
RNombre de transformations:
PSeuil de réponse:
PSRthrFonction auxiliaire:
formation . Entrée: Image
I vitesse d'apprentissage actuelle
etacurrent- Anouveau:=0,Bnouveau:=0
- Jusqu'Ă ce que je l'aie P transformations:
- Appliquez une petite transformation affine aléatoire centrée sur le centre de l'image. R
- Couper Ă partir d'une image rectangulaire avec un objet F
- Appliquez-y un masque pour annuler en douceur les bords
- Traduire F dans le domaine fréquentiel: chapeauF
- Anouveau=Anouveau+ chapeauG odot chapeauFâ
- Bnouveau=Bnouveau+ chapeauF odot chapeauFâ
- Si etacurrent geq1.0 puis remplacez A et B sur Anouveau et Bnouveau . Sinon:
B:= etaBnouveau+(1â eta)B
A:= etaAnouveau+(1â eta)A
- Calculez les fréquences de filtrage:
hatWâ= fracAB
Initialisation . Entrée: Image
I rectangle autour de la position de l'objet
Rinit- R:=Rinit
- 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.
- Formation : I , 1.0
- Traduire G dans le domaine fréquentiel: chapeauG
Suivi : entrée: image
I- Couper le rectangle F de I pour la position précédente existante de l'objet R
- Appliquez-y un masque pour annuler en douceur les bords
- Traduire F dans le domaine fréquentiel: chapeauF
- hatGresponse= hatW odot hatFâ
- Traduire hatGresponse au domaine spatial: Gresponse
- Trouvez le maximum dans Gresponse : gmax,(x,y)
- Calculer la puissance de rĂ©ponse PSR:= fracgmaxâ musl sigmasl
- Si PSR<PSRthr échec de sortie
- 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.
- Formation : I , eta
- 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 simplesPermettez-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'imagesImage 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'imagesDé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 photosLarge 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.