首页 > 其他分享 >umich cv-1

umich cv-1

时间:2023-09-23 19:33:09浏览次数:23  
标签:knn 分类 cv 算法 参数 umich 数据 我们

UMICH CV Image Classification---KNN

在本节课中,首先justin老师为我们介绍了图像分类了基础概念以及其用途,这里就不多涉及了

接着我们思考图像分类问题,如果我们想要直接通过某种算法来实现图像分类,显然是比较棘手的,于是引入了机器学习的思想,即用数据驱动,用数据去训练我们的分类器,再用新的图像来评估我们分类器的性能

然后介绍了几个常见的用于图像分类的数据集,比如说MINIST,CIFAR100,CIFAR10,IMAGENET,Place365等等

接下来介绍了图形分类中一种常用的算法,也是我们作业中要去完成的算法即Nearest Neighbor Classifier以及k-Nearest Neighbor Classifier

总体来说,我们大致需要两步来完成这个算法:
img
img
即第一步只是简单的记忆来完成我们的训练过程,第二步选择综合起来离预测图像最近的图像的label,作为我们的预测值
但是我们也可以发现这类方法的致命问题,那就是它的训练时间要比预测时间短,即我们可能很快就可以完成我们模型的训练,但是想要得出我们预测的结果需要很长时间,而这恰好与我们的理念是背道而驰的,我们不在乎要多少时间来训练,而想要尽快的得到预测结果

同时在执行此类算法时,有两个参数很重要,一个是k值的选择,即我们要综合考虑几个周围的邻居的距离来做出判断,一个是我们要选择什么来作为距离的衡量方式

img
img

从上面这两张图可以看出k值与距离公式的选择,对于分类尤其是决策边界有着一定程度的影响

因此,如何选择最合适的k值与距离公式,对于knn模型来说,是一个非常重要的问题
用更专业更普适的说法,就是如何去选择我们模型的超参数:
img

接下来就是讨论如何去设置超参数
img
首先第一种也是最直接的想法,我们只需要挑选在我们的数据集上表现最好的超参数
这种想法的问题就是会导致模型只在我们训练的数据上表现好,一遇到新的数据表现就不行

第二种就是将数据划分为训练集与测试集,找出在测试集上表现最好的超参数,但是这种想法和第一种也是相同的问题,我们的测试集数据会对模型对超参数的判断产生一定的污染,因而在新的数据上表现也不佳

第三种就是我们划分成train,validation与test三个数据集,用validation找出超参数,在test上测试,而这种的问题在于我们的test只能用一次,就是在找出超参数之后作为新数据测试,而如果我们经过很长的时间研究算法,调整参数最后去测试发现效果不好,一切都前功尽弃了,所以这种方法实用性也不高

最好的方法就是采用交叉验证
img
把数据集划分成不同的fold,每个fold依次扮演validation或者test或者train的角色
但是缺点也很明显,当数据量增大时,这种花费的时间显然非常久,我们可以将这种方法应用于小数据集

最后对knn算法的用途进行了讨论
img
除了我们之前提到的,knn算法的预测时间复杂度问题,其简单地使用距离公式来进行分类,有时也会产生错误,比如上面这张图,下方的四个图片的距离值都是一样的,但是显然它们有着巨大的差别

所以直接使用knn算法显然是一个不好的选择,但是我们可以在某些模型的某些步骤去应用knn算法
img
如上图所示,我们在ConvNet中对不同图片的特征向量使用knn进行分类,早最终的图片分类效果较好

最后放一张总结图:
img

ps:本次A1的作业比较简单,主要引导学生初步学习pytorch,在knn实现中,强调了向量化编程的重要性,减少循环的使用,最后使用交叉验证来寻找k值,这里就不再详细介绍具体实现。

标签:knn,分类,cv,算法,参数,umich,数据,我们
From: https://www.cnblogs.com/dyccyber/p/17724949.html

相关文章

  • error C2065: “CV_DATA_AS_ROW”: 未声明的标识符
    ce_dect\main_face.cpp(117):errorC2065:“CV_DATA_AS_ROW”:未声明的标识符将“CV_PCA_DATA_AS_ROW”改为PCA::DATA_AS_ROW即可。PCA::PCA(InputArraydata,InputArraymean,intflags,intmaxComponents=0)该构造函数的参数1为要进行PCA变换的输入Mat;参数2为该Mat......
  • 问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
    解决:Opencv(3.1.0/3.4/4.1.0)找不到/opencv2/gpu/gpu.hpp问题环境:系统:Win10环境:Opencv3.4.0/4.1.0显卡:1080ti问题Windows下使用opencv3.4.0/4.1.0调用包含GPU模块函数getCudaEnabledDeviceCount()的示例时提示找不到/opencv2/gpu/gpu.hpp。解决方式替换代码中引用的”......
  • CentOS7 关于Linux Polkit本地权限提升漏洞(CVE-2021-4034)的在线和离线的两种修复方式
    CentOS7关于LinuxPolkit本地权限提升漏洞(CVE-2021-4034)的在线和离线的两种修复方式https://blog.csdn.net/liangtongning/article/details/122805070在线修复yumcleanall&&yummakecacheyumupdatepolkit-y[root@Fort~]#yumcleanall已加载插件:fastestmirror......
  • opencv 基于形状的模板匹配
    1.问题或需求描述opencv基于形状的模板匹配测试2.解决方法或原理:主要步骤:使用opencv查找轮廓(findContours)匹配轮廓(形状)(matchShapes)的相似度python代码:importcv2#读取目标图像target_image=cv2.imread('target.png',cv2.IMREAD_COLOR)#读取模板图像template_image......
  • ubuntu20安装opencv3.4.9 多版本
    1下载源码下载源码https://github.com/opencv/opencv/releases/tag/3.4.9  下载扩展源码 https://github.com/opencv/opencv_contrib/releases/tag/3.4.9 2安装依赖sudoapt-getupdatesudoapt-getinstall-ybuild-essentialcmakegitlibgtk2.0-devpkg-......
  • 智慧乡村:视频存储管理平台 EasyCVR 怎么样去助力乡村数字化?
    EasyCVR是一个高度灵活、功能丰富的视频监控系统,其强大的拓展性和便捷的部署方式使其在众多场景中都能发挥出色的性能。EasyCVR平台支持多种主流标准协议,包括但不限于国标GB28181、RTSP/Onvif、RTMP等,这些协议为设备之间的互联互通提供了基础。一、需求分析:某镇22个村庄,合......
  • 春秋云镜 - CVE-2022-28060
    VictorCMSv1.0/includes/login.php存在sql注入找到页面的登录框,看介绍应该是post类型的表单注入。上sqlmap用原本的梭发现ctf的那个表是空的,换用--file-read参数从目标中读取文件拿到flag。root@Locklytemp/tmp»sqlmap-rsql.txt--file-read"/flag"--batch......
  • Easy CVR视频存储平台怎么样才能快捷判断视频流编码格式?
    EasyCVR是一个功能强大的设备接入平台,它支持多种设备接入协议,并能够分发多种视频格式的视频流。同时,它还提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等多种视频服务,能够满足用户在视频监控领域的需求。无论是个人用户还是企业用户,都可以......
  • Apache Log4j Server CVE-2017-5645 反序列化命令执行漏洞
    漏洞描述攻击者可以通过发送一个特别制作的2进制payload,在组件将字节反序列化为对象时,触发并执行构造的payload代码。该漏洞主要是由于在处理ObjectInputStream时,接收函数对于不可靠来源的input没有过滤。可以通过给TcpSocketServer和UdpSocketServer添加可配置的过滤功能以及一......
  • 春秋云镜 - CVE-2022-28512
    FantasticBlog(CMS)是一个绝对出色的博客/文章网络内容管理系统。它使您可以轻松地管理您的网站或博客,它为您提供了广泛的功能来定制您的博客以满足您的需求。它具有强大的功能,您无需接触任何代码即可启动并运行您的博客。该CMS的/single.php路径下,id参数存在一个SQL注入漏洞......