Faster RCNN源码解析之数据预处理:
参考资料:
Faster RCNN源码解析:
https://www.bilibili.com/video/BV1of4y1m7nj?p=3
Faster RCNN源码:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing
Faster RCNN网络中对图片进行预处理操作时,同时也要对边界框进行处理:
例如:比如原图水平翻转,边界框也要水平翻转
边界框水平翻转
左侧时原图片,右侧是水平翻转后的图片,水平翻转并不会改变Y值,只会改变X值。
经过水平翻转之后的右侧图片,计算左上角的Xmin值=(图片的宽度)-(Xmax);
右下角的Xmax值=(图片的宽度)-(Xmin)。
实现水平翻转的部分代码如下:
class RandomHorizontalFlip(object):
"""随机水平翻转图像以及bboxes"""
#prob=0.5为翻转的概率,因为是随机的,所以概率设置为0.5
def __init__(self, prob=0.5):
self.prob = prob
def __call__(self, image, target):
if random.random() < self.prob:
height, width = image.shape[-2:]
image = image.flip(-1) # 水平翻转图片
bbox = target["boxes"]
# bbox: xmin, ymin, xmax, ymax
bbox[:, [0, 2]] = width - bbox[:, [2, 0]] # 翻转对应bbox坐标信息
target["boxes"] = bbox
return image, target