iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
AI/ ML & Data

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

【AI筆記】30天從論文入門到 Pytorch 實戰:製作屬於自己的資料集 Day 23

  • 分享至 

  • xImage
  •  

1. 製作圖片資料集

收集資料

你可以通過多種方式收集資料:

  • 拍攝照片:使用相機或手機拍攝所需的圖像。
  • 網絡爬蟲:編寫爬蟲從互聯網上收集圖像。請確保遵守網站的使用條款和隱私政策。
  • 使用公開資料集:從Kaggle、UCI Machine Learning Repository等平台下載公開資料集。

2. 標註資料

確保你的資料已經標註好。例如,如果你在做圖像分類,每張圖像應該有一個對應的標籤。你可以使用工具如LabelImg來標註圖像。

安裝 labelImg

兩種安裝方式:

pip install labelImg

個人習慣用pip install

定義資料規格

  • 確定需求
    在開始製作資料集之前,首先需要確定研究或應用的需求,包括目標任務和所需資料的特性。

可以觀察其他資料集的結構,進行編制

├── /your_dataset
│   ├── 9.2(日期)/
│   	├── 1(類別編號)/
│   	    ├── 170000180000(時間區間)/
│   	   	   	├── [日期] + _ + [影片檔名序號時間段]+ _ + c[相機編號] + _ + [frame] + _ + [version] + .jpg
│   	   	   	├── 20220914_170000180000_c002_00083605_0.jpg
│   	       	├── 20220914_170000180000_c002_00083605_0.json
│   	├── 2(類別編號)/
│   	├── 9(類別編號)/
│   ├── 9.3(日期)/
│   ├── 9.24(日期)/
│   ├── 9.25(日期)/

簡單的階層結構,圖片檔案名稱與標註檔案名稱一致會比較好處理。
https://ithelp.ithome.com.tw/upload/images/20240820/2016838510kfZIG2PS.jpg

資料細節

資料夾:
[日期] + _ + [影片檔名序號時間段] = 20221016_150000160000
Output frame檔名:
[日期] +_ + [影片檔名序號時間段] + _ + c[相機編號] + _ + [frame] + _ + [圖片版本] + .jpg
Json 檔案:
20220914_170000180000_c002_00030600_0.json
CreateML json 內容:

[{"image": "20220914_170000180000_c002_00030600_0.jpg", "annotations": [{"label": "becky_1", "coordinates": {"x": 648.0247933884298, "y": 383.52066115702473, "width": 336.0, "height": 380.0}}, {"label": "becky_2", "coordinates": {"x": 1000.0247933884298, "y": 420.52066115702473, "width": 204.0, "height": 236.0}}, {"label": "becky_3", "coordinates": {"x": 1074.0247933884298, "y": 309.02066115702473, "width": 190.0, "height": 273.0}}]}]

3. 資料清洗

資料清洗是確保資料質量的關鍵步驟,常見的清洗操作包括:

  • 去除重複項:確保資料集中每個樣本都是唯一的。
    • 這邊主要還是靠人工/chatgpt幫忙
  • 處理缺失值:根據情況選擇刪除或填補缺失值。
  • 標準化資料:將資料轉換為相同的格式,以便進行分析
    • Model 吃的標籤資料不一定是我們當初標註的一樣,所以看要不要現在就重新排序。
  • 對於許多任務(如圖像分類),資料標註是必不可少的。可以使用標註工具(如LabelImg、Labelbox等)來進行標註,並確保標註的一致性和準確性。

labelImg 問題

labelImg無法開啟資料夾圖片和label

  • 不要把資料夾取中文和夾帶空格
  • 安裝labelImg在C槽就在C槽執行該指令
  • 要選到跟圖片一樣的資料夾路徑底下才能開圖片
  • 資料夾和套件安裝的槽要一樣

labelImg重開多次仍讀不到Bounding Box(有讀到圖片),有比重開更有效的方式嗎?(我開laelImg指令是labelImg ./6)

  • 先開啟labelImg [file_path]後,按change save dir: 改成[file_path資料夾],在按open dir: 改成[file_path資料夾]

ControlNet 資料集

https://github.com/lllyasviel/ControlNet/blob/main/docs/train.md
這篇有教如何製作一個 可以訓練ControlNet的資料集

製作 條件-圖片-文本資料集

確保文件結構如下:

  • Source 資料夾: 放Condition的圖片
  • Target 資料夾: 將目標圖像放在另一個目錄中,如 target/X.png。
  • 創建一個JSON文件(如 prompt.json),每一行是一個JSON對象,包含源文件名、目標文件名和文本提示。
ControlNet/
├── training/
│   └── fill50k/
│       ├── prompt.json
│       ├── source/
│       │   ├── X.png
│       │   └── ...
│       └── target/
│           ├── X.png
│           └── ...

加載資料集

編寫 tutorial_dataset.py 來加載資料集。

import json
import cv2
import numpy as np
from torch.utils.data import Dataset

class MyDataset(Dataset):
    def __init__(self):
        self.data = []
        # './training/fill50k/prompt.json' 要改成你的標記 json 檔
        with open('./training/fill50k/prompt.json', 'rt') as f:
            for line in f:
                self.data.append(json.loads(line))

    def __len__(self):
        return len(self.data)

    def __getitem__(self, idx):
        item = self.data[idx]

        source_filename = item['source']
        target_filename = item['target']
        prompt = item['prompt']
        # './training/fill50k/' 要改成你的"資料夾"
        source = cv2.imread('./training/fill50k/' + source_filename)
        target = cv2.imread('./training/fill50k/' + target_filename)
        ...

結論

製作自己的資料集對於學習和應用深度學習技術至關重要。本文提供了關於資料集製作的系統性指導通過實踐,將能夠掌握資料集的製作和深度學習模型的訓練,為未來的研究和職業生涯奠定基礎。


上一篇
【AI筆記】30天從論文入門到 Pytorch 實戰:使用API進行數據獲取 Day 22
下一篇
【AI筆記】30天從論文入門到 Pytorch 實戰:利用生成式AI進行股市分析 Day 24
系列文
【AI筆記】30天從論文入門到 Pytorch 實戰26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言