摘要:屬於“你”那邊的麥田 天空 河水 駿馬 樹木……會是什么顏色呢?
黑白與色彩
似乎把時代分割了兩半~
我在這頭看見了錯亂繁華,琳琅滿目,看見快速消長的色彩繽紛。
翻開一張黑白照片
我能看到世代流傳的印記,一種歷久彌新的美
我能看到但我卻又看不到“你”能看到的景色
這看似不經意的一眼卻在我心里猶如驚鴻一瞥
令人望而生畏
卻又不住的悄然幻想
屬於“你”那邊的麥田 天空 河水 駿馬 樹木……
會是什么顏色呢?
就在此刻的定格
我願把萬千色彩賦予給“你”,
帶你共同體驗這萬千繁華盛景~
黑白圖像上色模型原理
本應用基於昇騰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的設備上直接玩轉!
對科技的堅持正在改變世界,而我們不能改變這個世界也要好好體驗所有的美好~
這款網頁應用既簡單又有趣,非常適合給老照片、黑白照以及各種單色調照片上色!