文檔圖像清理實(shí)戰(zhàn):computervision-recipes 中基于感知損失的編解碼模型解讀與訓(xùn)練推理指南)
計(jì)算機(jī)視覺(jué)深度學(xué)習(xí)【免費(fèi)下載鏈接】computervision-recipesBest Practices, code samples, and documentation for Computer Vision.項(xiàng)目地址https://gitcode.com/gh_mirrors/co/computervision-recipes點(diǎn)擊查看免費(fèi)下載文檔圖像清理Document Image Cleanup的目標(biāo)是給定一張帶噪聲的文檔圖像通過(guò)去除老化污漬、陰影、非均勻光照等噪聲元素提升其可讀性與可視質(zhì)量。本文以 computervision-recipes 倉(cāng)庫(kù)中contrib/document_cleanup/light_weight_document_cleanup_ICDAR2021/目錄下的官方實(shí)現(xiàn)為主體完整講解其輕量級(jí)編解碼卷積網(wǎng)絡(luò)架構(gòu)、VGG19 感知損失設(shè)計(jì)、訓(xùn)練數(shù)據(jù)生成與增強(qiáng)流程以及單圖/整目錄推理方法。讀完本文你將掌握該 ICDAR 2021 方案的模型族M16/M32/M64、可復(fù)現(xiàn)的訓(xùn)練參數(shù)與端到端使用步驟。一、任務(wù)背景與核心思路智能手機(jī)讓文檔的數(shù)字化拍攝與分享變得非常容易但文檔圖像往往因老化、污漬或拍攝環(huán)境帶來(lái)的陰影、非均勻光照等退化降低了可理解性。該方案聚焦于嵌入式/移動(dòng)端場(chǎng)景下的文檔圖像清理——這類場(chǎng)景受限于設(shè)備的內(nèi)存、能耗與延遲預(yù)算。為此作者提出一種輕量級(jí)編解碼器結(jié)構(gòu)的卷積神經(jīng)網(wǎng)絡(luò)用很低的網(wǎng)絡(luò)容量去除文檔圖像中的噪聲元素。為彌補(bǔ)低容量網(wǎng)絡(luò)的泛化能力損失損失函數(shù)中引入了感知損失Perceptual Loss借助預(yù)訓(xùn)練深度 CNN 實(shí)現(xiàn)知識(shí)遷移。根據(jù) README.md 中的記載與既有 SOTA 文檔增強(qiáng)模型相比該系列模型在參數(shù)量上小 65–1030 倍、在乘加運(yùn)算product-sum量上小 3–27 倍從而在資源占用與精度之間取得有利的權(quán)衡。該工作發(fā)表于 ICDAR 2021Dey, Soumyadeep Jawanpuria, Pratik引用信息完整保存在 README.md 中InProceedings{10.1007/978-3-030-86334-0_16, authorDey, Soumyadeep and Jawanpuria, Pratik, editorLlad{\o}s, Josep and Lopresti, Daniel and Uchida, Seiichi, titleLight-Weight Document Image Cleanup Using Perceptual Loss, booktitleDocument Analysis and Recognition -- ICDAR 2021, year2021, publisherSpringer International Publishing, addressCham, pages238--253, isbn978-3-030-86334-0 }二、環(huán)境依賴與目錄結(jié)構(gòu)2.1 依賴清單README.md 的 Setup 一節(jié)明確給出了運(yùn)行環(huán)境要求其中 TensorFlow 2.4 為訓(xùn)練與推理的核心框架依賴版本python3.7numpy1.16opencv4.2skimage0.17tensorflow2.4albumentations未固定版本用于數(shù)據(jù)增強(qiáng)tqdm未固定版本用于進(jìn)度顯示scikit-learn未固定版本用于訓(xùn)練/驗(yàn)證集切分2.2 關(guān)鍵文件DocumentCleanup_ICDAR2021.ipynbREADME 官方推薦的訓(xùn)練與測(cè)試示例覆蓋訓(xùn)練 → 單圖推理 → 整目錄推理全流程model.py全部網(wǎng)絡(luò)結(jié)構(gòu)定義loss_function.py感知損失與光照損失實(shí)現(xiàn)CreateTrainingData.py訓(xùn)練塊block生成與在線增強(qiáng)train.py 與 sample_train.py訓(xùn)練入口infer.py單圖與整目錄推理utils.py重疊分塊、拼接、縮放等圖像工具函數(shù)dataset/sample_data/與dataset/sample_gt_data/隨倉(cāng)庫(kù)提供的樣例訓(xùn)練數(shù)據(jù)image_42.png、image_56.png及對(duì)應(yīng)真值ground-truth。三、網(wǎng)絡(luò)架構(gòu)M16 / M32 / M64 模型族所有模型均定義在 model.py 中核心基礎(chǔ)單元是res_net_blockmodel.py#L9-L16連續(xù)兩層Conv2D(filters, 3x3, relu6, paddingsame, kernel_initializerhe_normal)BatchNormalization再通過(guò)Add()與輸入相加并接relu6激活構(gòu)成殘差塊。3.1 模型變體一覽通過(guò)統(tǒng)一入口GetModel(model_name, gray, block_size, batch_size)model.py#L207-L223按名稱實(shí)例化共 6 種組合模型名通道演進(jìn)Conv 濾波數(shù)輸出通道輸出策略M16_gray16 → 16×5 個(gè)殘差塊 → 161灰度輸入經(jīng)rgb_to_grayscale后與殘差輸出相加再經(jīng) sigmoidM16_color16 → 16×5 個(gè)殘差塊 → 163與原始 RGB 輸入相加后 sigmoidM32_gray16 → 32 → 32×5 個(gè)殘差塊 → 32 → 161灰度分支相加后 sigmoidM32_color16 → 32 → 32×5 個(gè)殘差塊 → 32 → 163RGB 分支相加后 sigmoidM64_gray16 → 32 → 64 → 64×5 個(gè)殘差塊 → 64 → 32 → 161灰度分支相加后 sigmoidM64_color16 → 32 → 64 → 64×5 個(gè)殘差塊 → 64 → 32 → 163RGB 分支相加后 sigmoid3.2 關(guān)鍵設(shè)計(jì)點(diǎn)殘差學(xué)習(xí)殘差以 M16 灰度模型為例CreateModel_M16_binarymodel.py#L22-L44網(wǎng)絡(luò)并不直接輸出清理后的像素而是學(xué)習(xí)輸入與干凈輸出之間的殘差映射最后通過(guò)layers.add([gray_in, out])把殘差加回灰度輸入再經(jīng)sigmoid歸一化到 [0,1]。這使得網(wǎng)絡(luò)容量需求大幅降低。可遷移到任意輸入尺寸input_shape默認(rèn)(None, None, 3)配合paddingsame模型可接受任意寬高的圖像實(shí)際訓(xùn)練/推理時(shí)以固定 block 尺寸切塊送入。參數(shù)規(guī)模極小notebook 中打印的 M16Gray 模型model.summary()顯示總參數(shù)僅26,885可訓(xùn)練 26,499、不可訓(xùn)練 386印證了輕量級(jí)的設(shè)計(jì)目標(biāo)?;叶?彩色雙分支gray_flagTrue時(shí)輸出 1 通道適合二值化/灰度清理gray_flagFalse時(shí)輸出 3 通道彩色結(jié)果。四、損失函數(shù)感知損失 光照損失IlluminationLossloss_function.py#L106-L154是該方案的核心它把 VGG19 感知損失與面向文檔的光照損失組合在一起。4.1 感知損失Perceptual Loss實(shí)現(xiàn)細(xì)節(jié)位于Compute_PLossloss_function.py#L79-L104加載tf.keras.applications.VGG19(include_topFalse, weightsimagenet)預(yù)訓(xùn)練權(quán)重并凍結(jié)vgg.trainable False用于從預(yù)測(cè)圖與真值圖中提取深層特征內(nèi)容損失取block2_conv2層特征圖的 L1 距離風(fēng)格損失取block1_conv1至block5_conv1五個(gè)層的 Gram 矩陣gram_matrixloss_function.py#L14-L18的 L1 距離最終PLoss style_loss * style_weight / num_style_layers content_loss * content_weight / num_content_layers。以預(yù)訓(xùn)練 VGG 作為特征提取器讓低容量清理網(wǎng)絡(luò)在高維語(yǔ)義/紋理空間上對(duì)齊輸入輸出即 README 所述知識(shí)遷移。4.2 灰度模式損失當(dāng)gray_flagTrue時(shí)總損失為loss PLoss 1e2 * mean(|gray_gt - y_out|)即感知損失加上 100 倍加權(quán)的灰度空間像素級(jí) L1 損失保證逐像素保真。4.3 彩色模式損失當(dāng)gray_flagFalse時(shí)在感知損失之外還疊加了多項(xiàng)顏色空間損失loss_function.py#L123-L154RGB 損失三個(gè)通道的 L1 距離之和權(quán)重 1e2Hue 損失將輸出轉(zhuǎn) HSV對(duì) H 通道計(jì)算 L1 距離代碼中被注釋可通過(guò)取消注釋啟用Luminance 損失將輸出轉(zhuǎn) YUV對(duì) Y 通道計(jì)算 L1 距離同樣默認(rèn)為注釋狀態(tài)默認(rèn)激活項(xiàng)為PLoss rgb_lossy_loss/hue_loss作為可選的補(bǔ)充組合。illu_Loss(style_weight, content_weight, gray_flag)loss_function.py#L156-L159是返回閉包的工廠函數(shù)用于向model.compile(loss...)注入自定義損失。五、訓(xùn)練數(shù)據(jù)生成與增強(qiáng)5.1 樣例數(shù)據(jù)集倉(cāng)庫(kù)隨附兩個(gè)樣例數(shù)據(jù)目錄dataset/sample_data/image_42.png、image_56.png兩張帶退化輸入圖dataset/sample_gt_data/同名干凈真值圖。訓(xùn)練時(shí)以data_foldersample_data、gt_foldersample_gt_data傳入兩目錄下文件需同名一一對(duì)應(yīng)GetData中按gt name拼接真值文件名見(jiàn) train.py#L55-L69。5.2 訓(xùn)練塊生成GenerateTrainingBlocksCreateTrainingData.py#L34-L137將每張訓(xùn)練圖按三種尺度[0.7, 1.0, 1.4]縮放ImageResizeLanczos 插值再通過(guò)GetOverlappingBlocks(..., Part8)切成 256×256 的重疊塊隨后對(duì)每張圖隨機(jī)抽取len(blocks)/5個(gè)隨機(jī)位置塊。全部塊以block_N.png/gtblock_N.png寫(xiě)入dataset_path/data_folder_Trainblocks/并把文件名列表寫(xiě)入train_block_names.txt。5.3 在線數(shù)據(jù)增強(qiáng)隨機(jī)塊在保存前經(jīng)過(guò) albumentations 組合增強(qiáng)CreateTrainingData.py#L16-L30模擬真實(shí)拍攝退化增強(qiáng)組具體算子概率噪聲/壓縮ISONoise(p0.4) 或 JpegCompression(quality 50–70, p0.8)0.6模糊MotionBlur(≤10)、MedianBlur(3)、GaussianBlur(≤7)0.8光照RandomBrightnessContrast(±0.3) 或 RandomShadow(1–18 個(gè)陰影)0.8每個(gè)隨機(jī)塊僅對(duì)輸入施加退化真值塊保持不變從而構(gòu)建退化輸入 → 干凈真值的監(jiān)督信號(hào)。六、模型訓(xùn)練6.1 訓(xùn)練入口直接運(yùn)行 sample_train.py 即可啟動(dòng)樣例訓(xùn)練from train import train data_folder sample_data gt_folder sample_gt_data batch_size 21 train(data_folder, gt_folder, dataset_pathdataset, checkpointcheckpoints, train_batch_sizebatch_size)train()定義于 train.py#L97-L162其關(guān)鍵參數(shù)及默認(rèn)值如下參數(shù)默認(rèn)值說(shuō)明data_folder必填退化輸入圖所在子目錄位于dataset_path下gt_folder必填真值圖所在子目錄dataset_pathdataset數(shù)據(jù)集根目錄checkpointcheckpoints模型 JSON 與權(quán)重保存目錄epochs10訓(xùn)練輪數(shù)pretrain_flagFalse是否用預(yù)訓(xùn)練權(quán)重初始化pretrain_model_weight_pathNone預(yù)訓(xùn)練權(quán)重文件路徑如checkpoints/M16_dibco13_epoch-958.hdf5model_nameM32可選M16/M32/M64gray_flagTrueTrue輸出單通道灰度False輸出三通道彩色block_size(256, 256)模型輸入塊尺寸train_batch_size1訓(xùn)練 batch size6.2 訓(xùn)練流程要點(diǎn)數(shù)據(jù)切分train_test_split(..., test_size0.2, random_state1)將生成的塊按 8:2 劃分訓(xùn)練/驗(yàn)證集數(shù)據(jù)加載My_Custom_Generatortrain.py#L71-L95繼承tf.keras.utils.Sequence逐 batch 讀取并ImageResizeSquare縮放、BGR2RGB轉(zhuǎn)色模型與優(yōu)化器GetModel(model_name, gray, block_size)構(gòu)建網(wǎng)絡(luò)Adam優(yōu)化器lossillu_Loss(style_weight1e-1, content_weight1e1, gray_flag...)編譯train.py#L125-L128回調(diào)TensorBoard 日志寫(xiě)入logs/scalars/時(shí)間戳/ModelCheckpoint依據(jù)val_loss保存最優(yōu)權(quán)重權(quán)重文件命名形如模型名_gray/color_data_folder_epoch-{epoch:02d}.hdf5模型結(jié)構(gòu)持久化訓(xùn)練前將model.to_json()寫(xiě)入checkpoints/模型名_gray.json或_color.json供推理階段反序列化使用硬件設(shè)置train.py頂部通過(guò)os.environ[CUDA_VISIBLE_DEVICES]0指定 GPU并啟用tf.config.experimental_run_functions_eagerly(True)便于調(diào)試多卡場(chǎng)景可參照注釋改用MirroredStrategy。notebook 中的樣例訓(xùn)練調(diào)用以 M16 為例含預(yù)訓(xùn)練權(quán)重初始化model_name M16 train(data_folder, gt_folder, dataset_pathdataset, checkpointcheckpoints, epochs1, gray_flagTrue, model_namemodel_name, pretrain_flagTrue, pretrain_model_weight_pathcheckpoints/M16_dibco13_epoch-958.hdf5)notebook 運(yùn)行日志顯示2 張樣例圖經(jīng)多尺度分塊共生成496 個(gè)訓(xùn)練塊驗(yàn)證了小數(shù)據(jù) 分塊 增強(qiáng)的可行性。七、推理單圖與整目錄推理實(shí)現(xiàn)在 infer.py 中分為兩個(gè)入口。7.1 單張圖片推理infer_imagefrom infer import infer_image test_img_name dataset/sample_data/image_56.png out_img_name test_out1.jpeg infer_image(checkpoints/M16_gray.json, checkpoints/M16_gray_sample_data_epoch-01.hdf5, test_img_name, out_img_name)流程讀取模型 JSON →model_from_json(loaded_model_json, custom_objects{relu6: tf.nn.relu6, convert2gray: convert2gray})重建結(jié)構(gòu)infer.py#L31-L35→load_weights載入權(quán)重 → 將整圖按 256×256、Part8重疊切塊 → 逐塊model.predict→CombineToImage拼接并對(duì)重疊區(qū)域取均值utils.py#L69-L102消除塊邊緣拼接痕跡。輸出通道為 1 時(shí)按灰度寫(xiě) PNG為 3 時(shí)RGB2BGR轉(zhuǎn)回 OpenCV 顏色空間。7.2 整目錄推理inferfrom infer import infer input_dir dataset/sample_data out_dir sample_out_data infer(checkpoints/M16_gray.json, checkpoints/M16_gray_sample_data_epoch-01.hdf5, input_dir, out_dir)infer()infer.py#L31-L72遍歷目錄內(nèi)所有圖像文件以tqdm顯示進(jìn)度逐張執(zhí)行與單圖相同的分塊推理并將結(jié)果以原文件名的.png形式寫(xiě)入save_out_dir。7.3 樣例輸入/輸出倉(cāng)庫(kù)的sample_input_output/目錄提供了真實(shí)對(duì)比示例除上文書(shū)頁(yè)book外還有演示文稿頁(yè)pres1_org.jpg/pres1_dnn.jpg與單據(jù)bill_org.jpg/bill_dnn.jpg輸入圖帶有拍攝噪聲、陰影與非均勻光照清理后紙張底色恢復(fù)干凈、文字與手寫(xiě)內(nèi)容保持清晰。八、端到端復(fù)現(xiàn)路徑小結(jié)在 DocumentCleanup_ICDAR2021.ipynb 中官方給出了完整的一站式示例可歸納為四步按 README.md 依賴清單安裝環(huán)境Python 3.7 TensorFlow 2.4 等將dataset/sample_data/與dataset/sample_gt_data/作為輸入與真值目錄調(diào)用train()可選pretrain_flagTrue加載預(yù)訓(xùn)練權(quán)重加速收斂訓(xùn)練結(jié)束后在checkpoints/獲得模型名_gray|color.json與..._epoch-XX.hdf5權(quán)重通過(guò)infer_image()或infer()對(duì)單張圖片或整個(gè)目錄完成清理并保存為 PNG 輸出。整套方案從輕量殘差編解碼結(jié)構(gòu)、感知損失約束、退化模擬增強(qiáng)到重疊分塊推理為端側(cè)文檔增強(qiáng)類任務(wù)提供了一條完整的、可復(fù)現(xiàn)的工程路徑需要進(jìn)一步閱讀源碼細(xì)節(jié)時(shí)可重點(diǎn)對(duì)照 model.py、loss_function.py 與 utils.py 三個(gè)核心實(shí)現(xiàn)文件。贊分享計(jì)算機(jī)視覺(jué)深度學(xué)習(xí)【免費(fèi)下載鏈接】computervision-recipesBest Practices, code samples, and documentation for Computer Vision.項(xiàng)目地址https://gitcode.com/gh_mirrors/co/computervision-recipes點(diǎn)擊查看免費(fèi)下載相關(guān)推薦AutoGen.NET 實(shí)戰(zhàn)使用 OpenAIChatAgent 連接 Ollama 等第三方 OpenAI 兼容 APIAutoGen.NET 實(shí)戰(zhàn)使用 OpenAIChatAgent 連接 Ollama 等第三方 OpenAI 兼容 API 本文基于 AutoGen 倉(cāng)庫(kù)中的人工智能AI AgentAgent 框架多智能體大模型工具調(diào)用Campus-iMaoTai智能茅臺(tái)自動(dòng)預(yù)約系統(tǒng)的完整部署與使用指南Campus iMaoTai智能茅臺(tái)自動(dòng)預(yù)約系統(tǒng)的完整部署與使用指南 還在為每天手動(dòng)搶購(gòu)茅臺(tái)而煩惱嗎Campus iMaoTai是一款基于Java開(kāi)發(fā)的智能后端前端任務(wù)調(diào)度工作流自動(dòng)化如何用AutoTrain Advanced訓(xùn)練圖像超分辨率模型多尺度損失與感知損失結(jié)合的終極指南如何用AutoTrain Advanced訓(xùn)練圖像超分辨率模型多尺度損失與感知損失結(jié)合的終極指南 AutoTrain Advanced是一款功能強(qiáng)大的開(kāi)源工具機(jī)器學(xué)習(xí)深度學(xué)習(xí)NLP計(jì)算機(jī)視覺(jué)微調(diào)后端上一篇AngularFire 開(kāi)源項(xiàng)目實(shí)戰(zhàn)指南下一篇Camel-5B API開(kāi)發(fā)指南快速構(gòu)建智能聊天助手和內(nèi)容生成應(yīng)用創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考