2023年4月

数据分析相关python库的介绍

  1. Numpy
    Numpy是python科学计算的基础包,多维数组对象ndarray计算,数据集处理,线性代数运算、傅里叶变换,以及随机数生成。
  2. pandas
    pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数。pandas兼具Numpy高性能的数组计算功能以及电子表格和关系型数据(如SQL)灵活的数据处理能力。它提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。
    DataFrame是pandas的一个对象,它是一个面向列的二维表结构,且含有行标和列标。可直接处理csv和mysql数据。
  3. matplotlib
    matplotlib是最流行的用于绘制数据图表的python库。
  4. Scipy

Scikit-learn: 定位通用机器学习,传统机器学习,利用特征工程(feature engineering),人为对数据进行提炼清洗。
TensorFlow:定位深度学习库,深度学习利用表示学习(reprentation learning),机器学习模型自身对数据进行提炼。因此TF并没有提供sklearn那种强大的特征工程,比如维度压缩,特征选择等。

sklearn更倾向于使用者可以自行对数据进行处理,比如选择特征,压缩维度,转换格式,是传统机器学习库。而以tf为代表的深度学习库会自动从数据中抽取有效特征,而不需要人为的做这件事情,所以并未提供类似的功能。

sklearn中的模块都是高度抽象化的,所有分类器基本可在3-5行内完成;tf有很高的自由度,可以做传统机器学习的事,但需要自己实现算法。封装在tf等工具库上的keras才更像深度学习届的sklearn。从自由角度看tf更高,从抽象化,封装程度来看,sklearn更高;从易用性角度看,sklearn更高。

sklearn主要适合中小型的,使用机器学习项目,尤其是数量不大且需要使用者手工对数据进行处理,并选择合适模型的项目。这类项目在CPU上就可以完成,对硬件要求低。
tf主要适合已经明确了解需要深度学习,且数据处理需求不高的项目。数据量较大并最终需要的精度更高,一般需要GPU加速运算。对于深度学习做“小样”可以在采样的小数据集上使用keras做快速的实验

keras堪称深度学习上的sklearn了。

可以结合起来用,sklearn负责基本的数据清理任务,keras对于问题进行小规模试验验证想法,tf用于在完整的数据上进行严肃的调参任务。

实践上来说,深度学习方法一般需要大量的GPU机器,一般只有深度学习方法效果远好于传统方法而且对业务提升很大的情况下,才会考虑使用深度学习方法,比如语音识别,图像识别任务。而NLP领域除了机器翻译意外,其他大部分任务仍然更常使用传统方法。传统方法一般有者更好的可解释性,这对检查调试模型也是非常有帮助的。

一、webui上的操作
image2023-3-30_12-3-49.png
image2023-3-30_12-4-40.png
image2023-3-30_12-5-8.png
如果使用Interrogate CLIP, 注意审查提取的关键词是否正确。
二、参数设置 (建议必读)

CFG Scale:用于控制模型应在多大程度上尊重您的提示。

1 – 大多忽略你的提示。

3 – 更有创意。

7 – 遵循提示和自由之间的良好平衡。

15 – 坚持更多提示。

30 – 严格按照提示操作。

Denoising strength:去降噪度。值越小,人物越像,风格丢失越多。

image2023-3-30_12-6-9.png
我这边调的过程,常用的一些参数设置(供参考),不局限于这些这些参数的调整。

inpaintingmaskweight 0.35

Sampling steps 30

CFG Scale 15

Denoising strength 0.65
三、ControlNet的简单设置
image2023-3-30_12-6-32.png
ControlNet可以用于控制图像的大致轮廓。

一、介绍

1、该服务是基于SD Web UI搭建而成,采用sd-v1-5-inpainting模型,提供给AI Art Generator、AI Avatar项目使用,支持文字转图片、文字+图片转图片功能;

2、UI通过Web UI界面,调整参数,生成效果图;后台通过调用API接口传递UI调整的参数,生成所需要的图片,提供给前端使用;

二、搭建步骤

1、使用https://colab.research.google.com/github/camenduru/stable-diffusion-webui-colab/blob/main/stable/stable_diffusion_inpainting_webui_colab.ipynb里面的代码,搭建环境;

2、启动服务时(上述代码的最后一句),添加–api参数;
python launch.py --xformers --enable-insecure-extension-access --theme dark --api # 本地服务
python launch.py --listen --xformers --enable-insecure-extension-access --theme dark --api # 外部服务

三、API调用

1、文字转图片

import requests
import io
import base64
from PIL import Image
 
def txt2img():
    url = "http://xx.com"
 
    payload = {
        "prompt": "cat",
         "negative_prompt": "xx",
         "steps": 20,
    }
 
    response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload)
    images = response.json()['images']
    if len(images) > 0:
        image_data = images[0]
        image = Image.open(io.BytesIO(base64.b64decode(image_data.split(",", 1)[0])))
        image.save('output1.png')
 
txt2img()

2、文字+图片转图片

import requests
import io
import base64
from PIL import Image
 
def img2img():
    url = "http://xx.com"
 
    payload = {
        "prompt": "cat",
         "negative_prompt": "xx", 
         "steps": 20,
        "init_images": ["data:image/png;base64," + base64.b64encode(open('input.png', 'rb').read()).decode('utf-8')]
    }
 
    response = requests.post(url=f'{url}/sdapi/v1/img2img', json=payload)
    images = response.json()['images']
    if len(images) > 0:
        image_data = images[0]
        image = Image.open(io.BytesIO(base64.b64decode(image_data.split(",", 1)[0])))
        image.save('output1.png')
 
img2img()

3、更详细的文字+图片转图片

import requests
import io
import base64
from PIL import Image
 
def img2img_more():
    url = "http://xx.com"
    prompt = "((watercolor)), colorful, close-up, front, extreme detail, detailed, 8k, nice face, Portrait, flowing, fresh"
    negative_prompt = "ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, deformed, body out of frame, bad anatomy, watermark, signature, cut off, low contrast, underexposed, overexposed, bad art, beginner, amateur, distorted face, blurry, draft, grainy"
 
    payload = {
        "prompt": prompt,
        "negative_prompt": negative_prompt,
        "steps": 30,
        "cfg_scale": 15.0,
        "denoising_strength": 0.65,
        "sampler_name": "Euler a",
        "inpainting_mask_weight": 0.35,
        "extra_generation_params": {"Mask blur": 4},
        "seed_resize_from_w": -1,
        "seed_resize_from_h": -1,
        "init_images": ["data:image/png;base64," + base64.b64encode(open('xx.png', 'rb').read()).decode('utf-8')]
    }
 
    response = requests.post(url=f'{url}/sdapi/v1/img2img', json=payload)
    images = response.json()['images']
    if len(images) > 0:
        image_data = images[0]
        image = Image.open(io.BytesIO(base64.b64decode(image_data.split(",", 1)[0])))
        image.save('output1.png')
 
img2img_more()

参考:https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/API