2026年2月7日 星期六

置頂文章

大家好,我是藍光濾波

這是我用來記錄學習筆記的網誌

以後將不定時發技術文章來和大家分享

動個小手訂閱網誌吧

讓我們一起學習,一同成長

成為學識淵博的資訊科學專家吧

2026年2月6日 星期五

置頂文章(二)

大家好,我是冰淇淋蓋飯

是可雷塔的助手

略懂一點網頁知識

發佈的文章內容會以網頁前端為主喲

2022年6月22日 星期三

Win10更新後不能播影片之解決方法

完整標題:Windows 10更新後不能播影片之解決方法(2022)

關鍵字:KB5013887、Windows 10、影片不能播、不能調音量


最近這幾天,電腦播放影片都不順,包含Youtube、影片檔案,甚至音樂檔也不能播放、電腦音量也不能調。


解決方法:

打開Wndows Update設定,選擇「檢視更新紀錄」。


然後點選「解除安裝更新」。



接著將KB5013887這個更新解除安裝,然後重新開機。


重新開機後,原本不能看的影片就都能看了。

2022年4月17日 星期日

電腦版Line沒跳通知的其他解決辦法

標題:電腦版Line沒跳通知的其他解決辦法


最近我的電腦版Line都沒跳通知,導致錯過重要訊息。


而且去Line的設定檢查,也沒發現問題。



最後發現是設錯Windows的某個設定所導致。


按開始功能表,搜尋設定/系統。


選擇通知與動作,檢查「取得來自應用程式與其他發送來源的通知」是否有勾選,如果沒有就把它打勾,如果有的話那可能就是別的問題。



勾選完後,我的電腦版Line就會跳通知了d(`・∀・)b

2022年2月2日 星期三

Blender樓梯製作教學

標題:Blender樓梯製作教學


今天打算用Blender製作樓梯。

雖然網路上已經有很多教學了,但以我這個Blender新手來說,很多真的是「看攏謀」。

即使有教學影片了,畫質也很差,也省略了很多動作,所以不曉得它按了什麼。


所以就寫了這篇畫質比較好的Blender樓梯製作教學。



首先,開啟Blender,建立一個立方體(預設是開啟軟體時就有一個了),並選取它。


然後看到左上角有個跟模式有關的選單,選成「編輯模式」。


我們先改變立方體的大小,改成比較適合樓梯的形狀。

這邊選擇左邊的「縮放」。


然後拖動上面的點,可以改變形狀(比如說變成長方體)。


改完之後,開始製作樓梯了,選擇左邊的「框選」後,再選擇「Edge select」,如下圖。


然後按其中一個想要讓它變成樓梯的邊(如下左圖)。

看到那條邊發光後,就確定那條邊被選取成功了(如下右圖)。


然後對「立方體」按右鍵,選擇「Bevel Edges」。

注意不是對旁邊的空白處按右鍵喔,不然會沒有用


然後動一動滑鼠,發現那條邊可以拖動出一個斜面。


弄出斜面後,我們可以看到,左下角有個「倒角」,點選它。


點下去後會跑出一個選單。

我們在「分段」的數值輸入15,代表階梯的數量。輸入完後按右下角的自訂。

然後按下方的「Preset」,會跑出一個選單,我們選擇「步數」。

按下去後,樓梯就跑出來了。


這篇是我第一次發佈關於Blender的教學文,這次的範例到這邊結束,如果照著做還做不出來,歡迎於下方留言,我再找看看文章中有哪裡還沒寫清楚的。


希望這篇文有幫助到各位ξ( ✿>◡❛)

2022年1月24日 星期一

Python用字串新增屬性

標題:Python用字串新增屬性

副標題:Python set attribute by string


今天用pydicom時,需要替Dataset(ds)新增屬性。

程式碼如下:

ds.PixelSpacing=[1, 1]



但是呢,這個專案的規畫人想透過json檔案中的屬性表動態新增屬性,所以需要用字串來新增屬性,該怎麼做呢。

可以將以上程式碼改成:

setattr(ds, 'PixelSpacing', [1,1])


這樣就可以用字串動態新增屬性了。

2022年1月23日 星期日

瀏覽器啟用獨顯加速之教學

標題:瀏覽器啟用獨顯加速之教學


此方法適用於Chrome、Firefox、Edge等瀏覽器。


當我們在瀏覽器中啟動「硬體加速」的設定後,可能會發現獨立顯卡依然沒有在瀏覽器中發揮作用。

實際在瀏覽器測試3D功能,從工作管理員中可發現消耗的永遠是內建顯卡(如下圖):


這時候,可藉由以下操作解決。

首先,在開始功能表搜尋「設定」。


然後在「設定」視窗中搜尋「遊戲模式設定」,點進去。


然後按圖形設定。


勾選硬體加速GPU排程後,按瀏覽。


選擇瀏覽器的原始檔案位置,在這裡我選火狐(Firefox)。


然後按選項。


選擇「高效能」並指定為獨立顯卡,然後按儲存。


重新開啟瀏覽器,測試3D功能,可以從工作管理員中發現獨立顯卡已經被順利使用到了。


對了,這好像要在遊戲模式中才可以使用喔。


希望這篇文有幫助到各位(๑•̀ㅂ•́)و✧

2021年12月26日 星期日

臺灣開源的DICOM Viewer—BlueLight

標題:臺灣開源的DICOM Viewer—BlueLight

副標題:臺灣開源的DICOMWeb Viewer—BlueLight


這篇是此網誌的第一百篇文章,來講點特別的。



今天要來介紹一款臺灣人開發的網頁版DICOM檢視器BlueLight

雖然BlueLight才剛發展沒幾年,但已經是臺灣第一個開源的DICOMWeb檢視器了


BlueLight這套系統可以在網頁上遠端查詢調閱伺服器上的DICOM醫學影像。

使用的是QISO-RSWADO-URIWADO-RSDICOMWeb技術。


也支援顯示RTSSOverlayGraphic AnnotationAIM等標記。

也能自行繪製LabelImg格式等格式的標記。

另外最有特色的是,它支援在網頁上進行VR(立體渲染)MPR(二維多平面重建)MIP(最大密度投影)等3D渲染,並且在行動裝置上也能正常顯示這些3D影像

使用方式:

這是BlueLight的github連結:https://github.com/cylab-tw/bluelight


點進去之後選擇Live DEMO,會開啟BlueLight的查詢介面。

稍待片刻後,出現查詢結果,點選其中一個Study。


接著選擇Open This Study。


點進去之後,該Study的影像就會被BlueLight Viewer給開啟了。

使用者也可以直接拖曳DICOM檔案進去視窗裡面,影像可以直接在網頁上顯示。


這是查詢及調閱影像的方式,如果需要進階的操作方式,請參考github連結中提供的影片。


目前,BlueLight已經在2020年國際醫學資訊聯合研討會發表了一些論文。也通過了臺灣醫學資訊聯測 MI-TW 2020


未來也會朝期刊論文和國際的醫學資訊聯測邁進。


看到這裡,大概就會曉得這個專案是我自己開發的d(`・∀・)b

如果覺得好用的話,就幫這個專案按個星星吧,您的支持是促進開源專案前進的動力

如果覺得不滿意,還有待改善的話,可以開個issue讓我們曉得哪裡還可以改善

大概是這樣吧,祝各位使用愉快ヽ(*´∀`)ノ゚

2021年12月17日 星期五

Dragon Center出現「請確保MSI套件未被防毒加速軟體或被防火牆禁用」

標題:MSI Dragon Center出現「請確保MSI套件未被防毒加速軟體或被防火牆禁用」的解決方法。


今天使用微星筆電時,發現Dragon Center的軟體無法操作,還顯示「請確保MSI套件未被防毒加速軟體或被防火牆禁用」

這樣子就不能改風扇轉速了,真倒楣(╥﹏╥)


上網查發現,有很多人直接重灌,但依然沒有把問題解決。

後來,我從巴哈姆特的這個連結,找到了解法。


首先,從開始功能表搜尋「服務」並開啟它。


然後選擇"MSI central Service",對它按右鍵/重新啟動。

然後重新開機



重新開機後,微星筆電的Dragon Center軟體就可以被開啟了。



2021年11月20日 星期六

減少卷積神經網路的層數,參數量就一定會減少嗎?答案可能相反!

標題:減少卷積神經網路的層數,參數量就一定會減少嗎?答案可能相反!


前言:

在建置影像的卷積神經網路模型時,過度配適(過擬合,overfitting)的現象常常在樣本數不足的情況出現,除了想辦法透過資料擴增遷移學習的方法解決這個問題外,神經網路的模型參數量過大往往是更容易造成此問題的重要因素。

但是,不少初學者透過減少"卷積層及池化層"的方式減少模型的大小,但是這個動作在"某些情況"反而造成模型的參數量更大

本文透過實際計算參數量的方式,講述"減少卷積層及池化層"時"參數量反而越來越大"的情況。


-----------分隔線-----------

卷積運算的介紹:

卷積運算相當於濾鏡運算,簡單來說,我們用下圖的例子作為範例。

這是常見的卷積運算,但如果是有3個色板的RGB影像,該如何計算呢,請見下圖。


三個色板,進行了三種不同的卷積核(kernel)的運算後,加在一起,這時,神經網路需要更新的參數量為27(3個色板乘上3×3的kernel)個,也就是說,無論影像多大,卷積層的參數量都不變

如果第一層卷積層的輸出為32個色板,那麼,上面這張圖的運算就會有32次,再將這32個輸出合併為同一個張量的32個色板,不過這32次卷積運算中,參數的數值會不同。

在這裡,參數量為3×(3×3)×32=864(與圖片大小無關)

如果第二層卷積層的輸出為64個色板,那麼,就可以想像成,上面那張圖的左邊有32個4×4大小的圖片,再乘上3×3大小的核(kernel),由於這個動作只會輸出一個色板,所以類似此運算會做64次。

在這裡,參數量為32×(3×3)×64=18,432(與圖片大小無關)


看到這裡,可能會覺得,卷積神經網路其實是在進行3D的卷積運算(像下圖這樣),其實在實作時通常還是2D的運算。(見更下一張圖)

程式庫在進行運算時,通常會將3D的輸入轉換成2D的輸入(如下圖),這樣做的好處,就是能利用線性代數的程式庫陣列的計算最佳化


像下圖這樣,將3D的輸入和核都轉成二維矩陣時,就可以透過2維的乘法運算,快速完成3D的卷積運算,算完後再轉換回3D的大小



然而,為什麼減少神經網路的層數時在部分情況反而會造成模型的參數量更大呢,原因就出在平坦層後方的全連結層


-----------分隔線-----------


全連結層的矩陣乘積運算:

先看下圖,你可以看到,全連結層的運算模擬圖(輸入的大小為2、隱藏層的神經元大小為3)。

在這裡,看起來,隱藏層的參數量就是6個(不考慮偏權值)。



實際上,它就是在進行一種矩陣相乘的運算,如下圖。
這就是常見到的,Y=X×W+B。


所以很容易就能看出來,W的數量並不是神經元數量,而是線的數量

那麼,如果平坦化後的結果是32,768個數字,在下一層的全連結層的輸出有128個神經元時,就會有32,768×128= 4,194,304個參數

這一層的參數量遠遠比前面所有的卷積運算的參數量加起來都還大。

而這一層的參數量,跟圖片的大小有間接關係。

-----------分隔線-----------

現在來以例子來計算吧。

圖片的輸入為224*224的大小,有RGB三個色板。

模型為:

input→32個filter的3×3濾鏡→2×2池化層→64個filter的3×3濾鏡→2×2池化層→128個filter的3×3濾鏡→2×2池化層→256個filter的3×3濾鏡→2×2池化層→平坦層→128個神經元的全連結層→2個神經元的輸出層。

然後,為了縮減模型的大小,弄巧成拙減少了一層卷積層和池化層

input→32個filter的3×3濾鏡→2×2池化層→64個filter的3×3濾鏡→2×2池化層→128個filter的3×3濾鏡→2×2池化層→平坦層→128個神經元的全連結層→2個神經元的輸出層。

兩者的差異如下(不考慮偏權值)

第一個模型的參數量(六百萬個參數):

3×(3×3)×32→0→32×(3×3)×64→0→64×(3×3)×128→0→128×(3×3)×256→0→0→[14×14×256]×128→128×2=864+18,432+73,728+294,912+[6,422,528]+256=6,810,720。

第二個弄巧成拙的模型參數量(一千兩百萬個參數):

3×(3×3)×32→0→32×(3×3)×64→0→64×(3×3)×128→0→0→[28×28×128]×128→128×2=864+18,432+73,728+[12,845,056]+256=12,938,336。

由上述計算可算出,減少了一層卷積層和池化層後,由於能縮減四分之三參數的池化層減少了少了池化層後,圖片的大小14×14變成28×28,接上全連結層後,參數量反而增加了

所以,如果要減少模型的大小,不妨先注意平坦層後方的全連結層。

另外,使用全域平均池化,可以將所有色板直接取平均值,只留下一個數值,這樣的話是能顯著減少那一層的參數量的,這是一個好方法。


真棒,今天又學到了很多東西呢!

2021年11月5日 星期五

C# tabControl停駐於父容器

標題:如何將C#的tabControl停駐於父容器

副標題:如何將C#的控制項停駐於父容器


今天使用C#的tabControl時,發現視窗大小改變後,tabControl控制項將無法跟著改變(會出現空隙)。



怎麼辦呢,首先,去tabControl的控制項屬性,找到Dock的屬性後,把None的選項改成Fill(選中間的矩形區域)


選好後,該控制項就能隨著父容器或視窗大小改變了。


2021年10月3日 星期日

解決"CV_BGR2RGB"未被宣告的問題

標題:解決"CV_BGR2RGB"未被宣告的問題


今天使用OpenCV4的時候,發現報錯了,"CV_BGR2RGB"居然不能用。



cvtColor(img, img, CV_BGR2RGB);//這行錯了

原因是因為OpenCV4改用"COLOR_BGR2RGB"而不是"CV_BGR2RGB"了。


所以


只要把它改成"COLOR_BGR2RGB"後,就可以執行了。


cvtColor(img, img, COLOR_BGR2RGB);//這行可以執行



參考連結:https://github.com/NVIDIA/DALI/issues/735

2021年10月1日 星期五

tensorflow logging.h編譯失敗的解法

標題:tensorflow logging.h編譯失敗的解法


今天編譯tensorflow C++的時候,發現logging.h無法編譯(編譯失敗),如圖:



那個叫「TF_DEFINE_CHECK_OP_IMPL」的東西總是給紅底線的報錯。


如何解決呢。

去專案屬性的地方,在C/C++/前置處理器/前置處理器定義的地方,新增「NOMINMAX」。


新增完成後套用確定。

接著回到code的地方,會看見「TF_DEFINE_CHECK_OP_IMPL」的紅底線已經消失,而且已經可以編譯了。


2021年9月30日 星期四

在Visual Studio安裝TensorFlow C語言環境

標題:在Visual Studio 2019安裝Tensorflow C語言環境

搜尋標題:Visual Studio 2019 install Tensorflow for C


今天要來用Visual Studio 2019執行C語言版本的Tensorflow。

這個教學給的範例應該不難,有問題再留言問我。


直接進入正題吧!


首先,點進去這個網址:

https://www.tensorflow.org/install/lang_c


然後依照作業系統和CPU/GPU等需求下載檔案。



然後會下載到一個檔名類似「libtensorflow-gpu-windows-x86_64-2.6.0.zip」的檔案,把它解壓縮。


解壓縮後把資料夾貼到C磁碟機或你想要的地方。

我們會看到資料夾中有個include資料夾和lib資料夾。

這兩個資料夾的名稱,要記好,等一下會使用好幾次。



然後開啟Visual Studio,建立C++版本的主控台應用程式。


建立好後按專案/<專案名稱>屬性。



在VC++目錄的「include目錄」加上include資料夾的路徑。

我的範例是「C:\libtensorflow-gpu-windows-x86_64-2.6.0\include」

在VC++目錄的「程式庫目錄」加上lib資料夾的路徑。

我的範例是「C:\libtensorflow-gpu-windows-x86_64-2.6.0\lib」



然後去連接器/輸入/其他相依性 的地方,輸入tensorflow.lib。

「tensorflow.lib」存在於lib資料夾。

都設定完成後按套用確定。



然後輸入以下程式碼(可以直接複製):

#include <iostream>
#include <stdio.h>
#include <tensorflow/c/c_api.h> 
using namespace std;
int main()
{
    printf("Hello from TensorFlow C library version %s\n"TF_Version());
    int a;
    cin >> a;
}

如圖:


這段程式是要把TensorFlow的版本print出來的,可用來確認有正確使用到TensorFlow。
然後cin是為了防止TensorFlow版本印出來後發生視窗立即閃退的情況。

輸入完程式碼後建置程式:



接著去專案中的「Debug/Release」資料夾開啟該程式。

可能會出現「找不到tensorflow.dll」之類的錯誤。


沒關係,我們去剛才解壓縮後的lib資料夾,找到「tensorflow.dll」檔案,複製到跟執行檔相同資料夾位置的地方。


複製dll檔過去後,再次啟動程式,就可以讀取到TensorFlow了。


顯示出來的,就是TensorFlow的版本(我的版本是2.6.0),如果看見TensorFlow的版本被顯示出來了,代表TensorFlow的環境建置成功了喔。