COCO: https://cocodataset.org/#home
每年的圖和資料都不一樣,要依照對應的年份去下載。
https://github.com/nightrome/cocostuff
因為資料集裡面是有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,這邊可以照著作者和論文中所描述的方法去產生我們需要的資料。
- 遇到的問題: 雖然 png 是無損的,但這並不意味著它預設是未壓縮的。導致我們在存灰階圖的時候發生壓縮,導致轉成 RGB 後變成有損圖片,所以後來 gray mask 改為 npy儲存
- 原始檔案的問題: 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))
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()
可以參考官方提供的Demo: https://github.com/dengdan/coco/blob/master/PythonAPI/pycocoDemo.ipynb
COCO官方有準備API,下載玩COCO DATASET之後可以用API去提取相關資料
但她是2014,記得改成以下
dataDir='/path/to/your/coco' # 改這邊
dataType='val2017'
他可顯示很多標記資料,但我們這次沒有要用
它涵蓋 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))