mmlab
第二章多波段遥感影像读取设置
前言
`
截止今日(2023年7月)mmdetection中包含有支持tif多波段遥感影像读取接口,逼者在初次mmlab处理多波段遥感影像目标检测时对mmlab系列的架构不太了解走了很多弯路,特此记录。
一、mmlab架构的层次
mmlab是基于pytorch、cv2、pillow、coco等现有的python包进行整合的,便于使用者对已有的经典模型进行复现,由于该架构采用注册、继承的方式对相关python包和函数进行调用,因此不利于初学者进行代码的调试。这里应该还是仔细阅读官方给出的事例代码以及帮助文档进行学习。
以mmdetection为例,mmdetection是在mmcv和mmengine的基础上进行开发的,所以相关的数据读取、数据集加载以及深度学习模型构建函数主要是依赖于mmcv和mmengine
二、更改数据读取设置
1.数据读取
数据加载:
train_pipeline = [
dict(type='LoadImageFromFile',imdecode_backend = "tifffile"),
dict(type='mmdet.LoadAnnotations', with_bbox=True, with_mask=True),
dict(type='mmdet.Resize', scale=image_size),
]
*相关加载模块是在sitepackage\mmcv\transforms\loading 下设置的是数据加载模块
*该模块调用了mmcv\image\io下的imfrombytes()函数
我们只需要将imfrombytes(img_bytes, flag=self.color_type, backend="tifffile"),参数进行修改即可,或修改loading类:
def __init__(self,
to_float32: bool = False,
color_type: str = 'color',
imdecode_backend: str = 'tifffile',
file_client_args: Optional[dict] = None,
ignore_empty: bool = False,
*,
backend_args: Optional[dict] = None) -> None:
当指定tiffile读取图像时,函数式不接收“color_type”参数的
2.数据类型
遥感影像多为uint16类型,直接进行处理会在mmcv\transforms\formatting出报错,我们不能直接使用数据类型转换的函数,这会导致数值的损失,需要先对数据进行缩放,再进行数值变换.
此外在进行数据处理时往往要采用coco格式数据进行训练,在使用自己的数据时一定一定要注意anno中的area一定要计算,否则默认的coco接口会根据目标轮廓的area、以及box的W、H判定是否需要忽略这些目标。
链接: 二进制图像标注转JSON
2.注意事项
多波段影像进行图像归一化时uint16和uint8计算出来的方差和均值差距很大,要注意处理数据的类型,避免因为数据源的问题导致梯度消失或梯度爆炸
总结
在探索一些新内容时,总会被某些小问题卡住,这可能是探索的必经之路吧,不过也不要不敢去问,毕竟周围就有一些乐于探索的朋友,在交流之中就会有些新的启发,有机会还是要向周围的前辈多多请教。