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價 嫁 易溶於蜜語 甜言 在真情 鑽石,金錢 豪宅的催化下熔點降低。難溶於白丁 性狀 本品...