기계 학습과 컴퓨터 시각 (darknet 컴파일)
4548 단어 기계 학습과 컴퓨터 시각
한때 나는 코드를 읽는 것을 매우 좋아했지만, 코드를 컴파일하는 것에 대해 그리 흥미가 없었다.이것은 사실 본말이 전도된 방법이다.진정으로 언어나 소스 소프트웨어를 배우려면 반드시 실제 조작, 실제 번역, 실제 디버깅을 해야만 수확을 얻을 수 있다.수십 줄, 수백 줄의 코드를 보았지만 컴파일하지 않고 gdb 디버깅을 하지 않아도 얻은 지식은 항상 한계가 있다.그래서 여기서도 코드를 읽는 것을 좋아하지만 debug를 좋아하지 않는 학생들은 자신의 습관을 약간 조절할 수 있다.
다른 깊이 있는 학습 프레임워크에 비해darknet은 비교적 적다.그러나darknet의 구조가 비교적 뚜렷하고 제3자 구조에 의존하지 않기 때문에 여러 개의 os에서 번역에 성공할 수 있다.다음은 컴파일 작업을 시작합니다.
1. 코드 다운로드
git clone https://github.com/pjreddie/darknet.git
2, 컴파일
cd darknet
make
3. 현재 지원되는 플랫폼
제가 ubuntu와mac에서 다 컴파일했어요.
다만 ubuntu 위에서 컴파일을 성공적으로 하려면 Makefile을 수정해야 합니다
-LDFLAGS= -lm -pthread
+LDFLAGS= -lm -lpthread
4, 다른 cpu 컴파일
4.1arm컴파일러로 컴파일
a, 현재 ubuntu에arm이 포함된 gcc, g++ 컴파일러를 확보하고 없으면 상관없습니다.
shell> sudo apt-get install gcc-arm-linux-gnueabi
shell> sudo apt-get install g++-arm-linux-gnueabi
b, makefile 수정
CC=arm-linux-gnueabi-gcc
CPP=arm-linux-gnueabi-g++
c, 남은 일은 바로 make하면 된다
4.2aarch64 컴파일러로 컴파일
a, 현재 ubuntu에aarch64의 gcc, g++ 컴파일러가 있는지 확인하십시오. 없으면 상관없습니다
shell> sudo apt-get install gcc-aarch64-linux-gnu
shell> sudo apt-get install g++-aarch64-linux-gnu
b, makefile 수정
CC=aarch64-linux-gnu-gcc
CPP=aarch64-linux-gnu-g++
c, 뒤에 똑같아요. 그냥 make하면 돼요.
5, 기타 컴파일 사항
GPU=0
CUDNN=0
OPENCV=0
OPENMP=0
DEBUG=0
정상적인 컴파일 이외에darknet은 5개의 기본 옵션을 지원합니다.첫 번째, 두 번째는 모두 GPU와 관련이 있기 때문에 자신의 기계에 nvidia 독립 그래픽 카드가 있으면 사용할 수 있는지 확인할 수 있다.세 번째는 오픈cv와 관련이 있습니다. 열면 로컬에 오픈cv 라이브러리가 필요합니다.예를 들어, sudo apt-get install libopencv-dev.네 번째는 가속 옵션입니다. 이전에 x86에서 사용했는데arm에 효과가 있는지 모르겠지만 컴파일하는 데 오류가 없습니다.다섯 번째는 일반적인 옵션입니다. 컴파일할 때 디버깅 정보를 추가할 수 있습니다.
6. 컴파일된 효과
컴파일에 성공하면, 보통 루트 디렉터리에 세 개의 파일을 생성합니다. 각각libdarknet입니다.a,libdarknet.so와darknet 실행 가능한 파일입니다.
7. 코드 입구점
shell> grep "main" * -R -w
examples/darknet.c:int main(int argc, char **argv)
8、darknet 사용
shell>$ ./darknet
usage: ./darknet
9. 모델을 다운로드하고 실행
shell>$ wget https://pjreddie.com/media/files/tiny.weights
shell>$ ./darknet classify cfg/tiny.cfg tiny.weights data/dog.jpg
layer filters size input output
0 conv 16 3 x 3 / 1 224 x 224 x 3 -> 224 x 224 x 16 0.043 BFLOPs
1 max 2 x 2 / 2 224 x 224 x 16 -> 112 x 112 x 16
2 conv 32 3 x 3 / 1 112 x 112 x 16 -> 112 x 112 x 32 0.116 BFLOPs
3 max 2 x 2 / 2 112 x 112 x 32 -> 56 x 56 x 32
4 conv 16 1 x 1 / 1 56 x 56 x 32 -> 56 x 56 x 16 0.003 BFLOPs
5 conv 128 3 x 3 / 1 56 x 56 x 16 -> 56 x 56 x 128 0.116 BFLOPs
6 conv 16 1 x 1 / 1 56 x 56 x 128 -> 56 x 56 x 16 0.013 BFLOPs
7 conv 128 3 x 3 / 1 56 x 56 x 16 -> 56 x 56 x 128 0.116 BFLOPs
8 max 2 x 2 / 2 56 x 56 x 128 -> 28 x 28 x 128
9 conv 32 1 x 1 / 1 28 x 28 x 128 -> 28 x 28 x 32 0.006 BFLOPs
10 conv 256 3 x 3 / 1 28 x 28 x 32 -> 28 x 28 x 256 0.116 BFLOPs
11 conv 32 1 x 1 / 1 28 x 28 x 256 -> 28 x 28 x 32 0.013 BFLOPs
12 conv 256 3 x 3 / 1 28 x 28 x 32 -> 28 x 28 x 256 0.116 BFLOPs
13 max 2 x 2 / 2 28 x 28 x 256 -> 14 x 14 x 256
14 conv 64 1 x 1 / 1 14 x 14 x 256 -> 14 x 14 x 64 0.006 BFLOPs
15 conv 512 3 x 3 / 1 14 x 14 x 64 -> 14 x 14 x 512 0.116 BFLOPs
16 conv 64 1 x 1 / 1 14 x 14 x 512 -> 14 x 14 x 64 0.013 BFLOPs
17 conv 512 3 x 3 / 1 14 x 14 x 64 -> 14 x 14 x 512 0.116 BFLOPs
18 conv 128 1 x 1 / 1 14 x 14 x 512 -> 14 x 14 x 128 0.026 BFLOPs
19 conv 1000 1 x 1 / 1 14 x 14 x 128 -> 14 x 14 x1000 0.050 BFLOPs
20 avg 14 x 14 x1000 -> 1000
21 softmax 1000
Loading weights from tiny.weights...Done!
data/dog.jpg: Predicted in 0.181403 seconds.
14.51%: malamute
6.09%: Newfoundland
5.59%: dogsled
4.55%: standard schnauzer
4.05%: Eskimo dog