Este artigo é sobre o registro é como usar GOT10K kit de ferramentas para avaliar o rastreador, eo uso da versão python OTB kit de ferramentas para desenhar os resultados finais da Fig. Middle também encontrou um monte de lugares não entendem o processo de tropeço registro branco.
GOT10K kit de ferramentas de avaliar o rastreador em diferentes conjuntos de dados
GOT-10k Python Toolkit é um kit ferramenta muito poderosa, o kit de ferramentas para rastrear valores de referência definidos são usados principalmente para fornecer interface de download de dados não oficiais, bem como para o acompanhamento de: OTB (2013/2015), VOT (2013 ~ 2018), DTB70, TColor128, NFS (30/240 fps), UAV (123/20 L), e LaSOT TrackingNet valores de referência. (ILSVRC VID e YouTube-BoundingBox (vindo logo!))
Aqui vamos descrever como usar:
1 Baixe e instale
uso recomendado
pip install --upgrade got10k
2 definições precisamos rastreador teste
from got10k.trackers import Tracker
class IdentityTracker(Tracker):
def __init__(self):
super(IdentityTracker, self).__init__(
name='IdentityTracker', # tracker name
is_deterministic=True # stochastic (False) or deterministic (True)
)
def init(self, image, box):
self.box = box
def update(self, image):
return self.box
Quando eles precisam rastreador definição de pacote de teste com a ferramenta, simplesmente definido dentro IdentityTracker classe de inicialização e atualização função pode ser.
- função init: bbox quadro inicial é recebido e a estrutura inicial entre as sequências de vídeo de teste.
- função de atualização: quadro posterior é recebido, retorna o bbox atualizadas.
3 é executado no GOT10K avaliar rastreador diferente
from got10k.experiments import ExperimentGOT10k
# ... tracker definition ...
# instantiate a tracker
tracker = IdentityTracker()
# setup experiment (validation subset)
experiment = ExperimentGOT10k(
root_dir='data/GOT-10k', # GOT-10k's root directory
subset='val', # 'train' | 'val' | 'test'
result_dir='results', # where to store tracking results
report_dir='reports' # where to store evaluation reports
)
experiment.run(tracker, visualize=True)
# report tracking performance
experiment.report([tracker.name])
Se outros conjuntos de dados, apenas ligeiramente modificado:
experiments = [
# ExperimentVOT('data/VOT2019', version=2019)
# ExperimentGOT10k('data/GOT-10k', subset='test'),
ExperimentOTB('data/OTB', version=2013),
# ExperimentOTB('data/OTB', version=2015),
# ExperimentDTB70('data/DTB70'),
# ExperimentTColor128('data/Temple-color-128'),
# ExperimentUAV123('data/UAV123', version='UAV123'),
# ExperimentUAV123('data/UAV123', version='UAV20L'),
# ExperimentNfS('data/nfs', fps=30),
# ExperimentNfS('data/nfs', fps=240)
]
# run tracking experiments and report performance
for e in experiments:
e.run(tracker, visualize=False)
e.report([tracker.name])
processo de rastreamento é implementado em todos os conjuntos de dados em e.run
Os resultados obtidos apresentam result_dir, padrão / resultados / e / trackername
Resultados Há / relatórios / e / Relatório trackername
4 Próximo principalmente devido ao uso OTB Kit chamar a comparação entre os trackers, por isso vamos analisar os resultados após ExperimentOTB.run e ExperimentOTB.report
Num exemplo OTB2015
quando e.run (rastreador, visualizar = FALSE) ( onde E pode ser qualquer base de dados de interface dentro do pacote got10k)
ExperimentOTB.run entra pela primeira vez a função,
de acordo com o
for s, (img_files, anno) in enumerate(self.dataset):
retirado, e determina se a sequência de teste de corrente ter sido há bons resultados no conjunto de dados para cada sequência, se não, então:
boxes, times = tracker.track( img_files, anno[0, :], visualize=visualize)
Em seguida, para
got10k.trackers.__init__.py
a função de pista,
for f, img_file in enumerate(img_files):
para cada um de uma sequência de iterações de cada quadro é retirado ou função de actualização alimentado Init
Então nosso tracker (rastreador sua definição, herdando de rastreadores para baixo) já foram definidos função init e a função de atualização, para cada seqüência, o valor da caixa delimitadora para fora somente o primeiro quadro, o primeiro quadro e o primeiro quadro o valor da caixa delimitadora em função init. O próximo quadro será enviado a função de atualização.
E.report focada olhada nos resultados, seguida pela versão python do pacote usará principalmente esse OTB
I utilizado para comparar a minha principal perseguidor teste SiamFC, você pode ver o diretório diretamente gerar três arquivos
Pode ver diretamente o enredo sucesso é gerado e enredo de precisão, se não em comparação com outros trackers, a que pode acabar.
Mais importante ainda, o arquivo json dados:
Você pode ler pontuação sucesso e pontuação de precisão, e fps velocidade.
versão python do contraste kit de ferramentas rastreador OTB
1 Instalação e Configuração do Ambiente
Primeiro Quguan download de rede versão do pacote python de OTB
OTB site oficial
também pode ir diretamente para o download no GitHub
Em segundo lugar, você pode ver os requisitos de configuração relevantes no github:
onde o primeiro pacote que entender que, se você precisa para avaliar o código Matlab rastreador está escrito, você precisa usar para usar esta chamada pacote em python. Mas eu usar python para rever principalmente porque o meu código é escrito em python, Matlab embalar demais para mim, eu não quero virar arquivo mat. Portanto, este pacote não é próximo. Os outros três pacotes são apenas grandes para fugir. Há pouca atenção: a necessidade de versão uso python2.7! ! !
FIG 2 Comparação!
Antecedência Descrição: . Porque eu já concluiu a avaliação de seguimento do pacote do tracker na OTB (2013 ou 2015) (Nota got10k só geram resultados da OPE) por ferramentas got10k nesta etapa é apenas para colocar o nosso rastreador e 2013 ou 2015 das pessoas OTB têm bons resultados de teste foram comparados com rastreador basal (linha de base rastreador 34). Por isso, só estão preocupados com a forma como um gráfico de comparação.
Então nós só precisa se concentrar em resultados arquivos / OPE nesta pasta (OTB trata da primeira ASLA base rastreador por exemplo):
- Há três pastas para armazenar os resultados da pista de teste resultados / OPE / ASLA / abaixo: scores_tb50 e socres_cvpr2013 são armazenados OTB2013 resultado, scores_tb100 armazenar os resultados de OTB2015.
- No exemplo scores_tb50, o seguinte 14, respectivamente, são armazenados em ficheiros diferentes json desafio (por exemplo, oclusão, movimento rápido) do resultado de seguimento. sequências de teste diferentes que correspondem a diferentes desafios, ALL.json única sequência de todas as sequências (50) correspondente.
- Na verdade, olhamos para o resultado ALL.json dentro quando desenho.
- Então, só precisamos de acompanhar os resultados de nosso tracker feita ALL.json, colocado sob a pasta correspondente, por exemplo, o meu perseguidor é SiamFC, para colocar resultados / OPE / SiamFC / (resultados OTB2013 scores_tb50 colocado , o resultado é colocado sob OTB2015 scores_tb100) pode ser mostrá-lo diretamente!
- Sobre como alterar ALL.json é simples: para scores_tb50 como um exemplo ou
copiá-lo para outros trackers ALL.json, e então nós gostaria de melhorar os seus parâmetros
{"name": "ALL", "desc": "All attributes", "tracker": "SiamFC", "evalType": "OPE", "seqs": ["BasketBall", "Biker", "Bird1", "BlurBody", "BlurCar2", "BlurFace", "BlurOwl", "Bolt", "Box", "Car1", "Car4", "CarDark", "CarScale", "ClifBar", "Couple", "Crowds", "David", "Deer", "Diving", "DragonBaby", "Dudek", "Football", "Freeman4", "Girl", "Human3", "Human4-2", "Human6", "Human9", "Ironman", "Jump", "Jumping", "Liquor", "Matrix", "MotorRolling", "Panda", "RedTeam", "Shaking", "Singer2", "Skating1", "Skating2-1", "Skating2-2", "Skiing", "Soccer", "Surfer", "Sylvester", "Tiger2", "Trellis", "Walking", "Walking2", "Woman"],
"overlap": 58.7795880263541,
"error": 7.794622900737891,
"overlapScores": [0.38392220858021286, 0.3883923043332954, 0.04390543001550806, 0.194683655138013, 0.15915973959142307, 0.0894964239129424, 0.22384329718365356, 0.011058817570470185, 0.34823984258950896, 0.6508906923934548, 0.7535802226025262, 0.8491585239311483, 0.6070066757641235, 0.15502168012198222, 0.07585873833995199, 0.67882906764084, 0.7484439296263788, 0.03283713375317789, 0.17190439303587005, 0.18311095262425905, 0.7365616854638956, 0.5309180662873945, 0.12747598289090473, 0.7111340918940541, 0.007423368132814519, 0.4085822187597404, 0.3808077356687787, 0.20574960140747073, 0.11846672425697576, 0.09741395465333871, 0.2264789895501827, 0.247066828890485, 0.12122690433373202, 0.10554569108891122, 0.5015786486577571, 0.6174378729799935, 0.46219086168452955, 0.04375909192824903, 0.49555436149055704, 0.08219681780947928, 0.28238781793584533, 0.09248756804048978, 0.11262941193015051, 0.40300662549663674, 0.5912677351263589, 0.14533729914861213, 0.8026553889859993, 0.7717167796943779, 0.3712854356456783, 0.1479269294507216],
"errorNum": [4.441379310344828, 5.563380281690141, 9.632352941176471, 8.203592814371257, 8.76923076923077, 9.24949290060852, 8.240887480190175, 9.857142857142858, 5.693367786391042, 0.029411764705882353, 0.0, 0.0, 3.0952380952380953, 7.598784194528876, 9.142857142857142, 1.0951008645533142, 0.4246284501061571, 9.71830985915493, 8.232558139534884, 8.495575221238937, 1.0305676855895196, 3.4806629834254146, 8.303886925795053, 0.9199999999999999, 9.935217903415783, 4.002998500749625, 5.416666666666666, 8.327868852459016, 8.734939759036145, 9.180327868852459, 8.338658146964855, 7.610568638713383, 9.8, 9.02439024390244, 5.8999999999999995, 2.226277372262774, 6.219178082191781, 9.6448087431694, 3.1, 9.365750528541225, 7.991543340380549, 8.88888888888889, 8.75, 4.867021276595745, 2.505576208178439, 8.575342465753424, 1.4235500878734622, 0.02427184466019417, 6.02, 8.056951423785595],
"successRateList": [],
"precisionList": []}
Como podemos ver é medido OTB2013, então PDCs é o nome de 50 seqüências; corresponde "sobreposição" success_score entramos em got10k, ie AUC, mas aqui estão * 100, a última faixa é de acordo com a classificação de; corresponde "erro" precision_score, aqui eu não entendo por que todos × 10, mas não afeta, porque a última vez que um mapa é inútil; "overlapScores" "ERRORNUM fútil", não mudam; o mais importante ele veio! ! ! Success_curve got10k pasta obtida com o valor no "successRateList", o valor na pasta precision_curve para "precisionList" in.
- O passo final:
Success rate plotting command: `python draw_graph.py`
Precision plotting commaind: `python draw_graph.py precision`
No draw_graph.py
def main():
evalTypes = ['OPE'] # 使用哪种评估方式
testname = 'tb50' # 是测OTB2013还是2015
graph = 'overlap' # 默认画的是successplot
if len(sys.argv) >= 2:
graph = sys.argv[1]
- O resultado final (a exibição padrão apenas o primeiro 10)
Ele é branco puro, apenas começou a monitorar o campo um pouco, pode haver algumas pessoas locais para resolver, de repente, eu ainda preciso ter uma longa choramingar. Alguns lugares não acolher correção figurões.