Spaces:
Build error
Build error
File size: 2,813 Bytes
c8c12e9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
"""Utilities to help tests inferencers"""
# Copyright (C) 2020 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions
# and limitations under the License.
from typing import Dict, Iterable, List, Tuple
import numpy as np
from anomalib.models.components import AnomalyModule
class MockImageLoader:
"""Create mock images for inference on CPU based on the specifics of the original torch test dataset.
Uses yield so as to avoid storing everything in the memory.
Args:
image_size (List[int]): Size of input image
total_count (int): Total images in the test dataset
"""
def __init__(self, image_size: List[int], total_count: int):
self.total_count = total_count
self.image_size = image_size
self.image = np.ones((*self.image_size, 3)).astype(np.uint8)
def __len__(self):
"""Get total count of images."""
return self.total_count
def __call__(self) -> Iterable[np.ndarray]:
"""Yield batch of generated images.
Args:
idx (int): Unused
"""
for _ in range(self.total_count):
yield self.image
def get_meta_data(model: AnomalyModule, input_size: Tuple[int, int]) -> Dict:
"""Get meta data for inference.
Args:
model (AnomalyModule): Trained model from which the metadata is extracted.
input_size (Tuple[int, int]): Input size used to resize the pixel level mean and std.
Returns:
(Dict): Metadata as dictionary.
"""
meta_data = {
"image_threshold": model.image_threshold.value.cpu().numpy(),
"pixel_threshold": model.pixel_threshold.value.cpu().numpy(),
"stats": {},
}
image_mean = model.training_distribution.image_mean.cpu().numpy()
if image_mean.size > 0:
meta_data["stats"]["image_mean"] = image_mean
image_std = model.training_distribution.image_std.cpu().numpy()
if image_std.size > 0:
meta_data["stats"]["image_std"] = image_std
pixel_mean = model.training_distribution.pixel_mean.cpu().numpy()
if pixel_mean.size > 0:
meta_data["stats"]["pixel_mean"] = pixel_mean.reshape(input_size)
pixel_std = model.training_distribution.pixel_std.cpu().numpy()
if pixel_std.size > 0:
meta_data["stats"]["pixel_std"] = pixel_std.reshape(input_size)
return meta_data
|