使用单个 class 为小型数据集构建对象检测器
Building an object detector for a small dataset with a single class
我有一个 class(矩形对象)的数据集,大小为 130 张图像。我的目标是检测物体并在物体的中心画一个 circle/dot/mark。
因为物体是矩形的,所以我的想法是获取预测边界框的尺寸并将circle/dot/mark取为(width/2,height/2)。
但是,如果我要进行迁移学习,YOLO 是否是检测小型数据集中单个 class 对象的好选择?
YOLO 应该没问题。不过现在已经老了。试试 YoloV4 以获得更好的结果。
人们已经尝试从 FasterRCNN 迁移学习来检测具有 300 张图像的单个对象,并且效果很好。 (Link)。但是 130 张图像有点小。如果结果不佳,请尝试增强图像 - 翻转、旋转等。
在进行平移、旋转、翻转增强时,也对注释使用相同的增强。例如在pytorch中,为了分割,我使用:
if random.random()<0.5: # Horizontal Flip
image = T.functional.hflip(image)
mask = T.functional.hflip(mask)
if random.random()<0.25: # Rotation
rotation_angle = random.randrange(-10,11)
image = T.functional.rotate(image,angle = rotation_angle)
mask = T.functional.rotate(mask ,angle = rotation_angle)
对于边界框,您必须创建坐标,对于水平翻转,x
变为 width-x
。
对象位置不变的增强:不更改注释,例如:伽马强度变换
我有一个 class(矩形对象)的数据集,大小为 130 张图像。我的目标是检测物体并在物体的中心画一个 circle/dot/mark。
因为物体是矩形的,所以我的想法是获取预测边界框的尺寸并将circle/dot/mark取为(width/2,height/2)。
但是,如果我要进行迁移学习,YOLO 是否是检测小型数据集中单个 class 对象的好选择?
YOLO 应该没问题。不过现在已经老了。试试 YoloV4 以获得更好的结果。 人们已经尝试从 FasterRCNN 迁移学习来检测具有 300 张图像的单个对象,并且效果很好。 (Link)。但是 130 张图像有点小。如果结果不佳,请尝试增强图像 - 翻转、旋转等。
在进行平移、旋转、翻转增强时,也对注释使用相同的增强。例如在pytorch中,为了分割,我使用:
if random.random()<0.5: # Horizontal Flip
image = T.functional.hflip(image)
mask = T.functional.hflip(mask)
if random.random()<0.25: # Rotation
rotation_angle = random.randrange(-10,11)
image = T.functional.rotate(image,angle = rotation_angle)
mask = T.functional.rotate(mask ,angle = rotation_angle)
对于边界框,您必须创建坐标,对于水平翻转,x
变为 width-x
。
对象位置不变的增强:不更改注释,例如:伽马强度变换