cv2.boxFilter(data_u, -1, (15, 15), normalize=True)
时间: 2023-07-15 07:14:38 浏览: 129
这段代码使用了OpenCV库中的boxFilter函数对data_u进行均值滤波,具体功能是对data_u中每个像素周围15x15的像素进行均值计算,并将结果存储在当前像素位置。参数-1表示输出数据类型与输入数据类型相同,(15,15)表示卷积核的大小为15x15。normalize=True表示对卷积核进行归一化,即除以卷积核元素之和,使得卷积核中所有元素之和为1,从而达到不改变图像亮度的效果。
相关问题
def init_datasets(self): """ Init self.dataset_train, self.dataset_train_iter, self.dataset_val. """ dataset_parameters = dict(base_folder=self.local_base_folder, image_size=self.image_size, image_spacing=self.image_spacing, normalize_zero_mean_unit_variance=False, cv=self.cv, heatmap_sigma=3.0, generate_spine_heatmap=True, use_variable_image_size=True, valid_output_sizes_x=[32, 64, 96, 128], valid_output_sizes_y=[32, 64, 96, 128], valid_output_sizes_z=[32, 64, 96, 128], output_image_type=np.float16 if self.use_mixed_precision else np.float32, data_format=self.data_format, save_debug_images=self.save_debug_images)
这个方法名为`init_datasets`,用于初始化`self.dataset_train`、`self.dataset_train_iter`和`self.dataset_val`。
在方法内部,通过一个参数字典`dataset_parameters`来设置数据集的相关参数。这些参数包括:
- `base_folder`:基础文件夹路径,指定了数据集的存储位置。
- `image_size`:图像尺寸,表示图像的高度、宽度和深度。
- `image_spacing`:图像间距,指定了图像在三个轴向上的间距。
- `normalize_zero_mean_unit_variance`:是否对图像进行零均值单位方差归一化。
- `cv`:交叉验证的索引。
- `heatmap_sigma`:热图的标准差。
- `generate_spine_heatmap`:是否生成脊柱热图。
- `use_variable_image_size`:是否使用可变大小的图像。
- `valid_output_sizes_x`、`valid_output_sizes_y`、`valid_output_sizes_z`:有效的输出大小,用于指定模型输出的大小范围。
- `output_image_type`:输出图像的数据类型,根据`self.use_mixed_precision`来选择是`np.float16`还是`np.float32`。
- `data_format`:数据格式,指定了图像和张量的轴向顺序。
- `save_debug_images`:是否保存调试图像。
通过设置这些参数,可以初始化与训练过程相关的数据集对象,用于加载和处理训练和验证数据。具体的数据集对象和数据处理逻辑可能需要根据具体的代码实现来确定。
import torch, os, cv2 from model.model import parsingNet from utils.common import merge_config from utils.dist_utils import dist_print import torch import scipy.special, tqdm import numpy as np import torchvision.transforms as transforms from data.dataset import LaneTestDataset from data.constant import culane_row_anchor, tusimple_row_anchor if __name__ == "__main__": torch.backends.cudnn.benchmark = True args, cfg = merge_config() dist_print('start testing...') assert cfg.backbone in ['18','34','50','101','152','50next','101next','50wide','101wide'] if cfg.dataset == 'CULane': cls_num_per_lane = 18 elif cfg.dataset == 'Tusimple': cls_num_per_lane = 56 else: raise NotImplementedError net = parsingNet(pretrained = False, backbone=cfg.backbone,cls_dim = (cfg.griding_num+1,cls_num_per_lane,4), use_aux=False).cuda() # we dont need auxiliary segmentation in testing state_dict = torch.load(cfg.test_model, map_location='cpu')['model'] compatible_state_dict = {} for k, v in state_dict.items(): if 'module.' in k: compatible_state_dict[k[7:]] = v else: compatible_state_dict[k] = v net.load_state_dict(compatible_state_dict, strict=False) net.eval() img_transforms = transforms.Compose([ transforms.Resize((288, 800)), transforms.ToTensor(), transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), ]) if cfg.dataset == 'CULane': splits = ['test0_normal.txt', 'test1_crowd.txt', 'test2_hlight.txt', 'test3_shadow.txt', 'test4_noline.txt', 'test5_arrow.txt', 'test6_curve.txt', 'test7_cross.txt', 'test8_night.txt'] datasets = [LaneTestDataset(cfg.data_root,os.path.join(cfg.data_root, 'list/test_split/'+split),img_transform = img_transforms) for split in splits] img_w, img_h = 1640, 590 row_anchor = culane_row_anchor elif cfg.dataset == 'Tusimple': splits = ['test.txt'] datasets = [LaneTestDataset(cfg.data_root,os.path.join(cfg.data_root, split),img_transform = img_transforms) for split in splits] img_w, img_h = 1280, 720 row_anchor = tusimple_row_anchor else: raise NotImplementedError for split, dataset in zip(splits, datasets): loader = torch.utils.data.DataLoader(dataset, batch_size=1, shuffle = False, num_workers=1) fourcc = cv2.VideoWriter_fourcc(*'MJPG') print(split[:-3]+'avi') vout = cv2.VideoWriter(split[:-3]+'avi', fourcc , 30.0, (img_w, img_h)) for i, data in enumerate(tqdm.tqdm(loader)): imgs, names = data imgs = imgs.cuda() with torch.no_grad(): out = net(imgs) col_sample = np.linspace(0, 800 - 1, cfg.griding_num) col_sample_w = col_sample[1] - col_sample[0] out_j = out[0].data.cpu().numpy() out_j = out_j[:, ::-1, :] prob = scipy.special.softmax(out_j[:-1, :, :], axis=0) idx = np.arange(cfg.griding_num) + 1 idx = idx.reshape(-1, 1, 1) loc = np.sum(prob * idx, axis=0) out_j = np.argmax(out_j, axis=0) loc[out_j == cfg.griding_num] = 0 out_j = loc # import pdb; pdb.set_trace() vis = cv2.imread(os.path.join(cfg.data_root,names[0])) for i in range(out_j.shape[1]): if np.sum(out_j[:, i] != 0) > 2: for k in range(out_j.shape[0]): if out_j[k, i] > 0: ppp = (int(out_j[k, i] * col_sample_w * img_w / 800) - 1, int(img_h * (row_anchor[cls_num_per_lane-1-k]/288)) - 1 ) cv2.circle(vis,ppp,5,(0,255,0),-1) vout.write(vis) vout.release()
这是一个使用PyTorch框架测试模型的代码,代码中导入了许多必要的库以及自定义的模型和数据集等。通过调用PyTorch的后端,启用一些加速技术,然后解析配置参数,并根据数据集类型设置类别数。创建一个模型实例,传入必要的参数并将其转移到GPU上以加速处理。最后进行模型测试。
阅读全文