sd1.5微调实践

微调实践

  • 目前sd1.5我主要试了3种微调, dreamBooth, lora, lycoris

ai图手脚崩坏如何修复

  • 这是原ai图, 是用sd的一个微调模型生成的:

  • 这是修复后的图:

  • 用sd的inpaint局部重绘? 然后加上controlNet? 各种教程的都教人这么去搞, 然后效果就是一坨! 首先重绘出一只完美的手就要换时间不停重试,
    好不容易roll出一只好手, 重绘区域却和整体图片有违和感, 对于违和感是0容忍的, 对于一幅插画来说, 这比手脚崩坏严重多了; 在无数次重试,
    我发现几个小时就过了…

  • 总结, 重绘就是陷阱, 不要陷进去, 至少目前是这样的, 未来不好说

阅读更多

danbooru爬图

  • 最近ai炼丹嫌找炼丹素材麻烦, 就写了个按danbooru tag爬图的脚本, 没什么第三方依赖, 想用直接copy去跑就行
  1. 把脚本里面的your_usernameyour_password替换成你的danbooru账号密码(账号在https://danbooru.donmai.us注册)
  2. main里面, 在tag填上要爬取的tag, save_dir为爬取的图片的保存路径
  3. 如果需要通过代理爬取, 把use_proxy置为True, 然后改下proxies变量的代理地址即可
阅读更多

grpc的goAway和keepalive

  • 虽是Http2的东西, 但也可以通过grpc的源码来侧面加深下理解
  • 告诉客户端, 服务端准备关闭了, 本连接不要发新请求过来了 (发一半的请求还是会处理完的)
  • 当client收到这个包之后就会主动关闭连接。下次需要发送数据时,就会重新建立连接
  • 流程: client收到Goaway -> client主动关闭http2连接 -> channel变为IDLE -> 用户发起新请求 -> 创建新连接 -> channel变为CONNECTING
  • 另外GoAway是实现优雅关闭的基石, 因为是client主动关闭(不同于服务端关闭), 可以避免很多无效的请求
  • 源码:
    • google.golang.org/grpc/clientconn.go: errConnDrain (drain是接收到goaway后的连接状态)
    • google.golang.org/grpc/internal/transport/http2_client.go: func (t *http2Client) Close(err error)
    • google.golang.org/grpc/internal/transport/http2_client.go: func (t *http2Client) handleGoAway(f *http2.GoAwayFrame)
      • 里面的 t.onClose(t.goAwayReason)的onClose在”grpc/clientconn.go/addrConn createTransport”里面定义的:
阅读更多

go源码阅读:TLS handshake

  • tls/handshake_server.go: serverHandshakeState

  • tls/common.go: Conn.PeerCertificates

  • tls/handshake_client.go: doFullHandshake:

  • tls/handshake_client.go: clientHandshake

    • makeClientHello
    • loadSession : 会生成sessionID
    • writeRecord : 将ClientHello发送给server
    • readHandshake: 等server回复
  • tls/handshake_server.go: serverHandshake

    • readClientHello
    • processClientHello
    • pickCipherSuite
    • doFullHandshake
    • establishKeys
    • readFinished
    • sendSessionTicket
    • sendFinished
  • tls.Conn: handlePostHandshakeMessage/handleKeyUpdate: KeyUpdate指的就是tls最后的那个对称密钥(变量名叫trafficSecret)

  • tls.Conn实现了net.Conn接口, 在Write和Read包裹了一层handShake, 后面的读写也是带了加密的(readRecordOrCCS)
阅读更多