다크넷 개체 탐지 프레임워크 및 YOLO
Darknet은 GPU 가속을 위한 일부 CUDA 코드와 함께 주로 C 및 C++로 작성된 오픈 소스 신경망 프레임워크입니다. 속도와 효율성으로 잘 알려져 있어 실시간 개체 감지 애플리케이션에 널리 사용됩니다.
YOLO(You Only Look Once)는 Darknet 프레임워크 내에서 실행되도록 설계된 강력한 실시간 개체 탐지 시스템입니다. 속도와 정확성이 뛰어나며 벤치마크에서 다른 객체 감지 시스템보다 지속적으로 뛰어난 성능을 발휘합니다.
Darknet/YOLO 세계에 대해 더 깊이 알아보세요:
Hank.ai의 기여: Hank.ai가 어떻게 Darknet/YOLO 커뮤니티를 적극적으로 지원하는지 알아보세요.
공식 웹사이트: 포괄적인 정보를 보려면 공식 Darknet/YOLO 웹사이트를 탐색하세요.
자주 묻는 질문: Darknet/YOLO에 관한 일반적인 질문에 대한 답변을 찾아보세요.
Discord 서버: 활발한 Darknet/YOLO Discord 커뮤니티에 참여하여 토론과 지원을 받으세요.
서류
YOLO의 진화는 여러 연구 논문에 문서화되어 있습니다.
1. YOLOv7: 객체 감지를 위한 딥러닝의 한계 확장
2. Scaled-YOLOv4: 산업용 애플리케이션을 위한 YOLOv4 확장
3. YOLOv4: 객체 감지의 최적 속도 및 정확도
4. YOLOv3: 점진적인 개선
일반 정보
Darknet/YOLO 프레임워크는 속도와 정확성을 모두 자랑하며 계속해서 객체 감지의 선두에 있습니다. 이 프레임워크는 완전히 무료이며 오픈 소스이므로 개발자는 라이선스나 비용 제한 없이 프로젝트에 원활하게 통합할 수 있습니다.
2024년 10월에 출시된 코드명 "Jazz"인 Darknet V3는 NVIDIA RTX 3090 GPU를 통해 놀라운 성능을 달성합니다. LEGO 데이터 세트 비디오를 최대 1000FPS로 처리할 수 있습니다. 즉, 각 프레임이 단 1밀리초 이내에 분석됩니다.
연결 상태 유지:
Discord: 지원 및 토론을 위해 Darknet/YOLO Discord 서버에 가입하세요: https://discord.gg/zSq8rtW.
Darknet/YOLO는 Raspberry Pi 및 클라우드 서버부터 데스크탑 및 고급 교육 시스템에 이르기까지 다양한 플랫폼에서 적응 가능하고 실행됩니다. CPU 버전은 다양한 장치에서 작동하지만 GPU 버전에는 NVIDIA의 CUDA 지원 GPU가 필요합니다.
다크넷 버전
Darknet 프레임워크는 창립 이래 몇 가지 주요 버전을 통해 크게 발전했습니다.
1. 버전 0.x: Joseph Redmon이 2013~2017년에 개발한 이 원본 버전에는 특정 버전 번호가 없습니다.
2. 버전 1.x: 2017년부터 2021년까지 Alexey Bochkovskiy가 유지 관리한 이 버전에도 버전 번호가 없었습니다.
3. 버전 2.x "OAK": Hank.ai가 후원하고 2023년부터 Stéphane Charette가 유지 관리하며 버전 명령이 포함된 첫 번째 버전입니다. 이 버전은 2024년 후반까지 실행되었습니다.
4. 버전 3.x "JAZZ": 2024년 10월에 출시된 최신 버전에는 상당한 개선 사항과 새로운 API가 도입되었습니다.
다크넷 구축
Darknet을 구축하려면 C++17 컴파일러 이상, OpenCV 및 CMake 빌드 시스템이 필요합니다. 프로세스가 복잡해 보일 수 있지만 Darknet/YOLO를 구축, 설치 및 실행하기 위해 C++ 전문가가 될 필요는 없습니다.
건물 옵션:
1. Google Colab: Google Colab 지침은 Linux 지침과 동일합니다.
2. Linux CMake 방법: 이 방법은 Linux 사용자를 위한 자세한 가이드를 제공합니다.
3. Windows CMake 방법: Windows에서 Darknet을 구축하려면 다음 지침을 따르세요.
참고: 이전 튜토리얼을 사용하는 경우 빌드 단계가 아래에 설명된 새로운 통합 접근 방식과 다를 수 있습니다.
소프트웨어 개발자: Darknet/YOLO 개체 감지 프레임워크의 내부 작동에 대한 통찰력을 얻으려면 https://darknetcv.ai/를 방문하세요.
구글 코랩
Google Colab 지침은 Linux CMake 방법을 밀접하게 반영합니다. colab 하위 디렉터리에는 새 네트워크 훈련과 같은 특정 작업을 보여주는 여러 Jupyter 노트북이 있습니다.
리눅스 CMake 방법
Linux에서 Darknet을 구축하려면 다음 지침을 따르세요.
1. 전제 조건: 필요한 도구를 설치합니다.
`배쉬
sudo apt-get 설치 빌드 필수 git libopencv-dev cmake
`
2. Darknet 복제: Darknet 저장소를 다운로드합니다.
`배쉬
mkdir ~/srccd ~/src
자식 클론 https://github.com/hank-ai/darknet
CD 다크넷
`
3. 빌드 디렉터리 생성: 빌드 프로세스를 위한 디렉터리를 생성합니다.
`배쉬
mkdir 빌드
CD 빌드
`
4. CMake로 구성: 빌드 파일을 생성합니다.
`배쉬
cmake -DCMAKEBUILDTYPE=릴리스 ..
`
5. Darknet 빌드: Darknet 실행 파일을 빌드합니다.
`배쉬
-j4를 만드세요
`
6. 설치용 패키지: 간편한 설치를 위한 DEB 패키지 생성(선택 사항):
`배쉬
패키지 만들기
sudo dpkg -i darknet-VERSION.deb
`
7. CUDA/cuDNN(선택 사항): GPU 가속을 위해 CUDA 또는 CUDA+cuDNN을 설치합니다.
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
8. 설치 확인: 설치 후 Darknet 버전을 확인합니다.
`배쉬
다크넷 버전
`
Windows CMake 메서드
이 지침은 새로 설치된 Windows 11 22H2에서 Darknet을 구축하기 위한 것입니다.
1. 전제 조건 설치:
`배쉬
Winget 설치 Git.Git Winget 설치 Kitware.CMake Winget 설치 nsis.nsis Winget 설치 Microsoft.VisualStudio.2022.Community
`
2. 비주얼 스튜디오 C++ 지원:
* Visual Studio 설치 관리자를 열고 수정을 선택합니다.
* C++를 사용한 데스크톱 개발을 활성화하고 수정을 클릭합니다.
3. VS 2022용 개발자 명령 프롬프트: VS 2022용 개발자 명령 프롬프트를 엽니다.
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. CUDA/cuDNN(선택 사항): GPU 가속을 위해 CUDA 또는 CUDA+cuDNN을 설치합니다.
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
6. 클론 다크넷:
`배쉬
CD C:src
자식 클론 https://github.com/hank-ai/darknet.git
CD 다크넷
mkdir 빌드
CD 빌드
`
7. CMake로 구성:
`배쉬
cmake -DCMAKEBUILDTYPE=릴리스 -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. MSBuild를 사용하여 Darknet 구축:
`배쉬
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;구성=PACKAGE.vcxproj 릴리스
`
9. 설치 확인: Darknet 실행 파일을 실행하고 버전을 확인합니다.
`배쉬
C:srcdarknetbuildsrc-cliReleasedarknet.exe 버전
`
10. NSIS 패키지 설치: 빌드 디렉터리에서 darknet-VERSION.exe 파일을 실행하여 Darknet, 라이브러리, 포함 파일 및 DLL을 설치합니다.
다크넷 사용
Darknet은 프레임워크와 상호 작용하기 위한 명령줄 인터페이스(CLI)를 제공합니다.
참고: Darknet CLI 외에도 DarkHelp 프로젝트는 향상된 기능을 갖춘 대체 CLI를 제공합니다. Darknet CLI와 DarkHelp CLI를 함께 사용할 수 있습니다.
일반적인 다크넷 CLI 명령:
도움말: 사용 가능한 명령을 나열합니다.
`배쉬
다크넷 도움말
`
버전: 다크넷 버전을 확인하세요:
`배쉬
다크넷 버전
`
예측(이미지): 이미지에서 객체 감지를 수행합니다.
`배쉬
# 버전 2
다크넷 감지기 테스트 cars.data cars.cfg cars_best.weights image1.jpg
# 버전 3
darknet02displayannotatedimages cars.cfg image1.jpg
# 다크헬프
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
`
출력 좌표(이미지): 객체 좌표 가져오기:
`배쉬
# 버전 2
다크넷 탐지기 테스트 Animals.data Animals.cfg Animalsbest.weights -extoutput dog.jpg
# 버전 3
darknet01inference_images 동물 개.jpg
# 다크헬프
DarkHelp --json Animals.cfg Animals.names Animals_best.weights dog.jpg
`
비디오 처리:
`배쉬
# 버전 2
# 비디오 파일에서 실행
다크넷 탐지기 데모 Animals.data Animals.cfg Animalsbest.weights -extoutput test.mp4
# 웹캠에서 실행
다크넷 탐지기 데모 Animals.data Animals.cfg Animals_best.weights -c 0
# 버전 3
# 비디오 파일에서 실행
darknet03display_videos 동물.cfg 테스트.mp4
# 웹캠에서 실행
darknet08display_webcam 동물
# 다크헬프
# 비디오 파일에서 실행
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
결과를 비디오에 저장:
`배쉬
# 버전 2
다크넷 탐지기 데모 Animals.data Animals.cfg Animalsbest.weights test.mp4 -outfilename res.avi
# 버전 3
darknet05프로세스비디오멀티스레드 동물.cfg 동물.이름 동물_최고.가중치 테스트.mp4
# 다크헬프
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
JSON 출력:
`배쉬
# 버전 2
다크넷 탐지기 데모 Animals.data Animals.cfg Animalsbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
# 버전 3
darknet06imagestojson 동물 image1.jpg
# 다크헬프
DarkHelp --json Animals.names Animals.cfg Animals_best.weights image1.jpg
`
특정 GPU: 지정된 GPU에서 실행:
`배쉬
# 버전 2
다크넷 탐지기 데모 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
정확도 검사: 네트워크의 정확도를 평가합니다.
`배쉬
다크넷 탐지기 지도 Driving.data Driving.cfg Driving_best.weights
`
앵커 계산:
`배쉬
다크넷 탐지기 calcanchors Animals.data -numof_clusters 6 -너비 320 -높이 256
`
새로운 네트워크 훈련
DarkMark: 주석 달기 및 교육에 대한 직관적이고 효율적인 접근 방식을 위해 DarkMark를 사용하십시오.
수동 설정:
1. 디렉터리 생성: 훈련 데이터를 위한 폴더를 설정합니다.
2. 구성 복사: 구성 파일을 템플릿으로 선택하고(예: cfg/yolov4-tiny.cfg) 이를 디렉터리에 복사합니다.
3. .names 파일 만들기: 클래스를 한 줄에 하나씩 나열하는 텍스트 파일(예: Animals.names)을 만듭니다.
4. .data 파일 생성: 다음 구조의 텍스트 파일(예: Animals.data)을 생성합니다.
`
수업 = 4
기차 = /path/to/animals_train.txt
유효한 = /path/to/animals_valid.txt
이름 = /path/to/animals.names
백업 = /path/to/backup_directory
`
5. 데이터세트 준비: 이미지와 해당 주석 파일을 디렉터리에 정리합니다.
6. 훈련/유효한 텍스트 파일 생성: 훈련 및 검증을 위한 이미지 경로를 나열하는 두 개의 텍스트 파일(animalstrain.txt, Animalsvalid.txt)을 생성합니다.
7. 구성 수정:
* 배치=64로 설정합니다.
* GPU 메모리를 기반으로 세분화를 조정합니다.
max_batches를 적절한 값(예: 클래스 수 2000개)으로 설정합니다.
* 단계를 max_batches의 80% 및 90%로 설정합니다.
* 네트워크 크기에 따라 너비와 높이를 조정합니다.
* 수업 수에 맞게 수업을 업데이트하세요.
* [yolo] 섹션 이전의 [convolutional] 섹션에서 필터를 수정합니다.
8. 훈련 시작:
`배쉬
CD /경로/대상/동물
다크넷 탐지기 -map -dont_show 기차 동물.데이터 동물.cfg
`
9. 진행 상황 보기: Chart.png 파일을 통해 훈련 진행 상황을 모니터링합니다.
기타 도구 및 링크
DarkMark: 이 도구는 Darknet 교육을 위한 이미지 주석, 확인 및 파일 생성을 단순화합니다.
DarkHelp: 이미지 타일링 및 객체 추적과 같은 기능을 갖춘 Darknet을 위한 강력한 대체 CLI입니다.
다크넷/YOLO FAQ: 자주 묻는 질문에 대한 답변을 찾아보세요.
Stéphane의 YouTube 채널: 튜토리얼과 예제 비디오에 액세스하세요.
Darknet/YOLO Discord Server: 지원과 토론을 위해 커뮤니티에 참여하세요.
로드맵
완전한:
효율성을 위해 qsort()를 std::sort()로 대체했습니다.
더 이상 사용되지 않는 코드(예: check_mistakes, getchar(), system())를 제거했습니다.
Darknet을 C++ 컴파일러로 마이그레이션했습니다.
Windows 빌드 문제가 해결되었습니다.
Python 지원이 복원되었습니다.
Darknet 라이브러리를 구축했습니다.
CUDA/GPU 코드, CUDNN 및 CUDNN 절반을 다시 활성화했습니다.
CUDA 버전 정보가 개선되었습니다.
AVX 명령어 세트를 다시 활성화했습니다.
이전 솔루션과 Makefile을 제거했습니다.
OpenCV를 필수 종속성으로 만들었습니다.
오래된 라이브러리 종속성(예: pthread, STB)을 제거했습니다.
향상된 CUDA 감지를 위해 CMakeLists.txt를 다시 작성했습니다.
소스 외부 빌드를 활성화했습니다.
향상된 버전 번호 출력.
훈련 및 추론을 위한 성능 최적화를 구현했습니다.
가독성을 높이기 위해 코드를 정리했습니다.
향상된 API를 위해 darknet.h를 다시 작성했습니다.
ARM 기반 Jetson 장치에 대한 지원이 향상되었습니다.
V3의 Python API를 수정했습니다.
단기 목표:
printf()를 std::cout으로 교체하세요.
zed 카메라 지원을 조사합니다.
명령줄 구문 분석을 개선합니다.
중기 목표:
모든 문자 코드를 std::string으로 바꿉니다.
컴파일러 경고를 해결합니다.
사용자 정의 이미지 구조 대신 cv::Mat 사용을 향상시킵니다.
목록 기능을 std::Vector 또는 std::list로 업그레이드하세요.
1채널 회색조 이미지를 지원합니다.
N 채널 이미지에 대한 지원을 추가합니다(N > 3).
지속적인 코드 정리.
장기 목표:
다양한 GPU 전반의 CUDA/CUDNN 문제를 해결합니다.
효율성 향상을 위해 CUDA+cuDNN 코드를 다시 작성하세요.
NVIDIA GPU가 아닌 GPU에 대한 지원을 살펴보세요.
회전된 경계 상자 및 "각도" 지원을 구현합니다.
키포인트, 뼈대, 히트맵을 추가하세요.
세분화 기능을 소개합니다.