iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
AI/ ML & Data

【AI筆記】30天從論文入門到 Pytorch 實戰系列 第 18

【AI筆記】30天從論文入門到 Pytorch 實戰:準備與整理Dataset Day 17

  • 分享至 

  • xImage
  •  

COCO: https://cocodataset.org/#home
每年的圖和資料都不一樣,要依照對應的年份去下載。

Dataset: COCO17

下載Dataset

https://github.com/nightrome/cocostuff
https://ithelp.ithome.com.tw/upload/images/20240819/20168385jHsjKrpvfH.jpg

mask image

因為資料集裡面是有seg (mask座標), caption, img path 的資料,但T2I-Adapter他是吃 mask image 的,所以我們還要額外把 mask 轉成 mask image 才能輸入到模型使用,這邊因為作者開源的程式沒有提供code,所以我們只能自己想辦法重現,這時我們可以看看 github issue 有沒有人提到這個問題?
https://github.com/TencentARC/T2I-Adapter/issues/35
上面 link 有人提問作者如何產生 mask image,這邊可以照著作者和論文中所描述的方法去產生我們需要的資料。

  1. 遇到的問題: 雖然 png 是無損的,但這並不意味著它預設是未壓縮的。導致我們在存灰階圖的時候發生壓縮,導致轉成 RGB 後變成有損圖片,所以後來 gray mask 改為 npy儲存
  2. 原始檔案的問題: gray mask error occurred: training dataset: 7 missing annotations. 不影響可以無視

這部分不方便展示所有code,僅提供原始的py和我修改部分
https://github.com/PITI-Synthesis/PITI/blob/main/preprocess/preprocess_mask.py

我把code 放在 ldm/data/preprocess_mask.py

def gray_mask_2rgb(file_path, N=183):

    colorizer = Colorize(N)
    # file_path = "/home/user/cocoapi/PythonAPI/data/coco/images/mask/val2017_gray"

    all_files = _list_image_files(file_path)
    print("Start: gray mask convert to RGB!")
    for name in tqdm(all_files):
        name = os.path.join(file_path, name)
        # img = Image.open(name)
        # img.show()
        img = np.load(name)
        color_img = np.transpose(colorizer(img), (1, 2, 0))
        # print(img_c.astype(np.uint8))
        color_img = Image.fromarray(color_img.astype(np.uint8))
        color_img.save(name.replace('train2017_gray', 'train2017_color').replace('.npy', '.jpg'))
        # color_img.show()

可以嘗試著寫看看。

以下是轉一張圖片為我們需要的資料,簡單例子:

colorizer = Colorize(183)
file_path = "/content/example"
all_files = _list_image_files(file_path, ".png")
img = Image.open("/content/example/raw_mask.png").convert('L')
img_a = np.array(img);
img_c = np.transpose(colorizer(img_a) , (1,2,0))
img_c = Image.fromarray(img_c.astype(np.uint8))

https://ithelp.ithome.com.tw/upload/images/20240815/20168385H6GyIBpRop.jpg

from pycocotools.coco import COCO
from pycocotools import mask as coco_mask
coco = COCO('/home/user/Documents/datasets/coco/stuff_trainval2017/stuff_train2017.json')
cat_ids = coco.getCatIds()
image_ids = coco.getImgIds()

串接 COCO Dataset

可以參考官方提供的Demo: https://github.com/dengdan/coco/blob/master/PythonAPI/pycocoDemo.ipynb
COCO官方有準備API,下載玩COCO DATASET之後可以用API去提取相關資料
但她是2014,記得改成以下

dataDir='/path/to/your/coco' # 改這邊
dataType='val2017'

他可顯示很多標記資料,但我們這次沒有要用
https://ithelp.ithome.com.tw/upload/images/20240819/20168385LcUrHj8l5L.png
它涵蓋 172 個類別:80 個事物類別、91 個東西類別和 1 個「未標記」類別。

剩下請在 https://github.com/fan84sunny/T2I-Adapter/blob/main/ldm/data/dataset_coco.py
慢慢看,基本上只要改完自己的路徑就可以用了。

測試

path_json_train = 'coco_stuff/mask/annotations/captions_train2017.json'
root_path_im = 'coco/train2017'
root_path_mask = 'coco_stuff/mask/train2017_color'
image_size = 512 # 這個我不知道為啥沒用到 哈哈哈

train_dataset = dataset_coco_mask_color(path_json_train, root_path_im, root_path_mask, image_size)
print(len(train_data))

上一篇
【AI筆記】30天從論文入門到 Pytorch 實戰:如何重現開源AI模型訓練 Day 16
下一篇
【AI筆記】30天從論文入門到 Pytorch 實戰:模型訓練後的保存與載入技巧 Day 18
系列文
【AI筆記】30天從論文入門到 Pytorch 實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言