马赛克数据增强与 Tensor、TensorFlow 区别学习总结
一、马赛克数据增强(Mosaic Augmentation)实现逻辑
马赛克数据增强是目标检测领域常用的增强手段,核心是将 4 张输入小图拼接成 1 张大图,并同步调整目标标签坐标,具体流程如下:
1. 大图初始化与小图放置
先创建尺寸为 2s×2s(通道数与小图相同)的基础大图 img4,背景色设为 114;再依据索引 i(0-3),将 4 张小图分别对应放置在大图的左上、右上、左下、右下四个区域。放置时需计算两方面坐标:一是小图在大图中的摆放范围(x1a, y1a, x2a, y2a),确保不超出大图边界;二是从原始小图中截取的图像区域(x1b, y1b, x2b, y2b),用于填充到大图对应位置。
2. 标签坐标处理
把小图中目标的归一化坐标(xywh 格式)转换为大图中的像素坐标(xyxy 格式),转换过程中需纳入拼接时产生的偏移量(padw、padh);拼接完成后合并所有标签,裁剪超出大图边界的坐标,随后对大图执行随机旋转、平移、缩放等透视变换,进一步提升数据多样性。
二、图像格式转换流程
为适配 PyTorch 模型输入要求,需对处理后的图像进行格式转换,具体操作步骤如下:
1. 通道与维度调整
先将图像从 OpenCV 默认的 BGR 格式,通过 [:, :, ::-1] 通道逆序转换为 RGB 格式;再将图像维度从(高度、宽度、通道)的 (H, W, C) 格式,通过 transpose (2, 0, 1) 调整为 PyTorch 默认的(通道、高度、宽度)(C, H, W) 通道优先格式。
2. 数据类型转换
把 NumPy 数组转换为 PyTorch 的 Tensor 格式(通过 torch.from_numpy (img) 实现),同时借助 np.ascontiguousarray 确保内存连续,满足模型对输入数据的格式要求。
三、Tensor 与 TensorFlow 的核心区别
1. Tensor(张量)的本质
Tensor 即张量,是一个通用概念,本质是多维数组,是深度学习中存储和操作数据的基本形式。无论是 PyTorch 中的 torch.Tensor,还是 TensorFlow 中的 tf.Tensor,都是张量的具体实现,核心作用是承载数据并支持相关计算操作。
2. 框架层面的差异
在框架特性上,PyTorch 的 torch.Tensor 更侧重动态计算图,支持即时执行(Eager Execution),代码编写与调试更灵活,适合科研场景和快速算法迭代;而 TensorFlow 的 tf.Tensor,传统 1.x 版本基于静态计算图,2.x 版本虽支持动态图,但整体生态更偏向工业级部署,在分布式训练支持上更具优势。
需注意的是,前文图像格式转换最终生成 torch.Tensor,说明该数据处理流程是面向 PyTorch 框架设计,而非 TensorFlow 框架。
