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
- 下载学习了 YOLOv2 论文:原文链接(arXiv.org) / 中文详解(CSDN)
- 学习了解了 YOLOv2 的改进
- 聚类提取先验框 k-means(k = 5)
2025-01-23
- 学习了解了 YOLOv2 的改进(提升了速度和 mAP)
- 舍弃 Dropout,每次卷积后加入 Batch Normalization(批归一化)
- 训练时使用更大的分辨率
- 新的网络结构:DarkNet,实际输入为 416 * 416(32的倍数),经过5此降采样后为 13 * 13(奇数,一个中心点);1 * 1 卷积,节省了很多参数
2025-01-22
- 下载学习了 YOLOv1 论文:原文链接(arXiv.org)/ 中文详解(CSDN)
2025-01-21
-
从 YOLOv1 开始,学习了些 YOLO 指标
相关 (Relevant),正类 无关 (NonRelevant),负类 被检索到
(Retrieved)True Positives
(TP) 正类判定为正类False Positives
(FP) 负类判定为正类未被检索到
(Not Retrieved)False Negatives
(FN) 正类判定为负类True Negatives
(TN) 负类判定为负类
精确率(查准率):
召回率(查全率):
置信度(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
- 使用本机摄像头实时检测
- 使用 YOLOv3 实现半自动标注
- 从 Github 上下载 yolov5 项目(Tags=7.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
- requirements.txt:
-
运行 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 用来存放标签
-
- 在虚拟环境 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)
- 创建虚拟环境 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 可以
- [仍会报错,但可以运行] 将 loss.py 中
- 报错:
- 由于默认参数太大(训练 300 轮),训练了一个多小时,只跑到 6/300 轮,预计耗时超过 50 小时,遂停止训练,尝试调整参数后训练较小的模型
- 创建虚拟环境 yolov3
workers
设置线程数,batch-size
一次往 GPU 里塞多少张图片,epochs
训练多少轮数据
在 detect.py 中将 source
参数改为 0