레이블이 Cuda인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Cuda인 게시물을 표시합니다. 모든 게시물 표시

2016년 8월 5일 금요일

darknet train time image resize speed issue

 darknet yolo train을 할때, image size나 net 구조, gpu, cpu 사양에 따라 다르겠지만, 내 환경에서는 아래처럼 gpu 가 idle 되는 시간이 많이 발생 했다.

profiling 을 해보니 image를 random 하게 resize 하는 부분에서 cpu 처리가 오래 걸리는 것이 었다.  

resize 부분을 opencv +ipp +gpu 로 바꾸고 나서 아래처럼 개선 되었다.

내 환경에서는 4배정도 빨리 train되고 있다.

2016년 1월 19일 화요일

cuda7.0 visual studio 2015 opencv3.1

 Opencv 3.1 을 cuda 포함으로, vs2015로 컴파일 할때 아래 와 같은 문제가 생긴다.
아직 모두 test해본것은 아니지만 vs2015로 cuda7.0 포함하여 컴파일 할때만 문제가 생겼다.



테스트 해 본것은 두 종류..
1. cuda 를 빼고 vs2015로 할 경우 가능.
2. cuda 6.0, 6.5 포함 vs2010으로 할 경우 가능.

2014년 12월 5일 금요일

Opencv의 Machine Learning, Cuda, OpenCL 사용 Eye Tracking

 OpenCV를 이용해서 간단한 Eye Tracking을 만들어 보았다.



 Training Data는 Opencv 2.4.9 설치 할때 있는 Data를 그대로 써보았는데, 제법 잘 Train 되어 있었다. Cuda와 Opencl은 직접 코딩한거는 아니고, Opencv에서 제공하는 함수를 썻는데, 직접 최적화 한거랑 성능 비교는 나중에 해봐야겠다.

 아래 Code는 OpenCV의 OpenCL(Ocl클래스)를 사용한것이다.

[-] Collapse
UINT CSecretDlg::EyeDetectOcl(LPVOID lParam)
{
    CSecretDlg *pDlg = (CSecretDlg*)lParam;
    CGrab * pGrab = CGrab::GetInstance(1600,1200);
    IplImage* pImage = NULL;
    Mat matImg;


    ocl::OclCascadeClassifier eye_classifier;
    eye_classifier.load("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_eye.xml");
    while(pDlg->bContinuosGrab)
    {
        pGrab->GrabImage(pImage);
        if(pImage==NULL)
            continue;
        matImg = cvarrToMat(pImage);
        oclMat frame(matImg);
        oclMat grayframe;

        ocl::cvtColor(frame, grayframe, CV_BGR2GRAY);
        ocl::equalizeHist(grayframe,grayframe);
        // -------------------------------------------------------------
        // face detection routine
        // a vector array to store the face found
        vector<cv::Rect> eyes;
        eye_classifier.detectMultiScale(grayframe, eyes,1.2,4,CV_HAAR_FIND_BIGGEST_OBJECT|CV_HAAR_SCALE_IMAGE,Size(30,30),Size(150,150));

        // -------------------------------------------------------------
        // draw the results
        for(int i=0; i<eyes.size(); i++)
        {
            rectangle(matImg, eyes[i], cv::Scalar(0,255,0), 3, 4, 0);
        }
        CDisplayPC::GetInstance()->DisplayImage(matImg,pDlg->m_hWnd,IDC_STATIC_DISPLAY);
    }
    cvReleaseImage(&pImage);
    return 0;
}