다크넷 개체 탐지 프레임워크 및 YOLO
!darknet 및 hank.ai 로고
Darknet은 C, C++ 및 CUDA로 작성된 오픈 소스 신경망 프레임워크입니다. 이는 객체 감지 모델을 개발하고 배포하기 위한 강력한 기반을 제공합니다.
YOLO(You Only Look Once)는 Darknet 프레임워크를 기반으로 구축된 최첨단 실시간 개체 탐지 시스템입니다. 속도와 정확성이 뛰어나 다양한 애플리케이션에 널리 사용됩니다.
Hank.ai가 Darknet/YOLO 커뮤니티에 어떻게 기여하고 있는지 자세히 알고 싶으십니까?
공식 Darknet/YOLO 웹사이트를 살펴보세요:
포괄적인 Darknet/YOLO FAQ를 살펴보세요:
활기 넘치는 Darknet/YOLO Discord 커뮤니티에 참여하세요:
서류
YOLOv7: 논문 링크
Scaled-YOLOv4: 논문 링크
YOLOv4: 논문 링크
YOLOv3: 논문 링크
일반 정보
Darknet/YOLO 프레임워크는 다른 프레임워크 및 YOLO 버전에 비해 속도와 정확성 이점을 지속적으로 제공하면서 객체 감지 분야의 선두주자로 자리매김하고 있습니다.
주요 기능:
1. 오픈 소스 및 무료: 이 프레임워크는 완전히 무료이며 오픈 소스이므로 라이선스 제한 없이 프로젝트에 원활하게 통합할 수 있습니다.
2. 고성능: 2024년 10월에 출시된 Darknet V3("Jazz")는 NVIDIA RTX 3090 GPU를 사용하여 LEGO 데이터 세트에 대해 최대 1000FPS에 도달하는 인상적인 성능을 달성합니다.
3. 다양한 배포: Darknet/YOLO는 Raspberry Pi 및 클라우드 서버부터 데스크톱 및 고급 교육 장비에 이르기까지 다양한 장치와 호환됩니다.
4. 크로스 플랫폼 지원: Linux, Windows 및 Mac 운영 체제에서 완벽하게 실행되는 것으로 알려져 있습니다.
도움이 필요하거나 Darknet/YOLO에 대해 논의하고 싶으십니까? Discord의 활발한 커뮤니티에 참여하세요:
다크넷 버전
Darknet의 진화는 버전을 통해 추적할 수 있습니다.
1. 버전 0.x(2013-2017): Joseph Redmon이 개발한 원래 Darknet 도구에는 공식 버전 번호가 부족했습니다.
2. 버전 1.x(2017-2021): 이 버전은 Alexey Bochkovskiy에 의해 유지 관리되었으며 버전 번호도 부족했습니다.
3. 버전 2.x "OAK"(2023): Hank.ai가 후원하고 Stéphane Charette가 유지 관리하는 Darknet 저장소에 버전 명령이 도입되었습니다. 이 버전에서는 다음을 포함하여 상당한 개선이 이루어졌습니다.
* Windows 및 Linux 모두에서 CMake를 사용하여 빌드 단계를 통합했습니다.
* C++ 컴파일러로 변환.
* 훈련 중 Chart.png 시각화가 향상되었습니다.
* 훈련 효율성을 위한 버그 수정 및 성능 최적화.
4. 버전 2.1: v2 코드베이스의 마지막 분기입니다.
5. 버전 3.x "JAZZ"(2024년 10월): 이 최신 릴리스에는 다음이 도입되었습니다.
* 훈련과 추론 모두에 대한 성능 최적화.
* 원본 Darknet API를 사용하는 애플리케이션에 대한 약간의 조정이 필요한 수정된 레거시 C API입니다.
* 새로운 Darknet V3 C 및 C++ API.
* src-examples 디렉터리에 새로운 앱과 샘플 코드가 있습니다.
이전 버전과의 호환성을 위해 v2 분기에 계속 액세스할 수 있습니다. 이전 버전의 특정 명령을 사용해야 하는 경우 알려주시면 다시 추가해 보겠습니다.
MSCOCO 사전 훈련된 가중치
YOLO의 여러 인기 버전은 MSCOCO 데이터 세트에 대해 사전 훈련되어 프레임워크 실험을 위한 편리한 시작점을 제공합니다. MSCOCO에는 cfg/coco.names 파일에 나열된 80개의 클래스가 포함되어 있습니다.
사전 훈련된 가중치 사용 가능:
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는 주로 설정이 올바르게 작동하는지 확인하는 데 사용됩니다.
사전 훈련된 가중치를 사용하는 명령 예:
`배쉬
주석이 달린 이미지 표시
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 CLI 사용
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
건물
Darknet은 CMake를 활용하여 Windows와 Linux 모두의 빌드 프로세스를 간소화합니다. OpenCV와 함께 C++17 이상의 컴파일러가 필요합니다.
이제 빌드 지침이 통합되어 더 오래되고 복잡한 방법을 대체합니다.
참고: 이 가이드와 일치하지 않는 이전 튜토리얼이나 빌드 단계에서 문제가 발생하는 경우 여기에 제공된 최신 지침을 참조하세요.
소프트웨어 개발자는 Darknet/YOLO 프레임워크의 내부 작동에 대한 통찰력을 얻으려면 https://darknetcv.ai/를 방문하는 것이 좋습니다.
구글 코랩
Google Colab 지침은 Linux 지침을 반영합니다.
colab 하위 디렉터리에서 노트북을 탐색하거나 아래 Linux 지침을 따르세요.
리눅스 CMake 방법
1. 필요한 패키지를 설치합니다:
`배쉬
sudo apt-get 설치 빌드 필수 git libopencv-dev cmake
`
2. Darknet 저장소를 복제합니다.
`배쉬
mkdir ~/src
CD ~/src
자식 클론 https://github.com/hank-ai/darknet
CD 다크넷
mkdir 빌드
CD 빌드
`
3. CMake를 구성합니다.
`배쉬
cmake -DCMAKEBUILDTYPE=릴리스 ..
`
4. 다크넷 구축:
`배쉬
-j4를 만드세요
`
5. 패키지 다크넷:
`배쉬
패키지
sudo dpkg -i darknet-VERSION.deb
`
선택 사항: GPU 가속을 위한 CUDA 또는 CUDA+cuDNN
CUDA를 다운로드하고 설치하려면 https://developer.nvidia.com/cuda-downloads를 방문하세요.
다운로드하려면 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 및 nvidia-smi에 액세스할 수 있는지 확인하세요. PATH 변수를 조정해야 할 수도 있습니다.
나중에 CUDA 또는 CUDA+cuDNN을 설치하거나 NVIDIA 소프트웨어를 업그레이드하는 경우:
Darknet 빌드 디렉터리에서 CMakeCache.txt 파일을 삭제하여 CMake가 종속성을 다시 찾도록 합니다.
다크넷을 재구축하세요.
Ubuntu에서 CMake를 업그레이드하려면:
`배쉬
sudo apt-get 퍼지 cmake
sudo snap install cmake --classic
`
고급 사용자:
DEB 파일 대신 RPM 설치 파일을 빌드하려면 CMpackage.cmake의 CPACKGENERATOR를 "RPM"으로 수정하세요.
Centos 및 OpenSUSE의 경우 CPACK_GENERATOR를 "RPM"으로 변경합니다.
설치 패키지를 빌드한 후 적절한 패키지 관리자를 사용하여 설치하십시오.
확인:
명령줄에서 darknet 버전을 실행하여 설치를 확인하세요.
Windows CMake 메서드
1. 필수 소프트웨어를 설치합니다:
`배쉬
Winget은 Git.Git을 설치합니다.
Winget 설치 Kitware.CMake
Winget 설치 nsis.nsis
Winget 설치 Microsoft.VisualStudio.2022.Community
`
2. Visual Studio 설치 수정:
* "Visual Studio 설치 프로그램"을 엽니다.
* '수정'을 클릭하세요.
* "C++를 사용한 데스크톱 개발"을 선택합니다.
* "수정"을 클릭한 다음 "예"를 클릭하세요.
3. VS 2022용 개발자 명령 프롬프트를 엽니다.
* PowerShell을 사용하지 마세요.
4. Microsoft VCPKG를 설치합니다.
`배쉬
질병통제예방센터:
mkdir c:src
CD C:src
자식 클론 https://github.com/microsoft/vcpkg
CD vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe 통합 설치
.vcpkg.exe powershell 통합
.vcpkg.exe opencv 설치[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
5. 선택 사항: GPU 가속을 위한 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#download-windows의 지침을 사용하여 cuDNN을 설치하세요.
설치 후 nvcc.exe 및 nvidia-smi.exe에 액세스할 수 있는지 확인하세요. PATH 변수를 수정해야 할 수도 있습니다.
나중에 CUDA 또는 CUDA+cuDNN을 설치하거나 NVIDIA 소프트웨어를 업그레이드하는 경우:
* Visual Studio 이후에 CUDA가 설치되어 있는지 확인하세요.
* Visual Studio가 업그레이드된 경우 CUDA를 다시 설치하세요.
6. Darknet을 복제하고 구축합니다.
`배쉬
CD C:src
자식 클론 https://github.com/hank-ai/darknet.git
CD 다크넷
mkdir 빌드
CD 빌드
cmake -DCMAKEBUILDTYPE=릴리스 -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;구성=PACKAGE.vcxproj 릴리스
`
7. CUDA DLL을 복사합니다(필요한 경우):
* CUDA 또는 cuDNN DLL 누락에 대한 오류가 발생하는 경우 해당 DLL을 Darknet 출력 디렉터리에 수동으로 복사하세요. 예를 들어:
`배쉬
"C:프로그램 파일NVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease 복사
`
8. msbuild.exe 명령을 다시 실행하여 NSIS 설치 패키지를 생성합니다.
`배쉬
msbuild.exe /property:Platform=x64;구성=PACKAGE.vcxproj 릴리스
`
고급 사용자:
명령줄 도구 대신 Visual Studio GUI 내에서 CMake가 생성한 Darknet.sln 솔루션 파일을 사용할 수 있습니다.
확인:
C:srcDarknetbuildsrc-cliReleasedarknet.exe 버전을 실행하여 설치를 확인하세요.
Darknet을 설치하려면 NSIS 설치 마법사를 실행하세요.
빌드 디렉터리에서 darknet-VERSION.exe 파일을 찾으세요.
설치 마법사를 실행하여 CLI 애플리케이션, 라이브러리, 포함 파일 및 필요한 DLL을 설치합니다.
다크넷 사용
CLI
참고: 다음 명령은 전체 명령이 아닙니다.
Darknet CLI 외에도 대체 기능과 고급 기능을 제공하는 DarkHelp 프로젝트 CLI 사용을 고려해보세요.
대부분의 명령에는 해당 .names 및 .cfg 파일과 함께 .weights 파일이 필요합니다. 자체 네트워크를 훈련시키거나 인터넷에서 사전 훈련된 모델을 다운로드할 수 있습니다. 예는 다음과 같습니다:
LEGO Gears: 이미지의 개체 감지.
Rolodex: 이미지의 텍스트 감지.
MSCOCO: 표준 80등급 개체 감지.
명령:
1. 도움말:
`배쉬
다크넷 도움말
`
2. 버전:
`배쉬
다크넷 버전
`
3. 이미지를 이용한 예측:
* V2:
`배쉬
다크넷 감지기 테스트 cars.data cars.cfg cars_best.weights image1.jpg
`
* V3:
`배쉬
darknet02displayannotatedimages cars.cfg image1.jpg
`
* 다크도움말:
`배쉬
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
`
4. 출력 좌표:
* V2:
`배쉬
다크넷 탐지기 테스트 Animals.data Animals.cfg Animalsbest.weights -extoutput dog.jpg
`
* V3:
`배쉬
darknet01inference_images 동물 개.jpg
`
* 다크도움말:
`배쉬
DarkHelp --json Animals.cfg Animals.names Animals_best.weights dog.jpg
`
5. 비디오 작업:
* V2:
`배쉬
다크넷 탐지기 데모 Animals.data Animals.cfg Animalsbest.weights -extoutput test.mp4
`
* V3:
`배쉬
darknet03display_videos 동물.cfg 테스트.mp4
`
* 다크도움말:
`배쉬
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
6. 웹캠에서 읽기:
* V2:
`배쉬
다크넷 탐지기 데모 Animals.data Animals.cfg Animals_best.weights -c 0
`
* V3:
`배쉬
darknet08display_webcam 동물
`
7. 결과를 비디오에 저장:
* V2:
`배쉬
다크넷 탐지기 데모 Animals.data Animals.cfg Animalsbest.weights test.mp4 -outfilename res.avi
`
* V3:
`배쉬
darknet05프로세스비디오멀티스레드 동물.cfg 동물.이름 동물_최고.가중치 테스트.mp4
`
* 다크도움말:
`배쉬
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
8. JSON 출력:
* V2:
`배쉬
다크넷 탐지기 데모 Animals.data Animals.cfg Animalsbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
`
* V3:
`배쉬
darknet06imagestojson 동물 image1.jpg
`
* 다크도움말:
`배쉬
DarkHelp --json Animals.names Animals.cfg Animals_best.weights image1.jpg
`
9. 특정 GPU에서 실행:
`배쉬
다크넷 탐지기 데모 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
10. 신경망의 정확성 확인:
`배쉬
다크넷 탐지기 지도 Driving.data Driving.cfg Driving_best.weights ...
`
11. mAP@IoU=75 계산:
`배쉬
다크넷 감지기 맵 Animals.data Animals.cfg Animalsbest.weights -iouthresh 0.75
`
12. 앵커 재계산:
`배쉬
다크넷 탐지기 calcanchors Animals.data -numof_clusters 6 -너비 320 -높이 256
`
13. 새로운 네트워크 훈련:
`배쉬
다크넷 탐지기 -map -dont_show 기차 동물.데이터 동물.cfg
`
훈련
간단한 주석 및 교육을 위해 DarkMark를 활용하세요. 이는 새로운 신경망을 생성하는 데 권장되는 접근 방식입니다.
수동 훈련 설정(원하는 경우):
1. 프로젝트 폴더를 생성합니다:
* 예를 들어 동물 감지의 경우 ~/nn/animals/입니다.
2. Darknet 구성 파일을 템플릿으로 복사합니다.
* 예를 들어 cfg/yolov4-tiny.cfg.
3. Animals.names 텍스트 파일을 만듭니다.
* 빈 줄이나 설명 없이 각 클래스를 한 줄에 하나씩 나열합니다. 예:
`
개
고양이
새
말
`
4. Animals.data 텍스트 파일을 만듭니다.
`
수업 = 4
기차 = /home/username/nn/animals/animals_train.txt
유효한 = /home/username/nn/animals/animals_valid.txt
이름 = /home/username/nn/animals/animals.names
백업 = /home/사용자 이름/nn/동물
`
5. 이미지와 주석을 위한 폴더를 만듭니다(예: ~/nn/animals/dataset).
* DarkMark 또는 유사한 소프트웨어를 사용하여 이미지에 주석을 답니다. YOLO 주석 형식은 Darknet/YOLO FAQ에 설명되어 있습니다.
6. Animalstrain.txt 및 Animalsvalid.txt를 생성합니다.
* 학습 및 검증에 사용되는 모든 이미지를 한 줄에 하나씩 나열합니다.
7. .cfg 파일을 수정합니다.
* 배치=64로 설정합니다.
* 네트워크 크기와 GPU 메모리를 기반으로 세분화를 조정합니다. 세분화=1로 시작합니다.
* max_batches를 클래스 수의 2000배로 설정합니다(예: 클래스 4개의 경우 8000).
* 단계를 max_batches의 80% 및 90%로 설정합니다.
* 원하는 네트워크 크기에 맞게 너비와 높이를 조정합니다.
* .names 파일의 클래스 수를 반영하도록 클래스를 수정합니다.
각 [yolo] 섹션 앞의 [convolutional] 섹션에서 필터를 업데이트합니다. (클래스 수 + 5) 3.
8. 훈련 시작:
`배쉬
CD ~/nn/동물/
다크넷 탐지기 -map -dont_show 기차 동물.데이터 동물.cfg
`
더 많은 트레이닝 세부사항과 고급 매개변수에 대해서는 Darknet/YOLO FAQ를 참조하세요.
기타 도구 및 링크
DarkMark: Darknet/YOLO 프로젝트를 관리하고, 이미지에 주석을 달고, 주석을 확인하고, 교육 파일을 생성합니다.
DarkHelp: Darknet용 대체 CLI를 제공하여 이미지 타일링, 개체 추적 및 상용 애플리케이션을 위한 강력한 C++ API를 지원합니다.
Darknet/YOLO FAQ: 귀하의 질문에 답변할 수 있는 포괄적인 리소스입니다.
Stéphane의 YouTube 채널: 수많은 튜토리얼과 예제 비디오에 액세스하세요.
Darknet/YOLO Discord Server: 지원 및 토론을 위해 다른 사용자와 연결합니다.
로드맵
최종 업데이트 날짜: 2024년 10월 30일:
완전한:
훈련 중에 적용 가능한 경우 qsort()를 std::sort()로 대체했습니다.
check_mistakes, getchar() 및 system()을 제거했습니다.
C++ 컴파일러(Linux의 경우 g++, Windows의 경우 VisualStudio)를 사용하도록 Darknet을 변환했습니다.
Windows 빌드를 수정했습니다.
예측에 대한 라벨('알파벳' 코드)을 다시 활성화했습니다.
CUDA/GPU 코드, CUDNN 및 CUDNN 절반을 다시 활성화했습니다.
하드 코딩된 CUDA 아키텍처를 제거했습니다.
CUDA 버전 정보가 개선되었습니다.
AVX를 다시 활성화했습니다.
이전 솔루션과 Makefile을 제거했습니다.
OpenCV를 선택적 종속성이 아닌 것으로 만들었습니다.
이전 pthread 라이브러리 종속성을 제거했습니다.
STB를 제거했습니다.
향상된 CUDA 감지를 위해 CMakeLists.txt를 다시 작성했습니다.
이전 "알파벳" 코드 및 관련 이미지를 제거했습니다.
소스 외부 빌드를 구현했습니다.
향상된 버전 번호 출력.
훈련 중 성능 최적화(진행 중)
추론 중 성능 최적화(진행 중)
가능한 경우 참조별 전달을 구현했습니다.
.hpp 파일을 정리했습니다.
darknet.h를 다시 작성했습니다.
cv::Mat 캐스팅을 제거하고 이를 C++ 개체로 사용했습니다.
내부 이미지 구조의 불일치를 수정했습니다.
ARM 기반 Jetson 장치에 대한 빌드가 수정되었습니다(새로운 Jetson Orin 장치가 작동함).
V3의 Python API를 수정했습니다.
단기 목표:
printf()를 std::cout(진행 중)으로 바꾸세요.
이전 Zed 카메라 지원을 다시 살펴보세요.
명령줄 구문 분석 일관성을 개선합니다(진행 중).
중기 목표:
모든 문자 코드를 제거하고 std::string으로 바꿉니다.
컴파일러 경고를 제거하고 코드 명확성을 향상합니다(진행 중).
C의 사용자 정의 이미지 구조 대신 cv::Mat 사용을 향상합니다(진행 중).
이전 목록 기능을 std::Vector 또는 std::list로 대체합니다.
1채널 회색조 이미지에 대한 지원을 추가합니다.
N 채널 이미지(N > 3, 예: 깊이 또는 열 채널)에 대한 지원을 확장합니다.
진행 중인 코드 정리(진행 중)
장기 목표:
모든 GPU에서 CUDA/CUDNN 문제를 해결합니다.
CUDA+cuDNN 코드를 다시 작성하세요.
NVIDIA GPU가 아닌 GPU에 대한 지원을 살펴보세요.
회전된 경계 상자 또는 "각도" 지원을 구현합니다.
키포인트/골격을 추가합니다.
히트맵을 도입합니다(진행 중).
세분화를 살펴보세요.
Darknet/YOLO 프레임워크에 대한 업데이트와 기여를 계속 지켜봐 주시기 바랍니다!