練實(shí)戰(zhàn):從 COCO 標(biāo)注到 TFRecords 數(shù)據(jù)準(zhǔn)備與 Vertex AI 訓(xùn)練配置)
CircularNET 模型重訓(xùn)練實(shí)戰(zhàn)從 COCO 標(biāo)注到 TFRecords 數(shù)據(jù)準(zhǔn)備與 Vertex AI 訓(xùn)練配置【免費(fèi)下載鏈接】modelsModels and examples built with TensorFlow項(xiàng)目地址: https://gitcode.com/GitHub_Trending/mode/models在 TensorFlow Models 倉(cāng)庫(kù)的 waste_identification_mlCircularNET項(xiàng)目中若要將預(yù)訓(xùn)練的可回收物識(shí)別模型遷移到你自己的傳送帶相機(jī)數(shù)據(jù)上必須完成兩個(gè)前置環(huán)節(jié)一是把拍攝、標(biāo)注好的圖像加工成模型可消費(fèi)的訓(xùn)練數(shù)據(jù)集二是把數(shù)據(jù)集路徑與超參數(shù)寫進(jìn)訓(xùn)練作業(yè)配置。本篇以官方文檔 prepare-data.md 為主線完整講解數(shù)據(jù)集準(zhǔn)備的標(biāo)注格式要求、預(yù)處理腳本能力邊界、COCO JSON 到 TFRecords 的轉(zhuǎn)換流程以及 CircularNET_Vertex_AI_ReTraining_v1.ipynb 訓(xùn)練腳本中的關(guān)鍵變量與 config_v1.yaml 配置文件的實(shí)際含義幫助你在本地或云端走通完整的數(shù)據(jù)準(zhǔn)備與訓(xùn)練配置鏈路。重訓(xùn)練前置流程總覽CircularNET 是基于實(shí)例分割instance segmentation構(gòu)建的可回收物識(shí)別模型用于識(shí)別傳送帶上物體的材質(zhì)類型metal、paper、塑料的 HDPE/PET/LDPE 等與形態(tài)cup、bottle、bag 等典型推理標(biāo)簽形如Plastics-PET_Bottle見 README.md。重訓(xùn)練的本質(zhì)是用你自己的標(biāo)注數(shù)據(jù)微調(diào)該模型因此文檔給出的流程分為三步采集與標(biāo)注用相機(jī)拍攝圖像并完成必要的預(yù)處理然后逐張標(biāo)注圖像中出現(xiàn)的材質(zhì)類別。標(biāo)注的作用是讓模型在訓(xùn)練時(shí)知道自己要認(rèn)什么材質(zhì)。格式統(tǒng)一所有標(biāo)注必須保存為COCO JSON 格式這是后續(xù)一切腳本的輸入基礎(chǔ)。轉(zhuǎn)換與上傳用倉(cāng)庫(kù)提供的預(yù)處理腳本將標(biāo)注圖像轉(zhuǎn)換為TFRecordsTensorFlow 模型要求的輸入格式再把訓(xùn)練集與驗(yàn)證集分別上傳到 Cloud Storage bucket 后再啟動(dòng)訓(xùn)練。文檔同時(shí)給出了重訓(xùn)練的前置條件清單見 before-you-begin.md開通 Google Cloud 并創(chuàng)建項(xiàng)目啟用 Vertex AI 與 Cloud Storage API創(chuàng)建用于存放文件的 Cloud Storage bucket為訓(xùn)練作業(yè)分配至少 4 塊 GPU并配置一個(gè)具有訓(xùn)練作業(yè)執(zhí)行權(quán)限的 Vertex AI 服務(wù)賬號(hào)。預(yù)處理腳本的六大能力倉(cāng)庫(kù)在 pre_processing 目錄下提供了完整的 Notebook 工具鏈。文檔明確列出了這套腳本能完成的六類操作能力對(duì)應(yīng)倉(cāng)庫(kù)腳本說(shuō)明將圖像標(biāo)注轉(zhuǎn)換為帶標(biāo)簽和元數(shù)據(jù)的 COCO 標(biāo)注 JSON 文件labelme_to_coco.ipynb從 labelMe 等標(biāo)注工具產(chǎn)物生成 COCO 格式清洗與整理 COCO 標(biāo)注 JSON使數(shù)據(jù)集干凈、一致、可用于訓(xùn)練JSON_Generation_for_Training.ipynb依賴 config/ 下的標(biāo)簽映射文件做類別歸一過(guò)濾無(wú)關(guān)或噪聲標(biāo)注避免其負(fù)面影響訓(xùn)練過(guò)程同上 Notebook 流程通過(guò)標(biāo)簽映射剔除不在目標(biāo)類別體系內(nèi)的標(biāo)注調(diào)整標(biāo)注格式使其達(dá)到模型訓(xùn)練的最優(yōu)形態(tài)JSON_Generation_for_Training.ipynb統(tǒng)一 bbox/mask 結(jié)構(gòu)與字段校驗(yàn)所有標(biāo)注圖像均存在且未損壞同上 Notebook 流程圖像-標(biāo)注一致性檢查合并多個(gè) COCO JSON 文件為單一文件并轉(zhuǎn)換為 Mask R-CNN 訓(xùn)練所需的 TFRecordsmerge_coco_files.ipynb、merge_coco_files_faster.ipynb、split_coco_files.ipynb、coco_to_tfrecord.ipynb合并 → 劃分 train/val → 轉(zhuǎn) TFRecords除訓(xùn)練向腳本外目錄里還有 visualize_instance_segmentation_annotations.ipynb 用于把實(shí)例分割標(biāo)注繪制回圖像做人工核驗(yàn)——文檔第 5 項(xiàng)校驗(yàn)標(biāo)注圖像的能力在實(shí)操中通常配合它來(lái)人工抽查。此外deprecated_JSON_Generation_for_Training.ipynb 是舊版腳本新流程應(yīng)使用不帶 deprecated 前綴的版本。從源碼結(jié)構(gòu)看預(yù)處理流程由 config.ini 驅(qū)動(dòng)查看 pre_processing/config/config.ini 可以推斷出整套腳本的參數(shù)組織方式全部輸入輸出路徑集中在四個(gè)配置段中——[config]config_folder_path標(biāo)簽配置目錄[paths]單文件清洗的三個(gè)關(guān)鍵路徑——原始annotation_pathCOCO 標(biāo)注 JSON、images_folder_path圖像目錄、new_annotation_path清洗后的輸出 JSON[merge]逗號(hào)分隔的多個(gè)input_files與合并輸出output_file[split]合并產(chǎn)物input_file與劃分輸出的output_folder[tfrecord]訓(xùn)練/驗(yàn)證各自的圖像文件夾、標(biāo)注文件_train.json/_val.json以及 TFRecords 輸出目錄training_data_folder、validation_data_folder。這個(gè)配置印證了文檔描述的四階段流水清洗單個(gè) COCO 文件 → 合并多批次文件 → 拆分為 train/val → 各自轉(zhuǎn) TFRecords。配置段中的示例路徑是項(xiàng)目?jī)?nèi)部工作目錄實(shí)際使用時(shí)需替換為自己的數(shù)據(jù)路徑。標(biāo)簽映射決定了 num_classespre_processing/config/ 目錄提供了一組標(biāo)簽映射文件它們是類別體系的落盤形式data/45_labels.csv45 類完整標(biāo)簽、data/material_labels.csv 與 data/material_form_labels.csv材質(zhì)/形態(tài)雙模型策略、data/one_model_labels.csv單統(tǒng)一模型標(biāo)簽等同時(shí)提供.pbtxt版本供推理側(cè)使用。標(biāo)簽數(shù)量直接對(duì)應(yīng)訓(xùn)練配置中的num_classes官方配置為 19見下文因此標(biāo)注時(shí)使用的類別體系必須與訓(xùn)練/推理標(biāo)簽文件保持一致否則類別對(duì)齊會(huì)出錯(cuò)。目錄下還包含 sample_images/ 與 sample_json/ 示例數(shù)據(jù)以及 categories_list_of_dictionaries.py 這類輔助腳本可用于理解 COCO JSON 中 categories 字段的組織方式。上傳 TFRecords 到 Cloud Storage文檔要求在進(jìn)入重訓(xùn)練流水線之前先在本地工作站、遠(yuǎn)程服務(wù)器或數(shù)據(jù)庫(kù)上用自己的數(shù)據(jù)跑完預(yù)處理腳本TFRecords 就緒后上傳到 Cloud Storage bucket。Bucket 中可放置兩個(gè)位置一個(gè)存訓(xùn)練數(shù)據(jù)集、另一個(gè)存驗(yàn)證數(shù)據(jù)集分別對(duì)應(yīng)訓(xùn)練配置里的train_data與validation_data輸入。上傳動(dòng)作在 Google Cloud 控制臺(tái)的 Cloud Storage 界面完成bucket 命名與區(qū)域region需要與訓(xùn)練腳本中的占位符對(duì)應(yīng)。配置訓(xùn)練作業(yè)腳本變量逐一解析數(shù)據(jù)集就緒后訓(xùn)練作業(yè)通過(guò) CircularNET_Vertex_AI_ReTraining_v1.ipynb 配置并啟動(dòng)。文檔指定了五個(gè)必須提供的腳本變量變量含義取值建議input_train_data_pathCloud Storage bucket 中訓(xùn)練集 TFRecords 的路徑指向gs://bucket/train/等input_validation_data_pathCloud Storage bucket 中驗(yàn)證集 TFRecords 的路徑指向gs://bucket/val/等init_checkpoint_path初始 checkpoint模型權(quán)重的路徑使用開源初始 checkpoint可從 config_v1.yaml 的task.model等配置配套獲取config_file_path包含微調(diào)訓(xùn)練參數(shù)的配置文件路徑直接使用倉(cāng)庫(kù)內(nèi)的 config/config_v1.yamlservice_account有訓(xùn)練作業(yè)執(zhí)行權(quán)限的 Vertex AI 服務(wù)賬號(hào)名按 before-you-begin.md 中創(chuàng)建腳本中的占位符PROJECT_ID、REGION、STAGING_BUCKET必須分別替換為你的 Google Cloud 項(xiàng)目 ID、區(qū)域和 Cloud Storage bucket。文檔另提示num_classes等其余腳本變量也可以按需自定義它表示標(biāo)注圖像中材質(zhì)或其他類別的數(shù)量——這一點(diǎn)與前述標(biāo)簽映射文件、以及配置文件中的task.model.num_classes三處必須保持一致。config_v1.yaml 深度解讀微調(diào)參數(shù)的實(shí)際含義config_v1.yaml 是文檔指定的默認(rèn)配置文件采用 TensorFlow Models 通用的 runtime/task/trainer 三段結(jié)構(gòu)關(guān)鍵取值如下runtime分布式運(yùn)行num_gpus: 4、num_cores_per_replica: 1、distribution_strategy: multi_worker_mirrored即 before-you-begin 中至少 4 塊 GPU要求的落盤形式enable_xla: true、run_eagerly: false開啟 XLA 圖編譯加速。task.model模型結(jié)構(gòu)骨干網(wǎng)絡(luò)為resnetmodel_id: 50即 ResNet-50FPN 解碼器num_filters: 256、fusion_type: suminclude_mask: true啟用 mask 分支這就是實(shí)例分割能力的來(lái)源檢測(cè)頭 mask 頭 RPN 頭三段配置齊全num_classes: 19當(dāng)前官方統(tǒng)一模型的類別數(shù)自定義數(shù)據(jù)時(shí)需與JSON_Generation階段的標(biāo)簽體系、以及訓(xùn)練腳本變量num_classes同步修改input_size: [512, 1024, 3]輸入尺寸 512×1024采樣/NMS 等超參roi_sampler的num_sampled_rois: 512、前景 IoU 閾值 0.5detection_generator的max_num_detections: 100、nms_iou_threshold: 0.5沿用檢測(cè)模型通用默認(rèn)一般無(wú)需改動(dòng)。微調(diào)相關(guān)的關(guān)鍵開關(guān)freeze_backbone: true凍結(jié) ResNet 骨干只訓(xùn)練上層檢測(cè)/分割相關(guān)層——這是在預(yù)訓(xùn)練權(quán)重上微調(diào)的核心保險(xiǎn)絲小數(shù)據(jù)集場(chǎng)景下尤其重要init_checkpoint_modules: all加載初始 checkpoint 的全部模塊權(quán)重與腳本變量init_checkpoint_path配合使用。task.train_data / validation_data數(shù)據(jù)輸入file_type: tfrecord從源碼配置層面印證了文檔TFRecords 是必須輸入格式的說(shuō)法數(shù)據(jù)管線通過(guò)simple_decoder解碼global_batch_size: 16訓(xùn)練側(cè)drop_remainder: true、驗(yàn)證側(cè)為false數(shù)據(jù)增強(qiáng)僅開啟aug_rand_hflip: true隨機(jī)水平翻轉(zhuǎn)縮放范圍aug_scale_min: 0.8到aug_scale_max: 1.25驗(yàn)證側(cè)全部關(guān)閉增強(qiáng)aug_scale_min/max: 1.0保證評(píng)估口徑干凈max_num_instances: 100單圖最多 100 個(gè)實(shí)例標(biāo)注中超過(guò)該值的實(shí)例會(huì)被丟棄標(biāo)注與劃分?jǐn)?shù)據(jù)時(shí)可參考此上限。trainer訓(xùn)練策略優(yōu)化器SGDmomentum: 0.9 線性 warmupwarmup_steps: 500warmup_learning_rate: 0.0067學(xué)習(xí)率PiecewiseConstantDecay分段常數(shù)衰減boundaries: [15000, 20000]處從0.2 → 0.02 → 0.002總步數(shù)train_steps: 160000每 512 步驗(yàn)證validation_interval: 512、每 500 步保存 checkpointmax_to_keep: 5preemption_on_demand_checkpoint: true應(yīng)對(duì) Vertex AI 訓(xùn)練可能被搶占的場(chǎng)景需要即時(shí)保存 checkpoint。這些步數(shù)級(jí)超參意味著一次完整重訓(xùn)練是長(zhǎng)時(shí)作業(yè)與后續(xù) launch-job 文檔訓(xùn)練可能需要數(shù)天的提示一致如果你的數(shù)據(jù)集規(guī)模明顯小于官方數(shù)據(jù)可以酌情下調(diào)train_steps與boundaries但應(yīng)保留 warmup 與分段衰減的結(jié)構(gòu)。啟動(dòng)訓(xùn)練與驗(yàn)證配置完成后按 launch-job.md 運(yùn)行CircularNET_Vertex_AI_ReTraining_v1.ipynb提交作業(yè)。兩點(diǎn)實(shí)操要點(diǎn)值得強(qiáng)調(diào)訓(xùn)練運(yùn)行期間不要提前導(dǎo)出 checkpoint 為 TF SavedModel且無(wú)需保持本地機(jī)器開機(jī)Vertex AI 會(huì)在后臺(tái)管理作業(yè)監(jiān)控進(jìn)度時(shí)進(jìn)入 Vertex AI → Training →Hyperparameter tuning jobs標(biāo)簽頁(yè)選中你的作業(yè)通過(guò)Open TensorBoard查看訓(xùn)練指標(biāo)或View Logs查看日志。訓(xùn)練完成后同一 Notebook 也引導(dǎo)你將模型導(dǎo)出為 TensorFlow 等格式用于部署并可對(duì)本地圖像跑推理驗(yàn)證性能。小結(jié)重訓(xùn)練的數(shù)據(jù)準(zhǔn)備鏈條可以概括為相機(jī)拍攝 → 材質(zhì)標(biāo)注COCO JSON→ 腳本清洗/過(guò)濾/合并/校驗(yàn) → 拆 train/val → 轉(zhuǎn) TFRecords → 上傳雙 bucket 路徑訓(xùn)練配置鏈條則是替換PROJECT_ID/REGION/STAGING_BUCKET占位符 → 填寫 5 個(gè)腳本變量 → 按需修改num_classes與 config_v1.yaml 中的freeze_backbone、學(xué)習(xí)率與步數(shù)。只要類別體系在標(biāo)簽映射文件、num_classes變量與配置三處保持對(duì)齊TFRecords 與 checkpoint 路徑指向正確即可在 Vertex AI 上穩(wěn)定跑通 CircularNET 的定制化重訓(xùn)練。【免費(fèi)下載鏈接】modelsModels and examples built with TensorFlow項(xiàng)目地址: https://gitcode.com/GitHub_Trending/mode/models創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考