10/24更新:
Sobel算子卷積計算為什麼是梯度
連續才是微分方程,離散的只能差分方程了
所以不是卷積很神奇的就變成梯度了
而是在離散中的定義的微分,也就是差分
差分的定義就正好跟卷積計算的結果一樣
還沒有神奇到 卷積=偏微分 這樣
嗯,有人可能會開始懷疑我是不是真的學過離散數學
但我印象中的離散數學大多是排列組合或者是一些圖論的東西
沒有在離散數學中學過差分
雖然離散數學好像也是有費式數列的通項推導這樣的內容
好像也不能說真的沒學過差分
只是沒正式的提到這名詞
那,接下來應該隨便用個灰階公式
就開始試用看看Sobel算子計算之後的梯度結果大概長怎樣了
10/22更新:
沉寂了好一段時間,主要原因是最近電動太忙了
我可能原神不玩分身了,因為現在三星手機又開始原神幾分鐘閃退了
這樣我手機跟電腦開解每日或者是主帳號要採集都很麻煩
回正題
後來發現現在做出成果比較好的AI
用的技術是叫diffusion
也就是機器學習的過程是先將素材圖加入雜訊,直到整張圖都是雜訊
再反過來讓機器看到雜訊大致上生成類似的圖
試用了下NovelAI,試了一下是有些畸形的成果
但多數還是滿意的
雖然也不清楚有多少關鍵詞或說tag(標籤)可用
那就貼下大致上的成果好了,由於有些占空間就只貼三個
tag:girl,glasses,youmu
tag:glasses,youmu,shy,solo,green hair
以圖產圖,用的圖就是本篇提到的彩色版妖夢,然後tag是glass,girl
唔,現成已經有這麼好的成果了
雖然還是想知道是怎麼做的
但確實動力會大大減少
或者說是進展不太順利所以才先試用NovelAI
(進展也沒有說很不順利,只是我在想灰階公式要用自己的加起來除3
還是人眼對綠光比較敏感那原理的灰階公式
當然灰階採用之後,Sobel算子卷積所算出來的東西為什麼是梯度
跟具體的下一步我是沒什麼頭緒)
不過現在如果要做單純的卡片遊戲
已經沒有美術方面的障礙了!!
10/14更新:
推薦閱讀
這篇有大致上講一下噪聲大概是怎樣變成圖形的
雖然看了後還是不太懂
然後搭配
唔,結合這兩篇來看的話
應該是要能完成隨機生成圖片了
雖然目前我還是不清楚具體要怎麼隨機產生圖片
或者說是
我不確定雜訊是不是跟亂數種子類似
對於同一個訓練集,給予同樣的雜訊,就會產生出固定的結果嗎?
是不是只能針對雜訊本身進行隨機
就像是我們也只能改亂數種子來跑出不同的結果這樣
嗯,希望有天能完成、了解圖片究竟是怎麼隨機生成的
10/13重點:
卷積運算不是矩陣乘法,是對應位置跟卷積核直接相乘
圖形求梯度靠的是Sobel或其它類似的運算子(卷積核)
將整張圖片化成3*3或其它大小的逐像素進行卷積操作得出梯度
為了確保一個像素只有一個值,需要先將五顏六色的原圖灰階化再操作
(我這篇文章是沒寫
但其實因為Sobel算法特性,應該還要先做高斯模糊來減輕雜訊的影響
不過文章中相關資源網址有提到這點)
所以不會有傳統求梯度
是要用極限定義、數值法還是同向傳播反向傳播的問題
說是這麼說
傳統對函數求梯度的我也沒真得寫程式實踐過
道聽塗說的
接下來更新預計
HTML5圖片灰階化(這個應該很快,兩天內能好,除非我都在打電動)
再下一步就是求梯度了
求完之後要做什麼還沒頭緒
-----------------------正文------------------------------------
SIFT對我而言太難了或者說資料不夠齊全
但若換從梯度下手的話,資料就很多了
梯度的運算結果是一個向量
每個分量就是對每個軸的偏微分
所以可以藉此找出哪個方向變化最大(最陡)
漸層色的英文也就是梯度的英文
可以參考
關於邊緣檢測
主流做法是用Python引入OpenCV函式庫
(好像也有用Matlab來做的,但那是商業軟體,更麻煩了不予考慮)
不過為了確保自己有理解
我打算用HTML5的Canvas再實作一次
可以理解為用Javascript再做一次
由於沒辦法直接使用 .Sobel(),.Canny()這樣的
所以需要知道具體怎麼計算的才做得出來
當然我目前還不知道是怎麼計算的
所以時間訂為一個月
我一開始應該還是會先用OpenCV
確定使用邊緣檢測後的效果
再用HTML5試著實現出一樣的效果
沒有比對的話也不太清楚同一張圖在邊緣檢測後大概是長怎樣的
目前如果不用OpenCV函式庫來做的話
有個很直觀的問題是
圖片檔的儲存內容是RGB
那它的梯度是要怎麼計算?
過往在微積分題目中計算梯度
都是有現成的函數直接偏微分後寫成向量即可
所以這是一個問題
再來另一個問題就是
一般數學函式庫好像沒有微分的函式
所以可能要用微分的極限定義來解
lim f(x+Δx)-f(x)
─
Δx→0 Δx
不過如果計算要快的話
就要用 backpropagation(反向傳播)來算了
反向是指遞迴的方向
一般來說C語言為主的遞迴都會比較慢
所以為何反向傳播計算會快我也不太清楚
幾乎可以肯定真得要用時還要把遞迴改寫成迴圈形式
上述都是猜測
因為如果用PyTorch來算的話
實際使用時是直接先設置requires_grad=True
再.backward()就不用管細節了
從公式中我們也會發現
這公式是針對純量的
如果是RGB的話~
嗯...看影像梯度的維基百科好像是要先整理出影像強度函數才能再針對它微分
至於怎麼得到影像強度函數?
呀哈哈,還有一個月的時間啦!!
這幾天先試用網路上的現成程式碼看看邊緣提取的效果如何吧!!
如果是只要用Python配合OpenCV的話
實際細節不理會的話
我這篇文章就不用關注更新進度了
具體請參考
唔,其實還有個很大的問題是
等真得完成邊緣提取後
下一步要做什麼呢?
就是說,要怎麼隨機才能自動繪圖呢?
這部份暫時還沒找到關鍵字
硬要說的話關鍵字就是CNN跟GAN
可是若用網路上現成的函式庫跟訓練集來做的話
這篇文章的內容是都用不著的
就配合Google colab
再下些指令
像什麼.函式()
然後跑一段時間或電腦很好跑一下子就能順利看結果了
具體看這篇跟裡面提到的文章網址
我想知道的是實現效果所需要的細節
因為自身技術能力所及
逐像素隨機肯定是沒辦法達成想要的結果
(搞不好配合些雜訊這也是能用的,不清楚)
嗯,到底是怎麼做的呢?
(還有一個月的時間)
為什麼訂一個月啊?
因為超過一個月的話大概就是我又棄坑了吧
通常真得專注心力做事時
需要的時間不是很長
絕大多數的時間都是在調適心情或者是自己陷入些重複的想法
大概就這樣
實作時有進展或覺得哪邊容易卡住需要分享時會再更新文章
-------------------------------------
建議安裝Python最新版
安裝時.exe to path打勾的話會比較方便
然後在命令提示字元(或Windwos圖案鍵跟R鍵一起按後再輸入cmd,Enter)底下
pip install opencv-python之後就可以使用openCV函式庫了
效果如下
這是以前我土法煉鋼的效果
(不過這方法當背景是風景照時,這效果大概就不太好)
嗯,有一個月的時間可以想辦法在網頁上重現這效果!!
---------------------------------------------
本來是在找原始碼的
結果意外點OpenCV官網就看到OpenCV course(課程)
雖然我英文不好,但以我使用Kaggle跟看youtube的感覺
應該是有機會提供字幕跟以閱讀為主的學習方式
具體還要等實際參與才知道
有免費課程可供參考
嗯...至於價位則在這邊
當然是以美金計算
我們可以看出來 $1599
就能買齊所有課程內容了
在課程Q&A裡面是說
除了程式語言最好要有基礎之外,其它沒基礎沒關係
(聽起來有些像詐騙手法)
我是覺得當然也要沒關係
正常業餘人士哪裡學過深度學習所涉及那麼複雜的數學
而現代數學跟計算機數學差距又很大
(像近世代數或說抽象代數、拓樸學等那種推理為主
而不太是給電腦算的數學
但深度學習感覺又不能只學過離散數學、抽象代數、向量積分、基礎統計)
只是如果是沒基礎也沒關係的話
學習到最後的成效也不清楚會怎樣
會不會學了之後依然是課程沒講到的就不會
還是更慘,課程提到的也不會
(應該是不太可能啦,以使用Kaggle的感覺,照著步驟做大致上就沒問題
只是Kaggle它的數據集課程中都是給好的
自己要怎麼建有沒有教我是不太清楚
沒有跟到很後面)
然後課程問答是說除非要拿證照才需要六個月內完成所有作業
不然可以只挑有興趣的完成
只是這個證照好用嗎?
呼嗯~不太清楚
只是以這證照來說,我想英文差的人拿了可能效果也不太好
而中文的也有很多自己的OpenCV課程
因此還沒找到這課程的評價
我在思考要節省遊戲課金花費幾個月試試看嗎?
$1599,匯率就算40好了(現代好像差不多是33左右啦),臺幣64000左右
感覺是可以一試的,跟滿命滿精價格差不多
(滿命滿精運氣別太差的話應該是比這便宜)
不過這是新網站
我還要拿回信用卡才能刷
嗯~時間很長,慢慢考慮
我先繼續找有沒有對相鄰RGB值變化具體要怎麼做微分的源碼
----------------------------
查到了,求梯度是用極限還是數值法或反向傳播什麼的,針對的好像不是圖像
針對圖像有幾種方法,像,好像都是以發明人名字來紀念的
其中比較簡單易用的就是Sobel運算子
就是用來求圖像梯度的
但它只能針對灰階圖像求梯度
所以要先把原圖轉為灰階
然後~
還在研究中
目前只知道是兩組3*3矩陣運算
說是做卷積
但卷積我沒學過
所以維基百科的那矩陣乘法我也看不懂
也可以擴展為5*5或其它奇數大小相乘
不過那個值要怎麼填還不清楚
還有一個月的時間
------------------------------------
這影片不錯
但不管是影片還是維基百科
特別是中文的維基百科
不知道是不是有被竄改過
那個卷積看不懂是怎麼算的
好像不管怎麼算都不會是中文維基百科的內容啊
至於英文他們的也沒算,阿拉伯文是根本沒算式
全都有種誤導人的意思
看起來像是兩個矩陣相乘
直到看到這篇文章
卷積核的運算就是權重運算
對應位置直接相乘就好
而不是傳統的矩陣乘法
害我想了好久
也還好啦,只卡了一個多小時
不過我上述兩篇連結是忘了提到
如果你要圖片像素只有一個值
需要把RGB的原圖轉成灰階才能確保一個像素只有一個值
那這樣似乎就有機會實現了
我晚點看是要打電動還是今天電動隨意放掉
那接下來幾天因為要上工
所以大概也不太會有進度
我想想看程式要怎麼寫!!
很久沒寫程式了
而且以前也比較沒寫矩陣相關的程式
呼嗯
先把圖片轉成灰階再說!!