Chrome Pointer

2021年9月27日 星期一

Ubuntu(Linux)常用命令與技巧

Ubuntu(Linux)常用命令與技巧


ls -al .virtualenvs/  > 查看全部的虛擬機

ls  > 顯示當下有的資料夾與文件

ls -a  > 顯示當下的資料夾與文件,及隱藏資料夾與文件

ls -l   > 顯示當下資料夾與文件的詳細資料

ls -al   > 上面兩個相加


cd ..  > 回到上一個資料夾

cd ~  > 回到最上層


du -hs >查看目錄資料夾 使用量大小



問題如何離開/退出/停用python virtualenv


$ workon  > 進入

$ deactivate  > 離開虛擬機





2021年9月25日 星期六

cv2.cpython-35m-x86_64-linux-gnu.so missing找不到在哪裡~解決方法

 • And assuming that OpenCV compiled without error, you can now install it on your Ubuntu system:

$ sudo make install

$ sudo ldconfig

在你執行$ sudo make install 之後,會跳出以下畫面


所以你就可以知道你的cv2.cpython-35m-x86_64-linux-gnu.so檔案路徑在哪裡了~

-- Set runtime path of "/usr/local/lib/python3.5/site-packages/cv2/python-3.5/cv2.cpython-35m-x86_64-linux-gnu.so" to "/usr/local/lib"

-- Installing: /usr/local/lib/python3.5/site-packages/cv2/config-3.5.py


• At this point, your Python 3 bindings for OpenCV should reside in the following folder:

$ ls /usr/local/python/cv2/python-3.6  cv2.cpython-36m-x86_64-linux-gnu.so

正確位置>> 

$ ls /usr/local/lib/python3.5/site-packages/cv2/python-3.5 cv2.cpython-35m-x86_64-linux-gnu.so

#記得檔案名字不是36m是35m, 不然會找不到檔案唷!!!


• Let’s rename them to simply cv2.so :

$ cd /usr/local/python/cv2/python-3.6

正確位置>>  

$ cd /usr/local/lib/python3.5/site-packages/cv2/python-3.5


$ sudo mv cv2.cpython-36m-x86_64-linux-gnu.so cv2.so

正確位置>>  

$ sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so

#mv 是改名字的意思


 • Our last sub-step is to sym-link our OpenCV cv2.so bindings into our cv virtual environment:

$ cd ~/.virtualenvs/gurus/lib/python3.5/site-packages/  #請隨著你的版本修改

$ ln -s /usr/local/python/cv2/python-3.6/cv2.so cv2.so  

$ ln -s /usr/local/lib/python3.5/site-packages/cv2/python-3.5/cv2.so cv2.so

$ cd ~


linux(Ubuntu) 安裝opencv和Makefile:160: recipe for target 'all' failed問題解決方案

 cmake -D CMAKE_BUILD_TYPE=RELEASE \

-D CMAKE_INSTALL_PREFIX=/usr/local \

-D WITH_CUDA=OFF \

-D WITH_OPENMP=ON \   #請在cmake中增加這一行, 就可以跑了!!

-D INSTALL_PYTHON_EXAMPLES=ON \

-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \

-D OPENCV_ENABLE_NONFREE=ON \

-D BUILD_EXAMPLES=ON ..


anaconda之後,很多默認的編譯器都變成了anaconda自帶的了,

比如pythongcc等。

那麼系統中的python安裝的東西自然是用不了的


參考資料:

https://stackoverflow.com/questions/40322301/compile-opencv-3-on-ubuntu-16-04-linking-error-usr-lib-x86-64-linux-gnu-libsox

2021年9月19日 星期日

YOLOv4 training 訓練完整教學(以口罩辨識為範例)

先在darknetMakefile檔案的三個變數調成1.



以下是這次訓練主要會用到的檔案

l  obj.data

l  obj.names

l  process.py

l  yolov4-custom.cfg


並且記得提前把training資料夾創建好, 名字千萬別拼錯了


process.py放進darknet主目錄下面


process.py裡面的程式碼會產生train.txttest.txt兩個檔案



train.txttest.txt兩個檔案裡的內容, 是由process.py程式碼所產生的, 

其中 train.txt 包含 90% 圖像的路徑, test.txt 包含 10% 圖像的路徑.




圖像的路徑是設在data/obj裡面, 這些圖片是在kaggle開源的dataset下載的, 網址如下~

https://www.kaggle.com/techzizou/labeled-mask-dataset-yolo-darknet



這些圖片都已經標註好了, 圖片的txt檔會如下圖所示, 裡面把人臉都標籤好了,

並且也把標籤包含在裡面了.


obj.data

classes >> 代表你的標籤有幾個

train >> 你要訓練的路徑檔案在哪

valid >> 你要認證的檔案路徑在哪

backup >>你訓練完成的權重想要存在哪



obj.names

包含你的所有標籤, 以本例來說, 包含了

l  with_mask

l  without_mask



yolov4.conv.137 是一個pre-trained weights file, 也就是預訓練模型

路徑也是放在darknet下面.






.cfg檔的參數設定

batch=64

subdivisions=16

說明每個step我們將使用64張圖片進行訓練;

batch將會被分成16個小的組,64/16,用來減少顯存的需求;

如果在訓練中提示顯存不夠,可以嘗試增加subdivisions

例如,

batch=64

subdivisions=64


關於最大訓練步數,一般設置為classes*2000

steps設置為上述值的80%90%


Error: cuDNN isn't found FWD algo for convolution.

出現上面這串字的時候, 可能是顯卡記憶體不足(?)

只要把subdivisions調高,

或是把width , height 調小就好~ 

(但記得寬度和高度必須為32的倍數唷!)


另一種說法~

 batch:

每一次迭代送到網絡的圖片數量,也叫批數量。增大這個可以讓網絡在較少的迭代次數內完成一個epoch。在固定最大迭代次數的前提下,增加batch會延長訓練時間,但會更好的尋找到梯度下降的方向。如果你顯存夠大,可以適當增大這個值來提高內存利用率。這個值是需要大家不斷嘗試選取的,過小的話會讓訓練不夠收斂,過大會陷入局部最優。


subdivision

這個參數很有意思的,它會讓你的每一個batch不是一下子都丟到網絡裏。而是分成subdivision對應數字的份數,一份一份的跑完後,在一起打包算作完成一次iteration。這樣會降低對顯存的佔用情況。如果設置這個參數爲1的話就是一次性把所有batch的圖片都丟到網絡裏,如果爲2的話就是一次丟一半。


burn_in

burn_in=1000 在迭代次數小於burn_in時,其學習率的更新有一種方式,大於burn_in時,才採用policy的更新方式.


😢你的burn_in如果設定200, 你的mAP會在200之後才在chart顯示出來~

😢若設burn_in=1000, 你的mAP會在1000之後才顯示出來喔~


angle

圖片旋轉角度,這個用來增強訓練效果的。從本質上來說,就是通過旋轉圖片來變相的增加訓練樣本集。


saturationexposurehue

飽和度,曝光度,色調,這些都是爲了增強訓練效果用的。


learning_rate

學習率,訓練發散的話可以降低學習率。學習遇到瓶頸,loss不變的話也減低學習率。


max_batches

最大迭代次數。


policy: 學習策略,可以設置成以下方式: 

- fixed:   保持base_lr不變

- step:    如果設置爲step,則還需要設置一個stepsize, 

返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示當前的迭代次數 

stepscales

這兩個是組合一起的,舉個例子:learn_rate: 0.001, step:100,25000,35000 scales: 10, .1, .1 這組數據的意思就是在0-100iteration期間learning rate爲原始0.001,在100-25000iteration期間learning rate爲原始的100.01,在25000-35000iteration期間learning rate爲當前值的0.1倍,就是0.001, 在35000到最大iteration期間使用learning rate爲當前值的0.1倍,就是0.0001。隨着iteration增加,降低學習率可以是模型更有效的學習,也就是更好的降低train loss

最後一層卷積層中filters數值是(類別數 + 1*5)。具體原因就不多說了,知道就好哈。
region
裏需要把classes改成你的類別數。


random

如果設置爲1的話,就是在訓練的時候每一batch圖片會隨便改成320-64032整倍數)大小的圖片。目的和上面的色度,曝光度等一樣。如果設置爲0的話,所有圖片就只修改成默認的大小 416*416

 

💙Training💚

Train your custom detector

darknet.exe detector train data/obj.data cfg/yolov4-custom.cfg yolov4.conv.137 -dont_show -map

The map parameter here gives us the Mean Average Precision. The higher the mAP the better it is for object detection. You can remove the -dont_show parameter to see the progress chart of mAP-loss against iterations.

參考來源~

https://wings890109.pixnet.net/blog/post/68939643-yolo-v4-%E8%BE%A8%E8%AD%98%E8%87%AA%E5%AE%9A%E7%BE%A9%E7%89%A9%E4%BB%B6

https://www.twblogs.net/a/5b8d0f722b717718833a3007

https://techzizou.com/train-a-custom-yolov4-object-detector-on-windows/



訓練好的weights會存在你當初在obj.data>>backup設定的路徑裡.

此例的路徑為backup = ../training



口罩辨識訓練好的chart~

mAP

由於通常測試的物件種類不會只有一種 還有其他類型,

像是狗、貓、飛機、人、桌子、椅子...等等, 

例如COCO Dataset就有80種辨識種類 

mAP就是把所有種類的AP取平均 

就可算出該系統對於所有辨識種類的平均辨識率mAP

 (AP是平均辨識率...mAP就是...平均的平均辨識率... )


Run detector on an image

darknet.exe detector test data/obj.data cfg/yolov4-custom.cfg ../training/yolov4-custom_best.weights ../../mask_test_images/image1.jpg -thresh 0.3 

把預測出來的圖片複製出來
copy predictions.jpg ..\..\mask_test_images\output_image.jpg

Run detector on a video

darknet.exe detector demo data/obj.data cfg/yolov4-custom.cfg ../training/yolov4-custom_best.weights ../../mask_test_videos/test.mp4 -thresh 0.5 -i 0 -out_filename ../../mask_test_videos/output.avi

Run detector on a live webcam

darknet.exe detector demo data/obj.data cfg/yolov4-custom.cfg ../training/yolov4-custom_best.weights -thresh 0.5  

💛記得當你要測試剛train好的weights, 記得把batchsubdivisions調成1.

#Testing

#batch=1

#subdivisions=1


💙記得當你的classes要擴充時, 要進去你的.cfg檔案裡面調整參數, 
像是你有62個classes的話, 就去把它改成62.

不然會跳出Error唷~~😰😰
Wrong annotation: class_id = 2. But class_id should be [from 0 to 1], file: data/license/29.txt
程序無法存取檔案,因為檔案正由另一個程序使用。


💘To calculate anchors:
make編譯後的darknet, 可以用命令行參數calc_anchors直接計算anchors
./darknet detector calc_anchors data/obj.data -num_of_clusters 9 -width 416 -height 416
./darknet detector calc_anchors data文件  -num_of_clusters 需要幾組 -width 寬度 -height 高度 -show

詳情請去參考AlexeyAB/darknet的How to train (to detect your custom objects)😍

在這 >> https://github.com/AlexeyAB/darknet

裡面會講很多參數要怎麼調之類的,
連結點下去還會告訴你要改的地方在程式的什麼位置💝



2021年9月6日 星期一

多益高分必考單字 60 Invoices 發票收據

多益高分必考單字 

60 Invoices 發票收據

Rectify v. 修正

Prompt adj. 迅速的

Offset v. 抵銷

Impose v. 強制實行

Compile v. 匯集編譯

Envelope n. 信封 (ˈen.və.ləʊp)

Rebate n. 部分回扣折價

Omit v. 忽略


62 Warranty 保固

Dismantle v. 拆卸、拆解

Attribute A to B  phr.A歸因於B

Equivalent adj. 相等的

Object n. 目的 v. 反對

Cotton n. 棉花

Combustible adj. 易燃的

wear and tear n. 磨損

Obligation n. 義務 

2021年9月4日 星期六

2021 - 台灣最新12天補充兵入伍前必讀資訊

小弟我8/28剛從新竹關西206步三營步三連退伍,

但因為當補充兵回來很累,

所以拖到現在才來寫文章XD


💛當兵必帶但通知單不會告訴你的東西~💜

手錶 >>

超重要, 長官會說下課時間, 起床時間 , 換洗時間

如果你沒帶手表會超麻煩, 你可能就要一直問別人現在幾點幾分~

行動充 + 充電線 >>

我是在步三營步三連, 班長跟連長人都不錯

我們每天都可以用1個小時的時間, 最後幾天甚至有用到2小時

所以很多人手機都會用到快沒電.

我自己是有帶兩個行動充, 然後我有借給了我們班的好幾個人

結果我最後一天手機差點沒電XD 

所以各位真的要記得帶行動充, 不要一直跟別人借捏~

雨傘 >> 

雨傘可以帶, 只是在營區裡面不能撐, 建議要帶

不然回家的時候下雨就尷尬了

(進去營區會發給你雨衣, 但不能帶走) 


💛心得的部分💜

因為疫情期間, 所以入伍當天並不會帶你們去營站買東西

而是會直接把需要的商品整理成一袋, 放在你們的床上.

袋子裡面有牙刷牙膏香皂刮鬍刀等東西

但可以用自己的, 如果之後不要, 可以去退錢.


課程部分一開始比較操, 會有很多基本訓練, 起立敬禮之類的

第三天還是第四天開始, 就幾乎是在看電影~


班長一開始會說之後要檢查內務棉被和蚊帳

我有看到隔壁2連的棉被被丟到外面地上, 要求重折,

但我們3連比較輕鬆(? 

我沒有看到有人被刁難, 還是其實我們都折很好XD


關於鬍子和指甲的部分, 我們連有檢察三次, 

我入伍前一天有刮鬍子跟剪指甲,

檢查三次都有過, 我想當兵才12天, 應該是不會長到太誇張啦~

但如果你是毛髮長比較快的,

建議一定要帶指甲剪刮鬍刀和刮鬍泡唷~

(沒帶就只能跟別人借了)


💛怕累的話能避就避💜

班頭 >>

需要負責各班的收錢喊話收文件排打掃工作等事情

通常是身高最高的人負責, 如果你們身高有超過180的可能就會變班頭.

福委(福利委員) >>

       最累的缺, 通常兩個人負責, 負責算全聯的錢

       統計公車人數播放電影等

       反正很多事都是福委負責, 不過好處是操課的時候常常不在

       如果真的很不想操課可以去當福委(?

班尾 >>

       通常是各班最矮的那位, 負責去拿餐盤, 但其實也不會很累啦.


💛最輕鬆的位置💜

6~9 >>

通常不太會被班長叫到

因為班長叫人幾乎是班1~5, 或者後三個人之類的

所以座號在中間比較不太會被叫到, 但也會比較無聊啦

(我們那屆384T是一個班12個人, 但每梯每班人數不同, 

還是要以你自己當時的情況為主)