DigiHouse
繁體中文

TECH ARTICLE · 8 MIN READ

Blog / DigiHouse

W4|AI 協同開發與資料增強實作

W4 小組實作:把少量生活照片整理成可追蹤資料集,請 Antigravity 協助產生處理程式,再由學生逐張驗證。

本週完成成果

你會把「照片太少」這個問題拆成清楚規格,請 Google Antigravity 協助產生資料處理程式,並由小組檢查旋轉、翻轉或亮度調整後的圖片是否仍符合原標籤。

完成標準|個人 list/dictionary 練習可執行;小組程式能從 inputs 產生 outputs;data_readme.md 記錄來源、授權、處理方法、張數與人工抽查結果。

課前準備

步驟 1|小組:選擇一個不含人臉、學號或私人空間的簡單物件,例如水瓶、馬克杯或文具,準備 6–10 張自有照片。

預期結果|每張照片都能說明來源與使用權;沒有從網路任意下載。

步驟 2|Codespaces 終端機:安裝本週鎖定依賴、建立資料夾,並確認圖片只放在課程允許的位置。

bash
python -m pip install -r courseware/gs3073-b/requirements-week04.txt
mkdir -p data/input data/output codes
find data/input -maxdepth 1 -type f | sort

預期結果|Pillow 安裝完成;input 只包含核准的小型測試照片,output 尚可為空。

步驟 3|Antigravity:開啟小組 Repo 工作區,先只要求它閱讀需求與提出計畫,不准直接大量修改。

預期結果|Agent 回覆包含預計修改檔案、處理方法與驗證方式,學生先核准計畫。

第二、三小時|課堂教材與個人技術實作

故事開始|小組想教 AI 分辨「水瓶」和「馬克杯」,但桌上只有八張照片。有人提議把同一張照片轉一點角度、調亮一點,像替同一位演員換站位與燈光,讓模型看見更多合理變化。問題是:轉過頭或裁掉重點,就可能變成錯誤教材。

老師先問|圖片變多就一定比較好嗎?不是。複製一百張同樣的錯誤照片,只會讓錯誤更有份量;資料增強要保留原本標籤代表的意思。

生活比喻|Data Augmentation 像讓學生從正面、側面、明暗不同的角度認同一個物品;Antigravity 像實習助教,可以先寫重複工作,但老師和學生仍要抽查每一批成果。

先看全程地圖|先看懂資料與決策怎麼移動,再開始操作。圖中的箭頭代表下一步,不代表可以跳過人工確認。

text
┌──────────┐ → ┌──────────┐ → ┌──────────┐
│ 自有原始照片│   │ 寫處理規格│   │ Agent 產生草稿│
└──────────┘   └──────────┘   └────┬─────┘
                                    ↓
┌──────────┐ ← ┌──────────┐ ← ┌──────────┐
│ 記錄資料卡│   │ 人工抽查標籤│   │ 小批次執行│
└──────────┘   └──────────┘   └──────────┘

步驟 4|個人編輯器:完成 list 與 dictionary 練習,先用文字資料理解一筆樣本的標籤。

python
samples = [
    {'file': 'cup_01.jpg', 'label': 'cup'},
    {'file': 'bottle_01.jpg', 'label': 'bottle'},
]

for sample in samples:
    print(sample['file'], '->', sample['label'])

預期結果|執行 week04_list_dict.py 時,每個檔名都對到一個標籤。

步驟 5|小組:把需求寫成 Agent 看得懂的工作單,限制輸入、輸出與禁止事項。

text
請只建立 codes/data_preprocessing.py。
輸入:data/input 下的 jpg/png。
輸出:data/output,每張最多產生水平翻轉與小角度旋轉各一張。
要求:保留原檔、不處理人臉、不連網、不覆蓋既有輸出;固定 random seed;最後列出成功與失敗數。
先提出計畫,等我確認後再修改。

預期結果|Agent 沒有修改需求外檔案,也沒有把圖片上傳到外部服務。

步驟 6|Codespaces:先用兩張照片執行,再查看檔案數與尺寸,禁止一開始處理整批。

bash
python codes/data_preprocessing.py --input data/input --output data/output --limit 2
find data/output -maxdepth 1 -type f | sort

預期結果|每張輸入最多得到規格允許的輸出;原始 input 沒被更動。

步驟 7|小組人工抽查:逐張打開輸出,記錄「標籤仍正確/需刪除」與原因,完成 data_readme.md。

預期結果|至少記錄一個可能失敗的例子,例如文字被鏡像、主體被裁掉或角度失真。

課堂收束|比較「Agent 說成功」與「人眼抽查通過」的差異。今天的重點不是產生最多圖片,而是建立可以解釋、重跑、知道何時失敗的資料流程。

指定閱讀與課後作業

指定閱讀|依課綱完成 W3Schools Python Lists 與 Dictionaries;官方 Python Data Structures 用來補充 list/dict 的正確行為。

課後作業方向|個人完成 list/dict 題目;小組整理資料處理程式與資料卡。圖片若不適合進 Git,請只提交小型公開安全樣本與取得方式,不要硬塞大型資料集。

步驟 8|個人:完成 week04_list_dict.py,加入至少三筆物件與一個依標籤計數的結果。

預期結果|輸出數量與手動計算一致。

步驟 9|小組:在 feat-data 分支提交程式與 data_readme.md,PR 中附上執行指令、抽查張數與已知限制。

bash
git add week04_list_dict.py codes/data_preprocessing.py data_readme.md
git commit -m 'W4: add reviewed data augmentation workflow'
git push -u origin HEAD

預期結果|PR 不含個資、大型模型、Secrets 或未授權圖片。

驗收方式

bash
python week04_list_dict.py
python codes/data_preprocessing.py --help
test -f data_readme.md
git status --short

通過條件|個人程式可執行;小組處理腳本有 help;資料卡說明來源、授權、處理、抽查與限制;Git 工作目錄乾淨。

應提交的 Repo 檔案

必交|week04_list_dict.py、codes/data_preprocessing.py、data_readme.md。只提交課綱指定成果與重現所需說明;不得提交 API key、個資、私人對話、未授權資料或大型模型檔。

常見問題與排除

問題 1|Agent 一次改太多檔:取消變更,縮小工作單並先要求計畫。

問題 2|輸出圖片方向錯誤:檢查 EXIF orientation,並把錯誤樣本列入資料卡。

問題 3|Codespace 空間不足:刪除可重建的 output,不刪原始資料;大型資料改用教師核准儲存位置。

引用資料

國立中央大學授課課綱/劉書銘老師,《劉書銘老師課程大綱_基礎模型與生成式人工智慧-更新版.pdf》;教師提供附件。用途:W1–W16 時段、實作主題、評量與交付物。

Google for Developers Codelabs,《Building with Google Antigravity》;https://codelabs.developers.google.com/building-with-google-antigravity;查閱日期:2026-08-04。用途:W4、W14 Antigravity Agent 工作區、任務與人工檢查流程。

Python Software Foundation,《Data Structures》;https://docs.python.org/3/tutorial/datastructures.html;查閱日期:2026-08-04。用途:W4 list、dictionary 與資料處理程式基礎。

W3Schools(課綱指定閱讀),《Python Lists and Dictionaries》;https://www.w3schools.com/python/python_lists.asp;查閱日期:2026-08-04。用途:W4 課後 Python Lists 與 Dictionaries 指定閱讀。