<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog on ᕕ( ᐛ )ᕗ Wu555&#39;s World</title>
    <link>https://IamWu555.me/blog/</link>
    <description>Recent content in Blog on ᕕ( ᐛ )ᕗ Wu555&#39;s World</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <copyright>Copyright © 2026 IamWu555</copyright>
    <lastBuildDate>Thu, 03 Apr 2025 19:10:33 +0800</lastBuildDate>
    <atom:link href="https://IamWu555.me/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>小狗机器人</title>
      <link>https://IamWu555.me/blog/202504034/</link>
      <pubDate>Thu, 03 Apr 2025 19:10:33 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202504034/</guid>
      <description>小狗机器人&#xA;#include &amp;lt;Wire.h&amp;gt; #include &amp;lt;Adafruit_PWMServoDriver.h&amp;gt; Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); // 舵机PWM范围 #define SERVOMIN 102 #define SERVOMAX 512 // 舵机编号（保留原始定义） #define LF 0 // 左前腿 Left Front #define RF 1 // 右前腿 Right Front #define RH 2 // 右后腿 Right Hind #define LH 3 // 左后腿 Left Hind // 角度定义 #define NEUTRAL 90 // 中立位置 #define STEP_UP 65 // 抬腿角度 #define STEP_FORWARD 40 // 向前伸展角度 #define STEP_BACK 120 // 向后推进角度 #define STEP_UP1 115 // 抬腿角度 #define STEP_FORWARD1 140 // 向前伸展角度 #define STEP_BACK1 60 // 定义步态延迟(毫秒) #define MOVEMENT_DELAY 150 void setup() { Serial.</description>
    </item>
    <item>
      <title>PoopLog：一款实用的排便追踪应用</title>
      <link>https://IamWu555.me/blog/202503252/</link>
      <pubDate>Tue, 25 Mar 2025 17:32:46 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202503252/</guid>
      <description>💩PoopLog采用了现代化的Material Design 3风格，界面清爽、直观。紫色系的配色既优雅又不失活力，让记录排便变得轻松有趣。&#xA;💩PoopLog希望能以一种轻松、有趣的方式，帮助大家关注自身健康。记录不应该是负担，而是了解自己的一种方式。&#xA;💩 让我们一起，用数据记录健康的小确幸！&#xA;💩 点击下载PoopLog&#xA;## 更新日志 2025/3/25 增加了删除记录功能&#xA;优化了统计功能&#xA;2025/5/5 添加自定义emoji功能&#xA;待修复次数显示bug</description>
    </item>
    <item>
      <title>电流监测系统</title>
      <link>https://IamWu555.me/blog/202501094/</link>
      <pubDate>Thu, 09 Jan 2025 15:38:46 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202501094/</guid>
      <description>材料准备 Arduino uno R4 wifi版开发板&#xA;杜邦线（公对公母对母公对母）若干&#xA;INA226模块（焊接好的）&#xA;想法 想实现对指定电路的电流实时监控，实时传输到远程设备上&#xA;整个设计思路就是通过电流模块去获取电流信息，arduino传输数据到远程。&#xA;最开始的想法是arduino获取电流信息，然后通过蓝牙传输到电脑端，电脑端写点脚本把信息分发出去。&#xA;后面拿到arduino发现有更简单的思路：arduino可以建立wifi热点，相当于路由器，然后创建网页，在网页端实时更新电流数据。&#xA;实践 vcc接3.3v gnd接gnd sda接sda scl接scl&#xA;根据测量的电路大小设置INA226模块参数&#xA;const float SHUNT_RESISTOR = 0.01; //设置为实际使用的分流电阻值&#xD;const float MAX_CURRENT = 0.005; //预期测量的最大电流值&#xD;const float ZERO_THRESHOLD = 0.005; //需要调整零点阈值,因为模块有一定的空载电流 #include &amp;#34;INA226.h&amp;#34;&#xD;#include &amp;lt;Wire.h&amp;gt;&#xD;#include &amp;lt;WiFiS3.h&amp;gt;&#xD;INA226 INA(0x40);&#xD;// WiFi配置&#xD;const char* ssid = &amp;#34;Current_Monitor&amp;#34;;&#xD;const char* password = &amp;#34;12345678&amp;#34;;&#xD;WiFiServer server(80);&#xD;String response = &amp;#34;&amp;#34;;&#xD;// INA226配置参数&#xD;const float SHUNT_RESISTOR = 0.01;&#xD;const float MAX_CURRENT = 0.</description>
    </item>
    <item>
      <title>Blog Moving (Physical</title>
      <link>https://IamWu555.me/blog/202401302/</link>
      <pubDate>Tue, 30 Jan 2024 21:04:46 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202401302/</guid>
      <description>换新电脑了，记录一下博客的迁移&#xA;在hugo releases中下载hugo，需要注意的是AMD得下载-amd64版本&#xA;得到hugo.exe，将其所在文件夹设置为系统环境变量&#xA;得装个git和node.js&#xA;git bash博客文件夹，hugo server测试一下；npm install vercel安装vercel&#xA;安装成功后，vercel login，选择GitHub认证，等待即可&#xA;hugo&#xA;vercel &amp;ndash;prod &amp;ndash;yes&#xA;vercel –prod –yes 报错：Vercel CLI 33.4.0 Error: Can&amp;rsquo;t deploy more than one path.&#xA;Simplifying your command to just: vercel --prod</description>
    </item>
    <item>
      <title>Image processing between two CNN</title>
      <link>https://IamWu555.me/blog/202310312/</link>
      <pubDate>Tue, 31 Oct 2023 15:55:18 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202310312/</guid>
      <description>实现了一个对物体进行图像分割,提取感兴趣区域,并进行遮挡恢复和图像合并的流水线处理&#xA;img_selected函数: 从指定文件夹中遍历所有子文件夹 对每个子文件夹中的metadata.csv文件进行解析 根据面积阈值筛选图片并保存到输出目录&#xA;img_recovered函数: 遍历img_selected输出目录中的所有子文件夹 对每个子文件夹,读取原始图像,并用子文件夹中的遮挡图像来恢复被遮挡的区域 将恢复后的图像保存到输出目录&#xA;img_merged函数: 遍历img_recovered目录中的所有子文件夹 对每个子文件夹,将其中的所有图像叠加合并为一张图片 将合并后的图片保存到输出目录&#xA;main函数: 调用上述三个函数,完成图像选择、恢复和合并的完整流水线 允许通过参数配置输入输出文件夹等&#xA;import pandas as pd import os from PIL import Image import cv2 import numpy as np from rich.progress import Progress, BarColumn, SpinnerColumn, TimeElapsedColumn, TimeRemainingColumn import time def wu555_progress(): return Progress( &amp;#34;[progress.description]{task.description}({task.completed}/{task.total})&amp;#34;, SpinnerColumn(finished_text=&amp;#34;[green]✔&amp;#34;), BarColumn(), &amp;#34;[progress.percentage]{task.percentage:&amp;gt;3.2f}%&amp;#34;, &amp;#34;[yellow]⏱ &amp;#34;, TimeElapsedColumn(), &amp;#34;[cyan]⏳&amp;#34;, TimeRemainingColumn(), &amp;#34;[red]Wu~&amp;#34; ) def img_selected(folder_path, lower_threshold, upper_threshold, selected_output_folder): sequence_folders = os.listdir(folder_path) progress = wu555_progress() task = progress.</description>
    </item>
    <item>
      <title>Pytoexe</title>
      <link>https://IamWu555.me/blog/202310043/</link>
      <pubDate>Wed, 04 Oct 2023 11:44:46 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202310043/</guid>
      <description>接上文，python文件得转化成exe文件，这里用的时auto-py-to-exe&#xA;auto-py-to-exe pip install auto-py-to-exe&#xA;Then to run it,&#xA;pip show auto-py-to-exe&#xA;Name: auto-py-to-exe Version: 2.39.0 Summary: Converts .py to .exe using a simple graphical interface. Home-page: https://github.com/brentvollebregt/auto-py-to-exe Author: Brent Vollebregt Author-email: brent@nitratine.net License: MIT Location: c:\users\iamwu555\appdata\roaming\python\python39\site-packages Requires: Eel, pyinstaller Required-by: 访问Location，运行auto-py-to-exe&#xA;报错 代码中需要导出excel文件，这里用到了openpyxl库，打包就会报错。&#xA;这里需要把openpyxl版本降下来，pip uninsrall openpyxl ，pip install openpyxl==2.3.5</description>
    </item>
    <item>
      <title>实验室药品管理系统</title>
      <link>https://IamWu555.me/blog/202310043/</link>
      <pubDate>Wed, 04 Oct 2023 11:28:57 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202310043/</guid>
      <description>Python写了个实验室药品管理系统，简陋但能用&#xA;功能介绍 这段代码实现了一个药品管理系统的基本功能，包括：&#xA;连接数据库：建立与SQLite数据库文件的连接。&#xA;创建数据库表格：创建名为&amp;quot;purchase&amp;quot;和&amp;quot;usage&amp;quot;的数据库表格。&#xA;主窗口：显示应用程序的主窗口，包括菜单栏和状态栏。&#xA;添加购买记录：通过菜单栏选项添加购买药品的记录。&#xA;查询购买记录：通过菜单栏选项查询购买药品的记录，并在对话框中显示查询结果。&#xA;添加使用记录：通过菜单栏选项添加使用药品的记录。&#xA;查询使用记录：通过菜单栏选项查询使用药品的记录，并在对话框中显示查询结果。&#xA;导出购买记录：通过菜单栏选项将购买记录导出到Excel文件。&#xA;导出使用记录：通过菜单栏选项将使用记录导出到Excel文件。&#xA;计算购买价格总和：通过菜单栏选项计算购买记录中所有药品价格的总和。&#xA;显示购买药品记录表格：在主窗口中显示购买药品记录的表格。&#xA;显示使用药品记录表格：在主窗口中显示使用药品记录的表格。&#xA;上述功能通过使用PyQt6库的各种类和方法实现，包括窗口类、菜单类、对话框类、表格类等。数据库操作使用了QSqlQuery类来执行SQL查询和更新操作，表格的显示和更新使用了QTableWidget类。&#xA;代码 import sys from PyQt6.QtCore import Qt, QDateTime, QUrl from PyQt6.QtSql import QSqlDatabase, QSqlQuery from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox, QTableWidget, QTableWidgetItem, QDateTimeEdit, QHeaderView, QDialog, QInputDialog, QFileDialog, QComboBox from PyQt6.QtGui import QIcon, QDesktopServices from openpyxl import Workbook def createConnection(): try: db = QSqlDatabase.addDatabase(&amp;#34;QSQLITE&amp;#34;) db.setDatabaseName(&amp;#34;medicine.db&amp;#34;) if not db.open(): QMessageBox.critical(None, &amp;#34;无法打开数据库&amp;#34;, &amp;#34;无法建立数据库连接！&amp;#34;, QMessageBox.</description>
    </item>
    <item>
      <title>角度计算终章</title>
      <link>https://IamWu555.me/blog/202305302/</link>
      <pubDate>Tue, 30 May 2023 09:56:22 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202305302/</guid>
      <description>角度计算终章 2023/6/1更新start&#xA;不知道遇到了什么问题，当多个物体出现在同一张图片时，角度输出的有问题，修改如下：&#xA;首先新建文件夹还是一样 还是得在# segment下的得到坐标点，也就是说之前是在*xyxy 循环下找坐标点并输出的，是错误的。修改代码如下（放在if save_txt下 ################################################################# im0_h, im0_w, im0_c = im0.shape for k, seg_list in enumerate(segments): # 将归一化的点转换为坐标点 new_seg_list = [] for s_point in seg_list: pt1, pt2 = s_point new_pt1 = int(pt1 * im0_w) new_pt2 = int(pt2 * im0_h) new_seg_list.append([new_pt1, new_pt2]) rect = cv2.minAreaRect(np.array(new_seg_list)) # 得到最小外接矩形的（中心(x,y), (宽,高), 旋转角度） rect_width = rect[1][0] rect_hight = rect[1][1] OrientationAngle = &amp;#39;{:.2f}&amp;#39;.format(rect[2]) if rect_width &amp;gt; rect_hight: pass else: OrientationAngle = &amp;#39;{:.2f}&amp;#39;.format(rect[2] + 90) rect_box = np.</description>
    </item>
    <item>
      <title>角度计算</title>
      <link>https://IamWu555.me/blog/202305210/</link>
      <pubDate>Sun, 21 May 2023 11:16:41 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202305210/</guid>
      <description>角度计算 YOLOv5-7.0实例分割训练自己的数据，切分mask图并摆正_jin__9981的博客-CSDN博客&#xA;这篇博客介绍了如何使用YOLOv5-7.0进行实例分割训练，并展示了如何切分mask图并摆正。该博客提供了详细的步骤和代码示例。&#xA;在 predict.py 的第 170 行添加以下代码：&#xA;im0_h, im0_w, im0_c = im0.shape for k, seg_list in enumerate(segments): # 将归一化的点转换为坐标点 new_seg_list = [] for s_point in seg_list: pt1, pt2 = s_point new_pt1 = int(pt1 * im0_w) new_pt2 = int(pt2 * im0_h) new_seg_list.append([new_pt1, new_pt2]) rect = cv2.minAreaRect(np.array(new_seg_list)) # 得到最小外接矩形的（中心(x,y), (宽,高), 旋转角度） jiaodu_path =Path(str(save_dir) + &amp;#34;\\jiaodu.txt&amp;#34;) with open(jiaodu_path,&amp;#39;a&amp;#39;) as f: f.write(p.name + &amp;#39;: &amp;#39;) f.write(&amp;#39;{:.2f}&amp;#39;.format(rect[2])) f.write(&amp;#39;\n&amp;#39;) https://theailearner.com/tag/cv2-minarearect/#:~:text=OpenCV%20provides%20a%20function%20cv2.minAreaRect%20%28%29%20for%20finding,of%20rotation%29.%20The%20syntax%20is%20given%20below.%201&#xA;算法旋转角度解释</description>
    </item>
    <item>
      <title>再构想</title>
      <link>https://IamWu555.me/blog/202304215/</link>
      <pubDate>Fri, 21 Apr 2023 16:37:41 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202304215/</guid>
      <description>基于改进YOLOv5的刨花实例分割 目标 构建检测速度快，识别准确率高的神经网络 用于复杂环境下定向刨花板铺装过程中刨花定向角度的检测 降低Yolov5的权重文件大小，使其便于嵌入式或移动端设备的开发 思路 大片刨花分割数据集的构建，由于公开的刨花分割数据集较少，构建一个新的大片刨花的数据集。 提供了与现有主流的实例分割网络、目标检测网络的对比 基于YOLOv5的刨花检测与分割。使用多种任务模型来解决复杂环境下刨花分割图像的问题，在保证高精度的同时进行检测和分割。同时利用Ghost模块或Shuflenetv2模块进一步优化模型，减少模型的参数量。 基于分割后的图像对刨花进行定向角度的测量 一些主流神经网络算法及YOLOv5改进思路 YOLOv3-ting YOLOv8 YOLOv5s-segment C3 YOLOv5s-segment C3Ghost(+Hardswish) YOLOv5s-segment Shufflenet(+Hardswish) YOLOv5主干网络概述 网络结构&#xA;YOLOv5算法是单阶段目标识别算法（one stage），即基于整个图片/视频进行预测，一次性给出所有检测结果。&#xA;网络结构主要由输入端、Backbone、 Neck、Head 四部分构成，输入端使用 Mosaic 数据增强、 自适应初始锚框计算、图片缩放等对图像进行预处理。Backbone主要由CBS、Bottleneck、C3、以及SPPF组成。&#xA;CBS模块主要由Conv+BatchNorm+SiLU组成，YOLOv5中的Conv模块通过autopad函数实现自适应padding的效果，并且控制是否对特征图进行激活操作，SiLU表示使用Sigmoid进行激活。&#xA;Bottleneck模块利用两个 Conv 模块将通道数先减小再扩大对齐， 以此提取特征信息，并使用 ShortCut 控制是否进行残差连接。它主要是被封装在C3模块中进行特征提取。&#xA;YOLOv5在backbone中shortcut=True，neck中shortcut=False。&#xA;C3模块输入特征图会通过两个分支，第一个分支先经过一个CBS模块，之后通过堆叠的Bottleneck 模块对特征进行学习；另一分支作为残差连接，仅通过 一个CBS模块。两分支最终按通道进行拼接后，再通过一个CBS模块进行输出。&#xA;SSPF模块将经过CBS模块的x、一次池化后的y1、两次池化后的y2和3次池化后的self.m(y2)先进行拼接，然后再传入CBS模块进行提取特征。此处多次的池化并未对特征图的尺寸进行修改，它的主要作用是对特征进行提取并融合，在融合的过程中作者多次运用最大池化，尽可能多的去提取高层次的语义特征。&#xA;改进后的YOLOv5结构 Ghost模块 ShuffleNetv2 </description>
    </item>
    <item>
      <title>配置文件解析</title>
      <link>https://IamWu555.me/blog/202304204/</link>
      <pubDate>Thu, 20 Apr 2023 10:12:41 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202304204/</guid>
      <description>一些可读的玩意儿_yolov5_segment data/hyps hyp超参数配置文件&#xA;lr0 : 0.01 #初始学习率 (SGD=1E-2, Adam=1E-3) lrf : 0.01 #最终的 OneCycleLR 学习率 (lr0 * lrf) momentum: 0.937 # SGD 动量/Adam beta1 weight_decay : 0.0005 #优化器权重衰减 5e-4 warmup_epochs : 3.0 # warmup epochs (fractions ok) warmup_momentum : 0.8 #预热初始动量 warmup_bias_lr : 0.1 #预热初始偏差 lr box : 0.05 # box loss gain cls : 0.5 # cls 损失增益 cls_pw : 1.0 # cls BCELoss positive_weight obj : 1.0 # obj loss gain（按像素缩放） obj_pw : 1.</description>
    </item>
    <item>
      <title>最初构想</title>
      <link>https://IamWu555.me/blog/202304086/</link>
      <pubDate>Sat, 08 Apr 2023 19:19:41 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202304086/</guid>
      <description>目标检测（弃 拍摄设备 camera: samsung Galaxy S23 3000X4000pixel， 12.00MP 图像预处理 自动定向：丢弃 EXIF 旋转并标准化像素排序。 调整大小：保持纵横比合适的情况下将图像剪切为640X640pixels 数据扩增 反转：添加水平或垂直翻转以便于让模型对方向不敏感。&#xA;旋转：添加 90 度旋转以便于让模型对相机方向不敏感。 此处采用了两种旋转方式：逆时针和顺时针&#xA;灰度处理：概率地（25%）将灰度应用于训练集的子集&#xA;亮度调整：为图像亮度添加可变性，以帮助模型更适应照明和相机设置的变化。 具体调整为25%+和25%-&#xA;YOLOv5模型优化 输入端 YOLOv5 的输入端主要包括马赛克（Mosaic）数据增强、自适应计算锚框和自适应缩放图像三个部分。马赛克数据增强是在模型训练阶段使用的，将四张图片按照随机缩放、随机裁剪和随机排布的方式进行拼接。&#xA;去除Mosaic数据增强&#xA;引入se注意力模块需要去除这玩意才有效果，不知道原因&#xA;主干网络 模型的 Backbone 主要由 C3（改 进 后 的 BottleneckCSP）和空间金字塔池化（spatial pyramid pooling，SPP模块组成。&#xA;引入压缩和激励网络（SE，Squeeze-and-Excitation）&#xA;构建一个融入SE模块的C3，与原C3不同的是，C3SE模块的bottleneck中融入了se模块。&#xA;我的想法是希望建模特征通道之间的相互依赖关系，采用了一种全新的「特征重标定」策略，具体来说，就是通过学习全局信息的方式来自动获取到每个特征通道的重要程度，然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。&#xA;参考论文：1709.01507.pdf (arxiv.org)&#xA;Neck 模块 暂时未做改进&#xA;输出端 输出端采用 GIOU 函数作为边界框的损失函数，在目标检测后处理过程中，使用非极大值抑制（non maximum suppression，NMS）来对多目标框进行筛选，增强了多目标和遮挡目标的检测能力。&#xA;将GIOU函数替换为SIOU函数&#xA;鉴于GIOU没有考虑到所需真实框与预测框之间不匹配的方向。这种不足导致收敛速度较慢且效率较低，因为预测框可能在训练过程中“四处游荡”并最终产生更差的模型。所以我选用了新的损失函数 SIoU，其中考虑到所需回归之间的向量角度，重新定义了损失指标。&#xA;参考论文：[2205.12740] SIoU Loss: More Powerful Learning for Bounding Box Regression (arxiv.org)&#xA;改进后的YOLOv5网络结构 表中的 from 列表示输入来自哪一层，列中−1表示来自上一层的输出，params 列表示参数的大小，module 为子模块，arguments 表示模块参数的信息，包括输入通道数、输出通道数、卷积核大小、步长信息等。</description>
    </item>
    <item>
      <title>YOLOv5添加模块</title>
      <link>https://IamWu555.me/blog/202303271/</link>
      <pubDate>Mon, 27 Mar 2023 15:26:41 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202303271/</guid>
      <description>添加一下模块 没用，看不懂 工具：Netron&#xA;需要用export.py对pt文件进行导出&#xA;Usage: $ python export.py --weights yolov5s.pt --include torchscript onnx openvino engine coreml tflite ... 这里导出为onnx格式，直接适配Netron工具&#xA;pip install onnx python export.py --weight yolov5s.pt --include onnx 添加注意力机制 具体怎么修改可以直接用double-vin/yolov5_attention (github.com)cang&amp;rsquo;l仓库&#xA;SENet 和使用yolov5官方的网络构架对比来说，加入se注意力机制模块后，就目前状况下，出现了一定的问题。&#xA;背景：15张刨花板图片，不添加任何模块的情况下，1.4hour+完成了训练。结果见yoloV5_results&#xA;在SPPF前加入se模块后，在第222轮结束后出现了：Stopping training early as no improvement observed in last 100 epochs. Best results observed at epoch 122, best model saved as best.pt.&#xA;而且原本是通过增加少量的计算成本提升精度，就我的情况来说是降低了计算成本，也降低了精度。&#xA;结果也是非常的糟糕。&#xA;C3SE 1.612hours&#xA;而没有添加任何模块的结果或许收敛的更好&#xA;我觉得，se模块说通过对全局信息的学习，去加强对象的特征，可能我全局全是刨花，才效果不理想的。&#xA;更新 需要删除yolov5自带的Mosaic数据增强才有效果！</description>
    </item>
    <item>
      <title>YOLOv5训练结果</title>
      <link>https://IamWu555.me/blog/202303190/</link>
      <pubDate>Sun, 19 Mar 2023 22:27:12 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202303190/</guid>
      <description>yoloV5_results 训练完成后会生成一个exp的文件夹 weights best.pt和last.pt，最好的和最后一次的，做detect是用best&#xA;confusion——matrix.png 混淆矩阵&#xA;event.out 未知&#xA;F1_curve.png 置信度和F1曲线的关系，x轴为置信度，y轴为F1得分&#xA;hyp.yaml 训练相关超参数&#xA;labels.jpg 左一：每个类别的数据量 （只有一个类别 右一：labels的 bounding_box&#xA;左二：labels的中心点坐标&#xA;右二：labels的矩阵宽高&#xA;labels_correlogram.jpg 比较复杂，看不懂，别人的解释如下： labels的中心点x,y和矩阵宽高w,h&#xA;顶端对角线上：各自的分布直方图&#xA;其余位置：相互之间的分布情况&#xA;opt.yaml 最优参数&#xA;P_curve.png 准确率与置信度的关系&#xA;PR_curve.png PR曲线中的P代表的是precision（精准率），R代表的是recall（召回率），其代表的是精准率与召回率的关系，一般情况下，将recall设置为横坐标，precision设置为纵坐标。PR曲线下围成的面积即AP，所有类别AP平均值即Map. 如果PR图的其中的一个曲线A完全包住另一个学习器的曲线B，则可断言A的性能优于B，当A和B发生交叉时，可以根据曲线下方的面积大小来进行比较。一般训练结果主要观察精度和召回率波动情况（波动不是很大则训练效果较好） Precision和Recall往往是一对矛盾的性能度量指标； 提高Precision == 提高二分类器预测正例门槛 == 使得二分类器预测的正例尽可能是真实正例； 提高Recall == 降低二分类器预测正例门槛 == 使得二分类器尽可能将真实的正例挑选&#xA;R_curve.png 召回率和置信度之间的关系&#xA;results.csv 每一次迭代对应的&#xA;train/box_loss, train/obj_loss, train/cls_loss metrics/precision,metrics/recall,metrics/mAP_0.5,metrics/mAP_0.5:0.95 val/box_loss, val/obj_loss,val/cls_loss,x/lr0, x/lr1, x/lr2&#xA;result.png Box_loss：YOLO V5使用 GIOU Loss作为bounding box的损失，Box推测为GIoU损失函数均值，越小方框越准； Objectness_loss：推测为目标检测loss均值，越小目标检测越准； Classification_loss：推测为分类loss均值，越小分类越准； Precision：精度（找对的正类/所有找到的正类）； Recall：真实为positive的准确率，即正样本有多少被找出来了（召回了多少）.Recall从真实结果角度出发，描述了测试集中的真实正例有多少被二分类器挑选了出来，即真实的正例有多少被该二分类器召回。 val Box_loss: 验证集bounding box损失; val Objectness_loss：验证集目标检测loss均值; val classification_loss：验证集分类loss均值; mAP@.</description>
    </item>
    <item>
      <title>YOLOv5初体验</title>
      <link>https://IamWu555.me/blog/202303142/</link>
      <pubDate>Tue, 14 Mar 2023 15:26:41 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202303142/</guid>
      <description>Before You Start Clone repo and install requirements.txt in a Python&amp;gt;=3.7.0 environment, including PyTorch&amp;gt;=1.7. Models and datasets download automatically from the latest YOLOv5 release. 我直接装最新的稳定版。&#xA;安装anacoda3 配置环境变量，安装在D盘，把D:\Anaconda\xx搞上 打开Anaconda Prompt（Anaconda3) 创建环境，得创建在D盘（C盘太小了，默认是C盘）&#xA;cd D:\\Anaconda\\envs conda create --prefix=/torch python=3.9 torch 为创建的环境名称 激活环境 activate D:\torch&#xA;安装pytorch 官网：Start Locally | PyTorch 不能选conda，会卡soving enviroment，网络问题，选pip安装，注意网络。&#xA;pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116 ![[Pasted image 20230313214802.png]]&#xA;安装YoloV5 git clone https://github.com/ultralytics/yolov5 # clone cd yolov5 pip install -r requirements.txt # install 具体见befor you start</description>
    </item>
    <item>
      <title>openCV对图像形状、颜色、方向的识别</title>
      <link>https://IamWu555.me/blog/202301146/</link>
      <pubDate>Sat, 14 Jan 2023 16:18:41 +0800</pubDate>
      <guid>https://IamWu555.me/blog/202301146/</guid>
      <description>openCV对图像形状、颜色、方向的识别 首先是对图片进行处理，未知（懒得知道）原因需要黑色背景，亮色物体。&#xA;# 设置并解析参数 ap = argparse.ArgumentParser() ap.add_argument(&amp;#34;-i&amp;#34;, &amp;#34;--image&amp;#34;, default=&amp;#39;E:/SO/color/colorE.png&amp;#39;, help=&amp;#34;path to the input image&amp;#34;) args = vars(ap.parse_args()) # 读取图片 image = cv2.imread(args[&amp;#34;image&amp;#34;]) # 进行裁剪操作 resized = imutils.resize(image, width=300) ratio = image.shape[0] / float(resized.shape[0]) # 进行高斯模糊操作 blurred = cv2.GaussianBlur(resized, (5, 5), 0) # 进行图片灰度化 gray = cv2.cvtColor(blurred, cv2.COLOR_BGR2GRAY) # 进行颜色空间的变换 lab = cv2.cvtColor(blurred, cv2.COLOR_BGR2LAB) # 进行阈值分割 thresh = cv2.threshold(gray, 60, 255, cv2.THRESH_BINARY)[1] # cv2.imwrite(&amp;#34;E:/SO/color/colorthresh.png&amp;#34;,thresh) # 在二值图片中寻找轮廓 cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.</description>
    </item>
  </channel>
</rss>
