[深度学习]--分类问题的排查错误的流程
原因复现:
原生的.pt 好使, 转化后的 CoreML不好使, 分类有问题。
yolov8 格式的支持情况
Format Argument Suffix CPU GPU
0 PyTorch - .pt True True
1 TorchScript torchscript .torchscript True True
2 ONNX onnx .onnx True True
3 OpenVINO openvino _openvino_model True False
4 TensorRT engine .engine False True
5 CoreML coreml .mlpackage True False
6 TensorFlow SavedModel saved_model _saved_model True True
7 TensorFlow GraphDef pb .pb True True
8 TensorFlow Lite tflite .tflite True False
9 TensorFlow Edge TPU edgetpu _edgetpu.tflite True False
10 TensorFlow.js tfjs _web_model True False
11 PaddlePaddle paddle _paddle_model True True
12 NCNN ncnn _ncnn_model True True
这里可以看到CoreML 只支持cpu, 尼玛tflite也是只支持cpu的
def test_coreml():detect_weight = '/home/justin/Desktop/code/python_project/Jersey-Number/runs/detect/train64/weights/best.pt'model_detect = YOLO(detect_weight)results = model_detect(source="/home/justin/Desktop/code/python_project/Jersey-Number/zr_yz.MP4",stream=True,classes=[3])class_weight = '/home/justin/Desktop/code/python_project/Jersey-Number/runs/classify/train7/weights/best.mlpackage'class_weight = '/home/justin/Desktop/code/python_project/Jersey-Number/runs/classify/train7/weights/best.mlpackage'model_class = YOLO(class_weight)# 要使用的字体fontFace = cv2.FONT_HERSHEY_SIMPLEXfontScale = 3thickness = 1img_count = 0for result in results:img_count+=1if img_count == 6:a = 1boxes = result.boxes # Boxes object for bounding box outputsfor box in boxes:cls = box.cls.item()conf = box.conf.item()if conf > 0.5:x1,y1,x2,y2 = box.xyxy.tolist()[0]x1,y1,x2,y2 = int(x1),int(y1),int(x2),int(y2)orig_img = result.orig_img# H,W = orig_img.orig_shapecv2.imwrite("/home/justin/Desktop/code/python_project/Jersey-Number/runs/imgs"+"{:06d}-raw.jpg".format(img_count),orig_img)cropped_image = orig_img[y1:y2,x1:x2]# res_number_class = model_class(cropped_image,save_txt=True,save=True)res_number_class = model_class(cropped_image, device = "cpu")cv2.rectangle(orig_img, (int(x1), int(y1)), (int(x2), int(y2)), (255, 0, 0), 2) for r in res_number_class:if hasattr(r,"probs"):if r.probs.top1conf.item() > 0.2:class_name = r.names[r.probs.top1](width, height), bottom = cv2.getTextSize(class_name, fontFace, fontScale=fontScale, thickness=thickness)cv2.putText(orig_img, class_name+" conf:"+str(r.probs.top1conf.item()), (x1 - width, y1-height), fontFace, fontScale, color=(0, 0, 255), thickness=thickness,lineType=cv2.LINE_AA)cv2.imwrite("/home/justin/Desktop/code/python_project/Jersey-Number/runs/imgs"+"{:06d}.jpg".format(img_count),orig_img)
报错的这句话值得看一眼:
sklearn不支持,tensorflow和torch没测试过,可能会有问题。 先跑跑再说吧
Loading /home/justin/Desktop/code/python_project/Jersey-Number/runs/classify/train7/weights/best.mlpackage for CoreML inference...
scikit-learn version 1.4.2 is not supported. Minimum required version: 0.17. Maximum required version: 1.1.2. Disabling scikit-learn conversion API.
TensorFlow version 2.13.1 has not been tested with coremltools. You may run into unexpected errors. TensorFlow 2.12.0 is the most recent version that has been tested.
Torch version 2.3.0+cu121 has not been tested with coremltools. You may run into unexpected errors. Torch 2.1.0 is the most recent version that has been tested.
所以还要降级,真是麻烦,tensorflow是因为要转android侧的模型。
这里要给个参数,来指定cpu复现
res_number_class = model_class(cropped_image, device = “cpu”)
这意思是不能用pytorch 跑了吗? @todo, 然后用pytorch 2.0的环境试一下看看怎么样?@todo,
核心诉求是要把coreml的模型加载起来,看看是不是存在一样的错误
Exception has occurred: Exception
Model prediction is only supported on macOS version 10.13 or later.File "/home/justin/Desktop/code/python_project/Jersey-Number/zr_yz.py", line 76, in test_coremlres_number_class = model_class(cropped_image, device = "cpu")^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/home/justin/Desktop/code/python_project/Jersey-Number/zr_yz.py", line 88, in <module>test_coreml()
Exception: Model prediction is only supported on macOS version 10.13 or later.
detect 参数
detect_conf = 0.5172230005264282
切割位置: x1,y1,x2,y2
1. 原始位置:[1648.0953369140625, 882.2176513671875, 1682.9732666015625, 980.842041015625]
2.强制转成int 为后面切出这个区域做准备(1648, 882, 1682, 980)分类输出结果:top1:64top1conf:tensor(0.9994, device='cuda:0')top5:[64, 53, 10, 0, 20]top5conf:tensor([9.9943e-01, 4.8942e-04, 1.9284e-05, 1.8095e-05, 8.8464e-06], device='cuda:0')
垃圾
shit CoreML模型只能在mac 上跑, 而且只能用CoreMl 跑么??? @todo???
确实只能在mac上跑
ref:
coreml的文档:
https://developer.apple.com/documentation/coreml
coremltool的文档:
https://apple.github.io/coremltools/docs-guides/
一段python代码:
import coremltools as ct
import PIL
import torch
import numpy as npdef get_x1y1x2y2(coordinate,img):width,height = img.size()center_x = int(coordinate[0] * width)center_y = int(coordinate[1] * height)img_w = int(coordinate[2]*width)img_h = int(coordinate[3]*height)return center_x, center_y, img_w, img_hdef ml_test_detect():mlmodel = ct.models.MLModel('/Users/smkj/Desktop/Code/justin/head_person_hoop_number_v8n.mlpackage')print(mlmodel)img = PIL.Image.open("/Users/smkj/Desktop/Code/justin/imgs000006-raw.jpg").resize((640,384))res = mlmodel.predict({"image":img})confidence_max_list = list(np.array(res['confidence']).argmax(axis=1))# array([0.86775684, 0.8630705 , 0.01861118, 0.09405255], dtype=float32)for row_index, class_id in enumerate(confidence_max_list):if class_id == 3:coordinate = res['coordinates'][row_index]x1,y1,x2,y2 = 555 - 12 / 2, 333 - 36 / 2, 555 + 12/2, 333 + 36/2im=img.crop((x1, y1, x2, y2))im.save("bbb.jpg")print(res)
# print(img)
def ml_test_classify():img = PIL.Image.open("/Users/smkj/Desktop/Code/justin/bbb.jpg").resize((64,64))mlmodel = ct.models.MLModel('/Users/smkj/Desktop/Code/justin/classification.mlpackage')res = mlmodel.predict({"image":img})max_key = max(res['classLabel_probs'], key=res['classLabel_probs'].get)print("class_name:",max_key, "confidence:",res['classLabel_probs'].get(max_key))a = 1
ml_test_classify()
在mac上安装opencv实在是太费劲了,各位自求多福吧!
用这个可以替代opencv: pip install pillow
置信度也是99.99
coreml不爽的点是必须要固定尺寸??? @todo 也许是我用惯了动态尺寸的原因。 anyway,今天调试了一天,在两个电脑上装了环境,算是搞定了。!!!
相关文章:

[深度学习]--分类问题的排查错误的流程
原因复现: 原生的.pt 好使, 转化后的 CoreML不好使, 分类有问题。 yolov8 格式的支持情况 Format Argument Suffix CPU GPU 0 PyTorch - .pt True True 1 Tor…...

微信小程序简易录音机
首先先创建一个项目(想必大家都会啦那就直接开干) 首先上html结构 <view class"wx-container"><view id"title">录音机</view><view id"time">{{hours}}:{{minute}}:{{second}}</view>&l…...

Ollama深度探索:AI大模型本地部署的全面教程
目录 引言一、Ollama概述1、定义与定位2、核心功能3、技术优势4、应用场景 二、安装与配置1、系统要求2、安装方法3、配置指南4、启动Ollama服务 四、快速开始1、启动Ollama2、部署运行模型3、REEST API 五、自定义模型1、定制化的必要性2、使用Modelfile定制模型3、参数调整4、…...

文心一言 VS 讯飞星火 VS chatgpt (285)-- 算法导论21.2 4题
四、请给出图 21-3 所示操作序列的一个运行时间的渐近紧确界,假定使用链表表示和加权合并启发式策略。如果要写代码,请用go语言。 文心一言: 图 21-3 没有直接给出,但通常这种操作序列可能与某种数据结构(如并查集或…...

基于springboot实现影院订票系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现影院订票系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本影院订票系统就是在这样的大环境下诞生,其可以帮助管理者在…...
Linux 常用命令合集
进入root模式 su -> 回车 -> 输入root用户密码关闭系统 方法1: shutdown -h now 方法2: init 0 方法3: telinit 0按预定时间关闭系统 shutdown -h hours:minutes &取消按预定时间关闭系统 shutdown -c重启 shutdown -r now重启…...

Vue3插件安装
一、volar插件安装 volar:Vue文件的语法提示和高亮提醒。volar已经更名为Vue - Official,其安装步骤如下。 (1)打开vscode,点击扩展面板,在搜索窗口中输入volar,选择Vue - Official进行安装。 (2࿰…...

Redis精要
一、什么是缓存击穿、缓存穿透、缓存雪崩? 缓存穿透 【针对大量非法访问的请求,缓存中没有,直接访问DB】 缓存穿透指的查询缓存和数据库中都不存在的数据,这样每次请求直接打到数据库,就好像缓存不存在 一样。 对于系…...

国产24位I2S输入+192kHz立体声DAC音频数模转换器CJC4344
CJC4344是一款立体声数模转换芯片,内含插值滤波器、multi bit数模转换器、输出模拟滤波器。CJC4344系列支持大部分的音频数据格式。CJC4344基于一个带线性模拟低通滤波器的四阶multi-bitΔ-Σ调制器,而且本芯片可以通过检测信号频率和主时钟频率…...

UniApp 开发微信小程序教程(一):准备工作和环境搭建,项目结构和配置
文章目录 一、准备工作和环境搭建1. 安装 HBuilderX步骤: 2. 注册微信开发者账号步骤: 3. 创建 UniApp 项目步骤: 二、项目结构和配置1. UniApp 项目结构2. 配置微信小程序修改 manifest.json修改 pages.json 3. 添加首页文件index.vue 示例&…...

[WTL/Win32]_[中级]_[MVP架构在实际项目中的应用]
场景 在开发Windows和macOS的界面软件时,Windows用的是WTL/Win32技术,而macOS用的是Cocoa技术。而两种技术的本地语言一个主打是C,另一个却是Object-c。界面软件的源码随着项目功能增多而增多,这就会给同步Windows和macOS的功能造成很大负担…...

《Windows API每日一练》5.2 按键消息
上一节中我们得知,Windows系统的按键消息有很多类型,大部分按键消息都是由Windows系统的默认窗口过程处理的,我们自己只需要处理少数几个按键消息。这一节我们将详细讲述Windows系统的所有按键消息及其处理方式。 本节必须掌握的知识点&…...
adb 截屏和录屏命令
adb 录屏命令 screenrecord 简介 screenrecord 是一个 shell 命令 支持 Android 4.4(API level 19)以上 支持视频格式: mp4 一些限制 某些设备可能无法直接录制,原因是分辨率太高,如果遇到此类问题,请试着指定较低的分辨率 不支持录制过程中屏幕旋转,如果录制…...

springboot相关的一些知识
SpringBoot可以同时处理多少请求 SpringBoot默认的内嵌容器是Tomcat,所以SpringBoot可以同时处理多少请求取决于Tomcat。 SpringBoot中处理请求数量相关的参数有四个: server.tomcat.thread.min-spare:最少的工作线程数,默认大小…...

DP:完全背包+多重背包问题
完全背包和01背包的区别就是:可以多次选 一、完全背包(模版) 【模板】完全背包_牛客题霸_牛客网 #include <iostream> #include<string.h> using namespace std; const int N1001; int n,V,w[N],v[N],dp[N][N]; //dp[i][j]表示…...
购物返利系统的安全性:防范欺诈与数据保护
购物返利系统的安全性:防范欺诈与数据保护 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 购物返利系统作为一种电子商务模式,通过向消…...

从WebM到MP3:利用Python和wxPython提取音乐的魔法
前言 有没有遇到过这样的问题:你有一个包含多首歌曲的WebM视频文件,但你只想提取其中的每一首歌曲,并将它们保存为单独的MP3文件?这听起来可能有些复杂,但借助Python和几个强大的库,这个任务变得异常简单。…...

图片转pdf,图片转pdf在线转换,在线图片转pdf
图片转PDF,听起来似乎是一个简单的操作,但实际上,它涉及到许多细节和技巧。有时候我们需要将图片转换为PDF格式,以便于分享、打印或保存。那么,如何将图片转换成PDF呢?接下来,我将为您详细介绍几…...
SpringBoot3使用Swagger3
SpringBoot3使用Swagger3 项目中的后端接口进行简单的前端展示一、依赖引入二、快速启动1.在application.yml中配置2.或者properties文件,则配置3.启动项目访问swagger 三、使用注解标注接口Swagger配置文件Swagger 注解迁移举例五种常用ApiApiOperationApiImplicitParamApiMod…...

【51单片机基础教程】点亮led
文章目录 前言51单片机点亮LED的原理硬件部分软件部分51单片机的寄存器编程步骤proteus仿真点亮一个led 点亮多个ledproteus仿真代码 流水灯 总结 前言 单片机(Microcontroller Unit, MCU)是一种集成电路,广泛应用于各种电子产品中。作为嵌入…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...