目标检测的Tricks | 【Trick4】Multi-scale training与Multi-scale testing

简介: 目标检测的Tricks | 【Trick4】Multi-scale training与Multi-scale testing

1. Multi-scale training理论概要


多尺度训练对全卷积网络有效,一般设置几种不同尺度的图片,训练时每隔一定iterations随机选取一种尺度训练。这样训练出来的模型鲁棒性强,其可以接受任意大小的图片作为输入,使用尺度小的图片测试速度会快些,但准确度低,用尺度大的图片测试速度慢,但是准确度高。


训练时,预先定义几个固定的尺度,每个epoch随机选择一个尺度进行训练(实际中还是单个尺度的训练)。


2. Multi-scale training实现代码


YOLOv3-SPP代码:


def train_one_epoch(model, optimizer, data_loader, device, epoch,
                    print_freq, accumulate, img_size,
                    grid_min, grid_max, gs,
                    multi_scale=False, warmup=False, scaler=None):
    ...
    # Multi-Scale
    if multi_scale:
        # accumulate=16  batch_size=4
        # 每训练accumulate个batch(batch_size*accumulate张图片),就随机修改一次输入图片大小
        # 由于label已转为相对坐标,故缩放图片不影响label的值
        if ni % accumulate == 0:  # ni=batch总个数
            # 在给定最大最小输入尺寸范围内随机选取一个size(size为32的整数倍)
            img_size = random.randrange(grid_min, grid_max + 1) * gs  # img_size = 320~736
        sf = img_size / max(imgs.shape[2:])  # scale factor
        # 如果图片最大边长不等于img_size, 则缩放一个batch图片,并将长和宽调整到32的整数倍
        if sf != 1:
            # gs: (pixels) grid size
            ns = [math.ceil(x * sf / gs) * gs for x in imgs.shape[2:]]  # new shape (stretched to 32-multiple)
            # 核心代码: 对图像进行双线性插值来缩放
            imgs = F.interpolate(imgs, size=ns, mode='bilinear', align_corners=False)
    ...
    pred = model(imgs)
def train(hyp):
    ...
    # 图像要设置成32的倍数
    gs = 32  # (pixels) grid size
    assert math.fmod(imgsz_test, gs) == 0, "--img-size %g must be a %g-multiple" % (imgsz_test, gs)
    grid_min, grid_max = imgsz_test // gs, imgsz_test // gs
    if multi_scale:
        imgsz_min = opt.img_size // 1.5
        imgsz_max = opt.img_size // 0.667
        # 将给定的最大,最小输入尺寸向下调整到32的整数倍
        grid_min, grid_max = imgsz_min // gs, imgsz_max // gs
        imgsz_min, imgsz_max = int(grid_min * gs), int(grid_max * gs)
        imgsz_train = imgsz_max  # initialize with max size
        print("Using multi_scale training, image range[{}, {}]".format(imgsz_min, imgsz_max))
    ...
    # 多尺度训练
    for epoch in range(start_epoch, epochs):
        mloss, lr = train_util.train_one_epoch(model, optimizer, train_dataloader,
                                               device, epoch,
                                               accumulate=accumulate,  # 迭代多少batch才训练完64张图片
                                               img_size=imgsz_train,  # 输入图像的大小
                                               multi_scale=multi_scale,
                                               grid_min=grid_min,  # grid的最小尺寸
                                               grid_max=grid_max,  # grid的最大尺寸
                                               gs=gs,  # grid step: 32
                                               print_freq=50,  # 每训练多少个step打印一次信息
                                               warmup=True,
                                               scaler=scaler)
    ...


简要分析:

从代码上来看,其实Multi-scale Training的理念很简单,就是每次epoch的随机在一个范围内选择一个图像尺度进行训练。


3. Multi-scale testing理论概要


测试时,生成几个不同尺度的feature map,对每个Region Proposal,在不同的feature map上也有不同的尺度,我们选择最接近某一固定尺寸(即检测头部的输入尺寸)的Region Proposal作为后续的输入。


常见的FPN结构,就是使用了多尺度特征层来预测,这里不再介绍。用兴趣的可以看一下之前的关于FPN的笔记:FPN(特征金字塔)结构笔记


参考资料:

https://blog.csdn.net/qq_40992227/article/details/115980500


目录
相关文章
|
4月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
MTCNN(Multi-task Cascaded Convolutional Networks)
MTCNN(Multi-task Cascaded Convolutional Networks)
47 0
|
5月前
|
算法 BI 计算机视觉
[Initial Image Segmentation Generator]论文实现:Efficient Graph-Based Image Segmentation
[Initial Image Segmentation Generator]论文实现:Efficient Graph-Based Image Segmentation
54 1
|
数据挖掘
【提示学习】Automatic Multi-Label Prompting: Simple and Interpretable Few-Shot Classification
文章提出了一种简单确高效地构建verbalization的方法:
|
算法 PyTorch 算法框架/工具
论文解读:LaMa:Resolution-robust Large Mask Inpainting with Fourier Convolutions
论文解读:LaMa:Resolution-robust Large Mask Inpainting with Fourier Convolutions
637 0
|
数据挖掘
MUSIED: A Benchmark for Event Detection from Multi-Source Heterogeneous Informal Texts 论文解读
事件检测(ED)从非结构化文本中识别和分类事件触发词,作为信息抽取的基本任务。尽管在过去几年中取得了显著进展
62 0
|
算法
Multi-scale multi-intensity defect detection in ray image of weld bead
用于检查内部缺陷的射线探伤是一种重要的焊接无损检测技术。不同检测场景、不同类型缺陷的焊道射线照片差异很大,限制了自动检测算法的通用性。
91 0
|
机器学习/深度学习 算法 图形学
Deep learning based multi-scale channel compression feature surface defect detection system
简述:首先应用背景分割和模板匹配技术来定义覆盖目标工件的ROI区域。提取的感兴趣区域被均匀地裁剪成若干个图像块,每个块被送到基于CNN的模型,以分类杂乱背景中不同大小的表面缺陷。最后,对空间上相邻且具有相同类别标签的图像块进行合并,以生成各种表面缺陷的识别图。
148 0
|
机器学习/深度学习 算法 数据挖掘
【多标签文本分类】Improved Neural Network-based Multi-label Classification with Better Initialization ……
【多标签文本分类】Improved Neural Network-based Multi-label Classification with Better Initialization ……
124 0
【多标签文本分类】Improved Neural Network-based Multi-label Classification with Better Initialization ……
|
机器学习/深度学习 算法 数据挖掘
【多标签文本分类】Large Scale Multi-label Text Classification with Semantic Word Vectors
【多标签文本分类】Large Scale Multi-label Text Classification with Semantic Word Vectors
150 0
【多标签文本分类】Large Scale Multi-label Text Classification with Semantic Word Vectors
|
机器学习/深度学习 编解码 固态存储
Single Shot MultiBox Detector论文翻译【修改】
Single Shot MultiBox Detector论文翻译【修改】
99 0
Single Shot MultiBox Detector论文翻译【修改】