寶藏昇騰AI應用推薦!CANN帶你體驗黑白影象自動上色的快樂~

語言: CN / TW / HK
摘要:屬於“你”那邊的麥田 天空 河水 駿馬 樹木……會是什麼顏色呢?

黑白與色彩

似乎把時代分割了兩半~

我在這頭看見了錯亂繁華,琳琅滿目,看見快速消長的色彩繽紛。

翻開一張黑白照片

我能看到世代流傳的印記,一種歷久彌新的美

我能看到但我卻又看不到“你”能看到的景色

這看似不經意的一眼卻在我心裡猶如驚鴻一瞥

令人望而生畏

卻又不住的悄然幻想

屬於“你”那邊的麥田 天空 河水 駿馬 樹木……

會是什麼顏色呢?

就在此刻的定格

我願把萬千色彩賦予給“你”,

帶你共同體驗這萬千繁華盛景~

黑白影象上色模型原理

本應用基於昇騰AI異構計算架構CANN,使用黑白影象上色模型搭建,適用於Atlas 200 DK及Atlas 300I等相關推理產品。

對物件(包括背景色)(L通道代表的灰度圖)使用卷積運算提取特徵然後同樣用卷積進行分類,從而嘗試給出對灰度圖片每個畫素點的色彩預期(ab通道)。然後,將ab通道的值resize到原始圖片寬高並與L通道疊加後,轉為RGB圖片即可得到彩色影象。其中模型的輸入為L通道的資料(224,224,1),輸出為ab通道的資料(56,56,2)。

我們也可以通過開源模型的測試指令碼來理解原始模型的輸入和輸出,以及輸入前的計算過程(也叫前處理)和輸出後的處理過程(也叫後處理)。

預處理過程:RGB格式讀入轉Lab,resize到224224,提取L通道,減均值(-50)
後處理過程:推理的結果ab通道,resize到224224,與輸入L合併為Lab,轉RGB,儲存為jpeg圖片

模型原始連結:https://github.com/richzhang/colorization

準備模型

昇騰張量編譯器ATC(Ascend Tensor Compiler)可以將開源框架的網路模型(如Caffe、TensorFlow等)以及Ascend IR定義的單運算元描述檔案換成昇騰AI處理器支援的離線模型,模型轉換過程中可以實現運算元排程的優化、權重資料重排、記憶體使用優化等,可以脫離裝置完成模型的預處理。

使用ATC將黑白影象上色模型轉換為昇騰AI處理器支援的離線模型命令如下:

atc --input_shape="data_l:1,1,224,224" --weight="./colorization.caffemodel" --input_format=NCHW --output="./colorization" --soc_version=Ascend310 --framework=0 --model="./colorization.prototxt"

應用開發

本應用採用了下圖所示的模組化設計,通過各模組之間的協調配合完成一張圖片的推理輸出;對視訊的推理也是一樣的,可以直接參考開源倉中的原始碼實現。在這裡就不再贅述了。

其中各個模組的主要功能點如下所示:

  • 執行管理資源申請

用於初始化系統內部資源,固定的呼叫流程。

  • 載入模型檔案並構建輸出記憶體

從檔案載入離線模型資料,需要由使用者自行管理模型執行的記憶體,根據記憶體中載入的模型獲取模型的基本資訊包含模型輸入、輸出資料的資料buffer大小;由模型的基本資訊構建模型輸出記憶體,為接下來的模型推理做好準備。

  • 資料預處理

接收外界傳遞的影象資料,對讀入的影象資料進行預處理,然後構建模型的輸入資料。

  • 模型推理

根據構建好的模型輸入資料進行模型推理。

  • 解析推理結果

根據模型輸出,解析模型的推理結果。使用opencv將轉換後的彩色影象資料儲存成圖片檔案。

預處理影象

影象預處理部分,使用opencv的imread介面讀取圖片,讀取出來的是BGR格式。

模型輸入為224×224,因此需要把讀取到的影象resize到224×224。Resize後對資料做歸一化處理。

如演算法設計部分所言,該模型採用Lab色彩空間,因此需要把BGR格式轉為Lab格式資料。該模型用L通道資料預測出可能的ab空間資料,所以要從Lab資料中分離出L通道資料。再對所得的資料減均值,即可得到模型需要的輸入資料。

模型推理

模型推理部分,關鍵流程說明如下:

  1. 呼叫aclmdlCreateDesc介面建立描述模型基本資訊的資料型別;
modelDesc_ = aclmdlCreateDesc();

2. 呼叫aclmdlGetDesc介面根據模型載入中返回的模型ID獲取模型基本資訊。aclError ret = aclmdlGetDesc(modelDesc_, modelId_);

3. 準備模型推理的輸入、輸出資料;

4. 執行模型推理,呼叫aclmdlExecute介面;aclError ret = aclmdlExecute(modelId_, input_, output_);

5. 獲取模型推理的結果,用於後續處理。

6. 釋放記憶體。呼叫aclrtFree介面釋放Device上的記憶體。釋放相關資料型別的資料。在模型推理結束後,需及時呼叫aclDestroyDataBuffer介面和aclmdlDestroyDataset介面釋放描述模型輸入的資料,且先呼叫aclDestroyDataBuffer介面,再呼叫aclmdlDestroyDataset介面。如果存在多個輸入、輸出,需呼叫多次aclDestroyDataBuffer介面。

後處理部分

影象後處理部分,使用opencv。對於模型推理得到預測出的ab空間資料。

首先把得到的資料resize回原影象大小,然後和原影象L通道資料合併,即得到完整Lab影象。

把Lab影象轉回BGR格式即可儲存為jpeg圖片,得到上色後的影象。

黑白影象上色是一種藝術,也是一門技術~

昇騰AI“黑白影象上色” 應用已經上線,只需一點,即可上色!

本案例地址:https://www.hiascend.com/zh/developer/mindx-sdk/cartoon/990674866img?fromPage=1

在這個時代,一種新的顏色,就可以代表一種新的情緒,一個新的視角。

單調的黑白色似乎已經不足以滿足我們的需求~

讓AI科技帶你詮釋不一樣的美~

同時,點選線上實驗,還可以體驗該應用是如何用CANN開發出來的;

該應用的原始碼在gitee和github都有開源,點選上面的github、gitee直達原始碼倉,大家可以基於原始碼進行二次開發。

更多應用案例和原始碼:

應用案例地址https://www.hiascend.com/developer/case-studies

原始碼地址:https://gitee.com/ascend/samples/

 

黑白影象上色示例圖

開啟網站不僅可以體驗一秒上色的快樂~~

還可以直接獲取到公開的原始碼,邊體驗邊學習,還能在自己的Ascend的裝置上直接玩轉!

對科技的堅持正在改變世界,而我們不能改變這個世界也要好好體驗所有的美好~

這款網頁應用既簡單又有趣,非常適合給老照片、黑白照以及各種單色調照片上色!

 

點選關注,第一時間瞭解華為雲新鮮技術~