TF RankIQA開發說明書

2021-09-17 23:10:30 字數 3844 閱讀 2715

rankiqa, 先在乙個大型rank資料集上訓練rank部分, 即利用資料集訓練出乙個model; 然後再在乙個小的資料集上訓練iqa部分, 利用之前訓練好的網路進行微調即可.

rankiqa可以使用三種資料集: live2, tid2013. 首先生成_train.txt和_test.txt, 先生成每一種失真型別的影象, 然後為每一種失真的型別標記一種rank值. rank部分; 然後生成ft__train.txt, ft__test.txt, 測試影象已知, 然後為每個測試影象認為確定乙個質量分數, iqa部分.

生成失真影象和rank值, 以及相應的txt檔案生成**可見

**或評估**可見: tools/evaluate.py或demo/predict.py.

我們需要5種失真型別的影象. 但是這個**也可以自動完成. 並且失真型別我們可以自己選擇, 如模糊, 雜訊, block等型別. 2) rankiqa演算法在iqa部分, 輸出的是影象質量分數, 在iqa部分, 其實做的是回歸的事情. 當然, 我們也可以做成分類的事情!!!

並且, rank部分和iqa部分的影象可以不一樣!!!

本實驗的思想是patch-wise, 並非image-wise.

生成rank部分的影象, 即生成各種失真型別的影象.

rankiqa演算法根據生產4中失真型別的影象: jpeg, jp2k, gblur and gn, 因此在rank部分, 一共有5種型別的資料: pristine(原始影象), jpeg, jp2k, gblur and gn. 然後對於每種失真型別, 再建立4種程度的影象: 1, 2, 3, 4, 表示失真的程度.

rankiqa原始碼中, 的rank_tid2013下的**, 生產失真型別的影象. **已經很全面了. matlab**已經包含了17種失真型別, 將失真型別簡單介紹:

1: gn, 新增高斯雜訊.

2: gnc, 改變影象色調.

5: hfn, 傅利葉變換進行去噪.

6: in: 新增椒鹽雜訊.

7: qn, 返回雜訊.

8: gb, 高斯去噪, 高斯模糊.

9: id, bm3d去噪.

10: jpeg, 塊效應.

11:, jp2k, 將影象轉換為jp2影象, 並指定壓縮比.

14: nepn, 影象裁剪.

15: bw, 對某一塊修改其顏色.

16: msh, 平移.

17: ccl, 改變對比度.

18: cs, 改變飽和度.

19: mgn, 加雜訊.

22: cqd, 減少rgb影象的顏色數.

23: ca, 高斯去噪, 高斯模糊.

python**改寫實現. 生成失真影象**可見./scripts/generate_distortions_rank_images.py, 並借鑑matlab**的相應引數作為參考生成失真影象資料. 在實際中, 一種產生8種失真型別的影象, 具體見**.

python ./scripts/generate_distortions_rank_images.py

1> 乙個問題需要解決: 在python中, 直接賦值即=, 是深拷貝, 即對拷貝的物件進行改變, 那麼原始物件也會發生改變. 在對物件進行處理前, 最好先做一下淺拷貝!!!

trainval的rank部分, 一張影象生成n個patch, 每個patch做7種失真變換, 每種變換4種程度. 因此, 一張原始影象可以得到: n * (4 * 7 + 1)個patch.

生成iqa部分的影象, iqa部分, 我們做的將是分類問題. 即對某一種失真型別的patch, 讓網路判斷其失真型別. 因此, iqa部分的影象也是失真影象, 只是乙個patch, 我們只需要某一種失真型別即可, 然後指定其label: 0,1,2,3,4,5,6,7.

trainval的iqa部分, 一張影象生成n個patch, 每個patch隨機做1種失真變換, 每種變換隨機指定1種程度. 因此, 一張原始影象可以得到: n個patch. iqa生成影象時, 將所有的失真型別放在乙個資料夾下即可, 不用再分level!!! 但是檔名要區分是第幾個patch和第幾種level的失真. 影象名中, 可以看出是第幾個patch和第幾種失真型別.

生成訓練rank部分和iqa部分所需的txt檔案. 借鑑rankiqa的python**即可. 詳細**見: ./scripts/generate_rank_txt.py和./scripts/generate_iqa_txt.py.

python ./scripts/generate_rank_txt.py

python ./scripts/generate_iqa_txt.py

在生成iqa.txt時, 我們要對原有的**就行修改, 原有rankiqa在**影象質量分數時, 是回歸問題; 我們現在將其變為分類問題, 因此, 其標籤要自行設定!

首先訓練rank部分. python ./tools/train_rank.py

訓練iqa部分. python ./tools/train_iqa.py. 由於在訓練iqa部分時, 我們將回歸問題轉換成了分類問題. 原有問題是回歸問題, 因此最後一層全連線層節點數為1; 但是轉換成分類問題後, 最後一層全連線層節點數就是類別個數, 如8!

因此, 在訓練iqa問題時, 我們在載入訓練好的rank部分的引數時, 最後一層(fc8, 全連線層)要跳過!!!

首先生成測試影象資料集. 基本思想仍是patch-wise, 即將一張原始影象先切分成許多patches, 然後給每個patch新增一種指定型別的失真, 然後檢測每乙個patch的結果. 最後整張影象的分類結果, 通過投票手段解決.

原有**./tools/evaluate.py, 是評價演算法優劣, 想得到乙個數值結果.

原**./demo/predict.py, 是**一張影象的結果. 先將predict.py修改, 變成**rankiqa演算法分類準確率的**.

然後根據標註人員人工評估影象質量過程, 在人工評估一張影象的時候主要借助依據是: 影象中的主要目標物, 如車, 人, 建築物等等. 因此, 我們先利用mask_rcnn將影象中的目標先檢測, 並進行儲存.

結合目標檢測 + rankiqa, 我們將使用image-wise的方式評估影象質量分數. 不再使用patch-wise方式.

這些目標影象就作為訓練rankiqa演算法的原始影象.

利用mask rcnn做目標檢測, 並將目標進行儲存, 作為訓練rankiqa演算法的原始影象. 在做目標檢測時, 根據coco資料集80類目標, 我們將檢測並儲存所有的目標.

然後生成rank/iqa部分的影象時, 我們將採用iamge-wise方式, 並且失真型別減少! 並且, 不是所有的目標都適合做iqa演算法, 保證影象解析度比較大才可以! 失真型別去掉對比度異常和飽和度異常!!!

在使用目標時, 我們要選擇解析度比較大的目標, 這樣可信度才會高一些! 這樣, 可能還是會採用patch-wise的方式來做! 畢竟有些目標還是很大的!!!

目前先使用image-wise的方式測試一下效果. 並且, 失真引數要做相應的調整, 比level1-level4要有比較清晰的差距才可以. 另外, level1和pris影象必須有差距才可以!!!

應該在生成的時候resize一下, 這樣就會減少很多的記憶體!!! rank部分, 先每種型別每種level的影象設定為5000, 44機器硬碟太小!!!

將影象先resize, 然後再生成失真影象. 不僅可以減少記憶體, 並且生成速度也大幅提公升, 因為影象越大, io越慢!!!

很重要!!! 在訓練rank部分時, 我們需要修改的地方很多!!! 包括train_rank.py, rank_loss.py, rank_dataloader.py! 這三個py檔案都需要修改!!!

另外, 訓練rank部分的model和訓練iqa部分的model, 不一樣!!! 因為, 訓練rank部分的model, 最後乙個fc層, 結點個數為1; 而訓練iqa時, 我們將回歸問題變為分類問題, 結點為失真類別個數, 如6!!!

需求說明書

需求說明書四要素 收藏 需求說明書 是需求階段最關鍵的產出物,我們公司測試部的同事常常抱怨,有的專案的需求說明書看到末尾還是不清楚系統要做什麼,無法寫出測試用例。我想我們很多人,尤其是工作經驗不多的人,對需求說明書要寫些什麼東西也是糊里糊塗的,即使能夠從 rup 的教材上搬出來一些名詞,也往往不理解...

需求說明書

1 引言 1.1編寫的目的 說明編寫這份需求說明書的目的,指出預期的讀者.1.2背景 a.待開發的系統的名稱 b.本專案的任務提出者 開發者 使用者 c.該系統同其他系統或其他機構的基本的相互來往關係。1.3定義 列出本檔案中用到的專門術語的定義和外文首字母組詞的原片語。1.4參考資料 列出用得著的...

老婆說明書

有一種保健品叫 老婆 品名 民間俗稱老婆,正式場合可稱妻子或內人 現亦叫達令。化學名稱 woman 成分 水 血液和脂肪類碳水化合物,氣味幽香。理化性質 性質活潑,根據情況可分為一價 嫁 二價 嫁 三價 嫁 n價 嫁 易溶於蜜語 甜言 在真情 鑽石,金錢 豪宅的催化下熔點降低。難溶於白丁 性狀 本品...