Python & YOLO 学习日志

2025-02-26

  • 下载学习了 YOLOv3 论文:原文链接(arXiv.org) / 中文详解(CSDN)
  • 学习了解了 YOLOv3 的改进(主要是网络结构)
    • 改进网络结构,使其更适合小目标检测
    • 更丰富的先验框
    • 预测多标签任务(改进 Softmax)
  • 将卷积神经网络作为接下来的学习重心
    • 大致学习路径:微积分 -> 卷积神经网络 -> YOLO 源代码

2025-02-25

  • 学习了解了 YOLOv2 的改进
    • 将 YOLOv1 的直接预测偏移量(在随机初始化的情况下,模型需要很长时间才能稳定到预测合理的偏移量),改为相对位置的偏移值,使模型更容易稳定训练
    • 改进最终特征图,将前后层特征图拼接在一起,更好地检测小物体
    • 多尺度的训练,以更好地预测不同尺寸的图片
  • 初步了解卷积、感受野
    • 学习了解卷积、卷积核的基本概念
    • 堆叠小的卷积核所需的参数更少且效果更好
    • 感受野:特征图上的点能看到的原始图像的区域

2025-02-12

  • 测试不同参数在不同设备上训练的最佳参数(首行为参考参数,末行为最佳参数):
  • 数据集:--data data/Hard_Hat_Workers.yaml 训练集包含1000张安全帽图片
  • RTX3080,专用 GPU 显存 10GB,CUDA 12.7(智星云服务器)
    • --workers 4 --batch-size 10 --epochs 100
      • 耗时 0.389 小时(23.34分钟);GPU CUDA 占用 43%,显存 3.0GB/10.0GB
    • --workers 8 --batch-size 50 --epochs 100
      • 耗时 1.463 小时(87.78分钟);GPU CUDA 占用100%,显存 9.8GB(爆显存2GB)
    • --workers 8 --batch-size 40 --epochs 100
      • 耗时 0.255 小时(15.30分钟);GPU CUDA 占用 66%,显存 8.1GB/10.0GB
    • --workers 8 --batch-size 45 --epochs 100
      • 耗时 0.246 小时(14.76分钟);GPU CUDA 占用 66%,显存 9.0GB/10.0GB
  • RTX1060,专用 GPU 显存  3GB,CUDA 12.1(19#309台式机)
    • --workers 4 --batch-size 10 --epochs 100
      • 耗时 1.200 小时(72.00分钟);GPU CUDA 占用 98%,显存 2.9GB(爆显存1GB)
    • --workers 6 --batch-size 8 --epochs 100
      • 耗时 1.033 小时(61.98分钟);GPU CUDA 占用 94%,显存 2.7GB/3.0GB

2025-02-02


2025-01-23

  • 学习了解了 YOLOv2 的改进(提升了速度和 mAP)
    • 舍弃 Dropout,每次卷积后加入 Batch Normalization(批归一化)
    • 训练时使用更大的分辨率
    • 新的网络结构:DarkNet,实际输入为 416 * 416(32的倍数),经过5此降采样后为 13 * 13(奇数,一个中心点);1 * 1 卷积,节省了很多参数

2025-01-22


2025-01-21

  • 从 YOLOv1 开始,学习了些 YOLO 指标

    相关 (Relevant),正类无关 (NonRelevant),负类
    被检索到
    (Retrieved)
    True Positives
    (TP) 正类判定为正类
    False Positives
    (FP) 负类判定为正类
    未被检索到
    (Not Retrieved)
    False Negatives
    (FN) 正类判定为负类
    True Negatives
    (TN) 负类判定为负类

    精确率(查准率):Precision=TPTP+FP

    召回率(查全率):Recall=TPTP+FN

    置信度(Confidence):基于置信度阈值计算指 & 筛选候选框

    MAP:综合衡量检测结果

    IOU:真实值和预测值的交集和并集的比值

    NMS:非极大值抑制,解决在预测阶段一个目标被多次检测的问题

  • 初步了解了 YOLOv1 的实现逻辑和优缺点

    • 网络架构
    • 损失函数
      • 位置误差:一定程度上解决了小物体偏移量小的时候的不敏感
      • 置信度误差(含有 object)
      • 置信度误差(不含 object):由于背景通常较多,所以计算时需添加权重项
      • 分类误差
    • 缺陷:小物体、重叠物体和多标签的检测效果一般

2025-01-17

  • 配置 VSCode + LaTeX,实现 PDF 编译和双向搜索。配置代码:
  • {
        // LaTeX 配置,详见:https://zhuanlan.zhihu.com/p/166523064
        "latex-workshop.latex.autoBuild.run": "never", // 设置何时使用默认的(第一个)编译链自动构建 LaTeX:1. onFileChange:检测到代码被更改时自动编译;2. onSave:当代码被保存时自动编译;3. never:从不自动编译,需编写者手动编译
        "latex-workshop.intellisense.package.enabled": true, // 设置为 true,则该拓展能够从使用的宏包中自动提取命令和环境,从而补全正在编写的代码
        "latex-workshop.message.error.show": false, // 设置当文档编译错误时是否弹出显示出错和警告的弹窗
        "latex-workshop.message.warning.show": false, // 设置当文档编译错误时是否弹出显示出错和警告的弹窗
        "latex-workshop.latex.tools": [ // %DOCFILE% 表明编译器访问没有扩展名的根文件名,%DOC% 表明编译器访问的是没有扩展名的根文件完整路径。推荐后者,除非文件路径有中文
            {
                "name": "xelatex",
                "command": "xelatex",
                "args": [
                    "-synctex=1",
                    "-interaction=nonstopmode",
                    "-file-line-error",
                    "%DOC%"
                ]
            },
            {
                "name": "pdflatex",
                "command": "pdflatex",
                "args": [
                    "-synctex=1",
                    "-interaction=nonstopmode",
                    "-file-line-error",
                    "%DOC%"
                ]
            },
            {
                "name": "latexmk",
                "command": "latexmk",
                "args": [
                    "-synctex=1",
                    "-interaction=nonstopmode",
                    "-file-line-error",
                    "-pdf",
                    "-outdir=%OUTDIR%",
                    "%DOC%"
                ]
            },
            {
                "name": "bibtex",
                "command": "bibtex",
                "args": [
                    "%DOC%"
                ]
            }
        ],
        "latex-workshop.latex.recipes": [ // name 是标签,即出现在工具栏中的链名称;tool 是 name 标签所对应的编译顺序
            {
                "name": "XeLaTeX",
                "tools": [
                    "xelatex"
                ]
            },
            {
                "name": "PDFLaTeX",
                "tools": [
                    "pdflatex"
                ]
            },
            {
                "name": "BibTeX",
                "tools": [
                    "bibtex"
                ]
            },
            {
                "name": "LaTeXmk",
                "tools": [
                    "latexmk"
                ]
            },
            {
                "name": "xelatex -> bibtex -> xelatex*2",
                "tools": [
                    "xelatex",
                    "bibtex",
                    "xelatex",
                    "xelatex"
                ]
            },
            {
                "name": "pdflatex -> bibtex -> pdflatex*2",
                "tools": [
                    "pdflatex",
                    "bibtex",
                    "pdflatex",
                    "pdflatex"
                ]
            },
        ],
        "latex-workshop.latex.clean.fileTypes": [ // 设置编译完成后要清除掉的辅助文件类型
            "*.aux",
            "*.bbl",
            "*.blg",
            "*.idx",
            "*.ind",
            "*.lof",
            "*.lot",
            "*.out",
            "*.toc",
            "*.acn",
            "*.acr",
            "*.alg",
            "*.glg",
            "*.glo",
            "*.gls",
            "*.ist",
            "*.fls",
            "*.log",
            "*.fdb_latexmk"
        ],
        "latex-workshop.latex.autoClean.run": "onFailed", // 设置何时对上文设置的辅助文件进行清除:1. onBuilt : 无论是否编译成功都清除;2. onFailed : 编译失败时清除;3. never : 无论何时都不清除
        "latex-workshop.latex.recipe.default": "lastUsed", // 设置 VSCode 编译 tex 文档时的默认编译链:1. first:使用 latex-workshop.latex.recipes 中的第一条编译链,故而可根据自己的需要更改编译链顺序; 2. lastUsed:使用最近一次编译所用的编译链
        "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click" // 设置反向同步的快捷键绑定:1. ctrl-click:默认选项,使用Ctrl/cmd+鼠标左键单击;2. double-click:使用鼠标左键双击
    }

2025-01-13

  • 配置 YOLOv7 虚拟环境
  • 解决 YOLOv7 模型文件缺失
    • 报错代码:
      • urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.github.com', port=443): Max retries exceeded with url: /repos/WongKinYiu/yolov7/releases/latest (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLZeroReturnError(6, 'TLS/SSL connection has been closed (EOF) (_ssl.c:1149)'))))
      • requests.exceptions.ProxyError: HTTPSConnectionPool(host='api.github.com', port=443): Max retries exceeded with url: /repos/WongKinYiu/yolov7/releases/latest (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLZeroReturnError(6, 'TLS/SSL connection has been closed (EOF) (_ssl.c:1149)')))) subprocess.CalledProcessError: Command 'git tag' returned non-zero exit status 128.
    • 解决方案:下载 yolov7.pt 模型文件
  • 解决 YOLOv7 torch 函数报错
    • 报错代码:
      • D:\\Program\\anaconda3\\envs\\yolov7\\lib\\site-packages\\torch\\functional.py:512: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at
      • C:\\cb\\pytorch_1000000000000\\work\\aten\\src\\ATen\\native\\TensorShape.cpp:3588.) return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]
    • 解决方案: 在 512 行(控制台报错显示的行数)代码中添加 indexing = 'ij'
      • return _VF.meshgrid(tensors, **kwargs, indexing = 'ij') # type: ignore[attr-defined]

2024-12-29

  • 在实验室台式机上配置 GPU 版 PyTorch,并用相同参数(见 2024-12-09)训练同一数据集,耗时 1.1 小时

2024-12-09

  • 用安全帽数据集(1000张图片)训练 100 轮,耗时 5.5 小时。训练参数:
  • --data data/Hard_Hat_Workers.yaml --workers 4 --batch-size 10 --epochs 100


2024-12-08

在 detect.py 中将 source 参数改为 0

  • 用自己标注的 YOLO 安全帽数据集(10 张图片)通过以下参数运行 train.py 文件,耗时 2 分 50 秒

    --data data/Hard_Hat_Workers.yaml --workers 2 --batch-size 5 --epochs 10

  • workers 设置线程数,batch-size 一次往 GPU 里塞多少张图片,epochs 训练多少轮数据


  • 使用本机摄像头实时检测
  • 在 detect.py 中将 source 参数改为 0



  • 使用 YOLOv3 实现半自动标注
    • 从 Github 上下载 yolov5 项目(Tags=7.0)

      https://github.com/ultralytics/yolov5/tree/v7.0

      • 配置环境 yolov5

        • requirements.txt:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
        • pycocotools:pip3 install pycocotools -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn
        • PyQt5:pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
        • pyqt5-tools-windows:pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
        • lxml:pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple
        • labelimg:pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
        • pytorch:conda install pytorch torchvision torchaudio cpuonly -c pytorch
      • 运行 detect.py

      • 运行 train.py

        • 报错 ImportError: Bad git executable

          [已解决]import 处添加 os.environ["GIT_PYTHON_REFRESH"] = "quiet" 或在终端执行 conda install git

        • 报错 AttributeError: 'FreeTypeFont' object has no attribute 'getsize'

          [已解决] 卸载重装旧版本的 Pillow 库 pip install Pillow==9.5

      • 用安全帽数据集(100 张图片)初步训练出模型,耗时 20 分钟

        参数:--data data/Hard_Hat_Workers.yaml --workers 4 --batch-size 5 --epochs 50

      • 成功实现半自动标注

        在存放 label 的文件夹中添加 class.txt 用来存放标签


    2024-12-07

    • 在虚拟环境 labelimg_1 中打开 labelimg 标签工具

      在 labelimg_1 中执行命令 labelimg img labels.txt img 为图片所在文件夹;labels.txt 为写好标签的文件;img 与 labels.txt 在同一目录内

      • 下载 YOLO 安全帽数据集
      • 使用 labelimg 标注了数张安全帽图片
      • 小技巧:在 "view" 选项卡中勾选 "Auto Save mode"、"Display Labels" 和 "Advanced Mode"
    • 从 Github 上下载 YOLOv3 项目(Tags=9.6.0)

      https://github.com/ultralytics/yolov3/tree/v9.6.0

      • 创建虚拟环境 yolov3
        • 配置 yolov3
        • requirements.txt
        • MyPackages.txt
      • 将 yolov3 在 yolov3 中运行起来
        • 识别图片
        • 识别视频(修改 --source 参数)
        • 使用 --view-img 参数实时预览视频
      • 运行 train.py
        • 报错:AttributeError: module 'numpy' has no attribute 'int'.
          • [已解决] 卸载重装 1.23 版本的 numpy 库
        • 报错:RuntimeError: result type Float can't be cast to the desired output type __int64
          • [仍会报错,但可以运行] 将 loss.py 中 gain = torch.ones(7, device=targets.device) 改为 gain = torch.ones(7, device=targets.device).long() 即可。原因是新版本的 torch 无法自动执行此转换,旧版本 torch 可以
      • 由于默认参数太大(训练 300 轮),训练了一个多小时,只跑到 6/300 轮,预计耗时超过 50 小时,遂停止训练,尝试调整参数后训练较小的模型

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇