Datawhale X 魔搭 AI夏令营 “AIGC”方向 task2

目录

一、任务要求

二、个人认识

三、新的尝试

四、任务效果 


一、任务要求

task2 主要是精读 baseline 代码,我在上一篇关于 task1 的文章中已经完成了这个工作,所以实际上 task2 已经做完了。下面主要写一些自己的认识和尝试。

二、个人认识

首先,在阅读 task2 文档的时候,示例生成的竟然也是古风的图片,这似乎意味着数据集对模型的影响不大?或者不会决定模型生成图片的风格?在我更换了数据集之后,发现数据集的影响似乎只限于人物面部的变化,的确不改变图片整体。后面会详细介绍。

另外,关于模型优化的问题,可以通过调节模型训练参数来实现,也可以改变基础模型。但是我并没有进行相关操作,主要原因有两个:一是在现有免费的实例下,GPU占用率已经非常高了,如果进一步增加模型复杂度,很有可能会爆显存;二是我个人感觉现有模型表现已经比较符号我的预期,训练速度也比较快,没必要调参。

三、新的尝试

上一篇提到更换数据集,在经历了一系列尝试之后,终于简单地应用成功了。主要步骤如下:

  1. 准备原始数据
    图片需要自己查找,我使用爬虫简单地在百度图片获取了100张左右的图片。使用selenium动态爬虫,代码如下:

    import json
    import time
    
    import requests
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    
    # 古风动漫图片
    url = ("https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=utf8&word=%E5%8A%A8%E6%BC%AB%E4"
           "%BA%BA%E7%89%A9%E5%8F%A4%E9%A3%8E&fr=ala&ala=1&alatpl=normal&pos=0&dyTabStr=MCwzLDEsMiwsNyw2LDUsMTIsOQ%3D%3D")
    
    options = webdriver.ChromeOptions()
    # options.add_argument('headless')//隐藏浏览器
    # 设置 ChromeDriver 路径
    driver_path = "下载的chromedriver.exe的路径"
    service = Service(driver_path)
    browser = webdriver.Chrome(service=service, options=options)
    browser.get(url)
    time.sleep(3)
    browser.maximize_window()
    wait = WebDriverWait(browser, 10)
    for i in range(5):
        browser.execute_script("window.scrollTo(0, 3000);")
        time.sleep(3)
    uls = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//ul[@class='imglist clearfix pageNum0']")))
    count = 0
    for ul in uls:
        lis = ul.find_elements(By.XPATH, "//li//img")
        for li in lis:
            try:
                src = li.get_attribute("data-show-ext")
                if src is not None:
                    in_url = json.loads(src)["url"]
                    response = requests.get(in_url)
                    # 图片保存路径
                    with open(f"./images/baidu/{count}.jpg", "wb") as f:
                        f.write(response.content)
                        count += 1
    
            except Exception as e:
                print(e)

    当然这只是简单的示例,要想构建比较好的数据集,这点图片根本不够,而且图片质量也参差不齐,有时间可以去尝试其他图片网站。

  2. 数据调整
    因为在 data_juicer 数据处理时,配置了图片过滤,要求长或宽为1024且宽高比在0.5到2.0之间,所以我们需要简单地处理一下原始的图片,否则可能没有满足条件的图片。
    下面是简单的缩放图片示例,使用了PIL库
    import os
    import glob
    from PIL import Image
    
    
    def resize_image(input_image_path, output_image_path, target_size):
        original_image = Image.open(input_image_path)
        width, height = original_image.size
    
        # 确定目标尺寸是宽还是高
        if width > height:
            # 如果宽度大于高度,则以宽度为基准进行缩放
            new_width = target_size
            new_height = int((target_size / float(width)) * height)
        else:
            # 如果高度大于或等于宽度,则以高度为基准进行缩放
            new_height = target_size
            new_width = int((target_size / float(height)) * width)
    
        resized_image = original_image.resize((new_width, new_height), Image.Resampling.LANCZOS)
        resized_image.save(output_image_path)
    
    
    def batch_resize_images(directory, output_directory, size):
        if not os.path.exists(output_directory):
            os.makedirs(output_directory)
    
        for img_path in glob.glob(os.path.join(directory, '*.jpg')):
            filename = os.path.basename(img_path)
            output_path = os.path.join(output_directory, filename)
            resize_image(img_path, output_path, size)
    
    
    # 使用方法
    directory = './images/baidu' # 原始路径
    output_directory = './images/new_baidu' # 输出路径
    target_size = 1024  # 目标尺寸的一边长度
    
    batch_resize_images(directory, output_directory, target_size)

    这里只考虑了一边为1024,没有考虑宽高比,可以再进行适当的裁剪。

  3. 创建数据集
    这一步花费了挺长时间,主要是对魔搭平台的数据集创建不太熟悉。

    首先在个人中心的下拉菜单中选择“创建数据集”,填写必要的信息,这一步比较简单。


    然后需要去完善自动生成发README.md文件。这里可以参考官方的文档“数据集文件规范”。另外关于 markdown 文件的 yaml 元数据配置,官方同样提供了模板,只需要在README.md编辑页面,点击右上角的“使用模板编辑器”,填入必要的字段,就能自动生成 yaml 代码。将其粘贴到 md 文档的开头,使用 --- 包裹起来即可。



    之后就是上传数据集文件了。这里数据集文件的组织形式很关键,否则可能无法预览、无法正常使用。具体可以参考官方文档“数据集介绍”。我这里是图像类型,选择的组织形式是比较简单的基于文件夹的构建方式。我也尝试过压缩为 zip 文件,编写配置 metadata 的方式,但是没有正常预览,在使用数据集时也会报错“BadZipFile: File is not a zip file”。有点苦恼,后面再尝试吧(反正现在也能用,只是不太优雅)。
  4. 应用数据集
    只需要修改代码中下载数据集的代码,改成下载自己的数据集
    from modelscope.msdatasets import MsDataset
    
    ds = MsDataset.load(
        '替换为自己的数据集,格式为"用户名/数据集英文名"',
        subset_name='子数据集名称',
        split='数据split名称',
        cache_dir="/mnt/workspace/kolors/data" # 保存路径
    )

四、任务效果 

task2 模型没有变化,只是修改了一下生成图片的描述,依然是古风,下面贴上几张使用原数据集和自己数据集的图片,相同的描述,对比一下,人物脸部有一些变化,自己的数据集动漫风确实更强一些(也出现了比较抽象的手)。

原数据集

新数据集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值