深度学习抽烟行为检测研究与实现

文章目录
  • 0 前言+ 1 课题背景+ 2 实现效果+ 3 Yolov5算法+

  • 3.1 简介+ 3.2 相关技术

  • 4 数据集处理及实验+ 5 部分核心代码+ 6 最后

0 前言

这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。

1 课题背景

公共场合抽烟的危害很大,国家也相应地出台了在公共场合禁烟的政策。以前实行相关的政策都是靠工作人员巡逻发现并出言禁止,这样做效率很低下。计算机视觉领域发展迅速,而抽烟检测也属于一种计算机视觉目标检测的行为,可以采用目标检测的方法来实现。目前,目标检测在很多领域都取得显著成就,但是在抽烟检测领域方面进行研究却几乎没有。该研究可以有效节省成本,对公共场合禁烟政策的实行有很大的推动作用。

2 实现效果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左图为原图,右图为推理后的图片,以图片方式展示,视频流和实时流也能达到这个效果,由于视频转GIF大小原因,这里暂不演示。

3 Yolov5算法

3.1 简介

YOLO系列是基于深度学习的回归方法。该系列陆续诞生出YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5。YOLOv5算法,它是一种单阶段目标检测的算法,该算法可以根据落地要求灵活地通过chaneel和layer的控制因子来配置和调节模型,所以在比赛和落地中应用比较多。同时它有YOLOv5x、YOLOv5l、YOLOv5m、YOLOv5s四种模型。 具有以下优点:

  • 在pytorch环境下编写;+ 可以很容易编译成ON⁃NX和Core ML;+ 运行速度很快,每秒可以达到140FPS的速度;+ 模型精度高;+ 集成了YOLOv3和YOLOv4的部分优秀特性,进行了推陈出新的改进。

3.2 相关技术

Mosaic数据增强

Mosaic数据增强技术采用了四张图片的随机缩放、随机剪裁、随机排布的方式对数据进行拼接,相比CutMix数据增强多用了两张图片。在目标识别过程中,要识别的目标有大目标、中等目标、小目标,并且三种目标的占比例不均衡,其中,小目标的数量是最多的,但是出现的频率很低,这种情况就会导致在bp时对小目标的优化不足,模型正确识别小目标的难度比识别中、大目标的难度要大很多,于是对于小目标来说很容易出现误检和漏检的情况。Mosaic数据增强技术做出改进后,上述的问题得到有效的解决。 该技术的优点是:

  • 丰富了数据集,采用“三个随机”的方式对数据进行拼接丰富了检测的数据集,尤其是随机缩放增加了很多小目标,克服了小目标的不足,让网络的鲁棒性得到提高;+ 减少GPU的使用,在Mosaic增强训练时,四张图片拼接在一起,GPU可以直接计算四张图片的数据,让Mini-batch的大小减少了很多,这使得一个GPU就可以达到比较可观的效果。
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自适应anchor 自适应anchor是check_anchors函数通过遗传算法与Kmeans迭代算出的最大可能召回率的anchor组合。在网络模型的训练过程中,网络在初始化的锚框的基础上输出预测框,然后与真实框groundtruth进行对比,计算两个框之间的差值,再根据差值进行反向更新,迭代网络参数,最后求出最佳的锚框值。自适应的anchor能够更好地配合网络训练,提高模型的精度,减少对anchor的设计难度,具有很好的实用性。

自适应图片缩放 为了提高模型的推理速度,YOLOv5提出自适应图片缩放,根据长宽比对图像进行缩放,并添加最少的黑边,减少计算量。该方法是用缩放后的长边减去短边再对32进行取余运算,求出padding。在训练时并没有采用缩减黑边的方法,该方法只是在测试模型推理的时候才使用,这样提高了目标检测的准确率和速度。

Focus结构 该结构采用切片操作,将特征切片成四份,每一份将当成下采样的特征,然后在channel维度进行concat。例如:原始6086083的数据图片,经过切片操作先变成30430412的特征图,再经过一次32个卷积核的卷积操作,变成30430432的特征图。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
CSP结构 YOLOv5中的CSP[5]结构应用于两处,一处是CSP1_X结构应用于Backbone的主干网络中,另一处的CSP2_X结构应用于Neck中,用于加强网络的特征融合的能力。CSPNet主要从网络结构设计的角度解决推理中从计算量很大的问题。该结构的优点有:1)增强CNN的学习能力,使得模型在轻量化的同时保持较高的准确性;2)减低计算的瓶颈问题;3)减低内存的分险。

PFN+PAN结构 这个结构是FPN和PAN的联合。FPN是自顶向下的,将高层的特征信息通过上采样的方式进行传递融合,得到进行预测的特征图,而PAN正好与FPN的方向是相反的方向,它是自底向上地采取特征信息。两个结构各自从不同的主干层对不同的检测层进行参数聚合。两个结构的强强联合让得到的特征图的特征更加明显和清楚。

Bounding box的损失函数 Bounding box损失函数[6]增加了相交尺度的衡量方式,有效缓解了当两个框不相交和两个框大小完全相同的两种特殊情况。因为当预测框和目标框不相交时,IOU=0,无法反应两个框距离的远近的时候,此时的损失函数不可导;两个框大小完全相同,两个IOU也相同,IOU_LOSS无法区分以上两种特殊情况。

nms非极大值抑制 在目标检测过程的后续处理中,对于大量的目标框的筛选问题,通常会进行nms操作,以此来达到一个不错的效果。YO⁃LOv5算法同样采用了加权的nms操作。

4 数据集处理及实验

数据集准备

由于目前针对吸烟图片并没有现成的数据集,我们使用Python爬虫利用关键字在互联网上获得的图片数据,编写程序爬了1w张,筛选下来有近1000张可用,以及其他途径获取到的,暂时可用数据集有5k张,

深度学习图像标注软件众多,按照不同分类标准有多中类型,本文使用LabelImg单机标注软件进行标注。LabelImg是基于角点的标注方式产生边界框,对图片进行标注得到xml格式的标注文件,由于边界框对检测精度的影响较大因此采用手动标注,并没有使用自动标注软件。

考虑到有的朋友时间不足,博主提供了标注好的数据集和训练好的模型,需要请联系。

数据标注简介

通过pip指令即可安装

pip install labelimg

在命令行中输入labelimg即可打开

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5 部分核心代码

# data/smoke.yaml


# COCO 2017 dataset http://cocodataset.org
# Download command: bash yolov5/data/get_coco2017.sh
# Train command: python train.py --data ./data/coco.yaml
# Dataset should be placed next to yolov5 folder:
#   /parent_folder
#     /coco
#     /yolov5


# train and val datasets (image directory or *.txt file with image paths)
train: data\train.txt  # 上面我们生成的train,根据自己的路径进行更改
val: data\test.txt  # 上面我们生成的test
#test: ../coco/test-dev2017.txt  # 20k images for submission to https://competitions.codalab.org/competitions/20794

# number of classes
nc: 1   #训练的类别

# class names
names: ['smoke']

# Print classes
# with open('data/coco.yaml') as f:
#   d = yaml.load(f, Loader=yaml.FullLoader)  # dict
#   for i, x in enumerate(d['names']):
#     print(i, x)
# model/yolov5s.yaml


# parameters
nc: 1  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [116,90, 156,198, 373,326]  # P5/32
  - [30,61, 62,45, 59,119]  # P4/16
  - [10,13, 16,30, 33,23]  # P3/8

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, BottleneckCSP, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, BottleneckCSP, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, BottleneckCSP, [512]],
   [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
  ]

# YOLOv5 head
head:
  [[-1, 3, BottleneckCSP, [1024, False]],  # 9

   [-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, BottleneckCSP, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, BottleneckCSP, [256, False]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 18 (P3/8-small)

   [-2, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, BottleneckCSP, [512, False]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 22 (P4/16-medium)

   [-2, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, BottleneckCSP, [1024, False]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 26 (P5/32-large)

   [[], 1, Detect, [nc, anchors]],  # Detect(P5, P4, P3)
  ]

# 训练部分主函数


if __name__ == '__main__':
    check_git_status()
    parser = argparse.ArgumentParser()
    parser.add_argument('--epochs', type=int, default=300)
    parser.add_argument('--batch-size', type=int, default=16)
    parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='*.cfg path')
    parser.add_argument('--data', type=str, default='data/smoke.yaml', help='*.data path')
    parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='train,test sizes')
    parser.add_argument('--rect', action='store_true', help='rectangular training')
    parser.add_argument('--resume', action='store_true', help='resume training from last.pt')
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    parser.add_argument('--notest', action='store_true', help='only test final epoch')
    parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
    parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
    parser.add_argument('--weights', type=str, default='', help='initial weights path')
    parser.add_argument('--name', default='', help='renames results.txt to results_name.txt if supplied')
    parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--adam', action='store_true', help='use adam optimizer')
    parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%')
    parser.add_argument('--single-cls', action='store_true', help='train as single-class dataset')
    opt = parser.parse_args()
    opt.weights = last if opt.resume else opt.weights
    opt.cfg = check_file(opt.cfg)  # check file
    opt.data = check_file(opt.data)  # check file
    print(opt)
    opt.img_size.extend([opt.img_size[-1]] * (2 - len(opt.img_size)))  # extend to 2 sizes (train, test)
    device = torch_utils.select_device(opt.device, apex=mixed_precision, batch_size=opt.batch_size)
    if device.type == 'cpu':
        mixed_precision = False

    # Train
    if not opt.evolve:
        tb_writer = SummaryWriter(comment=opt.name)
        print('Start Tensorboard with "tensorboard --logdir=runs", view at http://localhost:6006/')
        train(hyp)

    # Evolve hyperparameters (optional)
    else:
        tb_writer = None
        opt.notest, opt.nosave = True, True  # only test/save final epoch
        if opt.bucket:
            os.system('gsutil cp gs://%s/evolve.txt .' % opt.bucket)  # download evolve.txt if exists

        for _ in range(10):  # generations to evolve
            if os.path.exists('evolve.txt'):  # if evolve.txt exists: select best hyps and mutate
                # Select parent(s)
                parent = 'single'  # parent selection method: 'single' or 'weighted'
                x = np.loadtxt('evolve.txt', ndmin=2)
                n = min(5, len(x))  # number of previous results to consider
                x = x[np.argsort(-fitness(x))][:n]  # top n mutations
                w = fitness(x) - fitness(x).min()  # weights
                if parent == 'single' or len(x) == 1:
                    # x = x[random.randint(0, n - 1)]  # random selection
                    x = x[random.choices(range(n), weights=w)[0]]  # weighted selection
                elif parent == 'weighted':
                    x = (x * w.reshape(n, 1)).sum(0) / w.sum()  # weighted combination

                # Mutate
                mp, s = 0.9, 0.2  # mutation probability, sigma
                npr = np.random
                npr.seed(int(time.time()))
                g = np.array([1, 1, 1, 1, 1, 1, 1, 0, .1, 1, 0, 1, 1, 1, 1, 1, 1, 1])  # gains
                ng = len(g)
                v = np.ones(ng)
                while all(v == 1):  # mutate until a change occurs (prevent duplicates)
                    v = (g * (npr.random(ng) < mp) * npr.randn(ng) * npr.random() * s + 1).clip(0.3, 3.0)
                for i, k in enumerate(hyp.keys()):  # plt.hist(v.ravel(), 300)
                    hyp[k] = x[i + 7] * v[i]  # mutate

            # Clip to limits
            keys = ['lr0', 'iou_t', 'momentum', 'weight_decay', 'hsv_s', 'hsv_v', 'translate', 'scale', 'fl_gamma']
            limits = [(1e-5, 1e-2), (0.00, 0.70), (0.60, 0.98), (0, 0.001), (0, .9), (0, .9), (0, .9), (0, .9), (0, 3)]
            for k, v in zip(keys, limits):
                hyp[k] = np.clip(hyp[k], v[0], v[1])

            # Train mutation
            results = train(hyp.copy())

            # Write mutation results
            print_mutation(hyp, results, opt.bucket)

            # Plot results
            # plot_evolution_results(hyp)

6 最后

Jackie_AI
关注 关注
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于深度学习的吸烟行为检测系统:YOLOv5/v6/v7/v8/v10模型实现与UI界面集成
m0_52343631的博客
09-30 1053
该项目的目标是构建一个能够实时检测吸烟行为的系统。系统将使用YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv10等深度学习模型进行目标检测,采用Tkinter库构建图形用户界面(GUI),支持用户上传图像或使用摄像头进行实时检测
抽烟行为监测识别系统 yolov5
燧机科技的博客
01-31 971
抽烟行为监测识别系统通过python+yolov5网络深度学习技术,对画面中人员抽烟行为进行主动识别检测。在介绍Yolo算法之前,首先先介绍一下滑动窗口技术,这对我们理解Yolo算法是有帮助的。采用滑动窗口的目标检测算法思路非常简单,它将检测问题转化为了图像分类问题。其基本原理就是采用不同大小和比例(宽高比)的窗口在整张图片上以一定的步长进行滑动,然后对这些窗口对应的区域做图像分类,这样就可以实现对整张图片的检测了。
抽烟行为检测
m0_37400316的博客
06-12 4426
总结一些与抽烟行为相关的代码: 后期更新模型、数据集! 参考github: 1、https://github.com/AtifSarwar29/Image-fusion-for-synthetic-smoke.git 2、https://github.com/xjg0124/Fire-and-Smoke-Detection.git 3、https://github.com/lancezhange/smoke_recognition.git 4、https://github.com/wenxingliu/s
基于YOLOv8深度学习的吸烟/抽烟行为检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测深度学习实战
阿旭的博客
12-13 5946
基于YOLOv8深度学习的吸烟/抽烟行为检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测深度学习实战
抽烟行为检测:从传统巡查到智能算法
最新发布
yangbisheng1121的博客
05-24 475
此类算法通常依赖于深度学习模型,特别是卷积神经网络(CNN),通过对摄像头捕捉的视频流进行实时分析,能够准确识别出人员的抽烟行为。最后,通过训练好的深度学习模型,对提取的特征进行分析和分类,从而识别出抽烟行为。首先,它能够实现全天候、无间断的监控,而人工巡查则受限于人力和时间,难以保证全天候的监控效果。其次,计算机视觉技术可以提供更高的检测精度和可靠性,避免人工巡查中可能出现的疏漏。通过智能系统的远程监控、实时报警和数据分析功能,管理者能够更高效地管理和控制抽烟行为,为人们提供一个更加健康和安全的环境。
抽烟行为识别预警系统 yolov5
燧机科技的博客
04-05 2008
抽烟行为识别预警系统基于yolov5网络模型智能分析技术,抽烟行为识别预警算法通过监测现场人员抽烟行为自动存档进行报警提示。我们选择当下YOLO卷积神经网络YOLOv5来进行抽烟识别检测。6月9日,Ultralytics公司开源了YOLOv5,离上一次YOLOv4发布不到50天。而且这一次的YOLOv5是完全基于PyTorch实现的!在我们还对YOLOv4的各种高端操作、丰富的实验对比惊叹不已时,YOLOv5又带来了更强实时目标检测技术。按照官方给出的数目,现版本的YOLOv5每个图像的推理时间最快0.00
基于深度学习的驾驶员分心驾驶行为(疲劳+危险行为)预警系统使用YOLOv5+Deepsort实现驾驶员的危险驾驶.zip
03-12
基于深度学习的驾驶员分心驾驶行为(疲劳+危险行为)预警系统使用YOLOv5+Deepsort实现驾驶员的危险驾驶.zip项目介绍该项目为人物专注性检测,分为两个检测部分,疲劳检测和分心行为检测。 疲劳检测部分,使用Dlib...
深度学习-YOLO目标检测 yolov5抽烟识别检测数据集(5000张图片数据).zip
04-05
深度学习-YOLO目标检测yolov5抽烟识别检测数据集(5000张图片数据),吸烟行为检测数据集,5000多张使用lableimg软件标注软件标注好的吸烟数据,图片格式为jpg,标签有两种,分别为xml格式和txt格式
YOLOV8吸烟行为检测+训练好的模型+数据集
04-16
1、YOLOV8吸烟行为检测,内含各种训练曲线图,并包含数据集, 5000多张使用lableimg软件标注软件标注好的吸烟数据,图片格式为jpg,标签有两种,分别为xml格式和txt格式,分别保存在两个文件夹中,类别名为smoke;...
基于深度学习抽烟打电话动作识别研究与系统实现-赵绪言.pdf
04-22
研究主要关注如何通过深度学习技术来识别驾驶员在驾驶过程中的抽烟和打电话行为,并设计了一套完整的识别系统。 ##### 2.1 特征提取与优化 - **双路金字塔网络**:该网络通过引入空间信息增强模块来优化特征提取...
吸烟(抽烟)检测和识别2:Pytorch实现吸烟(抽烟)检测和识别(含吸烟(抽烟)数据集和训练代码)
AI吃大瓜的博客
12-02 9501
Pytorch实现吸烟(抽烟)检测和识别(含吸烟(抽烟)数据集和训练代码),项目源码支持模型有resnet18,resnet34,resnet50, mobilenet_v2以及googlenet等常见的深度学习模型,用户可自定义进行训练;准确率还挺高的,采用轻量级mobilenet_v2模型的吸烟识别准确率也可以高达95.5607%左右,满足业务性能需求。
树莓派4:基于NCNN的火焰检测
liuwei36120516的博客
07-24 1594
在前面两篇关于火焰检测的文章中,最终的效果不是很好,为了提高火焰检测的效果,又搜集了一些火焰数据,训练的网络由之前的yolov3-tiny改为mobilev2-yolov3,最终在树莓派上利用NCNN推算框架,比之前的效果要好很多,如图: 下面把实现的步骤和大家分享下:1、火焰数据集链接: https://pan.baidu.com/s/1VypCAODfMvEexU-kDooSgw 提取码:feo2 链接:https://pan.baidu.com/s/1e32KPWI71PeFadUPmeEvHQ
【目标检测】YOLO v5 吸烟行为识别检测
py_jie的博客
07-31 1万+
基于YOLO v5 的吸烟目标检测,制作吸烟数据集,训练模型,Windows界面,输出结果,效果较好!mAP值0.8,解决横向项目,毕设,工厂实际需求。
图像检测抽烟检测与打电话检测
热门推荐
攻城狮的物联网基地
11-19 2万+
识别司机是否抽烟和是否打电话的图像算法,通过深度学习实现,其中用到了一些opencv的知识,效果图如下:
darknet实现吸烟的训练全流程及识别检测
liuwuw的博客
02-06 4856
一、前言 keras版本的yolov3训练的收敛效果以及模型的精度与纯c版本的darknet框架下yolov3训练相比,后者经过论证要比前者好很多,本文是基于这段时间的学习,捣鼓出来的,欢迎大家一起共享交流。 二、训练 三、训练过程可能遇到的问题 四、常用命令 五、训练过程的可视化参考博文:https://blog.csdn.net/qq_34806812/article/details/8145...
CNN应用之基于R-CNN的物体检测-CVPR 2014-未完待续
Leo的博客
12-29 2832
转载自: 深度学习(十八)CNN应用之基于R-CNN的物体检测-CVPR 2014-未完待续 - hjimce的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/hjimce/article/details/50187029 基于R-CNN的物体检测 原文地址:http://blog.csdn.net/hjimce/article/
EfficientDet训练自己的数据集实现抽烟检测
Mind_programmonkey的博客
07-11 7222
哈哈,我又来了!!! 再次立下flag,开学之后还是要保持更新频率!!! 本次用efficientdet来对抽烟检测检测出是否抽烟。那么,老规矩,先上结果图!!! 那么,接下来,还是原先一套流程。走起!!! 一、环境配置 python==3.7.4 tensorflow-gpu==1.14.0 keras==2.2.4 numpy==1.17.4 本次,在租的gpu的机器上的。没办法,efficientnet这个网络占据显存太大了。本次机器带不动呀。 二、抽烟数据集 本次数据集是用labelm
深度学习预警系统:检测驾驶员疲劳与分心行为
分心行为检测部分则使用YOLOv5算法来识别驾驶员是否存在玩手机、抽烟、喝水等分心行为。当系统识别到这些分心行为时,同样可以发出预警,提醒驾驶员注意。 系统整合了YOLOv5的目标检测能力和Deepsort的多目标跟踪...
写文章

热门文章

  • YOLOv1---YOLOv5论文解读 26816
  • 深度学习卷积神经网络YOLOv5详解 18237
  • Python基于深度学习机器学习卷积神经网络实现垃圾分类垃圾识别系统(GoogLeNet,Resnet,DenseNet,MobileNet,EfficientNet,Shufflent) 16774
  • Pytorch深度学习卷积神经网络动物识别动物数据集(Alexnet,GoogLeNet,Resnet,DenseNet,MobileNet,EfficientNet,Shufflent) 15745
  • 基于深度学习的图像隐写方法研究 12865

分类专栏

  • 深度学习论文阅读翻译 57篇
  • 深度学习 2篇
  • 机器学习 2篇

最新评论

  • ONNXRuntime C++ CMake 工程编译及安装

    :(304: 你的也一样啊博主

  • YOLOv5目标框回归详解

    李小小.: https://www.cvmart.net/community/detail/2685 结合这篇文章看

  • YOLOv5目标框回归详解

    c__yy: 请问文中两个图片上的公式是用来算什么的?为什么用到了gt

  • yolov5路面坑洼检测路面裂缝识别路面病害检测

    mtx341600: 有数据集吗

大家在看

  • AI大模型的规模化定律(Scaling Law)的本质:在对数据做更好的无损压缩

最新文章

  • 风格迁移 图像合成 图像重构 更换姿态和图像背景(使用交叉注意控制进行提示到图像编辑)GAN网络增强版
  • 车道线识别与预警系统LDWS(代码+教程)
  • 基于机器视觉的害虫种类及计数检测研究-人工智能项目-附代码
2024
10月 10篇
09月 41篇
02月 16篇
01月 114篇
2023年313篇
2022年55篇
2021年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jackie_AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家安徽仿铜玻璃钢雕塑订做价格沈阳玻璃钢雕塑模型厂家上海优质玻璃钢雕塑销售厂家郑州佛像玻璃钢雕塑定制上海玻璃钢商城广场美陈雕塑厂家商场门头美陈叫什么昆明玻璃钢雕塑加工静香玻璃钢雕塑林州玻璃钢雕塑报价景观园林玻璃钢景观雕塑定做沐阳玻璃钢雕塑定做玻璃钢主题面具雕塑陕西景观玻璃钢雕塑图片海淀玻璃钢雕塑园林玻璃钢花盆厂家鹤壁园林景观玻璃钢仿铜雕塑厂家美陈软装商场图片湖州玻璃钢昆虫雕塑巢湖玻璃钢雕塑定制玻璃钢雕塑专业公司甘肃玻璃钢卡通雕塑金华小区玻璃钢雕塑厂家济南动物玻璃钢雕塑价格抚州特色玻璃钢雕塑青岛玻璃钢雕塑厂镇江玻璃钢雕塑设计价位浙江商场美陈哪家好玻璃钢雕塑丙烯上色河北商场美陈供应商玻璃钢雕塑工厂业务员香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化