簡體   English   中英

人工神經網絡圖像變換

[英]Artificial neural network image transformation

我有一對圖像(輸入 - 輸出),但我不知道從A(輸入)到B(輸出)的轉換。 我想記錄圖像A並獲得圖像B.物理上我可以更改設置以獲得A或B,但我想通過軟件來完成。

如果我理解得很好,訓練有素的人工神經網絡能夠做到這一點,輸入可以給出相應的輸出,是不是? 是否有任何軟件/人工神經網絡僅僅通過輸入多個輸入 - 輸出對來“訓練”它將能夠提供正確的輸出,如果輸入是新的(但與其他相似)圖像?

謝謝

如果您有一些相關數量的圖像對(輸入/輸出對)並且您不知道輸入和輸出之間的轉換,您可以在該訓練集上訓練ANN來模仿未知的轉換。 只有當你有足夠數量的訓練圖像對時,你才能很好地訓練你的神經網絡,但是當這個未知的變換很復雜時,這可能是非常不可能的。

例如,如果該變換僅僅通過給定值增加輸入圖像處的像素的強度值,則ANN將非常快速地學習模仿該行為,但是如果該未知變換是一些復雜的卷積或少數串行卷積或更復雜的東西將是非常困難的,幾乎不可能訓練人工神經網絡來模仿這種轉變。 因此,更復雜的轉型需要更大的訓練集和更復雜的ANN設計。

有許多免費的開源ANN庫以多種語言實現。 您可以從該教程開始,例如: http//www.codeproject.com/Articles/13091/Artificial-Neural-Networks-made-easy-with-the-FANN

您所要求的原則是可能的 - 理論上,具有足夠多隱藏單元的ANN可以學習將輸入映射到輸出的任意函數。 但是,正如評論和其他答案所提到的,您的特定問題可能存在許多技術問題,這些問題可能會使其變得不切實際。 我將這些問題歸類為(a)映射復雜性,(b)模型復雜性,(c)擴展復雜性,以及(d)實現復雜性。 它們都有些相關,但希望這是一種有用的方法來解決問題。

映射復雜性

正如Springfield762所提到的,有許多可能的函數可以從一個圖像映射到另一個圖像。 如果輸入圖像和輸出圖像之間的關系相對簡單 - 比如將每個像素的強度增加一定量 - 那么ANN就能夠毫不費力地學習這種映射。 可能還有許多轉換同樣易於學習,例如傾斜,翻轉,旋轉或翻譯圖像 - 基本上任何仿射變換都很容易學習。 其他非線性變換也是可行的,例如平方每個像素的強度。

作為一般規則,輸入和輸出圖像之間的關系越復雜,讓模型為您學習此映射就越困難。

模型復雜性

從輸入到輸出的映射越復雜,您的ANN模型就越能夠捕獲此映射。 在過去10年中,已經展示了具有許多隱藏層的模型,以便在人們以前認為不可能完成的任務上表現得非常好,但這些最先進的模型通常具有數百萬甚至數十億的參數並需要數周時間才能進行訓練。 GPU硬件。 一個簡單的模型可以捕獲許多簡單的映射,但是如果你有一個復雜的輸入輸出映射來學習,你將需要一個龐大的復雜模型。

擴展復雜性

Yves在評論中提到,將模型縮放到典型的圖像尺寸可能很困難。 如果您的圖像相對較小(目前最先進的是對大小為100x100像素的圖像進行建模),那么您可以在ANN模型中拋出一堆原始像素數據,看看會發生什么。 但如果您使用閃亮的尼康數碼單反相機中的6000x4000圖像,則在合理的時間內處理這些圖像將非常困難。 你最好以某種方式壓縮圖像數據( PCA是一種常用技術),然后嘗試學習壓縮空間中的映射。

此外,較大的圖像將在它們之間具有更大的可能映射空間,因此您需要比您擁有小圖像時更多的較大圖像作為訓練數據。

Springfield762也提到了這一點:如果您的輸入和輸出圖像之間的映射很簡單,那么您只需要幾個示例即可成功學習映射。 但是如果你有一個復雜的映射,那么你需要更多的訓練數據才有機會正確地學習映射。

實施復雜性

一個已經存在的工具不太可能讓您只將圖像數據投入到ANN模型中並顯示映射。 最有可能的是,您至少需要實現一些預處理圖像數據的代碼。 另外,如果你有很多大圖像,你可能需要編寫代碼來處理從磁盤加載數據等。(有很多“大數據”工具用於這樣的事情,但它們都需要一些努力設置。)

現在有很多很多開源的ANN工具包。 FANN(已經提到過)是C ++中的一種流行的,帶有其他語言的綁定。 Caffe很受歡迎,也是用C ++實現的綁定。 似乎有許多工具包使用Python和Theano或其他一些GPU加速庫 - KerasLasagneHebelPylearn2neonTheanets (我寫了這個)。 許多人使用用Lua編寫的Torch Matlab至少有一個神經網絡工具箱。 我對其他生態系統不熟悉,但Java似乎有Deeplearning4j ,C#有Accord ,甚至R還有darch

但是對於任何這些神經網絡工具包,您將不得不編寫一些代碼來加載數據,將其處理為適當的輸入格式,構建(或加載)網絡模型,訓練模型等。

您嘗試解決的問題是神經網絡可以幫助您解決的規范分類問題。 您將B圖像視為與A匹配的一組標簽,並且一旦經過訓練,神經網絡將能夠根據網絡在高維向量空間中定位新輸入的位置將B圖像與新輸入進行匹配。 我假設您使用卷積網絡的某種組合來創建您的功能,並使用softmax進行輸出層上的多項分類。 更多信息: http//deeplearning4j.org/convolutionalnets.html

由於這已經寫了,在線蟲領域(條件生成對抗網絡)已經做了很多工作,請參考: https ://arxiv.org/pdf/1611.07004.pdf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM