先看结构

1.mean_rgb是voc2007专用的均值
voc2007分别是这样的
坐标格式(X0,Y0,X1,Y1)其中X0,Y0是左上角的坐标,X1,Y1是右下角的坐标。
coco,voc ,yolo数据集中的bbox的坐标格式_coco bbox格式_十二耳环的博客-优快云博客
读取文本分割内容放进self.paths, self.boxes, self.labels = [], [], [] 读的都是原始内容
self.paths [p1,p2,p3,..]
self.boxes[[x11,y11,x12,xy12],[x21,y21,x22,xy22],[x31,y31,x32,xy32],.......]
self.labels [l1,l2,l3,..]
2.boxes /= torch.Tensor([[w, h, w, h]]).expand_as(boxes) # normalize (x1, y1, x2, y2) w.r.t. image width/height. 相对图片大小归一化
扩展成多少个框,然后相对应最后归一化 torch.Tensor([[w, h, w, h]]).expand_as(boxes)
encode那句下面说 所以传进去的boxes是已经相对图片大小归一化的左上坐标和右下坐标
def __getitem__(self, idx):
path = self.paths[idx]#'C:\\Pro\\pythonProject\\yolov1_pytorch-main_chunsun\\Datasets/VOCdevkit/VOC2007/JPEGImages/003659.jpg'
img = cv2.imread(path)#375*500*3 就是文件大小
boxes = self.boxes[idx].clone() # [n, 4]
labels = self.labels[idx].clone() # [n,]
if self.is_train:
#img, boxes = self.random_flip(img, boxes)
#img, boxes = self.random_scale(img, boxes)
img = self.random_blur(img)
img = self.random_brightness(img)
img = self.random_hue(img)
img = self.random_saturation(img)
img, boxes, labels = self.random_shift(img, boxes, labels)
img, boxes, labels = self.random_crop(img, boxes, labels)
# For debug.
debug_dir = 'tmp/voc_tta'
os.makedirs(debug_dir, exist_ok=True)
img_show = img.copy()
box_show = boxes.numpy().reshape(-1)
n = len(box_show) // 4
for b in range(n):#第几个框 一个框时候 b只有0 这种情况下
pt1 = (int(box_show[4*b + 0]), int(box_show[4*b + 1]))#pt是坐标点
pt2 = (int(box_show[4*b + 2]), int(box_show[4*b + 3]))
cv2.rectangle(img_show, pt1=pt1, pt2=pt2, color=(0,255,0), thickness=1)
cv2.imwrite(os.path.join(debug_dir, 'test_{}.jpg'.format(idx)), img_show)
h, w, _ = img.shape
boxes /= torch.Tensor([[w, h, w, h]]).expand_as(boxes) # normalize (x1, y1, x2, y2) w.r.t. image width/height. 相对图片大小归一化
target = self.encode(boxes, labels) # [S, S, 5 x B + C]
img = cv2.resize(img, dsize=(self.image_size, self.image_size), interpolation=cv2.INTER_LINEAR)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # assuming the model is pretrained with RGB images.
img = (img - self.mean) / 255.0 # normalize from -1.0 to 1.0.
img = self.to_tensor(img)
return img, target
3.target = self.encode(boxes, labels) # [S, S, 5 x B + C]
boxes_wh 相对图片归一化的w,h
boxes_xy 真实框中心点的xy 而不是cell中心点的xy 相对图片归一化
循环中: ceil是向上取整,再-1其实就是向下取整
xy从boxes_xy取对应真实框, 也是相对图片归一化
ij = (xy / cell_size).ceil() - 1.0,获得在哪个cell的行和列的s i,j 从上从左数分别第几个cell
x0y0 cell基准左上坐标 这里是相对图片归一化大小
xy_normalized 此处(xy - x0y0)得到溢出这个cell的值,再/cell_size也就是 相对图片归一化
<

该代码段主要描述了针对VOC2007数据集进行目标检测模型训练时的数据预处理过程,包括读取边界框信息,对坐标进行归一化处理,随机翻转、缩放、模糊、亮度、色相和饱和度调整,以及随机位移和裁剪等操作,以增强训练样本的多样性。最后,将处理后的图像和目标框编码为模型输入格式。
最低0.47元/天 解锁文章
9万+

被折叠的 条评论
为什么被折叠?



