Marmite
Marmite [Markdown makes sites] is a very simple static site generator.
Downcodes小編說:「Marmite 是一個非常簡單的靜態網站產生器。我經常使用其他SSG,但總是發現從頭開始設定它們太麻煩了。只需要一個markdown 文件目錄並運行一個命令就能產生網站,這聽起來真的很方便。
如何使用
Marmite 只做一件簡單的事:
將markdown 檔案轉換為HTML
它還可以處理靜態檔案或媒體檔案的產生或複製到輸出目錄。
安裝
使用cargo 安裝:
`bash
cargo install marmite
`
或從發布頁面下載預先編譯的二進位。
使用
使用起來非常簡單!
`bash
$ marmite folderwithmarkdownfiles pathtogeneratedsite
`
網站將產生在pathtogenerated_site/ 目錄下。
CLI
`bash
❯ marmite --help
Marmite is the easiest static site generator.
Usage: marmite [OPTIONS]
Arguments:
Options:
--serve Serve the site with a built-in HTTP server
--watch Detect changes and rebuild the site automatically
--bind
Address to bind the server [default: localhost:8000]
--config
Path to custom configuration file [default: marmite.yaml]
--debug Print debug messages
--init-templates Initialize templates in the project
--start-theme Initialize a theme with templates and static assets
-h, --help Print help
-V, --version Print version
`
開始使用
閱讀教程,了解如何開始使用Marmite https://rochacbruno.github.io/marmite/getting-started.html 並花幾分鐘創建你的部落格。
文件
在https://rochacbruno.github.io/marmite/ 上閱讀更多關於如何自訂範本、新增評論等內容。
總結
Marmite 非常簡單。
如果這種簡單性不適合你的需求,還有其他很棒的靜態網站產生器。以下是一些我推薦的:
Jekyll
Hugo
Gatsby
Next.js
Darknet 物件偵測框架和YOLO
概述
Darknet 是一個用C、C++ 和CUDA 寫的開源神經網路框架。
YOLO(You Only Look Once)是一個最先進的即時物件偵測系統,它運行在Darknet 框架中。
重要連結:
Hank.ai 如何幫助Darknet/YOLO 社區
Darknet/YOLO 網站
Darknet/YOLO 常見問題解答
Darknet/YOLO Discord 伺服器
論文
YOLOv7 論文
Scaled-YOLOv4 論文
YOLOv4 論文
YOLOv3 論文
一般資訊
Darknet/YOLO 框架在速度和準確性方面一直優於其他框架和YOLO 版本。
該框架是完全免費和開源的。你可以將Darknet/YOLO 整合到現有的專案和產品中,包括商業產品,無需許可或支付費用。
2024 年10 月發布的Darknet V3(“Jazz”)可以在使用NVIDIA RTX 3090 GPU 時以高達1000 FPS 的速度準確運行LEGO 數據集視頻,這意味著Darknet/YOLO 在1 毫秒或更短的時間內讀取、調整大小和處理每個視訊畫面。
Darknet/YOLO 的CPU 版本可在Raspberry Pi、雲端和colab 伺服器、桌上型電腦、筆記型電腦和高階訓練設備等簡單設備上運作。 Darknet/YOLO 的GPU 版本需要NVIDIA 的CUDA 相容GPU。
Darknet/YOLO 可在Linux、Windows 和Mac 上運作。請參閱下面的建置說明。
Darknet 版本
Joseph Redmon 在2013-2017 年寫的原始Darknet 工具沒有版本號。我們認為它是0.x 版本。
Alexey Bochkovskiy 在2017-2021 年維護的下一個流行的Darknet 儲存庫也沒有版本號。我們認為它是1.x 版本。
Hank.ai 贊助並由Stéphane Charette 從2023 年開始維護的Darknet 儲存庫是第一個具有版本命令的儲存庫。從2023 年到2024 年底,它會回到版本2.x "OAK"。
目標是在熟悉程式碼庫的同時盡可能少地破壞現有的功能。
重寫了建置步驟,因此我們有一種統一的方式來使用CMake 在Windows 和Linux 上建置。
將程式碼庫轉換為使用C++ 編譯器。
增強了訓練過程中的chart.png。
錯誤修復和與效能相關的最佳化,主要與減少訓練網路所需時間有關。
此程式碼庫的最後一個分支是在v2 分支中的2.1 版本。
下一階段的開發於2024 年中開始,並於2024 年10 月發布。版本命令現在返回3.x "JAZZ"。
如果你需要執行這些指令中的一個,你可以隨時檢出先前的v2 分支。讓我們知道,以便我們可以調查添加任何缺少的命令。
刪除了許多舊的和未維護的命令。
許多效能優化,包括訓練和推理過程中的最佳化。
修改了舊的C API;使用原始Darknet API 的應用程式需要少量修改:https://darknetcv.ai/api/api.html
新的Darknet V3 C 和C++ API:https://darknetcv.ai/api/api.html
src-examples 中的新應用程式和範例程式碼:https://darknetcv.ai/api/files.html
MSCOCO 預訓練權重
為了方便起見,幾個流行的YOLO 版本都使用MSCOCO 資料集進行了預訓練。此資料集包含80 個類別,可以在文字檔cfg/coco.names 中看到。
有幾個其他更簡單的資料集和預訓練權重可用於測試Darknet/YOLO,例如LEGO Gears 和Rolodex。有關詳細信息,請參閱Darknet/YOLO 常見問題。
MSCOCO 預訓練權重可以從幾個不同的位置下載,也可以從此儲存庫下載:
YOLOv2(2016 年11 月)
- yolov2-tiny.weights
- yolov2-full.weights
YOLOv3(2018 年5 月)
- yolov3-tiny.weights
- yolov3-full.weights
YOLOv4(2020 年5 月)
- yolov4-tiny.weights
- yolov4-full.weights
YOLOv7(2022 年8 月)
- yolov7-tiny.weights
- yolov7-full.weights
MSCOCO 預訓練權重僅用於演示目的。對應的.cfg 和.names 檔案(用於MSCOCO)位於cfg 目錄中。範例命令:
`bash
wget --no-clobber https://github.com/hank-ai/darknet/releases/download/v2.0/yolov4-tiny.weights
darknet02displayannotatedimages coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
darknet03display_videos coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
請注意,人們應該訓練自己的網路。 MSCOCO 通常用於確認一切正常。
建構
過去(2023 年以前)的各種建構方法已經合併成一個統一的解決方案。 Darknet 需要C++17 或更高版本、OpenCV 並使用CMake 產生必要的專案檔。
你不需要了解C++ 就可以建造、安裝或運行Darknet/YOLO,就像你不需要是機械師就可以駕駛汽車一樣。
Google Colab
Google Colab 指示與Linux 指示相同。提供了一些Jupyter 筆記本,展示如何執行某些任務,例如訓練新的網路。
請參閱colab 子目錄中的筆記本,或遵循下面的Linux 指示。
Linux CMake 方法
1. 安裝必要軟體:
`bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2. 克隆Darknet 儲存庫:
`bash
git clone https://github.com/hank-ai/darknet
`
3. 建立建置目錄:
`bash
cd darknet
mkdir build
cd build
`
4. 使用CMake 產生建置檔:
`bash
cmake -DCMAKEBUILDTYPE=Release ..
`
5. 建置Darknet:
`bash
make -j4
`
6. 安裝Darknet(可選):
`bash
make package
sudo dpkg -i darknet-VERSION.deb
`
注意:
如果你的系統上安裝了NVIDIA GPU,可以安裝CUDA 或CUDA+cuDNN 以加速映像(和影片)處理。
如果你在安裝CUDA 或CUDA+cuDNN 後或升級了NVIDIA 軟體後,需要刪除建置目錄中的CMakeCache.txt 文件,並重新建置Darknet。
可以使用darknet version 指令檢查Darknet 是否已成功安裝。
Windows CMake 方法
1. 安裝必要軟體:
`bash
winget install Git.Git
winget install Kitware.CMake
winget install nsis.nsis
winget install Microsoft.VisualStudio.2022.Community
`
2. 修改Visual Studio 安裝:
- 開啟「Windows 開始」功能表並執行「Visual Studio Installer」。
- 點選「修改」。
- 選擇「使用C++ 進行桌面開發」。
- 點擊右下角的“修改”,然後點擊“是”。
3. 安裝Microsoft VCPKG:
`bash
cd c:
mkdir c:src
cd c:src
git clone https://github.com/microsoft/vcpkg
cd vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe integrate install
.vcpkg.exe integrate powershell
.vcpkg.exe install opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
4. 克隆Darknet 儲存庫:
`bash
cd c:src
git clone https://github.com/hank-ai/darknet.git
cd darknet
mkdir build
cd build
`
5. 使用CMake 產生建置檔:
`bash
cmake -DCMAKEBUILDTYPE=Release -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
6. 建置Darknet:
`bash
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
7. 安裝Darknet:
- 執行建置目錄中的darknet-VERSION.exe 檔案以啟動NSIS 安裝精靈。
注意:
如果你的系統上安裝了NVIDIA GPU,可以安裝CUDA 或CUDA+cuDNN 以加速映像(和影片)處理。
如果你在安裝CUDA 或CUDA+cuDNN 後或升級了NVIDIA 軟體後,需要刪除建置目錄中的CMakeCache.txt 文件,並重新建置Darknet。
可以使用darknet.exe version 指令檢查Darknet 是否已成功安裝。
使用Darknet
CLI
以下不是Darknet 支援的所有命令的完整清單。
除了Darknet CLI 之外,還要注意DarkHelp 專案CLI,它為Darknet/YOLO 提供了替代的CLI。 DarkHelp CLI 還具有Darknet 中無法使用的幾個進階功能。你可以同時使用Darknet CLI 和DarkHelp CLI,它們並不互相排斥。
對於下面顯示的大多數指令,你需要使用與.names 和.cfg 檔案相對應的.weights 檔案。你可以訓練自己的網路(強烈建議!)或下載其他人已經訓練並免費發佈在網路上的神經網路。預訓練資料集的範例包括:
LEGO Gears(在影像中尋找物體)
Rolodex(在圖像中尋找文字)
MSCOCO(標準的80 類物件偵測)
要運行的命令包括:
darknet help:顯示幫助資訊。
darknet version:檢查版本。
darknet detector test cars.data cars.cfg cars_best.weights image1.jpg:使用影像進行預測(V2)。
darknet02displayannotatedimages cars.cfg image1.jpg:使用影像進行預測(V3)。
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg:使用影像進行預測(DarkHelp)。
darknet detector test animals.data animals.cfg animalsbest.weights -extoutput dog.jpg:輸出座標(V2)。
darknet01inference_images animals dog.jpg:輸出座標(V3)。
DarkHelp --json animals.cfg animals.names animals_best.weights dog.jpg:輸出座標(DarkHelp)。
darknet detector demo animals.data animals.cfg animalsbest.weights -extoutput test.mp4:處理影片(V2)。
darknet03display_videos animals.cfg test.mp4:處理影片(V3)。
DarkHelp animals.cfg animals.names animals_best.weights test.mp4:處理影片(DarkHelp)。
darknet detector demo animals.data animals.cfg animals_best.weights -c 0:從網路攝影機讀取(V2)。
darknet08display_webcam animals:從網路攝影機讀取(V3)。
darknet detector demo animals.data animals.cfg animalsbest.weights test.mp4 -outfilename res.avi:將結果儲存到影片(V2)。
darknet05processvideosmultithreaded animals.cfg animals.names animals_best.weights test.mp4:將結果儲存到影片(V3)。
DarkHelp animals.cfg animals.names animals_best.weights test.mp4:將結果儲存到影片(DarkHelp)。
darknet detector demo animals.data animals.cfg animalsbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput:使用JSON 格式(V2)。
darknet06imagestojson animals image1.jpg:使用JSON 格式(V3)。
DarkHelp --json animals.names animals.cfg animals_best.weights image1.jpg:使用JSON 格式(DarkHelp)。
darknet detector demo animals.data animals.cfg animals_best.weights -i 1 test.mp4:在特定GPU 上運作。
darknet detector map driving.data driving.cfg driving_best.weights ...:檢查神經網路的準確性。
darknet detector map animals.data animals.cfg animalsbest.weights -iouthresh 0.75:檢查mAP@IoU=75 的準確性。
darknet detector calcanchors animals.data -numof_clusters 6 -width 320 -height 256:重新計算錨點。
darknet detector -map -dont_show train animals.data animals.cfg:訓練新的網路。
訓練
如何設定我的文件和目錄?
我應該使用哪個設定檔?
訓練自己的網路時我該使用什麼指令?
使用DarkMark 註解和訓練是最簡單的方法,它可以建立所有必要的Darknet 檔案。這絕對是訓練新的神經網路的推薦方法。
如果你喜歡手動設定各種文件來訓練自訂網絡,請按照以下步驟操作:
1. 建立一個新的資料夾來儲存檔案。例如,將建立一個用於檢測動物的神經網絡,因此將建立以下目錄:~/nn/animals/。
2. 複製一個你想用來當模板的Darknet 設定檔。例如,請參閱cfg/yolov4-tiny.cfg。將它放在你創建的資料夾中。對於這個例子,我們現在有了~/nn/animals/animals.cfg。
3. 在放置設定檔的同一個資料夾中建立一個animals.names 文字檔。對於這個例子,我們現在有了~/nn/animals/animals.names。
4. 使用文字編輯器編輯animals.names 檔案。列出你想要使用的類別。每行必須有且只有一項,沒有空白行或註解。對於這個例子,.names 檔案將包含以下4 行:
`
dog
cat
鳥
horse
`
5. 在同一個資料夾中建立一個animals.data 文字檔。對於這個例子,.data 檔案將包含:
`
classes=4
train=/home/username/nn/animals/animals_train.txt
valid=/home/username/nn/animals/animals_valid.txt
names=/home/username/nn/animals/animals.names
backup=/home/username/nn/animals
`
6. 建立一個資料夾來儲存你的圖像和註解。例如,這可以是~/nn/animals/dataset。每個圖像都需要一個相應的.txt 文件,它描述了該圖像的註釋。 .txt 註解文件的格式非常具體。你不能手動建立這些文件,因為每個註釋都需要包含註釋的精確座標。請參閱DarkMark 或其他類似軟體來註釋你的圖像。 YOLO 註解格式在Darknet/YOLO 常見問題中進行了描述。
7. 建立.data 檔案中命名的「train」和「valid」文字檔。這兩個文字檔案需要分別列出Darknet 必須用於訓練和驗證(在計算mAP% 時)的所有圖像。每行一個影像。路徑和檔案名稱可以是相對的或絕對的。
8. 使用文字編輯器修改你的.cfg 檔案。
- 確保batch=64。
- 注意subdivisions。根據網路維度和GPU 上可用的記憶體量,你可能需要增加subdivisions。最佳值為1,所以先從它開始。如果1 不適合你,請參考Darknet/YOLO 常見問題。
- 注意maxbatches=...。開始時,一個好的值是類別的數量乘以2000。對於這個例子,我們有4 個動物,所以4 * 2000 = 8000。這意味著我們將使用maxbatches=8000。
- 注意steps=...。這應該設定為maxbatches 的80% 和90%。對於這個例子,由於maxbatches 設定為8000,所以我們將使用steps=6400,7200。
- 注意width=... 和height=...。這些是網路維度。 Darknet/YOLO 常見問題解答說明如何計算要使用的最佳尺寸。
- 在所有classes=... 行中尋找並使用你的.names 檔案中的類別數量來修改它。對於這個例子,我們將使用classes=4。
- 在每個[yolo] 部分之前的[convolutional] 部分中尋找所有filters=... 行。要使用的值是(類別數量+ 5) 3。這意味著對於這個例子,(4 + 5) 3 = 27。因此,我們在適當的行上使用filters=27。
9. 開始訓練!運行以下命令:
`bash
cd ~/nn/animals/
darknet detector -map -dont_show train animals.data animals.cfg
`
請耐心等待。最佳權重將儲存為animals_best.weights。可以透過查看chart.png 檔案來觀察訓練的進度。請參閱Darknet/YOLO 常見問題解答,以了解你可能想要在訓練新網路時使用的其他參數。
如果你想在訓練期間看到更多詳細信息,請添加--verbose 參數。例如:
`bash
darknet detector -map -dont_show --verbose train animals.data animals.cfg
`
其他工具和鏈接
要管理你的Darknet/YOLO 專案、註釋圖像、驗證你的註釋並產生與Darknet 一起訓練所需的必要文件,請參閱DarkMark。
要獲得Darknet 的強大替代CLI,請使用影像平鋪、影片中的物件追蹤或強大的C++ API(可以輕鬆用於商業應用程式),請參閱DarkHelp。
請參閱Darknet/YOLO 常見問題解答,看看它是否可以幫助你解答問題。
請參閱Stéphane 的YouTube 頻道上的許多教學和範例影片。
如果你有支援問題或想與其他Darknet/YOLO 用戶聊天,請加入Darknet/YOLO Discord 伺服器。
路線圖
最後更新時間:2024-10-30
已完成
在訓練期間將qsort() 替換為std::sort()(其他一些模糊的替換仍然存在)
刪除check_mistakes、getchar() 和system()
將Darknet 轉換為使用C++ 編譯器(Linux 上的g++,Windows 上的VisualStudio)
修復Windows 建置
修復Python 支持
建置darknet 庫
重新啟用預測上的標籤(「alphabet」代碼)
重新啟用CUDA/GPU 程式碼
重新啟用CUDNN
重新啟用CUDNN half
不要硬編碼CUDA 架構
更好的CUDA 版本信息
重新啟用AVX
刪除舊的解決方案和Makefile
使OpenCV 成為非可選項
刪除對舊pthread 函式庫的依賴
刪除STB
重寫CMakeLists.txt 以使用新的CUDA 檢測
刪除舊的「alphabet」程式碼,並刪除data/labels 中的700 多張圖像
在原始碼外部構建
擁有更好的版本號輸出
與訓練相關的效能最佳化(正在進行的任務)
與推理相關的效能最佳化(正在進行的任務)
盡可能使用傳值引用
清理.hpp 文件
重寫darknet.h
不要將cv::Mat 轉換為void*,而是將其用作正確的C++ 對象
修復或保持內部影像結構的使用方式一致
修復ARM 架構Jetson 裝置的構建
- 原始的Jetson 裝置不太可能被修復,因為它們不再受NVIDIA 支援(沒有C++17 編譯器)
- 新的Jetson Orin 設備正在運行
修復V3 中的Python API
- 需要更好的Python 支援(是否有Python 開發人員願意協助解決這個問題?)
短期目標
將printf() 替換為std::cout(正在進行中)
查看舊的zed 攝影機支持
更好的和更一致的命令列解析(正在進行中)
中期目標
刪除所有char* 程式碼,並替換為std::string
不要隱藏警告並清理編譯器警告(正在進行中)
更好地使用cv::Mat 代替C 中的自訂影像結構(正在進行中)
用std::vector 或std::list 取代舊的清單功能
修復對單通道灰階影像的支持
添加對N 通道圖像的支持,其中N > 3(例如,帶有額外深度或熱通道的圖像)
持續進行程式碼清理(正在進行中)
長期目標
修復CUDA/CUDNN 與所有GPU 相關的問題
重寫CUDA+cuDNN 程式碼
考慮添加對非NVIDIA GPU 的支持
旋轉的邊界框,或某種形式的“角度”支持
關鍵點/骨架
熱圖(進行中)
分割