编程笔记

lifelong learning & practice makes perfect

使用YOLOV8训练自定义数据集,实现多目标检测

流程

  • 自定义标签
  • 数据标注
  • 训练
  • 验证

自定义标签

这里通过工具X-AnyLabeling进行标注,需要按照工具要求添加标签,这里我添加了2个标签,person和car如下

1
2
3
#新增 classes.txt,内容:
person
car
阅读全文 »

什么是 tailscale

Tailscale 是一个开源的 VPN 服务器,它允许用户使用自己的互联网连接来创建一个安全的、无备案的 VPN 网络。

direct vs relayed connection

直连和中继网络的区别,如果建立连接后不同终端间的网络延迟很大,可检查下是否使用了中继节点(relay),考虑使用direct connection优化延迟
经测试,relay模式延迟300ms左右情况下,改用direct模式延迟在10ms左右

1
2
3
4
5
6
7
# 查看当前节点,网络状态
tailscale status
# 如下是直连模式:direct connection
# xxxxx windows active; direct 27.xx.xxx.xxxx:xxxx, tx xxxxx rx 18832

# 使用ping 或 tailscale ping xxxx,查看延迟
ping xxx

relayed connection可能的优化:
在某个节点的防火墙放开UDP协议的41641端口

都没有公网ip的节点间延迟优化

偶尔使用还是ssh方便

ssh端口转发

上一级提到过,有公网ip的服务器可以通过开启UDP协议的41641端口建立direct connection,减少节点间的网络延迟,
在两台设备都没有公网固定ip的情况下,尝试在同样开启端口没有效果,延迟仍然很大(300~1000ms)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 查看网络情况
tailscale netcheck (base)

Report:
* UDP: true
* IPv4: yes, 27.38.xxx.xxxx:xxxx
* IPv6: no, but OS has support
* MappingVariesByDestIP: true
* HairPinning: false
* PortMapping:
* Nearest DERP: San Francisco
* DERP latency:
- sfo: 175ms (San Francisco)
- lax: 175.9ms (Los Angeles)
- tok: 184.4ms (Tokyo)
- dfw: 192.6ms (Dallas)
- ord: 205.8ms (Chicago)
- tor: 218.1ms (Toronto)
- hkg: 220.6ms (Hong Kong)
- hnl: 222ms (Honolulu)
- nyc: 223.9ms (New York City)
- fra: 231.7ms (Frankfurt)
- sin: 238ms (Singapore)
- waw: 249.2ms (Warsaw)
- par: 254.3ms (Paris)
- ams: 257.3ms (Amsterdam)
- lhr: 265ms (London)
- mad: 271.1ms (Madrid)
- sao: 343ms (São Paulo)
- dbi: 350.9ms (Dubai)
- syd: 382.2ms (Sydney)
- jnb: 420.1ms (Johannesburg)
- nai: 464.5ms (Nairobi)
- blr: (Bangalore)
- sea: (Seattle)
- den: (Denver)
- mia: (Miami)

可以看到通过derp单程最短延迟在170ms+,roundtrip至少延迟300ms

此时如果有一个公网ip的节点,可以尝试将它作为中继节点,将其他节点连接到它上,这样其他节点的网络延迟就会变小
例如使用ssh的端口转发,a,b是没有固定公网ip的节点,c是公网ip的节点,c和a,c和b之间均可以建立direct connection,延迟很
小在10ms左右
通过ssh本地端口转发将本地请求通过c转发到b,这样a和b就可以直连了,参考这篇文章

自建DERP节点

参考

参考

基础

Stable Diffusion(稳定扩散)严格说来它是一个由几个组件(模型)构成的系统,而非单独的一个模型

关键概念: 模型,Prompt(CLIP Text Encode,提示词),KSampler(采样器),VAE(变分自动编码器(Variational Autoencoder))

Prompt+Latent(潜变量空间) -> KSampler -> VAE -> Image

ComfyUI

安装

1
2
3
4
5
6
7
8
git clone https://github.com/comfyanonymous/ComfyUI.git

cd ComfyUI

pip install -r requirements.txt

# 启动
python main.py

此时目录下还没有模型,需要下载模型到指定目录: ComfyUI/models/checkpoints

插件

ComfyUI Manager

在 custom_nodes 目录下,下载插件代码

1
2
cd custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git

workspace-manger

workflow 管理/切换插件

参考

模型下载

sd模型

1
axel https://civitai.com/models/112902/dreamshaper-xl

VSCode从V1.86起对部分服务器不兼容(remote ssh),出现类似报错

1
You are connected to an OS version that is unsupported by Visual Studio Code

原因可参考文档,从报错提示看,
大部分人遇到的情况是GLIBC版本过低,而VSCode要求版本>=2.28,这是vscode的依赖nodejs要求的

1
2
3
4
5
6
# 基本要求 kernel >= 4.18, glibc >=2.28, libstdc++ >= 3.4.25, Python 2.6 or 2.7, tar
# 可以通过如下命令查看glibc版本
ldd --ersion

# 查看libstdc++ 3.4.25 是否可用
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

可以升级服务器版本或者降低VSCode版本来解决

老版本

VSCode支持Portable Mode,可以同时安装多个版本,多个版本建

下载链接

参与链接

活动连接

限制

需要账号是RDS首购才能拿到奖励,不清楚的可进钉钉群问,需要购买7天的Mysql套餐(54元)

奖励

限首购用户】前2000名完成阶段二的:【任务1-产品开通】、【任务2-动手实验】、【任务3-动手实验】,可获得价值200元的冬日暖心礼盒:100元电话充值卡+定制办公礼(保温杯、笔记本、签字笔),任务1开通的产品7天到期自动会释放,鼓励根据学习内容多进行产品体验实践,若用户提前手动释放,则视为放弃领奖资格(入群填写信息,活动结束后统一发放)

任务

任务1-产品开通

购买54这款即可,不需要做为何更改

购买54这款即可,不需要做为何更改

任务2/3-动手实验

按照实验手册一步步操作即可,官方会提供资源,页面上的浏览器有点卡顿需要耐心操作

概念

LLM/大语言模型

大语言模型(英文:Large Language Model,缩写LLM)是一种人工智能模型,旨在理解和生成人类语言。它们在大量的文本数据上进行训练,可以执行广泛的任务,包括文本总结、翻译、情感分析等等。LLM的特点是规模庞大,包含数十亿的参数

阅读全文 »

为什么有时候mysql不区分大小写

业务要求一个数据必须是唯一的,通过

1
select xx,count(*) from xxx group by xx

发现有重复数据,进一步发现有的其实不是重复,大小写不同,这就引出一个问题:为什么有时候mysql不区分大小写

阅读全文 »

单测

在vscode中,带_test的go源文件里的测试函数有有专门的优化,可点击”run test”,”debug test”一键测试

配置

在settings.json可以指定go buld参数如ldfalgs,gcflags等

1
2
3
4
5
6
7
8
9
10
"go.buildFlags": [
"--ldflags -r=${workspaceRoot}/lib" // works for 'debug test' but not 'run test'
// "-ldflags=-r ${workspaceRoot}/lib" // works for 'run test' but not 'debug test'
],
"go.buildTags": "linux",
"gopls": {
"build.buildFlags": [
"-tags=linux",
]
}
阅读全文 »

gopls

gopls是go官方维护的工具,提供代码提示,补全,格式化等诸多功能,之前的版本在vscode+wsl里使用,内存/cpu占
用都不小,大项目打开时容易卡顿.
在2023.9.8官方发文提到了新版本所做的优化和实现原理,更新
体验了下,确实有明显的体验提升.

使用以下命令更新

1
go install golang.org/x/tools/gopls@latest

目前最新版本是 golang.org/x/tools/gopls v0.13.2

更新内容

Reductions in memory use and startup time

减少内存占用,启动时间,官方测试了28个github上流行的项目大部分可减少60%~80%的内存占用

Across these repos, the savings average around 75%, but memory reductions are non-linear: as projects get larger, so does the relative decrease in memory usage. We’ll explain this in more detail below.

在这些存储库中,平均节省约75%,但内存减少是非线性的:随着项目变大,内存使用的相对减少也是如此

Separate compilation

之前,go原本最小的编译单位是package,为了获取import的package信息,需要将所有import的package提前编译好

在v0.12开始通过使用package summary和file-based cache优化最小编译单元,使gopls可以重用部分已编译的package

Fine-grained invalidation

在之前,对package代码做了变更后,gopls必须重新编译直接或间接import该package的package(增量构建系统的基本原理)

When you make a change in one package, it’s only necessary to recompile the packages that import that one, directly or indirectly. This idea is the basis of all incremental build systems since Make in the 1970s, and gopls has been using it since its inception

从v0.12开始,只要代码变更不影响import summary就不需要重新编译

optimize static anlysis

在此之前,gopls无法实现在内存中做太多static anlysis(会引入大量依赖,内存占用飙升)

v0.12优化内存占用后引入了新的anlysis,实现类似go vet的静态分析

参考