当前位置: 首页 > news >正文

超像素提取加svm训练,鼠标点击选择标签(左键为正样本,右键为负样本)

自己写的demo记个笔记用
替换掉图片路径和保存路径svm训练的模型路径就可以跑
效果我觉的不行,目前也不知到如何优化、希望有大佬可以给点建议
流程
处理超像素
选择超像素
提取HOG、颜色直方图、LBP直方图特征
训练
预测

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/ximgproc.hpp>
#include <opencv2/ml.hpp>using namespace cv;
using namespace std;
using namespace cv::ml;
Mat g_LabelSlic;  
Mat g_MaskSlic;
int g_NumSuperPixels;//目标图像和标签
multimap<int, Mat>g_mapImgSuperPixelsOfTarget;
multimap<int, Mat>g_mapImgSuperPixelsOfNonTarget;struct MouseCallbackData {Mat img;      // 原始图像Mat imgClone; // 克隆图像
};Mat GetSuperPixelsByLabel(const Mat& img, int superpixelID)
{int minX = img.cols, minY = img.rows, maxX = 0, maxY = 0;for (int y = 0; y < img.rows; y++) {for (int x = 0; x < img.cols; x++) {if (g_LabelSlic.at<int>(y, x) == superpixelID) {// 更新边界框坐标if (x < minX) minX = x;if (y < minY) minY = y;if (x > maxX) maxX = x;if (y > maxY) maxY = y;}}}// 确保边界框有效if (minX > maxX || minY > maxY) {cout << "未找到有效的超像素!" << endl;return Mat();  }Rect superPixelBoundingBox(minX, minY, maxX - minX + 1, maxY - minY + 1);Mat croppedRegion = img(superPixelBoundingBox).clone();  for (int y = 0; y < croppedRegion.rows; y++) {for (int x = 0; x < croppedRegion.cols; x++) {int origX = x + minX;int origY = y + minY;if (g_LabelSlic.at<int>(origY, origX) != superpixelID) {croppedRegion.at<Vec3b>(y, x) = Vec3b(0, 0, 0); }}}return croppedRegion; 
}vector<float> GetHOGDescriptor(Mat img)
{if (img.empty()) {std::cerr << "输入图像为空!" << std::endl;return {};}resize(img, img, Size(64, 64));Mat imgGray;cvtColor(img, imgGray, COLOR_BGR2GRAY);HOGDescriptor hog(Size(32, 32),  // 图像窗口大小Size(8, 8),   // 块大小Size(4, 4),     // 块步长Size(4, 4),     // cell 大小9               // 梯度方向 bins 数);vector<float> descriptors;hog.compute(imgGray, descriptors);return descriptors;
}// 提取 LBP 特征及其直方图
void ExtractLBPFeatures(Mat img, Mat& lbp, Mat& lbpHist)
{resize(img, img, Size(64, 64));// 转换为灰度图Mat gray;if (img.channels() == 3) {cvtColor(img, gray, COLOR_BGR2GRAY);}else {gray = img.clone();}// 初始化 LBP 特征矩阵lbp = Mat(gray.size(), CV_8UC1, Scalar(0));for (int y = 1; y < gray.rows - 1; y++) {for (int x = 1; x < gray.cols - 1; x++) {uchar center = gray.at<uchar>(y, x);uchar code = 0;code |= (gray.at<uchar>(y - 1, x - 1) > center) << 7; // 128code |= (gray.at<uchar>(y - 1, x) > center) << 6;     // 64code |= (gray.at<uchar>(y - 1, x + 1) > center) << 5; // 32code |= (gray.at<uchar>(y, x + 1) > center) << 4;     // 16code |= (gray.at<uchar>(y + 1, x + 1) > center) << 3; // 8code |= (gray.at<uchar>(y + 1, x) > center) << 2;     // 4code |= (gray.at<uchar>(y + 1, x - 1) > center) << 1; // 2code |= (gray.at<uchar>(y, x - 1) > center);           // 1lbp.at<uchar>(y, x) = code; // 将计算的 LBP 值存储}}// 计算 LBP 直方图const int histSize = 256; // LBP 特征值的范围const float range[] = { 0, 256 };const float* histRange = { range };calcHist(&lbp, 1, 0, Mat(), lbpHist, 1, &histSize, &histRange);normalize(lbpHist, lbpHist);
}Mat ExtractHSVHistogram(Mat img)
{resize(img, img, Size(64, 64));Mat hsv_img;cvtColor(img, hsv_img, cv::COLOR_BGR2HSV); vector<cv::Mat> hsv_planes;split(hsv_img, hsv_planes);  // 分割 H, S, V 通道int histSize = 256;  // 直方图分为 256 个区间float h_range[] = { 0, 180 };  // H 通道范围是 0-180float s_v_range[] = { 0, 256 };  // S 和 V 通道范围是 0-256const float* h_histRange = { h_range };const float* sv_histRange = { s_v_range };Mat h_hist, s_hist, v_hist;calcHist(&hsv_planes[0], 1, 0, cv::Mat(), h_hist, 1, &histSize, &h_histRange, true, false);  // H 通道直方图calcHist(&hsv_planes[1], 1, 0, cv::Mat(), s_hist, 1, &histSize, &sv_histRange, true, false);  // S 通道直方图calcHist(&hsv_planes[2], 1, 0, cv::Mat(), v_hist, 1, &histSize, &sv_histRange, true, false);  // V 通道直方图// 合并 H, S, V 直方图Mat hist;hconcat(h_hist, s_hist, hist);hconcat(hist, v_hist, hist);Mat normalizedHist;normalize(hist, normalizedHist);return normalizedHist;  // 返回归一化后的直方图
}void OnMouse(int event, int x, int y, int flags, void* param)
{MouseCallbackData* data = static_cast<MouseCallbackData*>(param);Mat& img = data->img;Mat& imgClone = data->imgClone;int mouseButtonClicked = 0;if (event == EVENT_LBUTTONDOWN) {mouseButtonClicked = 1;if (x >= 0 && x < img.cols && y >= 0 && y < img.rows) {int superpixelID = g_LabelSlic.at<int>(y, x);cout << "点击目标超像素ID: " << superpixelID << endl;g_mapImgSuperPixelsOfTarget.insert({ mouseButtonClicked, GetSuperPixelsByLabel(img, superpixelID) });circle(imgClone, Point(x, y), 3, Scalar(0, 255, 0), -1);imshow("Imageview", imgClone);}}else if (event == EVENT_RBUTTONDOWN) {mouseButtonClicked = 2;if (x >= 0 && x < img.cols && y >= 0 && y < img.rows) {int superpixelID = g_LabelSlic.at<int>(y, x);cout << "点击非目标超像素ID: " << superpixelID << endl;g_mapImgSuperPixelsOfNonTarget.insert({ mouseButtonClicked, GetSuperPixelsByLabel(img, superpixelID) });circle(imgClone, Point(x, y), 3, Scalar(0, 0, 255), -1);imshow("Imageview", imgClone);}}
}void SvmClassifier(multimap<int, vector<float>> HOGDescriptorOFTarget,multimap<int, Mat> lbpHistOFTarget,multimap<int, Mat> hsvHistOFTarget,multimap<int, vector<float>> HOGDescriptorOFNonTarget,multimap<int, Mat> lbpHistOFNonTarget,multimap<int, Mat> hsvHistOFNonTarget)
{cout << "star svm model train ..." << endl;Mat featureList;Mat labels;for (const auto& pair : HOGDescriptorOFTarget) {Mat hogMat(pair.second, CV_32F);normalize(hogMat, hogMat, 0, 1, NORM_MINMAX);hogMat = hogMat.reshape(1, 1);Mat lbpHist = lbpHistOFTarget.find(pair.first)->second;lbpHist.convertTo(lbpHist, CV_32F);lbpHist = lbpHist.reshape(1, 1);  // 展平Mat hsvHist = hsvHistOFTarget.find(pair.first)->second;hsvHist.convertTo(hsvHist, CV_32F);hsvHist = hsvHist.reshape(1, 1);  // 展平Mat combinedFeature;hconcat(hogMat, lbpHist, combinedFeature);  hconcat(combinedFeature, hsvHist, combinedFeature);  featureList.push_back(combinedFeature);labels.push_back(1); }for (const auto& pair : HOGDescriptorOFNonTarget) {Mat hogMat(pair.second, CV_32F);normalize(hogMat, hogMat, 0, 1, NORM_MINMAX); hogMat = hogMat.reshape(1, 1);Mat lbpHist = lbpHistOFNonTarget.find(pair.first)->second;lbpHist.convertTo(lbpHist, CV_32F);lbpHist = lbpHist.reshape(1, 1); Mat hsvHist = hsvHistOFNonTarget.find(pair.first)->second;hsvHist.convertTo(hsvHist, CV_32F);hsvHist = hsvHist.reshape(1, 1); Mat combinedFeature;hconcat(hogMat, lbpHist, combinedFeature);hconcat(combinedFeature, hsvHist, combinedFeature);featureList.push_back(combinedFeature);labels.push_back(0);  }Mat trainingData;vconcat(featureList, trainingData); //Mat labelsMat;// = Mat(labels).reshape(1, 1);Mat labelsMat = labels;trainingData.convertTo(trainingData, CV_32F);labelsMat.convertTo(labelsMat, CV_32S);Ptr<SVM> svm = SVM::create();svm->setKernel(SVM::RBF);svm->setType(SVM::C_SVC);svm->trainAuto(trainingData,ROW_SAMPLE,labelsMat,10);/*svm->setC(1.5);svm->setGamma(0.5);svm->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, 200, 1e-6));svm->train(trainingData, ROW_SAMPLE, labelsMat);*/svm->save("C:/Users/svs/Desktop/svm_model2.xml"); // 保存训练好的模型
}void DrawSuperpixelRegion(Mat& img, int targetLabel) {for (int y = 0; y < img.rows; y++) {for (int x = 0; x < img.cols; x++) {if (g_LabelSlic.at<int>(y, x) == targetLabel) {img.at<Vec3b>(y, x) = Vec3b(0, 255, 0); }}}
}int main() {Mat img = imread("C:/Users/svs/Desktop/test.jpeg");if (img.empty()) {cerr << "无法读取图片!" << endl;return -1;}//图片进行超像素分割int region_size = 50;float ruler = 20.0;int num_iterations = 100;Ptr<ximgproc::SuperpixelSLIC> slic = ximgproc::createSuperpixelSLIC(img, ximgproc::SLICO,region_size, ruler);slic->iterate(num_iterations);slic->getLabels(g_LabelSlic);slic->getLabelContourMask(g_MaskSlic);g_NumSuperPixels = slic->getNumberOfSuperpixels();Mat imgWithContours;img.copyTo(imgWithContours, ~g_MaskSlic);imshow("Superpixel Contours", imgWithContours);cout << "请点击选择一个超像素区域...\n";namedWindow("Imageview", WINDOW_AUTOSIZE);imshow("Image", img);Mat imgClone = img.clone();imshow("Imageview", imgClone);MouseCallbackData data;data.img = img;data.imgClone = imgClone;setMouseCallback("Imageview", OnMouse, &data);// 等待用户按 'q' 退出while (true) {const char key = waitKey(0);if (key == 'q') {break;}}/*提取获取图片的特征*/multimap<int, vector<float> >HOGDescriptorOFTarget;multimap<int, Mat >lbpHistOFTarget;multimap<int, Mat >hsvHistOFTarget;multimap<int, vector<float> >HOGDescriptorOFNonTarget;multimap<int, Mat>lbpHistOFNonTarget;multimap<int, Mat>hisHistOFNonTarget;for (const auto& pair : g_mapImgSuperPixelsOfTarget) {vector<float> vectorHOGDescriptor = GetHOGDescriptor(pair.second);HOGDescriptorOFTarget.insert({ pair.first, vectorHOGDescriptor});Mat lbpImg, lbpHist;ExtractLBPFeatures(pair.second, lbpImg, lbpHist);lbpHistOFTarget.insert({ pair.first, lbpHist });Mat hsvHist;hsvHist = ExtractHSVHistogram(pair.second);hsvHistOFTarget.insert({ pair.first,hsvHist });/*imshow("true", pair.second);waitKey(0);*/}for (const auto& pair : g_mapImgSuperPixelsOfNonTarget){vector<float> vectorHOGDescriptor = GetHOGDescriptor(pair.second);HOGDescriptorOFNonTarget.insert({ pair.first,vectorHOGDescriptor });Mat lbpImg, lbpHist;ExtractLBPFeatures(pair.second, lbpImg, lbpHist);lbpHistOFNonTarget.insert({ pair.first, lbpHist });Mat hsvHist;hsvHist = ExtractHSVHistogram(pair.second);hisHistOFNonTarget.insert({ pair.first,hsvHist});/* imshow("false", pair.second);waitKey(0);*/}SvmClassifier(HOGDescriptorOFTarget, lbpHistOFTarget, hsvHistOFTarget,HOGDescriptorOFNonTarget,lbpHistOFNonTarget, hisHistOFNonTarget);Ptr<SVM> svm = SVM::load("C:/Users/svs/Desktop/svm_model2.xml");if (svm.empty()) {std::cerr << "模型加载失败!\n";return -1;}//进行预测cout << "star predict ...\n";multimap<int, Mat> testSuperPixelsImg;vector<float> testHOGDescriptor;Mat testLbpHist;Mat testHsvHist;// 遍历每个超像素块for (int superpixelID = 0; superpixelID < g_NumSuperPixels; ++superpixelID) {Mat superpixelRegion = GetSuperPixelsByLabel(img, superpixelID);testSuperPixelsImg.insert({ superpixelID,  superpixelRegion });}for (const auto& pairs : testSuperPixelsImg) {/*imshow("test", pairs.second);waitKey(0);*/testHOGDescriptor = GetHOGDescriptor(pairs.second);Mat lbpImg;ExtractLBPFeatures(pairs.second, lbpImg,testLbpHist);testHsvHist = ExtractHSVHistogram(pairs.second);if (testHOGDescriptor.empty()){cerr << "HOG特征为空,超像素ID: \n";}if (testLbpHist.empty()){cerr << "LBP特征为空,超像素ID: \n";}if(testHsvHist.empty()){cerr << "Hsv直方图为空,超像素ID:\n";}Mat testHogMat(testHOGDescriptor, CV_32F);normalize(testHogMat, testHogMat, 0, 1, NORM_MINMAX);testHogMat = testHogMat.reshape(1, 1);testLbpHist.convertTo(testLbpHist, CV_32F);testLbpHist = testLbpHist.reshape(1, 1);  testHsvHist.convertTo(testHsvHist, CV_32F);testHsvHist = testHsvHist.reshape(1, 1);  Mat combinedFeature;hconcat(testHogMat, testLbpHist, combinedFeature);hconcat(combinedFeature, testHsvHist, combinedFeature);// 进行预测float response;response = svm->predict(combinedFeature);if (response == 1) {}else {DrawSuperpixelRegion(img, pairs.first);}}imshow("Image with Green Superpixel", img);cout << "predict successful\n";waitKey(0);destroyAllWindows();return 0;
}

相关文章:

超像素提取加svm训练,鼠标点击选择标签(左键为正样本,右键为负样本)

自己写的demo记个笔记用 替换掉图片路径和保存路径svm训练的模型路径就可以跑 效果我觉的不行&#xff0c;目前也不知到如何优化、希望有大佬可以给点建议 流程 处理超像素 选择超像素 提取HOG、颜色直方图、LBP直方图特征 训练 预测 #include <iostream> #include <…...

Vue 中引入 ECharts 的详细步骤与示例

在Vue项目中引入ECharts&#xff0c;可以让我们轻松地在前端页面中展示各种图表。ECharts 是一个基于 JavaScript 的开源可视化图表库&#xff0c;它提供了丰富的图表类型和强大的配置选项&#xff0c;使得在Vue项目中集成和使用变得非常方便。 一、准备工作 创建Vue项目&…...

在 EC2 AWS 中开启防火墙后将自己锁定在 SSH 之外

在搭建ftp时&#xff0c;开启了系统防火墙的几个端口&#xff0c;并且设置了防火墙开机自启。当设置好之后&#xff0c;关闭了putty&#xff0c;再次连接SSH时&#xff0c;发现连接错误。仔细一想&#xff0c;防火墙没有开启22端口&#xff0c;这不嘎了么&#xff0c;自己把自己…...

OpenGL 进阶系列02 - OpenGL绘制三角形的必要步骤

目录 一:概述 二:必要的绘制步骤 三:相关OpenGL API 含义: 1. glViewport 介绍 2. OpenGL的 VAO 介绍 3. OpenGL的VBO介绍 4. OpenGL的着色器 API 介绍 5. OpenGL 绘制API介绍 四:例子 一:概述 要使用 OpenGL 绘制一个三角形,通常需要几步,需要使用哪些必要的Open…...

MySql基础34题写题记录(11-20)

11、取得最后入职的5名员工 select ename from emp order by hiredate desc limit 5; 12、取得每个薪水等级有多少员工 先取每个员工的薪水等级 Select e.ename,s.grade grade From emp e Join salgrade s On e.sal between s.losal and s.hisal 接着直接分组求 Select …...

设计模式——单例模式(1)

一、写在前面 设计模式有23种&#xff0c;每一篇是一种模式&#xff0c;从简单到难&#xff0c;第一篇从最简单的单例模式试试水创建型模式 单例模式工厂方法模式抽象工厂模式原型模式建造者模式 结构型模式行为型模式 二、介绍 单例模式是指一个类只能创建出一个对象&#…...

剧本杀小程序:提升玩家游戏体验,带动经济效益

剧本杀作为一个新兴游戏方式&#xff0c;能够满足年轻人的社交需求&#xff0c;让大众体验到不太一样的人生&#xff0c;在角色中进行演绎。这种独特的游戏模式吸引了众多的年轻玩家&#xff0c;由此&#xff0c;剧本杀行业进入了爆发期。 如今&#xff0c;在科技的不断创新下…...

Linux系统通过编辑crontab来设置定时任务---定时关机

在Linux系统中&#xff0c;crontab 是用来设置周期性被执行的指令的守护进程。通过编辑 crontab&#xff0c;您可以安排定时任务&#xff0c;比如定时关机、定时备份文件、定时运行脚本等。以下是如何编辑 crontab 来设置定时任务的步骤&#xff1a; 打开终端&#xff1a;您可以…...

Mac电脑word文档误删,4个方法快速恢复

对于使用Mac的用户来说&#xff0c;丢失重要的Word文档可能会为学习或工作带来严重的影响。不过&#xff0c;幸运的是&#xff0c;关于mac word 文档恢复方法还是有很多的&#xff0c;通常帮助Mac用户轻松找回丢失的word文档。接下来&#xff0c;小编将介绍一些在Mac上恢复丢失…...

threejs-基础材质设置

一、介绍 主要内容&#xff1a;基础材质(贴图、高光、透明、环境、光照、环境遮蔽贴图) 主要属性&#xff1a; side: three.DoubleSide, //设置双面 color: 0xffffff, //颜色 map: texture, //纹理 transparent: true, // 透明度 aoMap: aoTexture, //ao贴图 aoMapIntensity: 1…...

【大模型开发】AI提示词框架:解锁ICIO、CRISPE、BROKE和RASCEF的强大潜力

作为一名经验丰富的程序员,您是否曾感到在与AI助手交互时难以获得理想的输出?本文将为从事AI开发或经常使用AI工具的技术人员介绍四个强大的AI提示词框架:ICIO、CRISPE、BROKE和RASCEF。这些框架能帮助您更有效地与AI模型沟通,提高工作效率。 1. ICIO框架:简洁而有力 IC…...

Rust学习如何更有信心?

关于如何学习Rust&#xff0c;在Hacker News上有一篇非常火的教程&#xff0c;作者通过自己的Rust学习经历&#xff0c;向大家指出了一条如何学习Rust的路径。 学习一门编程语言必不可少的是阅读技术书籍和编写代码&#xff0c;要想掌握Rust&#xff0c;两者的交替学习至关重要…...

3个简单易懂的方法,教你马上掌握excel表格数据打印技巧

在EXCEL表格里制作表格后&#xff0c;表格的数据有可能不正好是一页&#xff0c;如果就这样打印出来&#xff0c;数据有可能不完整&#xff0c;表格也不美观&#xff0c;还浪费纸张&#xff0c;那么如何将表格打印在一张纸上呢&#xff1f;下面小编为你介绍几种方法和解决方案&…...

dbt 增量策略模型实战教程

上文我们介绍了增量策略的理论知识&#xff0c;本文结合实际场景介绍如何合理利用增量策略&#xff0c;内容包括应用场景、常见问题及解决方案。 应用场景 增量模型是定义如何增量向数据模型添加数据的有效方法——假设我们有描述信用卡交易的数据表——我们创建DBT模型&#…...

【含文档】基于Springboot+Android的校园论坛系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...

Go版数据结构 -【8.4 快速排序】

8.4 快速排序 快速排序是一种分而治之的排序算法。它通过随机选择一个基准元素&#xff0c;将数组分为两部分。 一部分比基准元素小&#xff0c;另一部分比基准元素大&#xff0c;之后对两部分排序。 快速排序以其平均情况下的 O(n log n) 时间复杂度和良好的性能而广泛应用…...

达梦DBLINK访问ORACLE配置方法

目录 1、概述 2、测试环境 3、语法简介 4、配置访问DM的DBLINK 5、配置访问ORACLE的DBLINK 5.1 通过OCI配置 5.2 通过ODBC配置 1、概述 本文介绍了达梦DBLINK的配置方法。有3部分内容&#xff0c;1&#xff09;达梦访问到达梦的配置方法&#xff1b;2&#xff09;通过OC…...

基础知识1

目录 1、gcd最大公因数 2、最小公倍数 3、素数问题 ①简单数学求法 ②素数筛 ③线性筛 1、gcd最大公因数 int gcd(int a,int b){return b0?a:gcd(b,a%b);} 做题过程中&#xff0c;如果数据太大&#xff0c;需要边做边对分子分母进行约分 2、最小公倍数 int a,b;scanf(&…...

网页前端开发之Javascript入门篇(9/9):对象

Javascript对象 什么是对象? 答&#xff1a;其概念跟 Python教程 的字典基本相似&#xff0c;虽然存有一些差异&#xff0c;不过对于目前的教程来讲可以忽略。 下面是对象的语法&#xff1a; var aaa {"弓" : "张","木" : "李",&…...

Oracle RAC IPC Send timeout detected问题分析处理

一、报错信息 今天在进行数据库巡检时&#xff0c;在集群节点1发现了IPC相关报错信息&#xff1a; 2024-10-10T10:22:06.84631708:00 IPC Receiver dump detected. Sender instance 2 Receiver pnum 277 ospid 377527 [oraclezxsszpt-sjkfwq1 (PPA6)], pser 124403 2024-10-1…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...