mirror of
https://github.com/LdDl/go-darknet.git
synced 2025-09-26 19:51:27 +08:00
makefile and minor
This commit is contained in:
55
Makefile
Normal file
55
Makefile
Normal file
@@ -0,0 +1,55 @@
|
||||
.ONESHELL:
|
||||
.PHONY: download build clean
|
||||
|
||||
# Latest battletested AlexeyAB version of Darknet commit
|
||||
LATEST_COMMIT?=d65909fbea471d06e52a2e4a41132380dc2edaa6
|
||||
|
||||
# Temporary folder for building Darknet
|
||||
TMP_DIR?=/tmp/
|
||||
|
||||
# Download AlexeyAB version of Darknet
|
||||
download:
|
||||
rm -rf $(TMP_DIR)install_darknet
|
||||
mkdir $(TMP_DIR)install_darknet
|
||||
git clone https://github.com/AlexeyAB/darknet.git $(TMP_DIR)install_darknet
|
||||
cd $(TMP_DIR)install_darknet
|
||||
git checkout $(LATEST_COMMIT)
|
||||
cd -
|
||||
|
||||
# Build AlexeyAB version of Darknet for usage with CPU only.
|
||||
build:
|
||||
cd $(TMP_DIR)install_darknet
|
||||
sed -i -e 's/GPU=1/GPU=0/g' Makefile
|
||||
sed -i -e 's/CUDNN=1/CUDNN=0/g' Makefile
|
||||
sed -i -e 's/LIBSO=0/LIBSO=1/g' Makefile
|
||||
$(MAKE) -j $(shell nproc --all)
|
||||
$(MAKE) preinstall
|
||||
cd -
|
||||
|
||||
# Build AlexeyAB version of Darknet for usage with both CPU and GPU (CUDA by NVIDIA).
|
||||
build_gpu:
|
||||
cd $(TMP_DIR)install_darknet
|
||||
sed -i -e 's/GPU=0/GPU=1/g' Makefile
|
||||
sed -i -e 's/CUDNN=0/CUDNN=1/g' Makefile
|
||||
sed -i -e 's/LIBSO=0/LIBSO=1/g' Makefile
|
||||
$(MAKE) -j $(shell nproc --all)
|
||||
$(MAKE) preinstall
|
||||
cd -
|
||||
|
||||
# Install system wide.
|
||||
sudo_install:
|
||||
cd $(TMP_DIR)install_darknet
|
||||
sudo cp libdarknet.so /usr/lib/libdarknet.so
|
||||
sudo cp include/darknet.h /usr/include/darknet.h
|
||||
sudo ldconfig
|
||||
cd -
|
||||
|
||||
# Cleanup temporary files for building process
|
||||
clean:
|
||||
rm -rf $(TMP_DIR)install_darknet
|
||||
|
||||
# Do every step for CPU-based only build.
|
||||
install: download build sudo_install clean
|
||||
|
||||
# Do every step for both CPU and GPU-based build.
|
||||
install_gpu: download build_gpu sudo_install clean
|
181
README.md
181
README.md
@@ -3,7 +3,6 @@
|
||||
[](https://goreportcard.com/report/github.com/LdDl/go-darknet)
|
||||
[](https://github.com/LdDl/go-darknet/releases)
|
||||
|
||||
|
||||
# go-darknet: Go bindings for Darknet (Yolo V4, Yolo V3)
|
||||
### go-darknet is a Go package, which uses Cgo to enable Go applications to use YOLO V4/V3 in [Darknet].
|
||||
|
||||
@@ -23,29 +22,20 @@
|
||||
|
||||
## Requirements
|
||||
|
||||
For proper codebase please use fork of [darknet](https://github.com/AlexeyAB/darknet). Latest commit I've tested [here](https://github.com/AlexeyAB/darknet/commit/d65909fbea471d06e52a2e4a41132380dc2edaa6)
|
||||
You need to install fork of [darknet](https://github.com/AlexeyAB/darknet). Latest commit I've tested is [here](https://github.com/AlexeyAB/darknet/commit/d65909fbea471d06e52a2e4a41132380dc2edaa6)
|
||||
|
||||
In order to use go-darknet, `libdarknet.so` should be available in one of
|
||||
the following locations:
|
||||
Use provided [Makefile](Makefile).
|
||||
|
||||
* /usr/lib
|
||||
* /usr/local/lib
|
||||
* For CPU-based instalattion:
|
||||
```shell
|
||||
make install
|
||||
```
|
||||
* For both CPU and GPU-based instalattion:
|
||||
```shell
|
||||
make install_gpu
|
||||
```
|
||||
Note: If you want to have GPU-acceleration before running command above install [CUDA](https://developer.nvidia.com/cuda-downloads) and [cuDNN](https://developer.nvidia.com/cudnn) (Latest CUDA version I've tested is [10.2](https://developer.nvidia.com/cuda-10.2-download-archive) and cuDNN is [7.6.5](https://developer.nvidia.com/rdp/cudnn-archive#a-collapse765-102))
|
||||
|
||||
Also, [darknet.h] should be available in one of the following locations:
|
||||
|
||||
* /usr/include
|
||||
* /usr/local/include
|
||||
|
||||
To achieve it, after Darknet compilation (via make) execute following command:
|
||||
```shell
|
||||
# Copy *.so to /usr/lib + /usr/include (or /usr/local/lib + /usr/local/include)
|
||||
sudo cp libdarknet.so /usr/lib/libdarknet.so && sudo cp include/darknet.h /usr/include/darknet.h
|
||||
# sudo cp libdarknet.so /usr/local/lib/libdarknet.so && sudo cp include/darknet.h /usr/local/include/darknet.h
|
||||
```
|
||||
Note: do not forget to set LIBSO=1 in Makefile before executing 'make':
|
||||
```Makefile
|
||||
LIBSO=1
|
||||
```
|
||||
## Installation
|
||||
|
||||
```shell
|
||||
@@ -58,87 +48,88 @@ Example Go program is provided in the [example] directory. Please refer to the c
|
||||
|
||||
Building and running program:
|
||||
|
||||
Navigate to [example] folder
|
||||
```shell
|
||||
cd $GOPATH/github.com/LdDl/go-darknet/example
|
||||
```
|
||||
* Navigate to [example] folder
|
||||
```shell
|
||||
cd $GOPATH/github.com/LdDl/go-darknet/example
|
||||
```
|
||||
|
||||
Download dataset (sample of image, coco.names, yolov4.cfg (or v3), yolov4.weights(or v3)).
|
||||
```shell
|
||||
#for yolo v4
|
||||
./download_data.sh
|
||||
#for yolo v3
|
||||
./download_data_v3.sh
|
||||
```
|
||||
Note: you don't need *coco.data* file anymore, because sh-script above does insert *coco.names* into 'names' field in *yolov4.cfg* file (so AlexeyAB's fork can deal with it properly)
|
||||
So last rows in yolov4.cfg file will look like:
|
||||
```bash
|
||||
......
|
||||
[yolo]
|
||||
.....
|
||||
iou_loss=ciou
|
||||
nms_kind=greedynms
|
||||
beta_nms=0.6
|
||||
* Download dataset (sample of image, coco.names, yolov4.cfg (or v3), yolov4.weights(or v3)).
|
||||
```shell
|
||||
#for yolo v4
|
||||
./download_data.sh
|
||||
#for yolo v3
|
||||
./download_data_v3.sh
|
||||
```
|
||||
* Note: you don't need *coco.data* file anymore, because sh-script above does insert *coco.names* into 'names' field in *yolov4.cfg* file (so AlexeyAB's fork can deal with it properly)
|
||||
So last rows in yolov4.cfg file will look like:
|
||||
```bash
|
||||
......
|
||||
[yolo]
|
||||
.....
|
||||
iou_loss=ciou
|
||||
nms_kind=greedynms
|
||||
beta_nms=0.6
|
||||
|
||||
names = coco.names # this is path to coco.names file
|
||||
```
|
||||
Also do not forget change batch and subdivisions sizes from:
|
||||
```shell
|
||||
batch=64
|
||||
subdivisions=8
|
||||
```
|
||||
to
|
||||
```shell
|
||||
batch=1
|
||||
subdivisions=1
|
||||
```
|
||||
It will reduce amount of VRAM used for detector test.
|
||||
names = coco.names # this is path to coco.names file
|
||||
```
|
||||
|
||||
* Also do not forget change batch and subdivisions sizes from:
|
||||
```shell
|
||||
batch=64
|
||||
subdivisions=8
|
||||
```
|
||||
to
|
||||
```shell
|
||||
batch=1
|
||||
subdivisions=1
|
||||
```
|
||||
It will reduce amount of VRAM used for detector test.
|
||||
|
||||
|
||||
Build and run program
|
||||
Yolo V4:
|
||||
```shell
|
||||
go build main.go && ./main --configFile=yolov4.cfg --weightsFile=yolov4.weights --imageFile=sample.jpg
|
||||
```
|
||||
* Build and run program
|
||||
Yolo V4:
|
||||
```shell
|
||||
go build main.go && ./main --configFile=yolov4.cfg --weightsFile=yolov4.weights --imageFile=sample.jpg
|
||||
```
|
||||
|
||||
Output should be something like this:
|
||||
```shell
|
||||
traffic light (9): 73.5039% | start point: (238,73) | end point: (251, 106)
|
||||
truck (7): 96.6401% | start point: (95,79) | end point: (233, 287)
|
||||
truck (7): 96.4774% | start point: (662,158) | end point: (800, 321)
|
||||
truck (7): 96.1841% | start point: (0,77) | end point: (86, 333)
|
||||
truck (7): 46.8695% | start point: (434,173) | end point: (559, 216)
|
||||
car (2): 99.7370% | start point: (512,188) | end point: (741, 329)
|
||||
car (2): 99.2533% | start point: (260,191) | end point: (422, 322)
|
||||
car (2): 99.0333% | start point: (425,201) | end point: (547, 309)
|
||||
car (2): 83.3919% | start point: (386,210) | end point: (437, 287)
|
||||
car (2): 75.8621% | start point: (73,199) | end point: (102, 274)
|
||||
car (2): 39.1925% | start point: (386,206) | end point: (442, 240)
|
||||
bicycle (1): 76.3121% | start point: (189,298) | end point: (253, 402)
|
||||
person (0): 97.7213% | start point: (141,129) | end point: (283, 362)
|
||||
```
|
||||
Output should be something like this:
|
||||
```shell
|
||||
traffic light (9): 73.5039% | start point: (238,73) | end point: (251, 106)
|
||||
truck (7): 96.6401% | start point: (95,79) | end point: (233, 287)
|
||||
truck (7): 96.4774% | start point: (662,158) | end point: (800, 321)
|
||||
truck (7): 96.1841% | start point: (0,77) | end point: (86, 333)
|
||||
truck (7): 46.8695% | start point: (434,173) | end point: (559, 216)
|
||||
car (2): 99.7370% | start point: (512,188) | end point: (741, 329)
|
||||
car (2): 99.2533% | start point: (260,191) | end point: (422, 322)
|
||||
car (2): 99.0333% | start point: (425,201) | end point: (547, 309)
|
||||
car (2): 83.3919% | start point: (386,210) | end point: (437, 287)
|
||||
car (2): 75.8621% | start point: (73,199) | end point: (102, 274)
|
||||
car (2): 39.1925% | start point: (386,206) | end point: (442, 240)
|
||||
bicycle (1): 76.3121% | start point: (189,298) | end point: (253, 402)
|
||||
person (0): 97.7213% | start point: (141,129) | end point: (283, 362)
|
||||
```
|
||||
|
||||
Yolo V3:
|
||||
```
|
||||
go build main.go && ./main --configFile=yolov3.cfg --weightsFile=yolov3.weights --imageFile=sample.jpg
|
||||
```
|
||||
Yolo V3:
|
||||
```
|
||||
go build main.go && ./main --configFile=yolov3.cfg --weightsFile=yolov3.weights --imageFile=sample.jpg
|
||||
```
|
||||
|
||||
Output should be something like this:
|
||||
```shell
|
||||
truck (7): 49.5197% | start point: (0,136) | end point: (85, 311)
|
||||
car (2): 36.3747% | start point: (95,152) | end point: (186, 283)
|
||||
truck (7): 48.4384% | start point: (95,152) | end point: (186, 283)
|
||||
truck (7): 45.6590% | start point: (694,178) | end point: (798, 310)
|
||||
car (2): 76.8379% | start point: (1,145) | end point: (84, 324)
|
||||
truck (7): 25.5731% | start point: (107,89) | end point: (215, 263)
|
||||
car (2): 99.8783% | start point: (511,185) | end point: (748, 328)
|
||||
car (2): 99.8194% | start point: (261,189) | end point: (427, 322)
|
||||
car (2): 99.6408% | start point: (426,197) | end point: (539, 311)
|
||||
car (2): 74.5610% | start point: (692,186) | end point: (796, 316)
|
||||
car (2): 72.8053% | start point: (388,206) | end point: (437, 276)
|
||||
bicycle (1): 72.2932% | start point: (178,270) | end point: (268, 406)
|
||||
person (0): 97.3026% | start point: (143,135) | end point: (268, 343)
|
||||
```
|
||||
Output should be something like this:
|
||||
```shell
|
||||
truck (7): 49.5197% | start point: (0,136) | end point: (85, 311)
|
||||
car (2): 36.3747% | start point: (95,152) | end point: (186, 283)
|
||||
truck (7): 48.4384% | start point: (95,152) | end point: (186, 283)
|
||||
truck (7): 45.6590% | start point: (694,178) | end point: (798, 310)
|
||||
car (2): 76.8379% | start point: (1,145) | end point: (84, 324)
|
||||
truck (7): 25.5731% | start point: (107,89) | end point: (215, 263)
|
||||
car (2): 99.8783% | start point: (511,185) | end point: (748, 328)
|
||||
car (2): 99.8194% | start point: (261,189) | end point: (427, 322)
|
||||
car (2): 99.6408% | start point: (426,197) | end point: (539, 311)
|
||||
car (2): 74.5610% | start point: (692,186) | end point: (796, 316)
|
||||
car (2): 72.8053% | start point: (388,206) | end point: (437, 276)
|
||||
bicycle (1): 72.2932% | start point: (178,270) | end point: (268, 406)
|
||||
person (0): 97.3026% | start point: (143,135) | end point: (268, 343)
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
|
Reference in New Issue
Block a user