HmacManager
Summary
Downcodes小編為您帶來HmacManager,一款用於ASP.NET Core應用程式的HMAC驗證工具,為您的應用程式提供無縫整合且強大的安全保障。
Features
HMAC 驗證: HmacManager 提供HMAC驗證,讓您能夠為ASP.NET Core API新增安全的驗證層。
輕鬆設定: 透過簡單的設定選項,您可以在應用程式中快速整合HMAC身份驗證。
自訂選項: HmacManager 提供自訂選項,以便您可以根據自己的需求進行設定。
增強安全性: HMAC驗證透過使用HMAC雜湊演算法來驗證請求,從而增強了API的安全性。
Installation
HmacManager 可在NuGet 上取得。
`bash
dotnet add package HmacManager
`
Resources
進一步閱讀: 官方文檔
範例程式碼: GitHub 倉庫
Darknet Object Detection Framework and YOLO
!darknet and hank.ai logos
Darknet 是一個用C、C++ 和CUDA 寫的開源神經網路框架。
YOLO(You Only Look Once)是Darknet 框架中運行的先進的即時目標偵測系統。
1. Papers
YOLOv7: 論文鏈接
Scaled-YOLOv4: 論文鏈接
YOLOv4: 論文鏈接
YOLOv3: 論文鏈接
2. General Information
Darknet/YOLO 框架在速度和準確性上持續超越其他框架和YOLO 版本。
該框架完全免費且開源。您可以將Darknet/YOLO 整合到現有專案和產品中,包括商業產品,無需許可或付費。
Darknet V3(“Jazz”)於2024 年10 月發布,在使用NVIDIA RTX 3090 GPU 時,可以以高達1000 FPS 的速度準確運行LEGO 數據集視頻,這意味著每個視頻幀在1 毫秒或更短的時間內由Darknet/YOLO 讀取、調整大小和處理。
加入Darknet/YOLO Discord 伺服器: https://discord.gg/zSq8rtW
Darknet/YOLO 的CPU 版本可在Raspberry Pi、雲端伺服器、Colab 伺服器、桌上型電腦、筆記型電腦和高階訓練設備等簡單裝置上運作。 Darknet/YOLO 的GPU 版本需要NVIDIA 的CUDA 支援的GPU。
Darknet/YOLO 已知在Linux、Windows 和Mac 上運作良好。請參閱下面的建置說明。
3. Darknet 版本
版本0.x: Joseph Redmon 在2013-2017 年編寫的原始Darknet 工具沒有版本號。
版本1.x: 由Alexey Bochkovskiy 在2017-2021 年間維護的下一個流行Darknet 倉庫也沒有版本號。
版本2.x (“OAK”): 由Hank.ai 贊助並由Stéphane Charette 從2023 年開始維護的Darknet 倉庫是第一個具有版本命令的倉庫。從2023 年到2024 年底,它返回版本2.x “OAK”。
版本3.x (“JAZZ”): 2024 年中開始的下一階段開發,於2024 年10 月發布。版本命令現在返回3.x “JAZZ”。
4. MSCOCO 預訓練權重
為了方便起見,幾個流行版本的YOLO 在MSCOCO 資料集上進行了預訓練。此資料集包含80 個類別,可以在文字檔cfg/coco.names 中看到。
還有一些其他更簡單的用於測試Darknet/YOLO 的資料集和預訓練權重可用,例如LEGO Gears 和Rolodex。有關詳細信息,請參閱Darknet/YOLO FAQ。
MSCOCO 預訓練權重可從多個不同位置下載,也可以從此倉庫下載:
* YOLOv2 (2016 年11 月)
* YOLOv2-tiny
* YOLOv2-full
* YOLOv3 (2018 年5 月)
* YOLOv3-tiny
* YOLOv3-full
* YOLOv4 (2020 年5 月)
* YOLOv4-tiny
* YOLOv4-full
* YOLOv7 (2022 年8 月)
* YOLOv7-tiny
* YOLOv7-full
MSCOCO 預訓練權重僅用於演示目的。對應的.cfg 和.names 檔案位於cfg 目錄中。範例命令:
`bash
wget --no-clobber https://github.com/hank-ai/darknet/releases/download/v2.0/yolov4-tiny.weights darknet02displayannotatedatedimages 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 Darkg cooco-vr. avi
`
請注意,人們應該訓練自己的網路。 MSCOCO 通常用於確認一切正常。
5. 構建
過去(2023 年之前)的各種建置方法已合併到一個統一的解決方案中。 Darknet 需要C++17 或更高版本、OpenCV,並使用CMake 產生必要的專案檔。
您不需要了解C++ 就能建造、安裝或運行Darknet/YOLO,就像您不需要成為機械師就能駕駛汽車一樣。
5.1 Google Colab
Google Colab 說明與Linux 說明相同。幾個Jupyter 筆記本顯示如何執行某些任務,例如訓練新網路。
請參閱colab 子目錄中的筆記本,或按照下面的Linux 說明進行操作。
5.2 Linux CMake 方法
Darknet 在Linux 上的建構教學
`bash
sudo apt-get install build-essential git libopencv-dev cmake mkdir ~/srccd ~/src git clone https://github.com/hank-ai/darknetcd darknet mkdir buildcd build cmake -DCMAKEBUILDPE=Relkdir buildcd build cmake -D CMAKEBUILDPE=Release ..package sudo dpkg -i darknet-VERSION.deb
`
5.3 Windows CMake 方法
這些說明假設全新安裝Windows 11 22H2。
`bash
winget install Git.Git winget install Kitware.CMake winget install nsis.nsis winget install Microsoft.VisualStudio.2022.Community
`
然後,我們需要修改Visual Studio 安裝以包含對C++ 應用程式的支援:
* 點選「Windows 開始」選單,然後執行「Visual Studio Installer」。
* 點選「修改」。
* 選擇「使用C++ 的桌面開發」。
* 點擊右下角的“修改”,然後點擊“是”。
一切下載並安裝完成後,再次點選「Windows 開始」選單,選擇「用於VS 2022 的開發人員命令提示字元」。不要使用PowerShell 執行這些步驟,否則會遇到問題!
進階用戶:
* 除了執行開發人員命令提示字元外,您還可以使用普通命令提示字元或ssh 到裝置並手動執行「Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat」。
一旦您按照上述說明執行了開發人員命令提示字元(不是PowerShell!)執行以下命令來安裝Microsoft VCPKG,然後將使用它來建置OpenCV:
`bash
cd c:mkdir c:srccd c:src git clone https://github.com/microsoft/vcpkgcd vcpkg bootstrap-vcpkg.bat .vcpkg.exe integrate install .vcpkg.exe integrate powervc.pkg.exe install cvll . dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
請耐心等待最後一步,因為這需要很長時間才能運行。它需要下載並構建許多東西。
進階用戶:
* 請注意,在建置OpenCV 時,您可能想要添加許多其他選用模組。運行.vcpkg.exe search opencv 查看完整列表。
選購:如果您擁有現代NVIDIA GPU,您可以在此時安裝CUDA 或CUDA+cuDNN。如果已安裝,Darknet 將使用您的GPU 來加速映像(和視訊)處理。
您必須從Darknet 建置目錄中刪除CMakeCache.txt 文件,以強制CMake 重新尋找所有必要的文件。
記住重新建置Darknet。
Darknet 可以沒有它運行,但如果您想訓練自訂網絡,則需要CUDA 或CUDA+cuDNN。
請造訪https://developer.nvidia.com/cuda-downloads 下載並安裝CUDA。
請造訪https://developer.nvidia.com/rdp/cudnn-download 或https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager-installation-overview 下載並安裝cuDNN。
安裝CUDA 後,請確保您可以執行nvcc.exe 和nvidia-smi.exe。您可能需要修改PATH 變數。
下載cuDNN 後,將其解壓縮並將bin、include 和lib 目錄複製到C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/[版本]/ 中。您可能需要覆蓋一些文件。
如果您在稍後安裝CUDA 或CUDA+cuDNN,或者您升級到NVIDIA 軟體的更新版本:
* CUDA 必須在Visual Studio 之後安裝。如果您升級了Visual Studio,請記得重新安裝CUDA。
一旦所有先前的步驟都成功完成,您需要克隆Darknet 並建立它。在此步驟中,我們還需要告訴CMake vcpkg 的位置,以便它可以找到OpenCV 和其他依賴:
`bash
cd c:src git clone https://github.com/hank-ai/darknet.gitcd darknetmkdir buildcd build cmake -DCMAKEBUILDTYPE=Release -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/KETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/scripts/ exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln msbuild.exe /property:Platform=x64;Configuration=Release PACK.
`
如果您遇到有關某些缺少的CUDA 或cuDNN DLL(例如cublas64_12.dll)的錯誤,請手動將CUDA .dll 檔案複製到與Darknet.exe 相同的輸出目錄中。例如:
`bash
copy "C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
`
(這是一個範例!檢查您正在執行的版本,並執行適合您已安裝版本的命令。)
檔案複製完畢後,重新執行最後一個msbuild.exe 指令來產生NSIS 安裝包:
`bash
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
進階用戶:
* 請注意,cmake 命令的輸出是正常的Visual Studio 解決方案文件,Darknet.sln。如果您是經常使用Visual Studio GUI 而不是msbuild.exe 來建置專案的軟體開發人員,您可以忽略命令列並在Visual Studio 中載入Darknet 專案。
現在您應該擁有可以運行的此檔案:C:srcDarknetbuildsrc-cliReleasedarknet.exe。執行以下命令進行測試:C:srcDarknetbuildsrc-cliReleasedarknet.exe version。
若要正確安裝Darknet、程式庫、包含檔案和必要的DLL,請執行在上一個步驟中建置的NSIS 安裝精靈。請參閱建置目錄中的檔案darknet-VERSION.exe。例如:
`bash
darknet-2.0.31-win64.exe
`
安裝NSIS 安裝包將:
* 建立一個名為Darknet 的目錄,例如C:Program FilesDarknet。
* 安裝CLI 應用程式、darknet.exe 和其他範例應用程式。
* 安裝所需的第三方.dll 文件,例如來自OpenCV 的文件。
* 安裝必要的Darknet .dll、.lib 和.h 文件,以便從其他應用程式使用darknet.dll。
* 安裝模板.cfg 檔案。
您現在完成了!安裝精靈完成後,Darknet 將安裝到C:Program FilesDarknet 中。執行以下命令進行測試:C:Program FilesDarknetbindarknet.exe version。
如果您沒有C:/Program Files/darknet/bin/darknet.exe,則表示您沒有安裝它,只是建置了它!請確定您在上一步驟中瀏覽了NSIS 安裝精靈的每個面板。
6. 使用Darknet
6.1 CLI
以下不是Darknet 支援的所有命令的完整清單。
除了Darknet CLI 外,還要注意DarkHelp 專案CLI,它提供了一個取代Darknet/YOLO 的CLI。 DarkHelp CLI 還具有一些Darknet 中沒有的增強功能。您可以將Darknet CLI 和DarkHelp CLI 結合使用,它們不是相互排斥的。
對於下面顯示的大多數命令,您將需要具有對應.names 和.cfg 檔案的.weights 檔案。您可以自行訓練網路(強烈建議!),也可以下載別人已經訓練好的並免費提供在網路上的神經網路。預訓練資料集的範例包括:
* LEGO Gears(在影像中尋找物體)
* Rolodex(在圖像中尋找文字)
* MSCOCO(標準80 類目標偵測)
要運行的命令包括:
* 列出一些可以運行的可能的命令和選項:
`bash
darknet help
`
* 檢查版本:
`bash
darknet version
`
* 使用影像進行預測:
`bash
V2: darknet detector test cars.data cars.cfg cars_best.weights image1.jpg
V3: darknet02displayannotatedimages cars.cfg image1.jpg
DarkHelp: DarkHelp cars.cfg cars_best.weights image1.jpg
`
* 輸出座標:
`bash
V2: darknet detector test animals.data animals.cfg animalsbest.weights -extoutput dog.jpg
V3: darknet01inference_images animals dog.jpg
DarkHelp: DarkHelp --json animals.cfg animals.names animals_best.weights dog.jpg
`
* 使用影片:
`bash
V2: darknet detector demo animals.data animals.cfg animalsbest.weights -extoutput test.mp4
V3: darknet03display_videos animals.cfg test.mp4
DarkHelp: DarkHelp animals.cfg animals.names animals_best.weights test.mp4
`
* 從網路攝影機讀取:
`bash
V2: darknet detector demo animals.data animals.cfg animals_best.weights -c 0
V3: darknet08display_webcam animals
`
* 將結果儲存到影片:
`bash
V2: darknet detector demo animals.data animals.cfg animalsbest.weights test.mp4 -outfilename res.avi
V3: darknet05processvideosmultithreaded animals.cfg animals.names animals_best.weights test.mp4
DarkHelp: DarkHelp animals.cfg animals.names animals_best.weights test.mp4
`
* JSON:
`bash
V2: darknet detector demo animals.data animals.cfg animalsbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
V3: darknet06imagestojson animals image1.jpg
DarkHelp: DarkHelp --json animals.names animals.cfg animals_best.weights image1.jpg
`
* 在特定GPU 上運作:
`bash
V2: darknet detector demo animals.data animals.cfg animals_best.weights -i 1 test.mp4
`
* 檢查神經網路的準確性:
`bash
darknet detector map driving.data driving.cfg driving_best.weights ... Id Name AvgPrecision TP FN FP TN Accuracy ErrorRate Precision Recall Specificity FalsePosRate -- ---- ------------ ---- -- ------ ------ ------ -------- --------- --------- ---- -- ----------- ------------ 0 vehicle 91.2495 32648 3903 5826 65129 0.9095 0.0905 0.8486 0.8932 0.9179 0.0821 1 motorcycle 80.4499 2936 513 569 5393 0.8850 0.1150 0.8377 0.8513 0.9046 0.0954 2 bicycle 89.0912 570 124 104 3548 0.9475 0.0525 0.8457 0.8213 0.9715 0.0285 3 person 76.793757207575720757 207575720757 20757 207575720757 2075 1106 0.7332 0.8037 0.9145 0.0855 4 many vehicles 64.3089 1068 509 733 11288 0.9087 0.0913 0.5930 11288 0.9087 0.0913 0.5930 0. 1969 239 510 4116 0.8904 0.1096 0.7943 0.8918 0.8898 0.1102 6 yellow light 82.0390 126 38 30 1239 0.9525 0.0475 0.8077 0.7683 37683 光. 449 217 451 4643 0.9237 0.0763 0.8844 0.9408 0.9115 0.0885
`
* 檢查準確率mAP@IoU=75:
`bash
darknet detector map animals.data animals.cfg animalsbest.weights -iouthresh 0.75
`
* 重新計算錨點最好在DarkMark 中完成,因為它將連續運行100 次並從所有計算的錨點中選擇最佳錨點。但是,如果您想在Darknet 中執行舊版本:
`bash
darknet detector calcanchors animals.data -numof_clusters 6 -width 320 -height 256
`
* 訓練新網路:
`bash
cd ~/nn/animals/ darknet detector -map -dont_show train animals.data animals.cfg
`
6.2 訓練
與Darknet/YOLO FAQ 相關部分的快速連結:
* 我應該如何設定我的文件和目錄?
* 我應該使用哪個設定檔?
* 我在訓練自己的網路時應該使用哪個指令?
使用DarkMark 創建所有必要的Darknet 文件,這是註釋和訓練的最簡單方法。這絕對是訓練新神經網路的推薦方法。
如果您希望手動設定各種文件以訓練自訂網路:
* 建立一個新資料夾來儲存檔案。對於此範例,將建立一個神經網路來檢測動物,因此將建立以下目錄:~/nn/animals/。
* 複製您想用作模板的Darknet 設定檔之一。例如,請參閱cfg/yolov4-tiny.cfg。將其放在您建立的資料夾中。對於此範例,我們現在擁有~/nn/animals/animals.cfg。
* 在您放置設定檔的相同資料夾中建立一個animals.names 文字檔案。對於此範例,我們現在擁有~/nn/animals/animals.names。
* 使用文字編輯器編輯animals.names 檔案。列出您要使用的類別。您需要每行恰好有一個條目,沒有空白行和註釋。對於此範例,.names 檔案將包含恰好4 行:
`
dog
cat
鳥
horse
`
* 在同一資料夾中建立一個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
`
* 建立一個資料夾來儲存您的圖像和註釋。例如,這可以是~/nn/animals/dataset。每個圖像都需要一個對應的.txt 文件,該文件描述該圖像的註釋。 .txt 註解文件的格式非常特定。您無法手動建立這些文件,因為每個註釋都需要包含註釋的精確座標。請參閱DarkMark 或其他類似軟體來註釋您的影像。 YOLO 註解格式在Darknet/YOLO FAQ 中有描述。
* 建立.data 檔案中命名的「train」和「valid」文字檔。這兩個文字檔案需要分別列出Darknet 必須用來訓練和驗證在計算mAP% 時所使用的所有圖像。每行恰好一個圖像。路徑和檔案名稱可以是相對的或絕對的。
* 使用文字編輯器修改您的.cfg 檔案。
* 確保batch=64。
* 注意subdivisions。根據網路尺寸和GPU 上可用的記憶體量,您可能需要增加subdivisions。最好的使用值為1,因此從它開始。如果您無法使用1,請參閱Darknet/YOLO FAQ。
注意maxbatches=....。開始時一個好的使用值是類別數的2000 倍。對於此範例,我們有4 種動物,因此4 2000 = 8000。這意味著我們將使用maxbatches=8000。
* 注意steps=....。這應該設定為maxbatches 的80% 和90%。對於此範例,我們將使用steps=6400,7200,因為maxbatches 被設定為8000。
* 注意width=... 和height=....。這些是網路尺寸。 Darknet/YOLO FAQ 說明如何計算要使用的最佳尺寸。
* 搜尋所有classes=... 行的實例,並使用.names 檔案中類別的數量對其進行修改。對於此範例,我們將使用classes=4。
搜尋每個[yolo] 部分之前[convolutional] 部分中所有filters=... 行的實例。要使用的值為(類別數+ 5) 3。這表示對於此範例,(4 + 5) * 3 = 27。因此,我們將在對應的行上使用filters=27。
* 開始訓練!運行以下命令:
`bash
cd ~/nn/animals/ darknet detector -map -dont_show train animals.data animals.cfg
`
* 請耐心等待。最佳權重將儲存為animals_best.weights。並且可以透過查看chart.png 檔案來觀察訓練的進度。有關您可能希望在訓練新網路時使用的其他參數,請參閱Darknet/YOLO FAQ。
* 如果您想在訓練期間看到更多詳細信息,請添加--verbose 參數。例如:
`bash
darknet detector -map -dont_show --verbose train animals.data animals.cfg
`
7. 其他工具和鏈接
要管理您的Darknet/YOLO 專案、註釋圖像、驗證您的註釋以及產生使用Darknet 進行訓練的必要文件,請參閱DarkMark。
要獲得強大的替代Darknet CLI,要使用圖像平鋪、在影片中進行目標追蹤或獲得可以在商業應用程式中輕鬆使用的強大的C++ API,請參閱DarkHelp。
請參閱Darknet/YOLO FAQ,它可以幫助您解答問題。
請參閱Stéphane 的YouTube 頻道上的眾多教學和範例影片。
如果您有支援問題或想與其他Darknet/YOLO 用戶聊天,請加入Darknet/YOLO Discord 伺服器。
8. 路線圖
最後更新時間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
* 修復對1 通道灰階影像的支持
* 添加對N 通道圖像的支持,其中N > 3(例如,具有額外深度或熱通道的圖像)
* 持續進行程式碼清理(正在進行中)
* 長期目標
* 修正所有GPU 的CUDA/CUDNN 問題
* 重新編寫CUDA+cuDNN 程式碼
* 考慮新增對非NVIDIA GPU 的支持
* 旋轉邊界框,或某種形式的「角度」支持
* 關鍵點/骨架
* 熱圖(進行中)
* 分割