얼굴 표정을 위한 종단 간 시스템 재학습을 위한
부록 1:
다크넷 딥러닝 프레임워크 소스 코드 분석: 프레임워크 원칙과 구현 문법 분석을 다루는 상세한 중국어 해설
https://github.com/hgpvision/darknet
다크넷은 C와 CUDA 전적으로 기반을 둔 비교적 가벼운 오픈 소스 딥러닝 프레임워크로, 주요 특징은 설치가 쉽고, 의존성이 없으며(OpenCV 사용 가능), 매우 휴대성이 뛰어나고 CPU와 GPU 컴퓨팅 방식을 모두 지원합니다.
TensorFlow와 비교하면 다크넷은 그렇게 강력하지 않지만, 이것이 다크넷의 장점이기도 합니다:
- 다크넷은 완전히 C 언어로 구현되어 있으며, 의존성 없이 운영됩니다. 물론 OpenCV를 사용할 수도 있지만, 이미지 표시에만 사용해 더 나은 시각화를 위해서입니다;
- 다크넷은 CPU를 지원하는데(GPU가 없어도 상관없습니다), GPU(CUDA/cuDNN, 물론 GPU를 사용하는 것이 더 낫습니다);
- 이는 비교적 가볍고 TensorFlow처럼 강력한 API가 없기 때문에, 기저를 연구하는 데 적합하고 바닥에서 더 편리하게 개선하고 확장할 수 있는 또 다른 유연성을 가지고 있다고 느낍니다.
- 다크넷의 구현과 카페의 구현 사이에는 유사점이 있으며, 저는 다크넷에 익숙하고 카페를 시작하는 데 도움이 된다고 믿습니다.
부록 2:
저자: 지호 사용자 링크:https://www.zhihu.com/question/51747665/answer/145607615 출처: 지후 저작권은 저자에게 있습니다. 상업용 재인쇄물은 저자에게 연락하여 허가를 받아야 하며, 비상업적 재인쇄물은 출처를 명시해 주시기 바랍니다.
다크넷에서 가장 중요한 세 가지 구조체 정의는 network_state, 네트워크, 계층이며; 새로운 network_state 네트워크가 통합되었습니다.
코드는 GPU 부분을 먼저 무시할 수 있으며, 다양한 네트워크 계층은 함수 포인터를 통해 이 유형의 실행 규칙을 정의합니다. 예를 들어, 연결 계층에는 forward_connected_layer backward_connected_layer update_connected_layer gru 층 등 세 가지 방법이 있습니다;
원자 연산은 blas.c와 gemm.c에만 있고, 네트워크 연산은 network.c에 있으며, 가장 중요한 것은 train_network_datum, train_networks, train_network_batch, network_predict이다;
train_network_datum는 입력 데이터, 즉 float *x와 float *y 쌍에 사용되는 float_pair입니다;
train_networks network_kernel.cu에서 동시 스레딩 모드로 학습되며, 매개변수는 데이터입니다;
한 가지, 다크넷은 CPU 모드에서 단일 스레드이고, 멀티 GPU 그래픽 모드에서는 멀티카드 실행을 지원train_networks 하며, 이는 분산 멀티호스트 다크넷 운영을 혁신하는 입문이기도 합니다. 여기서 학습된 가중치 데이터가 병합되고 확장되는 모습을 볼 수 있습니다.
train_network_datum {계층별 순방향 네트워크 } forward_network backward_network {계층별 역방향 네트워크 }를 실행하고, 만족되는 횟수(*순 본 %분할) 내의 update_network,,, 속도, 운동량, 감쇠를 실행한다;
사용자 정의 네트워크 프로필 처리를 위해 parse_network_cfg에서 학습 결과가 읽히load_weights
그게 핵심입니다.
특별한 요구가 필요한 데이터 소스를 다루려면 data.c를 참고해서 시작해야 합니다.
CFG 프로필의 경우, 초점 조정(물론 모든 매개변수가 중요하며 조정이 필요할 수 있음)과 훈련 중 초점의 전역 매개변수인 감쇠 운동량 learning_rate 이 세 가지는 수렴 속도와 관련이 있습니다. policy는 가중치 정책이고, inputs batch(및 관련 세분화) ouputs는 데이터 처리량 차원과 관련이 있으며, 최신 버전에서는 ouput에 대한 보정이 있는 것으로 보입니다.
|