草庐IT

YOLOV8-gradcam 热力图可视化 即插即用 不需要对源码做任何修改!

魔鬼面具 2023-05-05 原文

YOLOV8 GradCam 热力图可视化.

本文给大家带来yolov8-gradcam热力图可视化,这个可视化是即插即用不需要对源码做任何修改喔!给您剩下的不少麻烦!
代码链接:yolo-gradcam
里面还有yolov5和v7的热力图可视化代码,也是即插即用不需要对源码做任何修改喔!

先来看一下效果图


这个是由官方权重yolov8m实现的。

操作教程 哔哩哔哩视频

1. 从github中下载源码到自己的代码路径下。


简单来说就是直接复制到你的v8代码文件夹下即可,路径一定要放对,不然会找不到一些包。

2. 修改参数

def get_params():
    params = {
        'weight': 'yolov8m.pt',
        'cfg': 'ultralytics/models/v8/yolov8m.yaml',
        'device': 'cuda:0',
        'method': 'GradCAM', # GradCAMPlusPlus, GradCAM, XGradCAM
        'layer': 'model.model[8]',
        'backward_type': 'all', # class, box, all
        'conf_threshold': 0.6, # 0.6
        'ratio': 0.02 # 0.02-0.1
    }
    return params

主要参数都在这个函数里面,其中解释如下:

  • weight
    权重路径。
  • cfg
    配置文件路径。(需要跟权重所训练出来的配置文件一致)
  • device
    运行的设备。cpu:cpu,gpu:cuda:0
  • method
    默认是GradCAM,还支持GradCAMPlusPlus和XGradCAM。但是作者这边实测都是GradCAM效果最好。
  • layer

    代码中的model.model[8]就是上图所示,经测试,对于yolov8,使用5-9效果还可以,至于对于自己的数据集,这个就需要慢慢测试了。
    所以如果需要修改求梯度的层,只需要修改数字即可,比如我想用第9层,也就是model.model[9]。
  • backward_type
    反向传播的变量。这里默认是all,也就是score+box进行反向传播,然后进行梯度求和。
    其中还支持score和box。建议使用all,效果不佳再换。
  • conf_threshold
    置信度阈值,默认0.6。
  • ratio
    取前多少数据,默认是0.02,就是只取置信度(yolov8为类别最大概率为置信度)排序后的前百分之2的目标进行计算热力图。
    这个可能比较难理解,一般0.02就可以了,这个值不是越大越好,最大建议是0.1

3.运行

if __name__ == '__main__':
    model = yolov8_heatmap(**get_params())
    model(r'20230117113354.jpg', 'result')
model = yolov8_heatmap(**get_params()) 这行代码为初始化
model(r'20230117113354.jpg', 'result') 第一个参数是图片的路径,第二个参数是保存路径,比如是result的话,其会创建一个名字为result的文件夹,如果result文件夹不为空,其会先清空文件夹。


运行输出如下:

运行后其会输出你的结构,你可以根据这个结构去选择你的层号,然后还会有一行:

	Transferred 475/475 items

这个非常重要,这个如果分子不等于分母的话,那证明你的cfg文件和你的模型权重不匹配!
然后下方有一个进度条:

QA:

  1. 为什么进度条还没有满就停止了呢?
    因为后面的目标已经不满足置信度的设定值。
  2. 这个进度条的长度126是什么意思?
    这个就是之前设定的参数ratio的作用,其只会选择前0.02的目标进行热力图可视化。

那么其实我们可以看到ratio等于0.02已经足够了,其他目标都是小于0.6的置信度。

4. 查看输出

打开设定的保存路径result文件夹下:

在这里,你可以挑选效果比较好的出来进行展示。

最后我这里做了一个实验,分别是对7,8,9layer进行实验:




这个实验主要是给大家看下,不同的layer,不同的backward_type,不同的method出来的效果都不一样,有些可能效果很差,需要自行调整测试,热力图这个东西是比较玄学的,有些结果会比较乱,有些结果会比较可观,有些图它可能就是热力图效果不好也有可能。

最后祝大家都能出到满意的图,如果可以的话github帮忙点个star,博文也帮忙点个赞,谢谢大家咯!

有关YOLOV8-gradcam 热力图可视化 即插即用 不需要对源码做任何修改!的更多相关文章

  1. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  2. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  3. ruby - rspec 需要 .rspec 文件中的 spec_helper - 2

    我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只

  4. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  5. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  6. ruby-on-rails - RSpec:避免使用允许接收的任何实例 - 2

    我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_

  7. ruby - Ruby 中的波形可视化 - 2

    我即将开始一个将录制和编辑音频文件的项目,我正在寻找一个好的库(最好是Ruby,但会考虑Java或.NET以外的任何库)以进行实时可视化波形。有人知道我应该从哪里开始搜索吗? 最佳答案 要流入浏览器的数据量很大。Flash或Flex图表可能是唯一能提高内存效率的解决方案。Javascript图表往往会因大型数据集而崩溃。 关于ruby-Ruby中的波形可视化,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

  8. ruby - 为什么在 ruby​​ 中创建 Rational 不需要新方法 - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Rubysyntaxquestion:Rational(a,b)andRational.new!(a,b)我正在阅读ruby镐书,我对创建有理数的语法感到困惑。Rational(3,4)*Rational(1,2)产生=>3/8为什么Rational不需要new方法(我还注意到例如我可以在没有new方法的情况下创建字符串)?

  9. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  10. ruby-on-rails - 需要帮助最大化多个相似对象中的 3 个因素并适当排序 - 2

    我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night

随机推荐