다크넷 개체 탐지 프레임워크 및 YOLO
Darknet은 C, C++ 및 CUDA를 사용하여 제작된 오픈 소스 신경망 프레임워크입니다. 이는 속도와 정확성으로 유명한 최첨단 실시간 객체 감지 시스템인 YOLO(You Only Look Once)의 기반 역할을 합니다.
Hank.ai가 Darknet/YOLO 커뮤니티를 어떻게 강화하고 있는지 읽어보세요: [Hank.ai 블로그 링크]
공식 Darknet/YOLO 웹사이트 탐색: [Darknet 웹사이트 링크]
포괄적인 Darknet/YOLO FAQ에 대해 알아보세요: [FAQ 링크]
Discord에서 활발한 Darknet/YOLO 커뮤니티에 참여하세요: [Discord 서버 링크]
서류
1. YOLOv7: [논문 링크]
2. Scaled-YOLOv4: [논문 링크]
3. YOLOv4: [논문 링크]
4. YOLOv3: [논문 링크]
일반 정보
Darknet/YOLO 프레임워크는 속도와 정확성 측면에서 다른 프레임워크와 YOLO 버전을 계속해서 지배하고 있습니다. 오픈 소스 특성과 라이센스 비용이 전혀 없기 때문에 기존 프로젝트 및 상용 제품에 원활하게 통합할 수 있습니다.
2024년 10월에 출시된 Darknet V3("Jazz")는 NVIDIA RTX 3090 GPU를 사용하여 LEGO 데이터 세트 비디오를 놀라운 1000FPS로 처리하여 놀라운 성능을 달성했습니다. 이는 비디오 프레임당 1밀리초 미만의 처리 시간을 의미합니다.
지원, 토론 및 공동 학습을 위해 [Discord 서버 링크]에서 활성 Darknet/YOLO Discord 서버에 가입하세요.
Darknet/YOLO는 Raspberry Pi부터 고급 훈련 장비까지 광범위한 장치에 적합하며 CPU 및 GPU 버전을 모두 지원합니다. GPU 버전에는 NVIDIA의 CUDA 지원 GPU가 필요합니다.
Darknet/YOLO는 Linux, Windows 및 Mac 운영 체제와의 호환성을 자랑합니다. 아래에서 자세한 조립 지침을 찾아보세요.
다크넷 버전
Joseph Redmon이 2013년부터 2017년 사이에 개발한 원래 Darknet 도구에는 버전 번호가 부족했습니다. 우리는 이 버전을 0.x로 지정합니다.
Alexey Bochkovskiy는 2017년부터 2021년까지 인기 있는 Darknet 저장소를 버전 번호 없이 계속 유지 관리했습니다. 우리는 이것을 버전 1.x라고 부릅니다.
Hank.ai가 후원하고 2023년부터 Stéphane Charette가 유지 관리하는 Darknet 저장소에는 "버전" 명령이 도입되었습니다. 2023년부터 2024년 후반 사이에 버전 2.x "OAK"를 반환했습니다.
개발 목표는 코드베이스에 익숙해지면서 기존 기능의 중단을 최소화하는 것이었습니다. 주요 개선 사항은 다음과 같습니다.
통합 빌드 프로세스: Windows와 Linux 모두에서 일관된 CMake 기반 빌드 프로세스를 위해 빌드 단계를 다시 작성했습니다.
C++ 코드베이스: C++ 컴파일러를 활용하기 위해 코드베이스를 변환합니다.
향상된 훈련 차트: 훈련 중 Chart.png 시각화가 개선되었습니다.
버그 수정 및 최적화: 훈련 시간 단축에 초점을 맞춘 성능 관련 개선 사항입니다.
이 코드베이스의 마지막 분기는 버전 2.1이며 "v2" 분기에 있습니다.
다음 개발 단계는 2024년 중반에 시작되어 2024년 10월 버전 3.x "JAZZ" 릴리스에서 정점에 달했습니다.
언제든지 이전 "v2" 분기에 액세스하여 해당 버전의 명령을 실행할 수 있습니다. 누락된 명령이 있는 경우 알려주시면 해당 명령의 재통합을 조사하겠습니다.
Darknet V3의 중요한 변경 사항은 다음과 같습니다.
명령 제거: 오래되고 자주 사용되지 않는 명령을 제거합니다.
성능 최적화: 훈련 및 추론 성능이 모두 향상되었습니다.
레거시 API 수정: 레거시 C API 수정. 원래 Darknet API를 사용하는 애플리케이션에는 약간의 조정이 필요할 수 있습니다.
새로운 C/C++ API: 새로운 Darknet V3 C 및 C++ API 도입.
업데이트된 샘플 코드: "src-examples" 디렉터리에 새로운 애플리케이션과 샘플 코드가 포함되었습니다.
새로운 API에 대한 자세한 내용: [Darknet V3 API 문서 링크]
업데이트된 샘플 코드 살펴보기: [Darknet V3 API 파일 링크]
MSCOCO 사전 훈련된 가중치
몇몇 인기 있는 YOLO 버전은 MSCOCO 데이터세트의 편의를 위해 사전 훈련되었습니다. 이 데이터 세트는 "cfg/coco.names" 텍스트 파일에서 쉽게 식별할 수 있는 80개의 클래스를 포함합니다.
MSCOCO 외에도 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" 디렉터리에 있습니다. 예제 명령:
`
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를 활용하여 필요한 프로젝트 파일을 생성합니다.
Darknet/YOLO를 구축, 설치 및 실행하는 데에는 기계공이 아닌 자동차를 운전하는 것과 마찬가지로 C++ 전문 지식이 필요하지 않습니다.
구글 코랩
Google Colab 지침은 Linux 지침과 동일합니다. 여러 Jupyter 노트북은 새로운 네트워크 훈련과 같은 다양한 작업을 보여줍니다.
"colab" 하위 디렉터리에서 노트북을 탐색하거나 아래 Linux 지침을 따르세요.
리눅스 CMake 방법
Linux용 Darknet 빌드 튜토리얼
선택 사항: 최신 NVIDIA GPU가 있는 경우 이 시점에서 CUDA 또는 CUDA+cuDNN을 설치할 수 있습니다. 설치된 경우 Darknet은 GPU를 사용하여 이미지(및 비디오) 처리 속도를 높입니다.
CMake가 필요한 모든 파일을 다시 찾도록 하려면 Darknet 빌드 디렉터리에서 CMakeCache.txt 파일을 삭제해야 합니다.
Darknet을 다시 구축하는 것을 잊지 마십시오.
Darknet은 그것 없이 실행될 수 있지만 사용자 정의 네트워크를 교육하려면 CUDA 또는 CUDA+cuDNN이 필요합니다.
1. 필수 구성 요소를 설치합니다.
`배쉬
sudo apt-get 설치 빌드 필수 git libopencv-dev cmake
`
2. Darknet 저장소를 복제합니다.
`배쉬
mkdir ~/srccd ~/src
자식 클론 https://github.com/hank-ai/darknetcd darknet
`
3. 빌드 디렉터리를 생성합니다:
`배쉬
mkdir 빌드cd 빌드
`
4. CMake를 구성합니다.
`배쉬
cmake -DCMAKEBUILDTYPE=릴리스 ..
`
5. 다크넷 구축:
`배쉬
-j4를 만드세요
`
6. 패키지 다크넷:
`배쉬
패키지
`
7. 패키지를 설치합니다.
`배쉬
sudo dpkg -i darknet-VERSION.deb
`
이전 버전의 CMake를 사용하는 경우 위의 cmake 명령을 실행하려면 먼저 CMake를 업그레이드해야 합니다. Ubuntu에서 CMake를 업그레이드하려면 다음 명령을 사용하면 됩니다.
`배쉬
sudo apt-get purge cmake
sudo 스냅 설치 cmake --classic
`
bash를 명령 셸로 사용하는 경우 이 시점에서 셸을 다시 시작해야 합니다. 물고기를 사용하는 경우 즉시 새 경로를 선택해야 합니다.
고급 사용자:
DEB 파일 대신 RPM 설치 패키지를 선호하는 경우 "CM_package.cmake"에서 관련 줄을 수정하세요. "make -j4 package"를 실행하기 전에 다음 줄을 조정하세요.
`cmake
SET (CPACKGENERATOR "DEB")# SET (CPACKGENERATOR "RPM")
`
Centos 및 OpenSUSE와 같은 배포판의 경우 다음과 같이 해당 줄을 수정합니다.
`cmake
설정(CPACK_GENERATOR "DEB")
설정(CPACK_GENERATOR "RPM")
`
배포판의 패키지 관리자를 사용하여 빌드된 패키지를 설치합니다. Ubuntu와 같은 Debian 기반 시스템의 경우:
`배쉬
sudo dpkg -i darknet-2.0.1-Linux.deb
`
.deb 패키지 설치는 다음 파일을 복사합니다:
/usr/bin/darknet: 주요 Darknet 실행 파일입니다. CLI에서 "darknet version"을 실행하여 성공적인 설치를 확인하세요.
/usr/include/darknet.h: C, C++, Python 개발자를 위한 Darknet API.
/usr/include/darknet_version.h: 개발자를 위한 버전 정보가 포함되어 있습니다.
/usr/lib/libdarknet.so: C, C++ 및 Python 개발자를 위해 링크할 라이브러리입니다.
/opt/darknet/cfg/...: 모든 .cfg 템플릿을 저장합니다.
축하해요! Darknet은 /usr/bin/에 구축 및 설치되었습니다. "darknet version"을 실행하여 설치를 확인하세요.
/usr/bin/darknet이 없으면 설치만 하지 않고 빌드만 했다는 의미입니다. 위에서 설명한 대로 .deb 또는 .rpm 파일을 설치했는지 확인하세요.
Windows CMake 메서드
이 지침에서는 Windows 11 22H2를 새로 설치한다고 가정합니다.
1. Winget을 사용하여 필수 구성 요소를 설치합니다.
`배쉬
Winget 설치 Git.Git
Winget 설치 Kitware.CMake
Winget 설치 nsis.nsis
Winget 설치 Microsoft.VisualStudio.2022.Community
`
2. Visual Studio 설치 수정:
- "Windows 시작" 메뉴를 클릭하고 "Visual Studio 설치 프로그램"을 실행합니다.
- '수정'을 클릭하세요.
- "C++를 사용한 데스크톱 개발"을 선택합니다.
- 오른쪽 하단의 '수정'을 클릭한 다음 '예'를 클릭하세요.
3. Microsoft VCPKG를 설치합니다.
- 설치가 완료되면 "Windows 시작" 메뉴를 클릭하고 "VS 2022용 개발자 명령 프롬프트"를 선택합니다. 이 단계에서는 PowerShell을 사용하지 마세요. 문제가 발생할 수 있습니다!
- 고급 사용자: 개발자 명령 프롬프트를 사용하는 대신 일반 명령 프롬프트 또는 SSH를 장치에 실행하고 "Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat"를 수동으로 실행할 수 있습니다.
4. VCPKG를 사용하여 OpenCV를 설치합니다.
`배쉬
질병통제예방센터:
mkdir c:srccd c:src
자식 클론 https://github.com/microsoft/vcpkgcd vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe 통합 설치
.vcpkg.exe powershell 통합
.vcpkg.exe opencv 설치[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
이 단계에서는 종속성을 다운로드하고 빌드하는 데 상당한 시간이 걸릴 수 있으므로 인내심을 가지십시오.
고급 사용자:
- OpenCV를 빌드할 때 추가하고 싶은 다른 선택적 모듈이 많이 있다는 점에 유의하세요. 전체 목록을 보려면 .vcpkg.exe search opencv를 실행하세요.
선택 사항: 최신 NVIDIA GPU가 있는 경우 이 시점에서 CUDA 또는 CUDA+cuDNN을 설치할 수 있습니다. 설치된 경우 Darknet은 GPU를 사용하여 이미지(및 비디오) 처리 속도를 높입니다.
CMake가 필요한 모든 파일을 다시 찾도록 하려면 Darknet 빌드 디렉터리에서 CMakeCache.txt 파일을 삭제해야 합니다.
Darknet을 다시 구축하는 것을 잊지 마십시오.
Darknet은 그것 없이 실행될 수 있지만 사용자 정의 네트워크를 교육하려면 CUDA 또는 CUDA+cuDNN이 필요합니다.
1. CUDA를 설치합니다:
CUDA를 다운로드하고 설치하려면 https://developer.nvidia.com/cuda-downloads를 방문하세요.
2. cuDNN을 설치합니다:
cuDNN을 다운로드하고 설치하려면 https://developer.nvidia.com/rdp/cudnn-download 또는 https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows를 방문하세요.
3. CUDA 설치 확인:
CUDA를 설치한 후 nvcc.exe 및 nvidia-smi.exe를 실행할 수 있는지 확인하세요. PATH 변수를 조정해야 할 수도 있습니다.
4. cuDNN 통합:
다운로드한 cuDNN 아카이브의 압축을 풀고 "bin", "include" 및 "lib" 디렉터리를 C:Program FilesNVIDIA GPU Computing ToolkitCUDA[version]에 복사합니다. 기존 파일을 덮어써야 할 수도 있습니다.
5. Visual Studio 다음에 CUDA를 설치합니다.
- Visual Studio 이후에 CUDA를 설치해야 합니다. Visual Studio를 업그레이드하는 경우 CUDA를 다시 설치해야 합니다.
6. Darknet을 복제하고 빌드합니다.
`배쉬
CD C:src
자식 클론 https://github.com/hank-ai/darknet.gitcd darknet
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/cuDNN DLL 처리:
- CUDA 또는 cuDNN DLL(예: cublas64_12.dll) 누락에 대한 오류가 발생하는 경우 관련 CUDA .dll 파일을 darknet.exe와 동일한 디렉터리에 수동으로 복사하세요. 예를 들어:
`배쉬
"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease를 복사하세요.
`
(예제입니다. CUDA 버전을 확인하고 해당 명령을 실행하세요.)
- 마지막 msbuild.exe 명령을 다시 실행하여 NSIS 설치 패키지를 생성합니다.
고급 사용자:
cmake 명령 출력은 일반 Visual Studio 솔루션 파일(Darknet.sln)입니다. msbuild.exe 대신 Visual Studio GUI를 사용하여 빌드하려는 경우 Visual Studio에서 Darknet 프로젝트를 로드하고 명령줄 단계를 무시할 수 있습니다.
이제 C:srcDarknetbuildsrc-cliReleasedarknet.exe 실행 파일이 있어야 합니다. C:srcDarknetbuildsrc-cliReleasedarknet.exe 버전을 실행하여 설치를 테스트하세요.
라이브러리, 포함 파일, 필요한 DLL을 포함하여 Darknet을 올바르게 설치하려면 마지막 단계에서 빌드된 NSIS 설치 마법사를 실행하세요. 빌드 디렉터리(예: darknet-2.0.31-win64.exe)에서 darknet-VERSION.exe 파일을 찾으세요.
NSIS 설치 패키지는 다음을 수행합니다.
"Darknet"이라는 디렉터리를 만듭니다(예: C:Program FilesDarknet).
CLI 애플리케이션(darknet.exe) 및 기타 샘플 애플리케이션을 설치합니다.
필요한 타사 .dll 파일(예: OpenCV에서)을 설치합니다.
다른 응용 프로그램에서 darknet.dll을 사용하는 데 필요한 Darknet .dll, .lib 및 .h 파일을 설치합니다.
템플릿 .cfg 파일을 설치합니다.
이제 끝났습니다! 설치 마법사가 완료되면 Darknet이 C:Program FilesDarknet에 설치됩니다. C:Program FilesDarknetbindarknet.exe 버전을 실행하여 설치를 확인하세요.
C:/Program Files/darknet/bin/darknet.exe가 없다면 이는 설치만 하지 않고 빌드만 했다는 뜻입니다. 앞에서 설명한 대로 NSIS 설치 마법사의 각 패널을 진행했는지 확인하세요.
다크넷 사용
CLI
이것은 Darknet에서 지원하는 모든 명령의 전체 목록이 아닙니다.
Darknet CLI 외에도 Darknet/YOLO에 대한 대체 인터페이스를 제공하는 DarkHelp 프로젝트 CLI에 유의하세요. 여기에는 Darknet에서 직접 사용할 수 없는 몇 가지 고급 기능이 포함되어 있습니다. Darknet CLI와 DarkHelp CLI를 동시에 활용할 수 있습니다. 그들은 상호 배타적이지 않습니다.
아래 대부분의 명령에는 해당 .names 및 .cfg 파일과 함께 .weights 파일이 필요합니다. 자신만의 네트워크를 훈련시키거나(강력히 권장됩니다!) 공개적으로 사용 가능한 리소스에서 사전 훈련된 신경망을 다운로드할 수 있습니다. 몇 가지 예는 다음과 같습니다.
LEGO Gears(이미지의 물체 감지)
Rolodex(이미지의 텍스트 감지)
MSCOCO(표준 80등급 객체 감지)
다음은 몇 가지 예제 명령과 사용법입니다.
기본 명령:
돕다:
`배쉬
다크넷 도움말
`
버전:
`배쉬
다크넷 버전
`
이미지 예측:
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
`
좌표 출력:
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
`
비디오 작업:
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
`
웹캠 입력:
V2:
`배쉬
다크넷 탐지기 데모 Animals.data Animals.cfg Animals_best.weights -c 0
`
V3:
`배쉬
darknet08display_webcam 동물
`
결과를 비디오로 저장:
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
`
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
`
특정 GPU에서 실행:
V2:
`배쉬
다크넷 탐지기 데모 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
네트워크 정확성 확인:
지도:
`배쉬
다크넷 탐지기 지도 Driving.data Driving.cfg Driving_best.weights ...
`
- 이 명령은 데이터 세트의 각 클래스에 대한 평균 정밀도(AP)를 표시합니다.
mAP@IoU=75:
`배쉬
다크넷 탐지기 맵 Animals.data Animals.cfg Animalsbest.weights -iouthresh 0.75
`
- 이 명령은 IoU 임계값 0.75에서 mAP를 계산합니다.
앵커 계산:
앵커 재계산의 가장 좋은 방법은 DarkMark를 사용하는 것입니다. DarkMark는 100번의 연속 계산을 실행하고 최적의 앵커를 선택하기 때문입니다. 그러나 이전 Darknet 방법을 사용할 수 있습니다.
`배쉬
다크넷 탐지기 calcanchors Animals.data -numof_clusters 6 -너비 320 -높이 256
`
새로운 네트워크 훈련:
기본 교육:
`배쉬
다크넷 탐지기 -map -dont_show 기차 동물.데이터 동물.cfg
`
- 가장 좋은 가중치는 Animals_best.weights로 저장되며 훈련 진행 상황은 Chart.png에서 볼 수 있습니다.
자세한 훈련:
`배쉬
다크넷 탐지기 -map -dont_show --verbose 기차 동물.데이터 동물.cfg
`
- 훈련 중 더 자세한 정보를 제공하는 명령입니다.
훈련
Darknet/YOLO FAQ의 관련 섹션에 대한 빠른 링크:
파일 및 디렉터리 설정: [FAQ 섹션 링크]
올바른 구성 파일 선택: [FAQ 섹션 링크]
훈련 명령: [FAQ 섹션 링크]
주석을 달고 훈련하는 가장 간단한 방법은 DarkMark를 사용하여 필요한 모든 Darknet 파일을 생성하는 것입니다. 이는 새로운 신경망을 훈련하는 데 권장되는 접근 방식입니다.
수동 훈련 설정:
1. 폴더 생성: 훈련 파일을 저장할 새 폴더를 생성합니다. 예를 들어 ~/nn/animals/.
2. 구성 파일 복사: Darknet 구성 파일을 템플릿(예: cfg/yolov4-tiny.cfg)으로 폴더에 복사합니다. 이제 ~/nn/animals/animals.cfg가 생겼습니다.
3. .names 파일 생성: 동일한 폴더에 Animals.names 텍스트 파일을 생성합니다.
- 검색하려는 클래스를 나열하려면 파일을 편집하세요. 각 클래스는 빈 줄이나 주석 없이 별도의 줄에 있어야 합니다. 예를 들어:
`
개
고양이
새
말
`
4. .data 파일 생성: 동일한 폴더에 Animals.data 텍스트 파일을 생성합니다.
- .data 파일은 교육 및 검증 데이터세트, 클래스 이름, 백업 디렉터리를 정의합니다. 예를 들어:
`
수업=4
기차=/home/username/nn/animals/animals_train.txt
유효한=/home/username/nn/animals/animals_valid.txt
이름=/home/username/nn/animals/animals.names
백업=/홈/사용자 이름/nn/동물
`
5. 이미지 및 주석 폴더 생성: 이미지와 주석을 저장할 폴더(예: ~/nn/animals/dataset)를 생성합니다.
- 각 이미지에는 주석이 포함된 해당 .txt 파일이 필요합니다. 주석 형식은 구체적입니다. 수동으로 생성할 수 없습니다. 이미지에 주석을 추가하려면 DarkMark 또는 유사한 소프트웨어를 사용하십시오.
- YOLO 주석 형식은 Darknet/YOLO FAQ에 설명되어 있습니다.
6. "train" 및 "valid" 파일을 생성합니다. .data 파일에 언급된 "train" 및 "valid" 텍스트 파일을 생성합니다.
- 이 파일에는 각각 학습 및 검증에 사용되는 이미지가 나열되어 있습니다. 각 이미지는 별도의 줄에 있어야 합니다. 상대 경로나 절대 경로를 사용할 수 있습니다.
7. 구성 파일을 수정합니다.
- 텍스트 편집기로 .cfg 파일을 열고 다음과 같이 조정합니다.
- 배치=64: 이 값은 일반적으로 괜찮습니다.
- 하위 구분: 하위 구분=1로 시작합니다. GPU의 메모리와 네트워크 크기에 따라 이 값을 늘려야 할 수도 있습니다. 지침은 Darknet/YOLO FAQ를 참조하세요.
- maxbatches: 2000 * 클래스 수로 설정합니다. 예를 들어 클래스가 4개 있는 경우 maxbatches=8000입니다.
- 단계: 이를 최대 배치의 80% 및 90%로 설정합니다. 예를 들어, maxbatches=8000, steps=6400,7200입니다.
- 너비와 높이: 네트워크 크기입니다. 차원 계산에 대한 조언은 Darknet/YOLO FAQ를 참조하세요.
- 클래스: .names 파일의 클래스 수와 일치하도록 클래스=... 행을 변경합니다(이 예에서는 클래스=4).
- 필터: 각 [yolo] 섹션 앞의 각 [컨볼루셔널] 섹션에서 필터=... 행을 수정합니다. 값은 (클래스 수 + 5) * 3으로 계산됩니다. 예를 들어 클래스가 4개인 경우 필터=27입니다.
8. 훈련 시작:
`배쉬
CD ~/nn/동물/
다크넷 탐지기 -map -dont_show 기차 동물.데이터 동물.cfg
`
- 훈련에 시간이 걸릴 수 있습니다. 가장 좋은 가중치는 Animals_best.weights로 저장됩니다. 학습 진행 상황은 Chart.png 파일에 표시됩니다. 추가 훈련 매개변수는 Darknet/YOLO FAQ를 참조하세요.
- 더 자세한 교육 정보를 원할 경우 --verbose 매개변수를 추가하세요.
`배쉬
다크넷 탐지기 -map -dont_show --verbose 기차 동물.데이터 동물.cfg
`
기타 도구 및 링크
DarkMark: 이 도구는 Darknet/YOLO 프로젝트 관리, 이미지 주석 달기, 주석 확인 및 Darknet 교육에 필요한 파일 생성을 지원합니다.
DarkHelp: 이미지 타일링, 비디오의 객체 추적 및 상업용 애플리케이션을 위한 강력한 C++ API와 같은 기능을 제공하는 Darknet을 위한 강력한 대체 CLI입니다.
Darknet/YOLO FAQ: Darknet/YOLO에 대한 질문에 답변할 수 있는 귀중한 리소스입니다.
Stéphane의 YouTube 채널: 수많은 튜토리얼과 예제 비디오를 찾아보세요.
Darknet/YOLO Discord 서버: 서버에 가입하여 지원 질문을 하고 다른 Darknet/YOLO 사용자와 연결하세요.
로드맵
최종 업데이트 날짜: 2024-10-30
완전한
qsort() 교체: 코드베이스의 관련 부분에서 qsort()를 std::sort()로 대체했습니다. (나머지 일부 인스턴스는 여전히 qsort()를 사용합니다.)
오래된 기능 제거: check_mistakes, getchar() 및 system()을 제거했습니다.
C++ 코드베이스: C++ 컴파일러(Linux의 경우 g++, Windows의 경우 VisualStudio)를 사용하도록 Darknet을 변환했습니다.
Windows 빌드: Windows 빌드 프로세스를 수정했습니다.
Python 지원: Python 통합이 수정되었습니다.
Darknet 라이브러리: Darknet 라이브러리를 구축했습니다.
예측 라벨: 예측에 대한 라벨("알파벳" 코드)을 다시 활성화했습니다.
CUDA/GPU 코드: CUDA/GPU 기능을 다시 활성화했습니다.
CUDNN: CUDNN 지원을 다시 활성화했습니다.
CUDNN 절반: CUDNN 절반 정밀도 지원을 다시 활성화했습니다.
CUDA 아키텍처: CUDA 아키텍처의 하드 코딩이 제거되었습니다.
CUDA 버전 정보: CUDA 버전 정보가 개선되었습니다.
AVX: AVX 지원을 다시 활성화했습니다.
레거시 파일 제거: 이전 솔루션 및 Makefile을 제거했습니다.
OpenCV 종속성: OpenCV를 필수 종속성으로 만들었습니다.
pthread 라이브러리: 이전 pthread 라이브러리에 대한 종속성을 제거했습니다.
STB: STB 종속성을 제거했습니다.
CMakeLists.txt: 새로운 CUDA 감지 방법을 사용하도록 CMakeLists.txt를 다시 작성했습니다.
오래된 파일 제거: 오래된 "알파벳" 코드를 제거하고 데이터/라벨에서 700개 이상의 이미지를 삭제했습니다.
소스 외부 빌드: 소스 외부 빌드를 활성화했습니다.
버전 번호: 버전 번호 출력이 개선되었습니다.
훈련 성과: 훈련을 위한 성능 최적화(진행 중인 작업)
추론 성능: 추론을 위한 성능 최적화(진행 중인 작업)
참조별 전달: 효율성 향상을 위해 가능한 경우 참조별 전달을 사용합니다.
코드 정리: .hpp 파일을 정리했습니다.
darknet.h 재작성: Darknet API 헤더 파일을 업데이트했습니다.
cv::Mat 사용법: cv::Mat를 void*로 캐스팅하는 대신 적절한 C++ 개체로 사용했습니다.
이미지 구조: 내부 이미지 구조와 관련된 불일치 및 문제가 수정되었습니다.
Jetson 지원: ARM 기반 Jetson 장치에 대한 빌드가 수정되었습니다.
- 구형 Jetson 장치는 NVIDIA 지원 중단(C++17 컴파일러 없음)으로 인해 수정될 가능성이 없습니다.
- 새로운 Jetson Orin 장치가 작동합니다.
V3의 Python API: Darknet V3의 Python API를 수정했습니다.
단기 목표
printf() 교체: printf()를 std::cout으로 교체합니다(진행 중).
Zed 카메라 지원: Zed 카메라에 대한 지원을 재검토하고 개선합니다.
명령줄 구문 분석: 보다 강력하고 일관된 명령줄 구문 분석을 구현합니다(진행 중).
중기 목표
문자 코드 제거: 모든 문자 코드를 제거하고 std::string으로 바꿉니다.
컴파일러 경고: 경고를 숨기지 말고 컴파일러 경고를 해결하세요(진행 중).
cv::Mat 사용법: C의 사용자 정의 이미지 구조 대신 cv::Mat의 사용을 향상합니다(진행 중).
목록 기능: 이전 목록 기능을 std::Vector 또는 std::list로 대체합니다.
회색조 이미지 지원: 1채널 회색조 이미지에 대한 지원을 수정합니다.
N 채널 이미지 지원: 3개 이상의 채널(예: 깊이 또는 열 채널)이 있는 이미지에 대한 지원을 추가합니다.
지속적인 코드 정리: 지속적인 코드 정리(진행 중)를 계속합니다.
장기 목표
CUDA/CUDNN 문제: 다양한 GPU 간의 CUDA/CUDNN 호환성 문제를 해결합니다.
CUDA/CUDNN 코드 재작성: 향상된 성능 및 호환성을 위해 CUDA/CUDNN 코드를 재작성합니다.
비 NVIDIA GPU 지원: 비 NVIDIA GPU에 대한 지원을 조사합니다.
회전된 경계 상자: 회전된 경계 상자 또는 각도 정보에 대한 지원을 구현합니다.
키포인트/스켈레톤: 키포인트 및 스켈레톤에 대한 지원을 추가합니다.
히트맵: 히트맵 지원 구현(진행 중)
세분화: 세분화에 대한 지원을 추가합니다.