delphi 生成 超大量xml_用OpenCV4實現圖像的超分別率

用OpenCV4實現圖像的超分別率

本實驗原文鏈接:·

f="https://arxiv.org/pdf/1807.06779.pdf">https://arxiv.org/pdf/1807.06779.pdf

原文摘要

單圖像超分辨率(SISR)的主要挑戰是如何恢復微小紋理等高頻細節。然而,大多數最先進的方法缺乏識別高頻區域的特定模塊,導致輸出圖像模糊。本文提出了一種基于注意的方法來區分紋理區域和平滑區域。高頻細節定位后,進行高頻補償。這種方法可以與先前提出的SISR網絡相結合。通過提供高頻增強,可以獲得更好的性能和視覺效果。本文還提出了自己的由DenseRes塊組成的SISR網絡。該模塊提供了一種將低層特征和高層特征相結合的有效方法。大量的基準測試表明,本文提出的方法比SISR的最新作品有了顯著的改進。

單圖像超分辨率(SISR)的任務是從單低分辨率(LR)輸入圖像中推斷出高分辨率(HR)圖像。

這是一個高度不適定的問題,因為在低通濾波和下采樣過程中,諸如微小紋理等高頻信息會丟失。因此,SISR是一對多的映射,本文的任務是找到最合理的圖像,盡可能地恢復微小的紋理。為了從LR圖像中恢復HR圖像,需要大的接收場從LR圖像中獲取更多的上下文信息。使用更深層的網絡是增加接受視野的更好方法。深度網絡的一個缺點是梯度問題的消失,使得網絡難以訓練。Heetal.[1]利用這些學習框架來進行網絡訓練。跳過連接是另一種通過網絡增加梯度和信息流動的解決方案。低層特征包含了有效的信息,可以用來重建HR圖像。SISR將從不同層次的集體信息中獲益。SISR的難點在于恢復高頻細節,如微小紋理。

輸出圖像與原始圖像之間的均方誤差(MSE)常作為損失函數來訓練卷積神經網絡。然而,在追求高峰值信噪比(PSNR)的過程中,MSE會返回許多可能解的均值,從而使輸出圖像變得模糊和不可信。為了恢復高頻細節,人們提出了知覺損失[2],它鼓勵生成特征表示相似的圖像的網絡,從而產生更清晰的圖像。萊迪格在阿爾。[3] ,[4]結合對抗性網絡、感知損失和紋理損失,鼓勵輸出圖像恢復微小紋理等高頻細節。但是所有這些網絡并不清楚高頻細節的位置,它們只是試圖盲目地恢復

紋理。因此,這些網絡的性能并不令人滿意。為了解決這些問題,首先,在denseNet[5]的基礎上,本文提出了一種新的由剩余積木塊(Resblock)[1]組成的DenseRes塊。每個Resblock的輸出都連接到其他Resblock,增強了信息的流動性,避免了冗余特征的重新學習。利用DenseRes塊,減少了梯度消失問題,網絡易于訓練。第二,本文提供一個注意機制來處理高頻細節的恢復。受用于語義像素級分割的U-net[6]的啟發,本文提出了一種新的混合密集連接U-net,以幫助網絡區分是否存在需要修復或類似于插值圖像的細小紋理區域。它作為一個特征選擇器,有選擇地增強高頻特征。因此,可以盡可能接近地恢復紋理。這是第一次將注意機制引入SISR。方法簡單有效。通過選擇性地提供高頻增強,它緩解了輸出圖像容易模糊的問題。注意機制可以與先前提出的SISR網絡相結合。獲得了較高的信噪比和信噪比。另一個貢獻是本文提出了DenseRes塊,它提供了一種有效的方法來結合低層特征和高層特征。這有利于恢復高頻細節。本文在四個公開的基準數據集上評估本文的模型。它在PSNR和結構相似性(SSIM)指數方面優于當前最新的方法。PSNR比VDSR[7]和DRCN[8]分別提高了0.54db和0.52dB。

圖像超像素

傳統方式的圖像超像素常見的方式就是基于立方插值跟金字塔重建。OpenCV中對這兩種方式均有實現,低像素圖像在紋理細節方面很難恢復,從低像素圖像到高像素圖像是典型的一對多映射,如果找到一種好的映射關系可以盡可能多的恢復或者保留圖像紋理細節是圖像超像素重建的難點之一,傳統方式多數都是基于可推導的模型實現。而基于深度學習的超像素重新方式過程未知但是結果優于傳統方式。在深度學習方式的超像素重建中,對低像素圖像采樣大感受野來獲取更多的紋理特征信息。OpenVINO中提供的單張圖像超像素網絡參考了下面這篇文章

該網絡模型主要分為兩個部分

· 特征重建網絡,實現從低分辨率到高分辨率的像素重建

· 注意力生成網絡,主要實現圖像中高頻信息的修復

通過兩個網絡的的輸出相乘,還可以得到高分辨率圖像的殘差。特征重建網絡主要包括三個部分。卷積層實現特征提取,卷積層采樣大感受野來得到更多紋理細節;多個DenseRes 疊加模塊,級聯DenseRes可以讓網絡更深,效果更好;一個亞像素卷積層作為上采樣模塊。注意力生成網絡部分,用來恢復小的紋理細節,如圖像的邊緣與形狀,網絡可以準確定位到細節特征,然后進行相對提升,注意力特征網絡設計受到UNet網絡架構的啟發。完整的模型結構如下:

18d280df7a396c1fb1f57c111e7312aa.png

一個更簡介的網絡結構如下:

c9231f47a77ee34aa027bbd5a7d672f9.png

其中LR表示低分辨率圖像、HR表示高分辨率圖像,Bicubic表示雙立方插值上采樣。

模型文件

OpenVINO提供的模型是在這個模型基礎上進行簡化,計算量更低,速度更快。從上面的模型結構知道,模型有兩個輸入部分,分別是輸入的低分辨率圖像與雙立方上采樣的圖像

· LR的輸入:[1x3x270x480]雙立方采樣:[1x3x1080x1920]三通道順序是:BGR

模型的輸出

·

輸出層是一個blob對象,格式為[1x3x1080x1920]

程序演示

首先需要加載網絡模型,獲取可執行網絡,然后設置輸入與輸出的數據格式與數據精度,這部分的代碼如下:

// 加載檢測模型
CNNNetReader network_reader;
network_reader.ReadNetwork(model_xml);
network_reader.ReadWeights(model_bin);
// 請求網絡輸入與輸出信息
auto network = network_reader.getNetwork();
InferenceEngine::InputsDataMap input_info(network.getInputsInfo());
InferenceEngine::OutputsDataMap output_info(network.getOutputsInfo());
// 設置輸入格式
for (auto &item : input_info) {
auto input_data = item.second;
input_data->setPrecision(Precision::U8);
input_data->setLayout(Layout::NCHW);
input_data->getPreProcess().setResizeAlgorithm(RESIZE_BILINEAR);
input_data->getPreProcess().setColorFormat(ColorFormat::BGR);
}
printf("get it n");
// 設置輸出格式
for (auto &item : output_info) {
auto output_data = item.second;
output_data->setPrecision(Precision::FP32);
}
// 創建可執行網絡對象
auto executable_network = ie.LoadNetwork(network, "CPU");
// 請求推斷圖
auto infer_request = executable_network.CreateInferRequest();

代碼演示步驟中有兩個輸入,對輸入的設置可以使用下面的代碼

/** Iterating over all input blobs **/
for (auto & item : input_info) {
auto input_name = item.first;
printf("input_name : %s n", input_name.c_str());
/** Getting input blob **/
auto input = infer_request.GetBlob(input_name);
size_t num_channels = input->getTensorDesc().getDims()[1];
size_t h = input->getTensorDesc().getDims()[2];
size_t w = input->getTensorDesc().getDims()[3];
size_t image_size = h*w;
Mat blob_image;
resize(src, blob_image, Size(w, h));
printf("input channel : %d, height : %d, width : %d n", num_channels, h, w);
// NCHW
unsigned char* data = static_cast<unsigned char*>(input->buffer());
for (size_t row = 0; row < h; row++) {
for (size_t col = 0; col < w; col++) {
for (size_t ch = 0; ch < num_channels; ch++) {
data[image_size*ch + row*w + col] = blob_image.at<Vec3b>(row, col)[ch];
}
}
}
}

最后執行推理,完成對輸出的解析,在解析輸出的時候其實輸的是[NCHW] = [1x3x1080x1920]的浮點數矩陣,需要轉換為Mat類型為[HWC] =[1080x1920x3],采用的是循環方式,是不是有更好的數據處理方法可以轉換這個,值得研究。解析部分的代碼如下

// 執行預測
infer_request.Infer();
// 處理輸出結果
for (auto &item : output_info) {
auto output_name = item.first;
// 獲取輸出數據
auto output = infer_request.GetBlob(output_name);
float* buff = static_cast<PrecisionTrait<Precision::FP32>::value_type*>(output->buffer());
const int c = output->getTensorDesc().getDims()[1];
const int h = output->getTensorDesc().getDims()[2];
const int w = output->getTensorDesc().getDims()[3];
// 獲得輸出的超像素圖像
Mat result = Mat::zeros(Size(w, h), CV_32FC3);
for (int ch = 0; ch < c; ch++) {
for (int row = 0; row < h; row++) {
for (int col = 0; col < w; col++) {
result.at<Vec3f>(row, col)[ch] = buff[ch*w*h+ row*w + col];
}
}
}
printf("channel : %d, height : %d, width : %d n", c, h, w);
normalize(result, result, 0, 255.0, NORM_MINMAX);
result.convertTo(result, CV_8U);
imshow("High-Resolution Demo", result);
imwrite("D:/result.png", result);
}

測試結果分別如下:(原圖)

a6def3b4274a49c1d8d5afc3e8a9abad.png

超分辨輸出:(1920x1080)

ab0e3a0a8835d920095dfc248f0afefe.png

總結

也許模型被簡化的太厲害了,速度是很快了,單身效果感覺比雙立方好那么一點點而已!

本文提出了一種基于注意的方法來區分紋理區域和平滑區域。當高頻細節的位置被定位時,注意機制起到了增強高頻特征和抑制平滑區域噪聲的特征選擇器的作用。因此,本文的方法避免了盲目地恢復高頻細節。本文將該機制集成到包括SRResNet、VDSR和DRCN的SISR網絡中,提高了這些SISR網絡的性能。因此,本文驗證了注意機制的有效性。對于特征重構網絡,本文提出了DenseRes塊,它提供了一種將低層特征和高層特征相結合的有效方法。通過多個致密塊的級聯,本文的網絡有一個大的接收場。因此,從LR圖像中獲取有用的大區域上下文信息,以恢復HR圖像中的高頻細節。與目前最先進的方法相比,本文的方法具有最好的性能。今后,本文將探索注意機制在視頻超分辨率中的應用,以產生直觀、定量的高質量結果。

d58876c980429875d4a9d4ec5676bb85.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534116.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534116.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534116.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dubbo全局異常處理_基于spring aop的dubbo異常統一處理

dubbo統一異常處理&#xff0c;調用方只顯示封裝后的異常。1、返回封裝后的Exception2、返回封裝后的統一返回信息import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Aspect;import org.slf4j.Logger;import org.slf4j.LoggerFactory;impo…

python123平臺作業答案第十一周_馬哥2016全新Linux+Python高端運維班第十次作業

系統的INPUT和OUTPUT默認策略為DROP&#xff0c;請完成以下關于iptables的題目&#xff1b;iptables -A INPUT -d 10.18.11.13 -p tcp --dport 22 -j ACCEPT #允許ssh端口 iptables -A OUTPUT -s 10.18.11.13 -p tcp --sport 22 -j ACCEPT iptables -P OUTPUT DROP #設置OUTPUT…

義教志愿服務系統c語言,[志愿服務]以己為師 東科學子義教傳愛心

為積極響應國家教育計劃&#xff0c;豐富孩子們的暑期生活&#xff0c;進一步落實“春泥”課堂先進義教理念&#xff0c;7月12日&#xff0c;浙江海洋大學東海科學技術學院大學生“海島征程十五載&#xff0c;紅色基因永傳承”赴螞蟻島實踐團23名隊員走進螞蟻島文化禮堂&#x…

主動斷開socket鏈接_TCP連接與斷開詳解(socket通信)

http://blog.csdn.net/Ctrl_qun/article/details/52518479一、TCP數據報結構以及三次握手TCP(Transmission Control Protocol&#xff0c;傳輸控制協議)是一種面向連接的、可靠的、基于字節流的通信協議&#xff0c;數據在傳輸前要建立連接&#xff0c;傳輸完畢后還要斷開連接。…

大整數算術求值 c語言 棧,用C語言實現 多位整數的四則運算,用棧,例如56*(12+20)-102/2...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓gets(szExpression);// 中綴表達式轉后綴表達式&#xff0c;結果保存在expression中for (int i 0; i < strlen(szExpression); i){if (isspace(szExpression[i])) // 空白字符{if (bFindBegin){expression[num].type 1;expres…

java可視化壓縮_WEB可視化技術發展

EverCraft一直在關注Web可視化技術的發展&#xff0c;本文對國外一篇感覺很不錯的綜述性文章進行翻譯&#xff0c;供這一領域的愛好者相互學習。這篇paper的信息為&#xff1a;“Mwalongo, F., et al., State-of-the-Art Report in Web-based Visualization. COMPUTER GRAPHICS…

thumbdata4刪除后果_安卓手機上巨大的.thumbdata4圖片預讀緩存清理方法

以下是目前找到比較有效的幫 .thumbdata4-文件瘦身的好方法.下面的一大堆廢話的核心就是進手機設置>應用程序>顯示系統程序>媒體存儲器>存儲>清除數據/緩存.重啟后會發現thumbdata還會出現但是沒有數GB那么大了.How do I Reset the AndroidMedia Scan Database?…

android自定義alertdialog不現實輸入法,自定義的dialog中的EditText無法彈出輸入法解決方案...

1.解決無法彈出輸入法&#xff1a;在show()方法調用之前&#xff0c;用dialog.setView(new EditText(context))添加一個空的EditText&#xff0c;由于是自定義的AlertDialog&#xff0c;有我們指定的布局&#xff0c;所以設置這個不會影響我們的功能&#xff0c;這樣就可以彈出…

python爬取微博內容_請問該如何通過python調用新浪微博的API來爬取數據?

1&#xff1a;安裝python(這個不多說啦) 2&#xff1a;下載新浪微博SDK的python包&#xff0c;解壓為weibopy目錄 3&#xff1a;申請AppKey&#xff0c; 流程&#xff1a; 1&#xff1a;通過oAuth認證 按我的理解簡化如下&#xff1a; 用戶在新浪微博給的頁面輸入賬號密碼&…

android 保活方案_Android 后臺保活手段總結 (上篇)

Android 后臺保活手段總結 (上篇)由于眾所周知的限制&#xff0c;在國內無法使用GCM推送服務&#xff0c;想要自己搭建推送服務的話&#xff0c;有兩個繞不開的技術點&#xff0c;一個是TCP長連的保活&#xff0c;另一個就是后臺進程的保活。雖然看起來是老生常談的問題&#x…

linux修改棧指針x86,為什么x86-64 Linux系統調用會修改RCX,這個值意味著什么?

我正在嘗試使用sys_brk syscall在linux中分配一些內存.這是我嘗試過的&#xff1a;BYTES_TO_ALLOCATE equ 0x08section .textglobal _start_start:mov rax, 12mov rdi, BYTES_TO_ALLOCATEsyscallmov rax, 60syscall根據linux調用約定,我希望返回值在rax寄存器中(指向已分配內存…

wordpress phpmyadmin_西部數碼使用指南:虛擬主機WordPress部署SSL注意事項

版權歸西部數碼所有&#xff0c;原文鏈接&#xff1a;https://www.west.cn/faq/list.asp?unid2068注意事項&#xff1a;1.如果您的主題/插件使用絕對地址調用了http請求可能會導致網站打開會亂碼&#xff0c;或不能有綠鎖標識&#xff0c;需要聯系程序提供商將所有http請求修改…

android html轉pdf工具,android – 使用iText庫將html轉換為pdf時未應用hr的內聯CSS

我是.NET開發人員,因此代碼在C#中.但是你應該能夠輕松翻譯以下內容.iText是一個PDF優先的庫,[X] HTML解析非常復雜,因此在這方面并不完整.每當解析[X] HTML并且事情不按預期的方式進行特定標記時,您應遵循的基本步驟是&#xff1a;>驗證XML Worker支持標記&#xff1a;Tags …

python 小說爬蟲_從零開始寫Python爬蟲 --- 1.7 爬蟲實踐: 排行榜小說批量下載

從零開始寫Python爬蟲 --- 1.7 爬蟲實踐&#xff1a; 排行榜小說批量下載Ehco 5 個月前 本來只是準備做一個爬起點小說名字的爬蟲&#xff0c;后來想了一下&#xff0c;為啥不順便把小說的內容也爬下來呢&#xff1f;于是我就寫了這個爬蟲&#xff0c;他爬下了各類小說排行榜上…

java 某個字符在字符串中出現的所有位置_Java面試常考核心概念

這篇文章專注于Java基礎知識&#xff0c;不涉及List、Map、多線程、鎖相關的內容&#xff0c;需要的可以查看我的其他博客hofes blog?hhf443.github.ioJDK&JRE&JVMJDK&#xff08;Java Development Kit&#xff09;是針對 Java 開發員的產品&#xff0c;是整個 Java 的…

lan交換和無線教師手冊_簡單幾步,無線路由器變交換機

當原來的路由器lan口不夠用&#xff0c;可以加一個交換機擴展lan口數量&#xff0c;如果需要增加的lan口數量不超過3個可以考慮找臺不用的無線路由器當交換機用。另外&#xff0c;隨著交換機更新家中都有舊無線路由器閑置&#xff0c;完全可以再次利用。下面看一下&#xff0c;…

Linux fast open,Linux內核3.7 TCP Fast Open驗證實例

Linux內核在3.6和3.7合入了TCP Fast Open特性&#xff0c;在3.7.3版本上驗證了一下&#xff0c;I did it!以下是C語言實例()&#xff1a;server端代碼&#xff1a;#include /* See NOTES */#include#include#includeint main(){int portno 5060;socklen_t clilen;char buffer[…

vue 怎么全局到入常量_Vue 中如何定義全局的變量和常量(轉)

17.6k 次閱讀 讀完需要 10 分鐘7Vue 中如何定義全局的變量和常量我想要定義一個變量, 在項目的任何地方都可以訪問到, 不需要每一次使用的時候, 都引入.嘗試1:創建 global.js 并且在其中定義let a 10;在入口文件中引入 global.jsimport ./global.js在項目中使用:a// 報錯發…

revit找不到附加模塊程序集_TensorFlow基礎知識——常用模塊(一)

1本節簡述對于開展深度學習開發的目標而言&#xff0c;我們需要掌握的除了必要的深度學習理論基礎、必要的開發依賴庫基礎知識、基本的開發套路之外&#xff0c;我們還需要掌握它常見的外圍小幫手都有哪些。這些小幫手就是深度學習依賴庫中的其他并不是核心的模塊&#xff0c;但…

android搭建opencv開發環境,Android Studio搭建opencv開發環境

文章不配圖片&#xff0c;閱讀需要有Android開發基礎并熟悉Android Studio。一、搭建基于Java開發環境以下內容介紹如何搭建基于Java jni的opencv開發環境。1、準備工作從opencv官網下載Android平臺開發sdk并解壓&#xff0c;假設解壓后文件夾名為opencv-4.3.0-android-sdk。(此…