vissl.utils package¶
vissl.utils.instance_retrieval_utils.data_util module¶
vissl.utils.instance_retrieval_utils.evaluate module¶
-
vissl.utils.instance_retrieval_utils.evaluate.
score_ap_from_ranks_1
(ranks, nres)[source]¶ Compute the average precision of one search.
- Parameters
ranks – ordered list of ranks of true positives
nres – total number of positives in dataset
- Returns
ap (float) – the average precision following the Holidays and the INSTRE package
-
vissl.utils.instance_retrieval_utils.evaluate.
compute_ap
(ranks, nres)[source]¶ Computes average precision for given ranked indexes.
- Parameters
ranks – zero-based ranks of positive images
nres – number of positive images
- Returns
ap (float) – average precision
-
vissl.utils.instance_retrieval_utils.evaluate.
compute_map
(ranks, gnd, kappas)[source]¶ Computes the mAP for a given set of returned results.
- Credits:
https://github.com/filipradenovic/revisitop/blob/master/python/evaluate.py
- Usage:
- map = compute_map (ranks, gnd)
computes mean average precsion (map) only
- map, aps, pr, prs = compute_map (ranks, gnd, kappas)
- -> computes mean average precision (map), average precision (aps) for
each query
- -> computes mean precision at kappas (pr), precision at kappas (prs) for
each query
Notes: 1) ranks starts from 0, ranks.shape = db_size X #queries 2) The junk results (e.g., the query itself) should be declared in the gnd
stuct array
If there are no positive images for some query, that query is excluded from the evaluation
vissl.utils.instance_retrieval_utils.pca module¶
vissl.utils.instance_retrieval_utils.rmac module¶
-
vissl.utils.instance_retrieval_utils.rmac.
normalize_L2
(a, dim)[source]¶ L2 normalize the input tensor along the specified dimension
- Parameters
a (torch.Tensor) – the tensor to normalize
dim (int) – along which dimension to L2 normalize
- Returns
a (torch.Tensor) – L2 normalized tensor
-
vissl.utils.instance_retrieval_utils.rmac.
get_rmac_region_coordinates
(H, W, L)[source]¶ Almost verbatim from Tolias et al Matlab implementation. Could be heavily pythonized, but really not worth it… Desired overlap of neighboring regions
-
vissl.utils.instance_retrieval_utils.rmac.
get_rmac_descriptors
(features, rmac_levels, pca=None, normalize=True)[source]¶ RMAC descriptors. Coordinates are retrieved following Tolias et al. L2 normalize the descriptors and optionally apply PCA on the descriptors if specified by the user. After PCA, aggregate the descriptors (sum) and normalize the aggregated descriptor and return.
vissl.utils.svm_utils.evaluate module¶
-
vissl.utils.svm_utils.evaluate.
calculate_ap
(rec, prec)[source]¶ Computes the AP under the precision recall curve.
-
vissl.utils.svm_utils.evaluate.
get_precision_recall
(targets, scores, weights=None)[source]¶ [P, R, score, ap] = get_precision_recall(targets, scores, weights)
- Parameters
targets – number of occurrences of this class in the ith image
scores – score for this image
weights – 0 or 1 whether where 0 means we should ignore the sample
- Returns
P, R – precision and recall score: score which corresponds to the particular precision and recall ap: average precision
vissl.utils.svm_utils.svm_trainer module¶
vissl.utils.svm_utils.svm_low_shot_trainer module¶
vissl.utils.activation_checkpointing module¶
This module centralizes all activation checkpointing related code. It is a work-in-progress as we evolve the APIs and eventually put this in fairscale so that multiple projects can potentially share it.
-
vissl.utils.activation_checkpointing.
manual_gradient_reduction
(model: torch.nn.modules.module.Module, config_flag: bool) → bool[source]¶ Return if we should use manual gradient reduction or not.
We should use manual DDP if config says so and model is wrapped by DDP.
-
vissl.utils.activation_checkpointing.
manual_sync_params
(model: torch.nn.parallel.distributed.DistributedDataParallel) → None[source]¶ Manually sync params and buffers for DDP.
-
vissl.utils.activation_checkpointing.
manual_gradient_all_reduce
(model: torch.nn.parallel.distributed.DistributedDataParallel) → None[source]¶ Gradient reduction function used after backward is done.
vissl.utils.checkpoint module¶
vissl.utils.collect_env module¶
vissl.utils.env module¶
-
vissl.utils.env.
set_env_vars
(local_rank: int, node_id: int, cfg: vissl.config.attr_dict.AttrDict)[source]¶ Set some environment variables like total number of gpus used in training, distributed rank and local rank of the current gpu, whether to print the nccl debugging info and tuning nccl settings.
-
vissl.utils.env.
setup_path_manager
()[source]¶ Registering the right options for the g_pathmgr: Override this function in your build system to support different distributed file system
vissl.utils.hydra_config module¶
vissl.utils.io module¶
vissl.utils.logger module¶
vissl.utils.misc module¶
vissl.utils.perf_stats module¶
-
class
vissl.utils.perf_stats.
PerfTimer
(timer_name: str, perf_stats: Optional[PerfStats])[source]¶ Bases:
object
Very simple timing wrapper, with context manager wrapping. Typical usage:
- with PerfTimer(‘forward_pass’, perf_stats):
model.forward(data)
# … with PerfTimer(‘backward_pass’, perf_stats):
model.backward(loss)
# … print(perf_stats.report_str())
Note that timer stats accumulate by name, so you can as if resume them by re-using the name.
You can also use it without context manager, i.e. via start() / stop() directly.
If supplied PerfStats is constructed with use_cuda_events=True (which is default), then Cuda events will be added to correctly track time of async execution of Cuda kernels:
- with PerfTimer(‘foobar’, perf_stats):
some_cpu_work() schedule_some_cuda_work()
In example above, the “Host” column will capture elapsed time from the perspective of the Python process, and “CudaEvent” column will capture elapsed time between scheduling of Cuda work (within the PerfTimer scope) and completion of this work, some of which might happen outside the PerfTimer scope.
If perf_stats is None, using PerfTimer does nothing.
-
start
()[source]¶ Start the recording if the perfTimer should not be skipped or if the recording is not already in progress. If using cuda, we record time of cuda events as well.
-
class
vissl.utils.perf_stats.
PerfMetric
[source]¶ Bases:
object
Encapsulates numerical tracking of a single metric, with a .update(value) API. Under-the-hood this can additionally keep track of sums, (exp.) moving averages, sum of squares (e.g. for stdev), filtered values, etc.
-
EMA_FACTOR
= 0.1¶
-
-
class
vissl.utils.perf_stats.
PerfStats
(use_cuda_events=True)[source]¶ Bases:
object
Accumulate stats (from timers) over many iterations
-
MAX_PENDING_TIMERS
= 1000¶
-
update_with_timer
(timer: vissl.utils.perf_stats.PerfTimer)[source]¶
-
vissl.utils.slurm module¶
-
vissl.utils.slurm.
get_node_id
(node_id: int)[source]¶ If using SLURM, we get environment variables like SLURMD_NODENAME, SLURM_NODEID to get information about the current node. Useful to set the node_id automatically.