스마트폰으로 심층 학습 훈련용 이미지 라벨 만들기 [소개]

11262 단어 DeepLearningAndroid

DeepLearning용 레이블 AndroidApp


후배가 만든 스마트폰 앱 소개다.
오리지널 기사는 여기 있습니다. (Qiita)
응용 프로그램의 다운로드 주소는 여기 있습니다. (Google Play Store)

저자의 말에 의하면
  • 드디어 스마트폰으로 주석 파일 생성!
  • 스마트폰으로 그 매운 라벨을 풀면서 작업!
  • 직관적인 터치 조작!
  • 이런 일.아무래도 편할 것 같은데.

    활기찬 장면


    실제로 DeepLearning을 사용하려면 많은 교육 데이터가 필요합니다.
    만약에 이미 어떤 대규모 데이터 집합에 포함된 유형이라면 간단하게 배울 수 있지만 존재하지 않는 유형에 대해서는 반드시 스스로 데이터 집합을 준비해야 한다.
    그러나 데이터 집합은 일반적으로 대량의 데이터와 정답 라벨을 필요로 하기 때문에 준비하는 것이 큰 부담이 된다.
    이번에 소개된 것은 일반 물체 식별 임무에 사용할 데이터 집합을 스스로 준비할 때 매우 효과적인 스마트폰 앱이다.
    작업과 관련된 대량의 이미지를 수집하는 것은 좋지만, 수집만 했을 뿐 정확한 라벨이 없기 때문에 수동으로 라벨을 추가해야 하는 작업 부담을 크게 줄일 수 있다.
    이미지를 스마트폰으로 전송하고 물체를 만지는 위치로만 탭을 만들 수 있다.

    사용 방법


    식별하고 싶은 물체의 이미지를 준비했습니다.


    학습에 사용할 대량의 그림을 준비하다.


    스마트폰 포맷 SD 카드에 이미지 전송(Micro SD 등)



    컴퓨터에서 스마트폰으로 이미지를 전송하다.
    SD카드를 컴퓨터에 연결하여 Android/data/com.tomoya.yololabelingtool/files/images 에서 준비한 이미지를 전송합니다.
    전송이 완료되면 컴퓨터에서 떼어내 스마트폰에 설치한다.
  • 현재 SD 카드를 통해서만 전송이 지원됩니다.
  • 스마트폰으로 SD카드를 포맷하십시오.
  • 스마트폰 앱에서 데이터를 읽기 위해서는 안드로이드의 파일 설정이 필요하다.평소 스마트폰에서 사용하던 SD카드라면 포맷된 것 같습니다.
  • 디렉토리가 없으면 디렉토리를 만듭니다.
  • 핸드폰으로 앱을 켜고 터치만 하다


    이미지를 전송하는 SD카드를 스마트폰에 설치한 후 앱을 시작합니다.
    이미지 파일을 자동으로 읽습니다.
    초기 화면.복잡한 기능이 없다.
    식별하고 싶은 모든 물체에 클래스 이름을 등록해야 합니다.
    처음 필요한 작업만 수행할 수 있습니다.
    왼쪽 위 모서리의 기어 아이콘을 추가하십시오.

    사각형 선택은 다음과 같습니다.
    이미지를 가져온 상태에서 표시되는 검은색 십자 커서를 선택한 객체의 왼쪽 위 모서리에 맞춥니다.

    닫은 다음 왼쪽 아래 모서리의 크로스를 누른 다음 오른쪽 아래로 정렬합니다.


    출력된 데이터 형식


    데이터 출력 Android/data/com.tomoya.yololabelingtool/files/texts/*.
    응용 프로그램 축소판 그림의 설명 삽화는 이해하기 쉽다.

    YOLO 직접 사용할 수 있는 형식입니다.

    만든 태그의 형식을 바꾸고 싶어요.


    현재 프로그램에서 출력 형식을 설정하고 변경할 수 없습니다.
    형식을 바꾸고 싶으면 라벨 파일을 컴퓨터로 전송하여 가공하세요.
    출력된 라벨은 경계 상자의 중심과 크기가 각각 전체 1의 비율로 처리하기 어려우므로 변경하고자 하는 경우 아래 코드로 변환할 수 있습니다.
    변환 후 경계 상자의 중심과 크기는 픽셀 위치(정수)입니다.
  • 셸을 사용할 수 있는 환경이면
  • $ cat label
    0 0.15487 0.554 0.5487 0.3684
    1 0.245 0.814 0.4574 0.15144
    2 0.488 0.254 0.7841 0.1584
    4 0.154 0.455521 0.48454 0.545
    $ cat label | awk -v width="320" -v height="240" '{print $1 " " int($2*width) " " int($3*height) " " int($4*width) " " int($5*height)}'
    0 49 132 175 88
    1 78 195 146 36
    2 156 60 250 38
    4 49 109 155 130
    
  • Python을 사용할 수 있는 경우
  • width, height = 320, 240
    f = open('label', 'r')
    for line in f.readlines():
        d = [ float(x) for x in line.split() ]
        print("{0} {1} {2} {3} {4}".format(int(d[0]), int(d[1]*width), int(d[2]*height), int(d[3]*width), int(d[4]*height))
    
    다음 형식을 일반적인 경계 상자의 왼쪽 위와 오른쪽 아래를 기록하는 형식으로 변환합니다.SSD는 확실히 이 형식이죠.
  • 셸을 사용할 수 있는 환경이면
  • $ cat label
    0 0.15487 0.554 0.5487 0.3684
    1 0.245 0.814 0.4574 0.15144
    2 0.488 0.254 0.7841 0.1584
    4 0.154 0.455521 0.48454 0.545
    $ cat label | awk -v width="320" -v height="240" '{print $1 " " int($2*width-$4*width/2) " " int($3*height-$5*height/2) " " int($2*width+$4*width/2) " " int($3*height+$5*height/2)}'
    0 -38 88 137 177
    1 5 177 151 213
    2 30 41 281 79
    4 -28 43 126 174
    
  • Python을 사용할 수 있는 경우
  • width, height = 320, 240
    f = open('label', 'r')
    for line in f.readlines():
        d = [ float(x) for x in line.split() ]
        print("{0} {1} {2} {3} {4}".format(int(d[0]), int(d[1]*width-d[3]*width/2), int(d[2]*height-d[4]*height/2), int(d[1]*width+d[3]*width/2), int(d[2]*height+d[4]*height/2))
    

    마지막


    이렇게 하면 학습 데이터에 대한 표시에 진전이 있을 것이다!
    텔레비전 광고 시간, 전차 안에서 이동하는 시간, 여가 시간을 잘 활용하여 경쟁 업체와 격차를 좁혀라!!

    좋은 웹페이지 즐겨찾기