mmclassification 0.25.0 中读取图片用PIL 还是opencv 具体的代码位置在哪
时间: 2024-03-02 09:50:17 浏览: 97
在 mmclassification 0.25.0 版本中,图片的读取方式同样可以通过配置文件进行选择,但是代码位置与 0.4.0 版本有所不同。
具体的代码位置在 `mmcls/datasets/pipelines/loading.py` 中的 `LoadImageFromFile` 类中,与 0.4.0 版本相同。
默认情况下,`LoadImageFromFile` 类使用的是 PIL 库来读取图片。如果需要使用 OpenCV 读取图片,可以在配置文件中将 `to_rgb` 设置为 False,并将 `backend` 设置为 `opencv`.
例如,以下配置文件中使用的就是 OpenCV 来读取图片:
```python
data:
train:
pipeline:
- type: LoadImageFromFile
to_rgb: False
color_type: 'color'
backend: 'opencv'
- type: External
args:
backend: opencv
```
需要注意的是,使用 OpenCV 读取图片时,需要将图片的通道顺序设置为 BGR。
相关问题
在mmclassification0.25.0这个版本中,获取图片id的代码在什么位置
在 mmclassification0.25.0 版本中,获取图片 ID 的代码在 `mmcls/datasets/pipelines/formatting.py` 文件中的 `DefaultFormatBundle` 类的 `__call__` 函数中。
具体来说,`__call__` 函数会将数据按照指定的格式进行打包,其中包括数据 ID。部分代码如下:
```python
class DefaultFormatBundle(object):
"""Default formatting bundle.
It simplifies the pipeline of formatting common fields, including "img",
"proposals", "gt_bboxes", "gt_labels", "gt_masks", "gt_semantic_seg",
"gt_semantic_seg" and "group_flags". If you want to use your own format,
please refer to this implementation to write your own format bundle.
Args:
to_tensor (dict): Keys are the names of fields to be converted to
tensor. Values are dicts indicating the parameters of the
`to_tensor` function. Keys of the inner dicts are the arguments
of the `to_tensor` function.
"""
def __init__(self, to_tensor=None):
self.to_tensor = to_tensor if to_tensor is not None else {}
def __call__(self, results):
"""Call function to format results.
Args:
results (dict): The resulting dict to be modified and passed
to the next transform in pipeline.
Returns:
dict: The modified result dict, which includes the following keys.
- img (Tensor): Tensor of images.
- proprosals (Tensor): Proposals.
- gt_bboxes (Tensor): Ground truth boxes.
- gt_labels (Tensor): Ground truth labels.
- gt_masks (Tensor): Ground truth masks.
- gt_semantic_seg (Tensor): Ground truth semantic segmentation
maps.
- gt_semantic_seg (Tensor): Ground truth semantic segmentation
maps.
- group_flags (Tensor): Group flags.
"""
# format fields as tensor
for key in self.to_tensor:
if key not in results:
continue
results[key] = to_tensor(results[key], **self.to_tensor[key])
results = collect(results, keys=['img', 'proposals', 'gt_bboxes',
'gt_labels', 'gt_masks',
'gt_semantic_seg', 'group_flags'])
# get image file name as "id" field
if 'filename' in results['img_metas'][0]:
results['id'] = results['img_metas'][0]['filename']
elif 'ori_filename' in results['img_metas'][0]:
results['id'] = results['img_metas'][0]['ori_filename']
else:
raise ValueError('Image must have "filename" or "ori_filename" '
f'in meta info, but found {results["img_metas"][0]}.')
return results
```
其中,通过 `if 'filename' in results['img_metas'][0]:` 和 `elif 'ori_filename' in results['img_metas'][0]:` 判断图片 ID 的来源,分别将图片文件名或原始文件名作为 ID。最终通过 `results['id'] = ...` 将图片 ID 存入结果字典中返回。
用mmclassification 0.25.0版本做过拟合实验,在哪里修改代码固定训练图片的id
在mmclassification 0.25.0版本中,可以通过修改数据集的定义文件来固定训练图片的id。具体来说,可以在数据集类的get_data_info方法中添加代码,通过修改数据集的索引方式来实现。
例如,在ImageNet数据集的定义文件imagenet.py中,可以添加如下代码来实现每次训练时固定训练图片的id:
```
class ImageNetDataset(BaseDataset):
...
def get_data_info(self, index):
if self.fixed_id is not None:
index = self.fixed_id
...
```
其中,fixed_id表示固定的图片id,可以在训练时传入。
在训练脚本中,可以通过传入--fixed_id参数来指定固定的图片id,例如:
```
python tools/train.py ${CONFIG_FILE} --fixed_id 0
```
这样,每次训练时都会使用第一张图片作为训练图片。需要注意的是,这种方法只是为了方便进行拟合实验,不应该在实际应用中使用。
阅读全文