[go: up one dir, main page]

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 도창욱(Web Technologies GDE)님이 참여해 주셨습니다.>

Firebase Predictions 베타 출시를 기쁜 마음으로 발표합니다! 이를 통해 우리는 Firebase를 사용하는 모든 개발자에게 뛰어난 성능의 Google 기계 학습 시스템을 제공할 수 있게 되었습니다. Predictions는 기계 학습 모델을 사용하여 결정되는 예측 동작을 기반으로 동적 사용자 그룹을 생성할 수 있는 제품으로, Firebase 클라우드 메시징, 원격 구성 및 기타 기술을 사용하여 이러한 사용자 그룹을 타겟팅할 수 있습니다. 예측 내용이 항상 최신 상태로 유지하도록 사용자 그룹은 매일 업데이트됩니다.

기본적으로 다음과 같이 네 가지 예측 그룹이 제공됩니다.
  • Churn은 소프트한 이탈, 즉 앞으로 7일 내에 앱 사용을 중단할 것으로 예측되는 사용자 그룹입니다.
  • Not_Churn은 앞으로 7일이 지나도 앱을 계속 사용할 것으로 예측되는 사용자 그룹입니다.
  • Spend는 앞으로 7일 내에 인앱 구매를 할 것으로 예측되는 사용자 그룹입니다.
  • Not_Spend는 앞으로 7일 내에 인앱 구매를 할 것으로는 예측되지 않는 사용자 그룹입니다.

Firebase 콘솔의 왼쪽 탐색 모음에서 Predictions를 선택하면 바로 이 네 가지 그룹이 표시됩니다.

이들 카드에서 각 경우에 따라 취할 수 있는 조치 사항을 알 수 있습니다.

Tolerance: 이 허용치 슬라이더를 통해 허용되는 오차 정도를 낮음, 보통 또는 높음으로 지정할 수 있습니다. 낮은 허용치에서는 사용자 모집단이 더 작아지지만 오차에 대한 위험도 낮아집니다. 이와 유사하게, 높은 허용치에서는 사용자 모집단이 더 커지지만 오차 위험도 높아집니다. 'churn' 경우에는 이탈할 것으로 예측되지만 실제로는 앱을 계속 사용하는 사용자를 오차의 예로 들 수 있습니다.

Target Users: 이 작업에서는 해당 사용자 그룹에 대해 Remote Config 또는 Notifications 를 선택할 수 있는 드롭다운이 제공됩니다. 이 옵션은 인앱 인센티브를 제공하기 위한 몇 가지 유용한 지침을 보여주는 링크도 제공합니다.



Remote Config를 선택하면 해당 모집단에 대해 설정하고 싶은 원격 구성 매개변수를 지정하고 그에 대한 값을 지정할 수 있는 새 화면이 표시됩니다. 예를 들어, 게임을 빌드했는데 많은 사람들이 이탈한데다 게임 플레이가 너무 어렵다는 피드백이 온다면 난이도에 대한 원격 구성 변수를 설정할 수 있을 것입니다. 그러면 이탈할 가능성이 높은 사용자라도 기본값을 낮게 설정하여 좀 더 쉽게 게임을 즐기도록 유도할 수 있습니다.

Notifications를 선택하면 Firebase 클라우드 메시징을 사용하여 전송할 메시지를 작성할 수 있는 익숙한 작성기가 표시됩니다. 더불어 타겟 잠재고객을 선택할 수 있는 일반적인 옵션 외에도, 사용자 세그먼트로서 예측된 사용자 그룹도 미리 채워지게 됩니다.



이를 통해 해당 사용자 그룹으로 알림이 전달되도록 할 수 있습니다. 예를 들어, 이탈 위험이 있는 사용자에 대해 앱을 계속 사용하도록 유도하는 알림을 보낼 수 있습니다.

자신만의 예측 생성. 기본 제공되는 예측 카드로만 제한되지 않습니다. 당연히 앱에서 설정하는 사용자설정 이벤트를 기반으로 자신만의 예측을 생성할 수도 있습니다. 이 경우, 예측을 생성할 수 있는 카드가 표시됩니다.

이 카드를 선택하면 이벤트가 발생할 시기 또는 발생하지 않을 시기에 대한 예측을 생성할 수 있습니다. 이는 해당 전환 이벤트에 참여할 가능성이 큰 사용자의 식별에 도움이 됩니다.

예를 들어, 위 사례에서는 사용자가 게임에서 레벨이 올라갈 때마다 level_up 전환 이벤트가 기록됩니다. 따라서 레벨이 올라갈 수 있는 플레이어에 대한 예측을 생성하고 그들에게 게임을 계속할 수 있도록 인센티브를 제공할 수 있습니다.

그러면 예측을 저장한 후 시간이 지남에 따라 기본 제공되는 카드와 같은 방식으로 Firebase 콘솔에서 카드에 데이터가 채워집니다.

알림과 원격 구성으로 사용자를 타겟팅하는 옵션을 포함하여 다른 카드와 같은 방법으로 이 카드를 사용할 수 있습니다.

Firebase Predictions는 베타 제품이며 우리는 계속해서 이에 대한 작업을 하고 향상해 나갈 것입니다. 궁금한 점이나 피드백이 있으면 알려주시기 바랍니다. 버그 및 제품과 관련한 제안 사항은 firebase.google.com/support로 알려주시기 바랍니다.

firebase.google.com/products/predictions/에서 Firebase Predictions에 대한 자세한 사항을 알아보거나 여기서 Google 문서를 직접 확인해 보실 수 있습니다.

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다.>

게시자: Steven Soneff, 신원 확인 제품 관리자
전화번호를 활용하는 앱을 만들 때, 사용자가 전화번호를 소유하고 있는지 인증할 필요가 있습니다. 하지만 전화 번호 인증은 여러가지 면에서 까다로올 수 있습니다. UX 관점에서 여러 로케일의 전화번호 형식을 지원해야 하고, 간편한 사용자 인증을 위해 사용자의 SMS를 확인하기 위해서 위험한 등급의 사용자 권한을 요구해야합니다.

Firebase 전화 인증과 같이 미리 구현된 전화 인증 라이브러리가 있지만, 이러한 기능을 직접 만들어야 하는  경우, Google Play Service에서 새롭게 제공하는 두 가지 API인 Phone SelectorSMS Retriever를 활용할 수 있습니다. 이를 활용해, 추가 적인 기기 권한 요청 없이 SMS를 통해 사용자 전화 번호를 확인하고 바로 인증을 진행할 수 있습니다. Flipkart와 같은 앱에서는 이 방법을 사용하여 전화번호 가입 과정 성공률을 12% 높일 수 있었습니다.

서버에서 이러한 API를 활용하기 위한 단계는 다음에서 확인할 수 있습니다.

그럼 전화번호 선택기를 제공하는 방법과 이 후 SMS Retriever API를 활용해, 서버로부터 인증 코드를 요청하는 방법을 살펴보겠습니다. 결과적으로 안드로이드 디바이스 상에서 사용자 입력 과정 없이 자동으로 인증 코드를 수신하여 파싱할 수 있습니다.

참고: 시작하기 전에 전화 번호가 있고, SMS를 수신할 수 있으며, Google Play Service 10.2.x 이상이 설치된 기기에서 아래 기능을 테스트할 수 있습니다.

Phone Selector를 사용하여 전화번호 가져오기

첫 번째 단계에서는 사용자가 앱 내에서 SMS 인증을 시작하도록 합니다. 앱에서 전화번호를 입력하라는 메시지를 사용자에게 표시합니다. 다음과 같이 Phone Selector를 사용해  이 기능을 쉽게 구현할 수 있습니다.

// Construct a request for phone numbers and show the picker
private void requestHint() {
    HintRequest hintRequest = new HintRequest.Builder()
           .setPhoneNumberIdentifierSupported(true)
           .build();

    PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
            apiClient, hintRequest);
    startIntentSenderForResult(intent.getIntentSender(),
            RESOLVE_HINT, null, 0, 0, 0);
}

HintRequest 빌더는 전화번호 식별자가 필요하다는 사실을 Play Service에 알립니다. 그 후, 사용자가 전화번호를 선택할 수 있는 Play Service 대화상자를 표시하기 위한 인텐트를 만듭니다. 이 API는 어떠한 사용 권한도 요구하지 않고, 휴대폰 또는 Google 계정에서 얻을 수 있는 번호를 사용자가 선택할 수 있도록 표시합니다.


사용자가 전화번호를 선택하면 최신 버전의 Play Service를 실행하는 기기에서 E164 형식으로 onActivityResult에서 애플리케이션에 이 전화번호가 반환됩니다. 어떤 경우에는 휴대폰에 따라 전화번호를 가져오지 못할 수도 있으므로 자격 증명이 null이 아닌지 여부를 확인해야 합니다. 전화번호가 없으면 사용자가 수동으로 입력할 수 있는 방법을 제공할 필요가 있습니다.

// Obtain the phone number from the result
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == RESOLVE_HINT) {
      if (resultCode == RESULT_OK) {
          Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
          // credential.getId(); <-- E.164 format phone number on 10.2.+ devices
      }
  }
}

이제, 사용자 전화번호를 확인했습니다. 이 방법이 유용하기는 하지만, 개발자는 해당 사용자가 이 전화번호를 소유하고 있는지 인증해야합니다. 예를 들어, 이 번호를 사용하여 다른 사용자와 메시지를 주고받거나 이 번호로 사용자 자신의 신원을 확인할 수 있는지 여부를 확인하고 싶을 것입니다.


SMS Verification API를 활용하여 전화번호 인증

전화번호 소유 여부를 확인하는 간단한 방법은 일회성 인증 코드를 포함한 SMS를 해당 번호로 보내고 앱에 입력하도록 하는 것입니다. SMS Verification API는 앱이 들어오는 SMS를 수신할 수 있는 기능을 제공합니다. 그러면 앱이 이렇게 이 SMS에서 자동으로 코드를 파싱할 수 있습니다.

앱은 다음과 같이 SmsRetrieverClient 를 구현합니다..
SmsRetrieverClient client = SmsRetriever.getClient(this /* context */);

Task<Void> task = client.startSmsRetriever();

task.addOnSuccessListener(new OnSuccessListener<Void>() {
  @Override
  public void onSuccess(Void aVoid) {
    // successfully started an SMS Retriever for one SMS message
  }
});

task.addOnFailureListener(new OnFailureListener() {
  @Override
  public void onFailure(@NonNull Exception e) {
  });
);

그 후, 작업을 시작하기만 하면 됩니다. on Success 리스너뿐만 아니라, 문제가 발생한 경우 이를 처리하기 위한 on Failure 리스너도 포함되어 있습니다. SMS Retriever를 시작한 후에는 사용자의 전화번호를 서버로 보내고 메시지를 생성하여 해당 번호로 보내기 위한 워크플로를 시작해야 합니다.

이 메시지는 특정 방식으로 구성되어야 합니다. 메시지는 SMS 메시지 크기에 맞아야 하므로, 140바이트를 초과할 수 없습니다. '<#>' 또는 두 개의 연속되고 폭이 없는 공백 문자(U + 200B)를 특정 접두사로 사용하여 시작해야 합니다. 자세한 내용은 해당 문서를 참조하세요. 아래의 설명과 같이 앱을 식별하는 11자 길이의 해시로 끝나야 합니다.

예:

<#> Use 123456 as your verification code in Example App!
FA+9qCX9VSu

일회성 인증 코드는 어떠한 문자열이든 가능하며, 단순하게 임의의 숫자를 생성해도 됩니다. 메시지는 여기에 제시된 절차에 따라 판별되는 해시로 끝나야 합니다. Google Play Service는 이 해시를 사용하여 인증 메시지에 해당하는 앱을 결정합니다. 앱 패키지 및 서명 인증서용으로 이 해시를 한 번만 생성하면 됩니다. 이 해시는 변경되지 않으며 클라이언트 앱에서 제공되지 않습니다.

그러면 서버가 기존에 구축한 SMS 인프라 또는 서비스를 사용하여 휴대폰으로 메시지를 보낼 수 있습니다. 이 메시지가 수신되면 Google Play Service가 메시지의 텍스트를 포함하는 인텐트를 브로드캐스트합니다. 코드는 다음과 같습니다.

public class MySMSBroadcastReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
    if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
      Bundle extras = intent.getExtras();
      Status status = (Status) extras.get(SmsRetriever.EXTRA_STATUS);

      switch(status.getStatusCode()) {
        case CommonStatusCodes.SUCCESS:
          String message = (String) extras.get(SmsRetriever.EXTRA_SMS_MESSAGE);
          break;
        case CommonStatusCodes.TIMEOUT:
          break;
      }
    }
  }
}

브로드캐스트 리시버의 onReceive에서 추가 항목을 얻고 그곳에서 상태를 확인합니다. 메시지가 성공적으로 수신된 경우, 추가 항목에서 메시지를 확인 할 수 있습니다. 여기에서 인증 코드를 파싱하고 서버로 다시 전송하여 전화번호 소유 여부를 확인할 수 있습니다.

자세한 내용은 전체 문서와 올해 진행된 Google I/O 세션을 확인하시기 바랍니다.

얼리 어답터의 사용 후기

이 API를 일찍 사용해 본 파트너들은 긍정적인 반응을 보이고 있습니다. 다음은 이들 파트너의 사용 후기를 일부 발췌한 내용입니다.

Twilio는 안드로이드 SMS 인증이 그 어느 때보다도 쉬워졌다는 사실을 확인하고는 이에 대한 내용을 블로그에 올렸습니다.

"전화번호를 사용해 사용자 계정을 등록하고 식별하는 안드로이드용 모바일 앱을 빌드하는 개발자라면 안드로이드용 Twilio Verification SDK를 꼭 사용해 보세요. 그러면 매끄럽고 안전하고 쉬운 가입 절차 제공 문제를 그 어느 때보다도 빠르게 해결하실 수 있을 겁니다." - Simil Thorpe, Twilio의 제품 소유자

Authy는 이러한 API가 많은 변경 사항을 수행할 필요 없이 기존의 SMS 인프라와 잘 연동된다는 사실에 만족감을 표시했습니다.

"Phone Selector와 SMS Retriever를 Authy 2FA 앱에 추가하면 애플리케이션에 필요한 높은 수준의 보안을 유지하는 동시에 사용자에게 놀라울 정도로 뛰어난 UX를 제공할 수 있습니다." - Serge Kruppa, Authy 엔지니어링 책임자

Telesign은 동일한 백엔드 프레임워크에서 UX가 향상되고 보안이 강화되며 전환율이 증가한다는 점을 확인했습니다.

"번거로운 부분이 줄어든 이러한 인증 모드를 통해 얻을 수 있는 유의미한 장점 중 하나는 고객이 사용자 가입 및 등록 과정에서 전환율이 증가하는 것을 눈으로 볼 수 있다는 점입니다.

Google Play Service는 SMS 메시지를 해당 메시지 내의 애플리케이션 해시를 기반으로 대상 애플리케이션만 액세스할 수 있도록 허용하므로, 이를 통해 보안 강화라는 이점도 얻을 수 있습니다."- Priyesh Jain(게시물 작성자)

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 정승욱(Android GDE)님이 참여해 주셨습니다.>
게시자: Lukas Bergstrom, Android 개발자 프레임워크 팀 제품 관리자

Android는 고급 휴대폰에서 비행기 좌석 시스템에 이르기까지 수십억 개의 기기에서 실행되고 있습니다. Android OS는 이처럼 광범위한 기기에서 제대로 작동하도록 리소스를 공격적으로 관리하는데, 이로 인해 때로는 견고한 앱을 빌드하기가 어렵고 복잡해질 수 있습니다. 이 작업을 좀 더 쉽게 하기 위해, 우리는 Google I/O에서 Architecture Components의 미리보기를 선보임으로써 수명 주기 관리 및 데이터 지속성과 같은 일반적인 작업을 위한 라이브러리와 함께 앱 아키텍처에 대한 지침을 제공했습니다. 이와 함께, 이러한 기본 구성 요소를 통해 더 적은 상용구 코드로 모듈식 애플리케이션을 작성할 수 있으므로 개발자가 쓸데없이 시간을 낭비하는 대신 혁신을 꾀하는 데 집중할 수 있으며, 우리는 앞으로도 이러한 기반을 기초로 앱 빌드가 계속 이루어지기를 바랍니다.

오늘 우리는 Room 및 Lifecycle Architecture Components 라이브러리가 1.0 Stable에 도달했음을 기쁜 마음으로 알려드립니다. 이러한 API는 프로덕션 앱 및 라이브러리에 바로 사용할 수 있으며 앱 아키텍처 및 로컬 저장소와 관련하여 도움을 구하는 개발자들에게 권장합니다(단, 권장 사항일 뿐이지 필수 사항은 아님). Lifecycle은 이제 지원 라이브러리에도 통합되었으므로 AppCompatActivity와 같은 표준 클래스와 함께 사용할 수 있습니다.

우리는 오늘 Stable 버전을 선언하지만 베타 구성 요소가 이미 앱에서 함께 사용되고 있으며 설치 건수가 수십억 건에 이릅니다. Zappos와 같은 주요 개발업체는 다음과 같이 Architecture Components 덕분에 중요한 문제에 더 많은 시간을 할애할 수 있었습니다.

Android Architecture Components 출시 전에는 자체적으로 ViewModel을 구현했었습니다. 로더와 종속성 주입을 사용하여 구성이 변경되는 과정에서 ViewModel을 유지했습니다. 최근에 우리는 Architecture Components ViewModel 구현으로 전환했으므로 이러한 상용구 코드를 더 이상 사용하지 않게 되었습니다. 우리는 설계, 비즈니스 로직 및 테스트에 더 많은 시간을 소비하고 상용구 코드를 작성하거나 Android 수명 주기 관련 문제를 걱정하는 데는 시간을 덜 낭비할 수 있게 되었다는 사실을 확인했습니다.

또한, Activity 수명 주기에 직접 후크되는 LiveData를 사용하기 시작했습니다. LiveData를 사용하여 네트워크 데이터를 검색하고 표시하므로 네트워크 호출 구독 관리에 대해 더 이상 염려할 필요가 없게 되었습니다.

- David Henry, Zappos의 Android 소프트웨어 엔지니어

Architecture Components는 개발자들이 뛰어난 사용 환경을 빌드하는 데 집중할 수 있도록 몇 가지 일반적인 문제를 없애주는 단순하고 유연하며 실용적인 접근 방식을 제공합니다. 이는 앱 아키텍처에 대한 지침에 따라 함께 연결되는 핵심 구성 요소를 기반으로 합니다.

Lifecycle

모든 Android 개발자는 Activity를 시작, 중지 및 제거할 때 운영체제 문제를 다루어야 합니다. 즉, 수명 주기를 거치면서 UI를 업데이트하는 데 사용되는 observable과 같은 구성 요소의 상태를 관리해야 합니다. Lifecycle을 사용하면 자체적인 수명 주기를 관리하는 수명 주기 인식 구성 요소 를 생성할 수 있으므로 누수나 비정상 종료 문제가 발생할 가능성이 줄어들게 됩니다. Lifecycle 라이브러리는 LiveData와 같은 다른 Architecture Components의 기반입니다.

LiveData

LiveData는 데이터를 유지하고 업데이트를 제공하는 수명 주기 인식 observable입니다. UI 코드는 변경 사항을 구독하고 LiveData에 해당 Lifecycle에 대한 참조를 제공합니다. LiveData는 수명 주기를 인식하므로 해당 Lifecycle이 시작되거나 재개될 때 업데이트를 제공하지만 LifecycleOwner가 제거될 때 업데이트 제공을 중지합니다. LiveData는 더욱 안전하고 성능이 좋은 반응형 UI를 간단하게 빌드할 수 있는 방법입니다.

ViewModel

ViewModel은 Activity 및 Fragment와 같은 수명 주기와 연결된 엔터티로부터 로직 및 뷰 데이터에 대한 소유권을 분리합니다. ViewModel은 연결된 Activity 또는 Fragment가 영구적으로 제거될 때까지 유지됩니다. 즉, 회전으로 인해 Fragment가 다시 생성되는 등의 이벤트가 발생해도 뷰 데이터가 유지됩니다. ViewModel은 일반적인 수명 주기 관련 문제를 해결할 뿐만 아니라 더욱 모듈화되고 테스트하기가 더욱 쉬운 UI를 빌드하는 데에도 도움이 됩니다.

Room

거의 모든 앱이 데이터를 로컬 위치에 저장할 필요가 있습니다. Android에서는 버전 1부터 플랫폼에 SQLite를 번들로 포함해 제공하고 있지만 이를 직접 사용하기란 무척 어려울 수 있습니다. Room은 더 적은 상용구 코드로 SQlite의 기능을 완벽히 활용할 수 있는 단순한 객체 매핑 계층입니다. 컴파일 시간 쿼리 검증 및 기본 제공 마이그레이션과 같은 기능을 통해 더욱 쉽게 강력한 지속성 계층을 빌드할 수 있는 동시에, LiveData와의 통합을 통해 Room은 데이터베이스가 지원되고 수명 주기가 인식되는 observable을 제공할 수 있습니다. Room은 로컬 저장소를 관리하는 데 필요한 단순성, 강력한 기능 및 견고성을 모두 아우르고 있으므로 꼭 한번 사용해 보시기를 바랍니다.

앱 아키텍처에 대한 가이드 및 기타 등등

마지막으로, 모든 개발자에게 적용되는 핵심 원리와 Architecture Components를 함께 사용하기 위한 구체적인 지침을 제공하는 앱 아키텍처에 대한 가이드를 작성했다는 점도 알려드립니다. 우리는 개발자들로부터 명확하고 일관된 지침이 중요하다는 의견을 많이 들어왔기 때문에 현재 해당하는 경우 Architecture Components를 참조하도록 개발자 문서를 업데이트하고 있습니다. 또한, Architecture Components 사이트를 통해 풍부한 동영상, 코드랩 및 샘플 앱도 제공하고 있으며 앞으로 더 많은 것들을 제공할 예정입니다.

계속 지켜봐 주세요.

첫 번째 Architecture Components 세트가 이제 Stable 버전으로 제공되지만 할 일이 더 있다는 것을 알고 있습니다. 지난 몇 달 동안 우리는 개발자 여러분의 피드백을 들어왔으며 이에 따라 기능을 개선했습니다. 또한, RecyclerView를 사용하여 대규모 데이터세트를 처리하기가 너무 어렵다는 내용의 피드백에 따라 최근에 PagedList라고 하는 새로운 Architecture Components를 알파 버전으로 출시했습니다. 이는 시작에 불과합니다. 우리는 더 많은 주요 구성 요소를 개발 중에 있으며, 향후 몇 달 내에 발표할 계획입니다.

Architecture Components와 관련하여 우리가 바라는 바는, 개발자가 휴대기기를 위한 독창적이고 새로운 환경을 제공하는 데 집중할 수 있도록 해드리는 것입니다. 마침내 프로덕션용 Stable 버전으로 이들 Architecture Components를 발표할 수 있게 되어 기쁘게 생각합니다. 우리는 그 과정에서 이처럼 유용한 피드백을 제공해 주신 커뮤니티에 감사하다는 인사를 드리고 싶으며 이 게시물의 댓글을 통해 계속해서 논의가 활발하게 이루어지기를 기대합니다. 끝으로, 이 Stable 버전 출시를 기다려 주신 개발자 여러분, 지금 바로 시작해 보시기 바랍니다.

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 김소영(Google)님이 참여해 주셨습니다.>

구글 로컬라이제이션팀 게재

구글의 아랍어 랭귀지 매니저인 크리스티나 하예크는 사랑하는 할머니가 팔순이 되셨을 때 자매들과 함께 할머니와 더욱 가까워질 수 있는 선물을 드리고 싶었습니다. 할머니가 사시는 곳은 레바논이지만, 자녀와 손주들은 세계 곳곳에 흩어져 살고 있었기 때문이죠. 이러한 지리적 거리를 조금이나마 좁히고자 크리스티나 자매는 할머니께 안드로이드 스마트폰을 선물했습니다. 할머니는 상자에서 새 스마트폰을 꺼내자마자 바로 아랍어로 사용할 수 있다는 사실에 깜짝 놀랐습니다.

마법이 일어난 것이 아닙니다. 구글 로컬라이제이션팀이 열심히 일한 덕분입니다. 30여 개국에 흩어져 있는 로컬라이제이션팀은 70개가 넘는 언어로 모든 구글 제품을 쉽고 재미있게 사용할 수 있도록 하는 일을 담당합니다. 로컬라이제이션이란 번역만을 의미하는 것이 아닙니다. 일례로 야구와 도넛의 비유가 미국에서는 잘 통할지 몰라도 다른 문화권에서는 통하지 않을 수도 있습니다. 그래서 이탈리아의 경우 축구로, 프랑스라면 크루아상으로 바꾸는 것이죠. 로컬라이제이션팀의 사명은 모든 언어와 문화에 어울리는 다양한 사용자 경험을 제공하는 것입니다. 이를 위해 유능한 번역사들과 감수자들이 그룹을 이루어 구글 제품이 전 세계 어디서든 자연스럽게 느껴지도록 로컬라이제이션 작업을 하고 있습니다.

인터넷을 사용하는 세계 인구가 점점 늘면서, 로컬라이제이션 산업도 성장을 거듭하고 있습니다. 이에 따라 훌륭한 실력을 갖춘 번역사, 감수자, 로컬라이제이션 전문가 수요도 늘고 있죠. 따라서 모두를 위한 제품을 만들고 전 세계 어디에 있든 인터넷을 사용할 수 있도록 하겠다는 구글의 사명을 달성하기 위한 노력의 일환으로, 로컬라이제이션 에센셜이라는 이름의 온라인 공개 수업(MOOC)을 진행합니다. 피터 루버스(Peter Lubbers) 구글 개발자 교육팀장은 다음과 같이 말합니다.

“언어 산업은 오늘날 세계에서 가장 빠르게 성장하는 분야 중 하나입니다. 전직 인터내셔널라이제이션 프로덕트 매니저(겸 네덜란드어 번역사)로서 이번에 ‘로컬라이제이션 에센셜’을 구글·유다시티(Udacity) 교육 과정으로 개설하게 되어 기쁩니다. 이 과정은 전 세계 누구든 지금 바로 무료로 수강할 수 있습니다. 이 강의는 다양한 직군을 망라하는 대규모 프로젝트로 개발되었으며, 구글의 수많은 로컬라이제이션 전문가들이 모여 심혈을 기울였습니다. 모두가 열과 성을 다해 참여하는 모습이 보기 좋았고, 덕분에 대단히 완성도 높은 강의를 만들 수 있었습니다.”

로컬라이제이션 에센셜’은 유다시티와 공동으로 개발한 무료 강의로 글로벌 제품을 개발하기 위해 필요한 로컬라이제이션의 기본을 모두 다룹니다. 베르트 반데르 미른(Bert Vander Meeren) 구글 로컬라이제이션 디렉터의 설명을 들어보시죠.

“오늘날 로컬라이제이션은 갈수록 더 중요해지는 분야입니다. 인터넷 사용자층이 특히 비영어권 국가에서 급속히 성장하고 있기 때문입니다. 그러나 이 분야에 대한 교육 기회는 충분하지 않습니다. 저희 팀뿐만 아니라 대규모 로컬라이제이션 인력이 필요한 모든 기업에게 바람직한 상황이 아닙니다. 그래서 저희가 앞장서서 문제를 해결해 보기로 했습니다. 다년간의 실무 경험을 갖춘 로컬라이제이션 전문가들보다 이 분야를 더 잘 아는 사람이 있을까요? 이전에도 유다시티와 협력하여 안드로이드 개발자들을 위한 교육 과정을 개발하여 제공한 적이 있기 때문에 이번 협업도 자연스럽게 결정했습니다. 이 강의는 로컬라이제이션 분야의 지식과 기술을 익히고 싶은 분이면 누구에게나 좋은 기회가 될 것입니다. 로컬라이제이션은 여전히 잘 알려져 있지 않은 분야이지만 전 세계에 서비스할 제품을 개발하기 위해 대단히 중요한 분야입니다. 학생에게도, 직장인에게도, 기업가에게도 시야를 넓힐 수 있는 좋은 기회가 될 것입니다.”

이번 기회를 통해 구글이 가진 로컬라이제이션에 대한 지식을 공유함으로써, 전 세계 사용자들이 자신의 문화에 좀 더 잘 어우러지는 제품을 사용할 수 있고 새로운 기회를 얻을 수 있기를 희망합니다.

이번 강의가 전 세계 사용자들에게 어떤 영향을 미칠지 기대됩니다.


게시자: Ryan Babbush와 Jarrod McClean, 양자 AI 팀 소속 양자 소프트웨어 엔지니어

"물리학의 큰 부분과 화학 전체의 수학적 이론에 필요한 기본 물리학 법칙은 완전히 알려져 있는데, 어려운 점은 단지 이러한 법칙을 정확히 적용하면 방정식이 너무 복잡해져 풀기 어려워진다는 점이다."

-폴 디랙, Quantum Mechanics of Many-Electron Systems(1929)

이 문구에서 물리학자인 폴 디랙(Paul Dirac)은 양자 역학이 모든 화학을 정확히 모델링하지만 관련 방정식을 정확히 시뮬레이션하면 너무 복잡해 보인다는 점을 아쉬워합니다. 리처드 파인만(Richard Feynman)도 1982년이 되어서야 양자 역학의 복잡성에 굴복하는 대신 이를 컴퓨팅 리소스로 활용할 수 있을지 모르겠다고 제안했습니다. 이런 이유로, 양자 컴퓨팅 연구를 진행하게 된 원래 동기는 양자 역학 법칙에 따라 컴퓨터를 작동하면 자연의 정확한 시뮬레이션 문제를 효율적으로 해결할 수 있으리라는 점이었습니다. 이러한 시뮬레이션을 통해 태양광 발전, 배터리, 신소재, 제약 및 초전도성과 같은 분야에서 획기적인 발전을 이룰 수 있을 것입니다. 우리는 아직 이러한 분야에서 오래 전부터 다루기 힘들었던 문제를 풀 수 있을 정도로 충분히 큰 양자 컴퓨터를 갖추고 있지는 않지만 빠른 속도로 진보가 이루어지고 있습니다. 작년에 Google은 초전도 큐비트 양자 컴퓨터를 사용하여 최초로 이루어진 분자의 양자 계산을 자세히 설명한 논문을 발표했습니다. 이러한 작업을 바탕으로, IBM의 양자 컴퓨팅 그룹은 더 큰 분자로 실험을 확장했으며, 마침내 지난달 네이처(Nature)의 표지를 장식했습니다.

오늘, 우리는 화학 및 재료 과학 분야의 문제를 기존 플랫폼에서 실행할 수 있는 양자 회로로 변환하는 데 사용할 수 있는 최초의 오픈소스 플랫폼인 OpenFermion의 출시를 발표합니다. OpenFermion은 상호 작용을 통해 물질의 속성이 생기게 하는 전자(페르미 입자) 시스템을 시뮬레이션하기 위한 라이브러리입니다. OpenFermion이 출시되기 전에는 양자 알고리즘 개발자가 가장 기초적인 양자 시뮬레이션을 수행하는 경우에도 화학을 상당히 많이 공부하고 다른 코드를 압도하는 막대한 양의 코드를 작성하여 이들 모두를 함께 적용해야 했습니다. 이 프로젝트는 Google에서 시작되었지만 취리히 연방 공과대학교, 미국 국립 로렌스 버클리 연구소, 미시간 대학교, 하버드 대학교, 옥스퍼드 대학교, 다트머스 대학교, 리게티 컴퓨팅 및 NASA의 공동 연구자가 모두 알파 릴리스에 기여했습니다. 이 릴리스에 대한 자세한 내용은 OpenFermion: The Electronic Structure Package for Quantum Computers 논문에서 확인할 수 있습니다.

OpenFermion은 화학 및 재료 시스템을 양자 컴퓨터에서 해석할 수 있는 표현으로 설명하는 물리 방정식을 생성하고 컴파일하기 위한 도구로 간주할 수 있습니다.1. 이러한 문제에 대한 가장 효과적인 양자 알고리즘은 정부, 업계 및 학계에 걸쳐 화학 연구원이 사용하고 개발한 기존의 양자 화학 패키지의 성능을 기반으로 하며 이를 확장합니다. 이에 따라 우리는 기존의 전자 구조 패키지인 Psi4PySCF와 함께 OpenFermion을 사용하기 위한 플러그인인 OpenFermion-Psi4OpenFermion-PySCF도 출시합니다.

핵심 OpenFermion 라이브러리는 커뮤니티에서 개발되고 있는 다양한 플랫폼과 호환되도록 양자 프로그래밍 프레임워크에 구속되지 않는 방식으로 설계되었습니다. 따라서 OpenFermion은 다양한 하드웨어 플랫폼을 위한 양자 어셈블리 언어 사양을 컴파일하는 외부 패키지를 지원할 수 있습니다. 우리는 이러한 결정이 양자 컴퓨터에 양자 화학을 적용하기 위한 커뮤니티 표준으로서 OpenFermion을 확립하는 데 도움이 되기를 바랍니다. OpenFermion이 다양한 양자 프로그래밍 프레임워크에 어떤 식으로 사용되는지 보려면 OpenFermion-ProjectQ 플러그인과 Forest-OpenFermion 플러그인을 살펴보시기 바랍니다. 이들 플러그인은 각각 ProjectQForest라고 알려져 있는 외부 개발 회로 시뮬레이션 및 컴파일 플랫폼에 OpenFermion을 연결해 줍니다.

다음 워크플로에서는 양자 화학자가 분자의 에너지 표면을 시뮬레이션하기 위해 OpenFermion을 활용할 수 있는 방법을 설명합니다(예: 지난 블로그 게시물에서 설명한 부류의 양자 계산 준비).
  1. 연구자가 다음을 지정하여 OpenFermion 계산을 초기화합니다.
    • 분자 핵의 좌표를 지정하는 입력 파일
    • 분자 구분에 사용해야 하는 기저집합(예: cc-pVTZ)
    • 시스템의 전하 및 스핀 다중도(알려진 경우)
  1. 연구자가 OpenFermion-Psi4 플러그인 또는 OpenFermion-PySCF 플러그인을 사용하여 양자 계산을 최적으로 준비하는 데 사용되는 확장 가능한 기존의 계산법을 수행합니다. 이를테면, 기존의 하트리-폭(Hartree-Fock) 계산법을 수행하여 양자 시뮬레이션에 적합한 초기 상태를 선택할 수 있습니다.
  2. 그런 다음, 양자 컴퓨터에서 연구하기에 가장 흥미를 끄는 전자(활성 공간이라고 함)를 지정하고 OpenFermion에서 사용할 수 있는 프로시저 중 하나(예: 브라비-키타예프(Bravyi-Kitaev) 변환)를 사용하여 이러한 전자에 대한 방정식을 양자 비트에 적합한 표현으로 매핑할 것을 OpenFermion에 요청합니다.
  3. 연구자가 관심을 둔 속성에 대해 해결할 양자 알고리즘을 선택하고 OpenFermion-ProjectQ와 같은 양자 컴파일 프레임워크를 사용하여 양자 컴퓨터에서 실행 가능한 어셈블리 언어로 양자 회로를 출력합니다. 연구자가 양자 컴퓨터에 액세스할 수 있는 경우 실험을 실행합니다.
OpenFermion을 사용하여 할 수 있는 작업에 대한 몇 가지 예가 ipython 노트북에서 시연됩니다(여기, 여기, 여기 참조). 양자 시뮬레이션이 단기간 내에 양자 컴퓨팅의 가장 중요한 응용 사례 중 하나로 널리 알려진 반면, 양자 화학을 아는 양자 컴퓨터 과학자는 극히 드물고 양자 컴퓨팅을 아는 화학자는 훨씬 더 드뭅니다. 우리는 OpenFermion이 이러한 커뮤니티 사이의 격차를 좁히는 데 도움이 되고 양자 컴퓨팅의 힘을 화학자와 재료 과학자에게 실어줄 수 있게 되기를 바랍니다. 관심 있으신 분은 GitHub 저장소를 확인해 보시기 바랍니다. 언제든지 끌어오기 요청을 보내주세요!



1 전문가들을 위해 한 문장만 꼽을 수 있다고 한다면 'OpenFermion의 기본 기능은 다양한 기저집합과 활성 공간으로 정의되는 이차양자화전자 구조 문제를 인코딩한 후 큐비트페르미 입자 대수학 간의 다양한 동형사상을 사용하여 이들 연산자를 스핀 해밀턴 연산자로 변환한다'라는 문장입니다.


<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 이주연(Google)님이 참여해 주셨습니다.>

이미 보셨을지 모르지만, 구글은 지난 9월 구글 어시스턴트의 한국어 서비스를 공식 출시했습니다! 그리고 이어 개발자 여러분께도 중요한 소식을 전해드리게 되었는데요, 액션 온 구글(Actions on Google) 역시 한국어를 포함한 새로운 언어로 찾아오게 되었습니다. 이제 한국어로 구글 어시스턴트 용 앱을 개발해보세요!

구글 어시스턴트용 앱과 한국어로 대화를 나눠보세요.

액션 온 구글은 이미 미국, 영국 및 호주에서 영어로 사용가능했습니다. 이제 여기에 새로운 언어로 한국어를 포함, 독일어, 프랑스어, 일본어, 캐나다 영어 및 프랑스어가 추가되었습니다. 이제 이 새롭게 추가된 언어들로 누구나 구글 어시스턴트를 위한 앱을 만들고 사용할 수 있습니다. 구글은 여러분이 개발하실 앱에 많은 기대를 걸고 있습니다.


커뮤니티 프로그램: 훌륭한 앱에 드리는 혜택

또한 구글 어시스턴트용 앱을 빌드하는 개발자의 노력을 지원하고 성과를 축하하고자 새로운 개발자 커뮤니티 프로그램을 만들었습니다. 최대 $200의 구글 클라우드 월간 크레딧을 받으실 수 있는 기회를 드립니다. (자세한 내용은 FAQ 를 참고하시기 바랍니다.) 이미 앱을 업로드 하셨더라도 조바심내지 마세요! 그런 분들께도 드릴 혜택도 준비 중입니다!

구글 어시스턴트를 더욱 편리하고, 재미있고, 보다 상호작용이 원활하도록 만들어주실 개발자 여러분의 노고에 미리 감사드립니다. 앞으로 구글 어시스턴트를 통해 한국어로도 다양한 앱과 대화할 수 있기를 기대합니다.

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 고재도(Web Technologies GDE)이 참여해 주셨습니다.>

브라우저는 항상 새로운 방향을 모색하고 있습니다. 이번 독립적 실험은 새로운 사용 사례에 맞게 웹이 발전할 수 있도록 하는 데 기여하기도 했지만, 웹의 변화를 따라잡는 일이 어려운 일일 수 있음을 의미하기도 합니다. 브라우저는 기능과 API에 대한 문서를 유지하지만, 크로스 브라우저 관련 문서는 여러 소스에 걸쳐 흩어져 있는 경우가 종종 있습니다. Chrome의 최우선 과제 중 하나는 모든 브라우저에서 작동하는 사이트를 보다 쉽게 만들 수 있도록 하는 것이며, 웹 문서를 단순화하는 것이 이러한 노력의 핵심적인 부분입니다.

오늘날, 웹 문서는 통합 소스로 나아가기 위한 큰 걸음을 내딛고 있습니다. Mozilla 개발자 네트워크(MDN) Web Docs에서는 Mozilla, Google, Microsoft, 삼성 소속의 창립 멤버들과 함께 웹 표준 및 개발 커뮤니티에서 활동하는 여러 기타 멤버들로 구성된 새로운 제품 자문위원회를 발표할 예정입니다. 이 제품 자문위원회는 향후 MDN의 웹 문서가 나아갈 방향에 대해 검토하고 의견을 제시하게 됩니다.

지난 몇 년 동안 Chrome은 웹 문서를 MDN으로 전환하는 작업을 수행해 왔으며, 이를 통해 우리는 문서에 대한 이러한 노력을 Mozilla 같은 다수의 오픈소스 공헌자들과 함께 할 수 있게 되었습니다. 제품 자문위원회는 MDN을 웹에서 최신의 포괄적 문서를 제공하는 최고의 소스로 만드는 데 한 발짝 더 나아간 것이며, 전반적으로 웹용으로 개발하는 작업을 더욱 쉽게 만들겠다는 우리의 목표에 더 가까이 나아간 것입니다. 이러한 노력의 일환으로, 우리는 웹에 대한 상호 운용성 테스트에도 투자하고 있습니다. 이를 통해 브라우저는 테스트를 공유하고 기능의 호환성을 비교할 수 있습니다. 또한, 브라우저 개발자가 구현 단계 사이에서 버그와 누락된 API를 발견하는 데 도움이 되도록 새로운 인프라도 빌드하고 있습니다.

웹 API 문서의 중앙 집중화된 소스로서 MDN Web Docs를 확인해 보시기 바랍니다. 또한, 웹 개발을 더욱 쉽게할 수 있는 플랫폼으로 만들기 위해 어떠한 노력을 하고 있는지도 자세히 알아보시기 바랍니다.

게시자: Dru Knox, 제품 관리자

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 신정규(Machine Learning GDE)님이 참여해 주셨습니다.> 게시자: Marc Levoy(수석 엔지니어) 및 Yael Pritch(소프트웨어 엔지니어)
인물 모드는 새로운 Pixel 2 및 Pixel 2 XL 스마트폰의 주요 기능으로, 누구나 얕은 피사계 심도의 이미지를 전문가가 찍은 것처럼 촬영할 수 있습니다. 이 기능 덕분에 두 기기 모두 DxO의 가장 높은 모바일 카메라 순위에 올랐고,  전방 및 후방 카메라 모두(일반적으로 이러한 효과를 얻기 위해 필요한) 듀얼 카메라가 아님에도 둘 모두에서 동작합니다. 오늘은 이 기능의 이면에 있는 기계 학습 및 컴퓨터 사진 기법에 대해 논의하겠습니다.
인물 모드를 사용하지 않은 HDR+ 사진(왼쪽)과 인물 모드를 사용한 HDR+ 사진(오른쪽). 인물 모드의 얕은 피사계 심도 합성 이미지가 어떻게 산만한 배경을 억제하고 주 대상에 집중하도록 도움을 주는지에 주목해 보세요. 캡션에서 링크를 클릭하면 전체 해상도 버전을 볼 수 있습니다. <사진: Matt Jones>

얕은 피사계 심도 이미지란?

큰 렌즈가 장착된 일안 반사식(SLR) 카메라는 피사계 심도가 얕습니다. 즉, 카메라에서 일정 거리에 있는 피사체는 선명하게 나타나지만 '초점면' 앞이나 뒤에 있는 피사체는 흐리게 나타납니다. 얕은 피사계 심도는 피사체에 대해 보는 이의 관심을 끌거나 산만한 배경을 억제하기 위한 좋은 방법입니다. 얕은 피사계 심도는 SLR을 사용하여 촬영한 인물 사진에 특색 있고 예술적인 느낌을 부여해 줍니다.

얕은 피사계 심도 이미지의 블러 수준은 심도에 따라 다릅니다. 피사체가 멀수록 초점면에서 이탈하고 흐리게 나타납니다. 렌즈 개구부의 크기에 따라서도 블러 수준이 달라집니다. f/2.0 조리개가 있는 50mm 렌즈는 직경 50mm/2 = 25mm의 개구부가 있습니다. 이러한 렌즈를 사용하면 피사체가 초점면에서 몇 인치만 벗어나도 흐릿하게 나타납니다.

피사계 심도에 대해 알아야 하는 또 다른 중요한 요소는 흐릿한 광원처럼 촬영되는 형상입니다. 이러한 형상을 보케라고 하며 렌즈 조리개의 물리적 구조에 따라 다릅니다. 보케는 원형일까요? 아니면 일부 렌즈 안에 조리개를 구성하는 6개의 금속 부품이 있으니 육각형일까요? 사진작가들은 어떤 요소가 좋거나 나쁜 보케를 만드는지에 대해 끊임없이 논쟁을 벌입니다.

얕은 피사계 심도 합성 이미지

SLR 카메라와 달리, 휴대폰 카메라에는 초점 영역에 담긴 모든 것을 촬영하는 고정된 크기의 작은 조리개가 있습니다. 그러나 카메라에서 장면에 있는 점까지의 거리를 알면 사진의 각 픽셀을 블러로 대체할 수 있습니다. 이 블러는 이웃한 픽셀이 있는 픽셀 색상의 평균이 될 것입니다. 블러 수준은 초점면에서 해당 장면 점까지의 거리에 따라 달라집니다. 보케를 의미하는 이 블러의 형상을 제어할 수도 있습니다.

휴대폰이 장면의 모든 점까지의 거리를 어떻게 계산할 수 있을까요? 가장 일반적인 방법은 듀얼 카메라 폰이라는 방법으로, 두 카메라를 서로 가까이에 두는 것입니다. 그런 다음 왼쪽 카메라 이미지의 각 패치에 대해 오른쪽 카메라 이미지에서 일치하는 패치를 찾습니다. 이러한 일치점이 발견되는 두 이미지 내의 위치는 삼각 측량 프로세스를 통해 해당 장면 피사체의 심도를 제공합니다. 이처럼 일치하는 피사체를 검색하는 기능을 스테레오 알고리즘이라고 하며, 양쪽 눈과 거의 같은 방식으로 작동합니다.

일부 단일 카메라 스마트폰 앱에서 사용되는 이 아이디어의 더욱 단순한 버전에는 이미지를 2개의 레이어, 즉 전경의 일부인 픽셀(일반적으로 사람)과 배경의 일부인 픽셀로 분리하는 과정이 포함됩니다. 의미론적 세그먼테이션이라고도 불리는 이 분리 방법을 사용하면 배경을 흐리게 만들 수 있지만 심도에 대한 개념이 없으므로 블러의 강도를 알려주지는 못합니다. 또한, 사람 앞에 피사체가 있는 경우(예: 카메라 가까이에 있는 경우) 실제 카메라에서는 흐려지지만 이 방식으로는 흐려지지 않습니다.

스테레오 또는 세그먼테이션을 사용하여 수행했는지 여부에 관계없이, 배경에 속하는 픽셀을 인위적으로 흐리게 처리하는 기법을 얕은 피사계 심도 합성 또는 합성 배경 디포커싱이라고 합니다. 합성 디포커스는 SLR에서 얻을 수 있는 광학 블러와 같은 것은 아니지만 대부분의 사람들에게는 비슷하게 보입니다.

Pixel 2에서 인물 모드의 작동 방식

Google Pixel 2는 후방 및 전방 카메라에서 모두 인물 모드를 제공합니다. 전방(셀프) 카메라의 경우 세그먼테이션만 사용합니다. 후방 카메라의 경우 스테레오와 세그먼테이션을 모두 사용합니다. 하지만 Pixel 2에는 후방 키메라가 하나뿐인데 어떻게 스테레오로 볼 수 있을까요? 이 프로세스를 단계별로 살펴봅시다.
1단계: HDR+ 이미지를 생성합니다.
인물 모드는 모든 피사체가 선명하게 찍힌 사진으로 시작됩니다. 이를 위해 촬영된 사진의 품질을 향상하기 위한 Google의 전산 사진 기법인 HDR+를 사용합니다.
이 기능은 모든 최신 Nexus/Pixel 휴대폰에서 실행됩니다. 이 기능은 하이라이트가 날아가는 것을 방지하기 위해 과소 노출된 이미지를 여러장 촬영하고, 촬영한 이미지들의 프레임을 정렬하고 평균화한 후 합성하여 그림자 안의 노이즈를 줄입니다. 그리고 로컬 대비를 보전하면서도 전역 대비를 현저하게 감소시키는 방법으로 이 그림자들을 증폭합니다. 결과 희미한 조명에서도 높은 다이내믹 레인지, 낮은 노이즈, 선명한 세부 묘사가 담긴 사진을 얻을 수 있습니다.
노이즈를 줄이기 위해 프레임을 정렬하고 평균화한다는 아이디어는 수십 년 동안 천체 사진에서 통용되었습니다. Google의 구현 방식은 핸드헬드 카메라로 촬영한 장면에서 이루어진다는 점에서 약간 다릅니다. 사진을 찍는 사람의 자세가 안정적이지 않거나 장면의 피사체가 움직일 경우 고스트 이미지(이중 이미지)를 생성하지 않도록 주의해야 합니다. 아래는 HDR+를 사용하여 촬영한, 다이내믹 레인지가 높은 장면의 예시입니다.
Pixel 2에서 HDR+를 사용하지 않은 사진(왼쪽)과 HDR+를 사용한 사진(오른쪽).
HDR+가 어떻게 어두운 아케이드 천장의 세부 모습을 유지하면서도 하늘과 정원이 흐려지지 않도록 하는지 살펴보세요. <사진: Marc Levoy>
2단계:  기계 학습 기반 전경-배경 세그먼테이션.
HDR+ 사진부터 시작하여, 이어서 전경(일반적으로 사람)에 속하는 픽셀과 배경에 속하는 픽셀을 결정합니다. 영화 산업의 크로마 키잉(일명 그린 스크리닝)과 달리, 배경이 녹색(또는 파란색이나 다른 색)이라고 가정할 수 없기 때문에 이는 까다로운 문제입니다. 대신에 기계 학습을 적용합니다.  
그림을 보고 어떤 픽셀이 사람이고 어떤 픽셀이 사람이 아닌지를 추정하는 TensorFlow로 작성된 특별한 신경망을 학습시켰습니다. 우리가 사용하는 특정 네트워크는 스킵 연결(skip connection)을 사용하는 콘볼루션 신경망(CNN)입니다. '콘볼루션'은 네트워크의 학습된 구성 요소가 필터(각 픽셀 주변의 이웃한 픽셀들의 가중치 합계)의 형태로 구성됨을 의미하므로, 네트워크를 단지 이미지를 필터링하고 필터링된 이미지를 필터링하는 과정 등으로 생각할 수 있습니다. '스킵 연결'은 저수준 특징(색상 및 가장자리)에 대해 추론하는 네트워크의 초기 단계부터 고수준 특징(얼굴 및 신체 부위)에 대해 추론하는 네트워크의 후반 단계까지 정보가 쉽게 흐를 수 있게 합니다. 이와 같은 단계의 결합은 사진 속에 사람이 있는지를 판별할 뿐만 아니라, 그 사람에게 속한 픽셀을 정확하게 식별해야 하는 경우에 중요합니다. CNN은 거의 백만 개의 인물 사진(인물의 모자, 선글라스, 아이스크림 콘 포함)을 학습했습니다. 마스크 생성을 위한 추론은 TensorFlow Mobile을 사용하여 휴대폰에서 실행됩니다. 다음은 이에 대한 예시입니다.
왼쪽은 HDR+ 파이프라인에 의해 생성된 사진이고, 오른쪽은 Google 신경망을 통해 다듬어진 출력 결과입니다. 이 마스크의 흰색 부분은 네트워크에 의해 전경의 일부로 간주되고 검은색 부분은 배경으로 간주됩니다. <사진: Sam Kweskin>
이 마스크는 얼마나 훌륭한 것일까요? 그다지 나쁘지 않습니다. Google의 신경망은 여자의 머리카락과 찻잔을 전경의 일부로 인식하여 선명하게 유지할 수 있습니다. 이 마스크를 기반으로 사진을 흐리게 처리하면 바로 다음 이미지가 생성됩니다.
마스크를 사용하여 생성된 얕은 피사계 심도 합성 이미지.
이 결과에 대해 주목할 몇 가지 사항이 있습니다. 첫째, 배경에 다양한 심도의 피사체가 포함되어 있더라도 블러 수준은 일정합니다. 둘째, SLR은 카메라에 가깝기 때문에 접시의 과자(그리고 접시 자체)를 흐리게 만들 수 있습니다. Google의 신경망은 과자가 인물의 일부가 아니라는 사실을 알고 있지만(마스크 이미지에서 검은색), 인물 아래에 있으므로 배경의 일부가 아닙니다. 우리는 이 상황을 명시적으로 감지하고 이러한 픽셀을 비교적 선명하게 유지합니다. 하지만 아쉽게도 이 해결책이 항상 정확한 것은 아니며, 이 상황에서는 이들 픽셀을 더 흐리게 만들어야 합니다.
3단계. 듀얼 픽셀에서 심도 맵으로이 결과를 향상하려면 장면에 있는 각 점에서의 심도를 알면 도움이 됩니다. 스테레오 알고리즘을 사용하여 심도를 계산할 수 있습니다. Pixel 2에는 듀얼 카메라가 없지만 PDAF(Phase-Detect Auto-Focus) 픽셀 또는 듀얼 픽셀 자동 초점(DPAF)으로 불리는 기술이 있습니다. 난해한 어휘처럼 보이지만 꽤나 간단한 아이디어가 출발점입니다. 휴대폰 후방 카메라의 (작은) 렌즈가 절반씩 2개로 분리되어 있다고 상상해 보세요. 이때 렌즈의 왼쪽을 통해 보이는 시야와 오른쪽을 통해 보이는 시야가 약간 다릅니다. 이 두 시점 사이의 간격은 1mm(렌즈의 대략적인 지름) 미만이지만, 스테레오를 계산하고 심도 맵을 생성하기에 충분합니다. 카메라의 광학 장치가 작동하는 방식은 여기에 나오는 것처럼 이미지 센서 칩의 모든 픽셀을 두 개의 더 작은 나란한 픽셀로 분할하고 칩에서 이들을 개별적으로 읽는 것과 같습니다.
Pixel 2의 후방 카메라에서 모든 픽셀의 오른쪽은 렌즈의 왼쪽을 통해 세상을 보고 모든 픽셀의 왼쪽은 렌즈의 오른쪽을 통해 세상을 보게 됩니다. <그림: Markus Kohlpaintner, 복제 허가를 받은 이미지>
그림에서 보듯이 PDAF 픽셀은 단일 스냅샷에서 렌즈의 왼쪽과 오른쪽을 통해 뷰를 제공합니다. 또는 휴대폰을 세로 방향으로 잡고 있는 경우 렌즈의 상반부와 하반부가 있습니다. 다음은 예시 장면(아래)의 상단 이미지와 하단 이미지가 어떻게 나타나는지 보여줍니다. 스테레오 알고리즘에서 빨간색 또는 파란색 픽셀은 쓰지 않고 베이어 컬러 필터 센서의 녹색 픽셀만 사용하므로 이미지가 흑백으로 나타납니다. 두 이미지를 구별하기 어려우신가요? 오른쪽의 애니메이션 gif(아래)를 보면 구별하는 데 도움이 될 겁니다. 자세히 살펴보세요. 실은 아주 작은 차이만 날 뿐입니다!
Pixel 2의 렌즈 상반부하반부를 통한 테스트 장면의 뷰. 오른쪽의 애니메이션 gif에서,
배경이 위아래로 움직이는 동안 카메라 초점이 인물에 맞춰져 있으므로 인물이 거의 정지된 상태임을 알 수 있습니다. 만약 우리가 볼 수 있다면 배경이 위로 이동할 때 인물의 앞에 있는 피사체들은 아래로 이동할 것입니다(또는 그 반대).
SLR을 비롯한 많은 카메라에서 동영상 녹화 시 초점을 더 빨리 맞추는 데 도움이 되는 PDAF 기술을 사용합니다. 우리가 사용하는 애플리케이션에서는 이 기술이 대신에 심도 맵을 계산하는 데 사용됩니다.  특히 Google의 Jump 시스템 파노라마 스티처(Jump Assembler라고 함)에서 사용되는 것과 유사한 스테레오 알고리즘에 좌우(또는 상하) 이미지를 입력 데이터로 사용합니다. 이 알고리즘은 먼저 서브픽셀 정밀도의 타일 기반 정렬을 수행하여 저해상도의 심도 맵을 생성한 다음, 양방향 솔버를 사용하여 이를 고해상도로 보간합니다. 이는 이전에 Google의 Lens Blur 효과에서 사용한 기술과 유사합니다.    
추가 설명: Pixel 2 카메라로 촬영한 왼쪽 뷰와 오른쪽 뷰가 너무 가깝기 때문에, 특히 낮은 조명에서 얻는 심도 정보는 이미지의 높은 노이즈의 영향으로 부정확합니다. 이러한 노이즈를 줄이고 심도 정확도를 높이기 위해 왼쪽 및 오른쪽 이미지를 캡처한 다음, 이미지를 정렬하고 평균화한 후 스테레오 알고리즘을 적용합니다. 물론, 이 단계에서는 HDR+에서와 같이 잘못된 일치를 피하기 위해 주의해야 합니다. 그렇지 않으면 심도 맵에 고스트 이미지가 생길 수 있습니다(단, 이는 다른 블로그 게시물의 주제이므로 여기서는 다루지 않음). 아래 왼쪽에 스테레오 알고리즘을 사용하여 위에 나오는 예시로부터 생성한 심도 맵이 있습니다.
왼쪽: 앞서 설명한 상반부 렌즈 및 하반부 렌즈 이미지로부터 스테레오를 사용하여 계산한 심도 맵. 더 밝은 부분은 카메라에 더 가까이 있음을 의미합니다. 
오른쪽: 원본의 각 픽셀에 얼마나 많은 블러가 적용되는지 시각적으로 표시. 검은색은 불러가 전혀 적용되지 않음을 의미하고, 빨간색은 초점면(얼굴)의 뒤쪽에 있는 장면 피사체를 나타냅니다. 빨간색이 밝을수록 더 흐리게 처리됨을 나타내고 파란색은 초점면 앞의 피사체(과자)를 나타냅니다.
4단계. 모두 합쳐 최종 이미지 렌더링
마지막 단계는 2단계에서 계산한 세그먼테이션 마스크와 3단계에서 계산한 심도 맵을 결합하여 1단계에서 HDR+ 사진의 각 픽셀을 얼마나 흐리게 처리할지 결정하는 것입니다.  심도와 마스크를 결합하는 방법은 다소간 기밀 사항이지만 대략적인 아이디어는 사람에 속한다고 생각하는 장면의 피사체(마스크의 흰색 부분)를 선명하게 유지하고 배경에 속한다고 생각하는 피사체(마스크의 검은색 부분)를 초점면에서 떨어진 거리에 비례하여 흐리게 처리하는 것입니다. 이러한 거리는 심도 맵에서 가져옵니다. 위의 빨간색 이미지는 각 픽셀을 얼마나 흐리게 처리할지를 시각화한 것입니다.
실제로 블러를 적용하는 것은 개념적으로 가장 간단한 부분입니다. 각 픽셀은 동일한 색상이지만 다양한 크기의 반투명 디스크로 대체됩니다. 이러한 모든 디스크를 심도 순서대로 합성하면 이전에 설명한 평균화와 같고, 실제 광학 블러에 가까운 훌륭한 근사값을 얻을 수 있습니다.  합성 디포커싱의 이점 중 하나는, 우리가 소프트웨어를 사용하므로 몇 파운드의 유리 카메라 렌즈를 들고 다니지 않아도 완벽한 디스크 형상의 보케를 얻을 수 있다는 것입니다.  흥미로운 점은, 소프트웨어에서 우리가 리얼리즘을 고수할 특별한 이유는 없다는 사실입니다. 우리가 원하는 어떤 보케 형태라도 만들 수 있습니다! 다음은 예시 장면의 최종 인물 모드 출력입니다. 이 결과를 2단계의 가장 오른쪽 결과와 비교하면 SLR에서 예상한 것처럼
과자가 약간만 흐려진 것을 알 수 있습니다.
HDR+ 사진, 세그먼테이션 마스크 및 심도 맵을 결합하여 생성된
최종적인 얕은 피사계 심도 합성 이미지. 전체 해상도 이미지를 보려면 클릭하세요.

인물 모드 사용 방법

Pixel 2의 인물 모드는 4초 내에 실행되고, (휴대폰의 특별한 상하 동작이 필요한 이전 기기의
Lens Blur 모드와는 달리) 완전 자동이며, 비전문가가 사용할 수 있을 정도로
충분히 강력한 성능을 발휘합니다. 다음은 예시 앨범으로, 곱슬머리를 한 사람들, 꽃 부케를 들고 있는 사람들 등 어려운 사례들이 포함되어 있습니다. 아래에서는 새로운 Pixel 2에서 인물 모드를 사용할 수 있는 몇 가지 방법을 소개합니다.
접사 촬영인물 모드에서 카메라를 사람 대신 작은 물체(꽃이나 음식 등)로 향하면 신경망은 얼굴을 찾지 못하고 유용한 세그먼테이션 마스크를 생성하지 않습니다. 즉, 위에서 설명한 파이프라인에서 2단계가 적용되지 않습니다. 다행히 여전히 PDAF 데이터(3단계)의 심도 맵이 있으므로 심도 맵만을 기반으로 얕은 피사계 심도 이미지를 계산할 수 있습니다. 렌즈의 왼쪽과 오른쪽 사이의 기준선이 너무 작기 때문에 이 거리는 대략 1미터 미만으로 떨어진 작은 물체에만 적합합니다. 그러나 이러한 장면에서는 멋진 사진을 생성합니다. 이것을 합성 접사 모드라고 생각할 수 있습니다. 아래는 매크로 크기 피사체의 일반 및 인물 모드 촬영의 예시입니다. 여기에 가는 철조망 울타리가 있는 분수대와 같은 더 어려운 사례를 비롯하여 더 많은 접사 사진이 포함된 앨범 이 있습니다. 너무 가까이 가지 않도록 주의하세요. Pixel 2는 카메라에서 약 10cm보다 더 가까이 있는 피사체에는 선명하게 초점을 맞출 수 없습니다.
인물 모드를 사용하지 않은 접사 사진(왼쪽)과 인물 모드를 사용한 접사 사진(오른쪽). 여기에는 사람이 없으므로 배경 픽셀은 심도 맵을 사용하여 식별됩니다. <사진: Marc Levoy>
셀피 카메라Pixel 2는 후방 카메라에서처럼 전방(셀피) 카메라로도 인물 모드를 제공합니다. 이 카메라는 12Mpix가 아닌 8Mpix이며 PDAF 픽셀이 없습니다. 즉, 픽셀이 좌반부와 우반부로 분할되지 않습니다. 이 경우 파이프라인 3단계는 적용되지 않지만 얼굴을 찾을 수 있다면 여전히 신경망(2단계)을 사용하여 세그먼테이션 마스크를 만들 수 있습니다. 따라서 얕은 피사계 심도 이미지를 계속 생성할 수 있지만, 피사체가 얼마나 멀리 있는지 모르므로 심도로 블러 수준을 조절할 수 없습니다. 그럼에도, 특히 산만한 배경을 대상으로 하는 셀피의 경우 효과가 매우 좋아 보입니다. 흐리게 처리하면 산만한 느낌을 없애는 데 도움이 됩니다. 다음은 Pixel 2의 셀피 카메라로 촬영한 일반 및 인물 모드 셀피의 예시입니다.
인물 모드를 사용하지 않은 셀피(왼쪽)와 인물 모드를 사용한 셀피(오른쪽). 전방 카메라는 PDAF 픽셀이 부족하므로 배경 픽셀은 기계 학습만 사용하여 배경 픽셀을 식별됩니다. <사진: Marc Levoy>

인물 모드를 최대한 활용하는 방법

Pixel 2에서 생성된 인물 사진은 기본 HDR+ 이미지, 세그먼테이션 마스크 및 심도 맵에 따라 달라집니다. 이러한 입력의 문제점은 결과물에 아티팩트가 생성될 수 있다는 점입니다. 예를 들어, HDR+ 이미지에서 사진이 과다 노출된 경우(흰색으로 흐려짐), 좌반부 및 우반부 이미지에 유용한 정보가 포함될 가능성이 낮기 때문에 심도 맵에 오류가 발생할 수 있습니다. 세그먼테이션에서 무엇이 잘못될 수 있을까요? 거의 백만 개의 이미지를 학습한 신경망이지만, 악어에게 키스하는 사람의 사진을 본 적이 없습니다. 따라서 아마도 마스크에서 악어를 생략하여 흐리게 만들 것입니다. 심도 맵은 어떨까요? 빈 벽과 같이 질감이 없는 피사체의 경우, 스테레오 알고리즘을 적용할 피사체가 없거나 (격자 무늬 셔츠와 같은) 반복적인 질감이나 수평선 또는 수직선이 없고 그에 따라 이미지를 삼각 측량하여 잘못된 깊이를 생성하므로 스테레오 알고리즘이 실패할 수 있습니다.

어떤 복잡한 기술에도 절충점이 있지만, 멋진 인물 모드 촬영을 위한 몇 가지 팁을 알려드립니다.
  • 머리(또는 머리와 어깨)가 프레임을 채우도록 피사체에 충분히 가까이 다가가세요.
  • 모두 선명하게 촬영하기를 원하는 단체 사진의 경우, 카메라에서 동일한 거리에 피사체를 배치하세요.
  • 더 멋진 블러 효과를 얻으려면 피사체와 배경 사이에 약간의 거리를 두세요.
  • 짙은 선글라스, 챙이 넓은 모자, 커다란 스카프 등은 벗고 찍으세요. 물론, 악어와 함께 찍지도 마시고요.
  • 접사 촬영의 경우 관심 대상이 선명하게 유지되도록 초점을 조절하세요.
인물 모드에서는 카메라의 줌 기능이 약간 작동한다는 사실을 알아차리실 겁니다(후방 카메라의 경우 1.5x, 셀피 카메라의 경우 1.2x).  이는 의도적인 조치로, 시야가 좁으면 더 뒤로 물러나게 하여 결과적으로 원근 왜곡을 줄이고 더 나은 사진을
촬영할 수 있기 때문입니다.

SLR을 (영원히) 포기할 때가 된 걸까요?

우리가 5년 전에 Google에서 일하기 시작했을 때 휴대폰 사진의 픽셀 수는
SLR에 미치지 못했지만 대다수 사람들의 요구에는 충분히 부합하는 수준이었습니다. 큰 가정용 컴퓨터 화면에서도
휴대폰으로 찍은 사진의 개별 픽셀을 볼 수 없었습니다.
그럼에도, 휴대폰 카메라는 다음과 같은 네 가지 측면에서 SLR만큼 강력하지 않았습니다.
  1. 밝은 장면의 다이내믹 레인지(날아가버리는 하늘)
  2. 조도가 낮을 때의 신호 대 노이즈 비율(SNR) (노이즈가 많은 사진, 디테일 상실)
  3. 줌(야생 동물 촬영의 경우)
  4. 얕은 피사계 심도
Google의 HDR+과 경쟁 업체의 유사 기술은 위의 1번과 2번 항목에서 큰 발전을 이루었습니다. 실제로, 까다로운 조명 조건에서도 우리는 종종 SLR을 사용하지 않을 것입니다. 힘든 브라케팅 및 후처리 작업 없이도 휴대폰으로부터 더 나은 사진을 얻을 수 있기 때문입니다. 줌의 경우 저렴한 망원 렌즈를 일부 스마트폰에 추가하면 도움이 되지만(일반적으로 2x), 강바닥에 있는 회색곰의 경우 400mm 렌즈를 대체할 만한 것이 없고, 또한 훨씬 안전합니다! 얕은 피사계 심도의 경우, 합성 디포커싱은 실제 광학 디포커싱과 같지는 않지만, 시각적 효과는 주요 피사체에 주의를 집중하면서 동일한 목표를 달성할 수 있을 정도로 충분히 유사합니다.

대형 센서와 대형 렌즈가 있는 SLR(또는 미러리스 호환 렌즈(MIL) 자매품)이 사라지게 될까요? 확실치는 않지만 시장에서 작은 틈새 시장을 차지할 것입니다. 우리는 모두 대형 카메라와 Pixel 2를 가지고 여행합니다. 여행 초기에는 열심히 SLR를 꺼내서 사진을 찍지만 결국에는 대부분 여행 가방에 담겨져 있게 됩니다. 소프트웨어로 무장한 카메라와 컴퓨터 사진의 새로운 세계에 오신 것을 환영합니다!

Pixel 2의 인물 모드에 대한 자세한 내용은 Nat & Friends의 동영상을 참조하세요.
다음은 Pixel 2로 촬영한 또 다른 사진앨범입니다(인물 및 비인물).

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 장정식(Google)님이 참여해 주셨습니다.

게시자들과 플랫폼 사업자들이 힘을 합쳐 오픈소스 AMP(Accelerated Mobile Pages) 프로젝트를 출시한 이후로 벌써 2년이 지났습니다. 웹환경에서 속도와 사용자 환경의 중요성이 날로 중요해지고 있습니다. 참고로, 모바일 사이트의 페이지 로드 시간이 3초를 넘을 경우,  53%의 사용자가 접속을 포기하는 것으로 나타났습니다. 2년 동안 이 프로젝트는 소수의 파트너로 시작하여, 2천 5백만여 개의 사이트에서 40억 개가 넘는 AMP 페이지를 게시한 프로젝트로 성장하였습니다. AMP를 기반으로 빌드되는 페이지 수가 증가했을 뿐 아니라, 그 속도도 향상되었습니다. Google 검색으로 찾은 AMP 페이지를 로드하는 데 걸리는 시간의 중앙값은 1/2초 미만입니다. 우리는 지금까지 AMP가 미친 영향에 흥분을 감추지 못하고 있지만 함께 해야 할 일이 더 많이 있습니다.

scratch-amp_export-e1508431558335.png

더 많은 사용자, 더 많은 참여, 더 많은 수익 창출

2년 동안 웹사이트에서 40억여 개의 AMP 페이지가 생성된 것을 지켜보면서, 우리는 AMP가 속도, 사용자 참여 및 수익에 어떤 영향을 미치는 지를 구체적으로 확인할 수 있었습니다. 곧 발표될 예정인 Forrester Consulting Total Economic Impact™ 연구(Google에서 의뢰함)에서는 AMP 페이지가 사용자의 소비 시간을 2배 이상 늘리고, 웹사이트의 트래픽을 10% 증가시킨다는 사실을 확인했습니다.  AMP를 사용하는 전자상거래 웹사이트에 대해서도 일반 페이지에 비해 판매 전환율이 20% 증가한다는 사실을 확인했습니다.

scratch-amp_export-2-e1508431720311.png

앞으로 몇 주 내에 전체 연구 내용을 발표할 예정이지만, 세 번째로 진행된 독립 연구 조사에서 게시자와 전자상거래 웹사이트가 AMP를 사용하는 경우 더 높은 사용자 참여와 수익을 창출하는 것이 확인되었다는 점에 주목해야 합니다. 지난주, 마케팅 컨설팅 회사인 Stone Temple은 상담을 나눈 대부분의 게시자와 전자상거래 사이트에서 트래픽, CPM 및/또는 모바일 수익이 증가했다고 언급했습니다. Chartbeat은 지난 6월 발표한 보고서에서 사용자가 표준 모바일 웹페이지보다 AMP 콘텐츠에서 35% 정도 더 많은 시간을 보낸다는 사실을 확인했습니다.

ampconf1          ampconf2

DoubleClick Ad Exchange에서 제공한 최신 데이터에 따르면 광고주 역시 AMP 페이지에서 더 나은 성과를 보고 있다는 사실이 확인되었습니다. 게시자 중 85%가 일반 페이지에 비해 AMP 페이지에서 노출도와 클릭률이 높아지는 효과를 보고 있습니다. 그 결과, 광고주는 이러한 광고 배치에 더 많은 금액을 기꺼이 지출하고 있습니다.AMP 게시자 중 62%가 상품화된 AMP 페이지에서 eCPM이 상승하는 효과를 보고 있습니다.¹ 우리는 AMP 프로젝트가 웹에서 광고를 빌드하고 제공하는 데 AMP 속도를 실현하기 위해 추가로 투자를 진행함에 따라 이러한 추세가 계속 증가할 것으로 기대합니다. 게시자의 기존 비즈니스 모델에 대한 지원 역시 이 프로젝트의 핵심 사항이며, 게시자의 구독자 기반을 늘리기 위해, 2016년부터 AMP는 게시자의 자체 사이트의 유료화 기능을 지원해왔습니다. 


커뮤니티의 힘

우리는 NYC에서 올해 초 개최된 AMP 컨퍼런스에서 많은 개발자를 만나 교류했습니다. 성공적 개최를 발판 삼아, 2018년 초에 암스테르담에서 다음 AMP 컨퍼런스를 가질 예정입니다. AMP의 최신 개발 정보를 나누고, 이 프로텍트의 핵심 공헌자들과 직접 1:1로 만날 수 있는 기회만으로도 이 컨퍼런스에 참여할 만한 가치가 있을 것입니다. 정확한 날짜와 등록 방법은 다음 달에 공개할 예정입니다. 혹시 여러분들의 지역에서도 AMP Roadshow가 열리는지 꼭 확인해보세요. 11월에는 유럽에서, 12월에는 중국에서 진행할 계획입니다.

AMP의 성공은 순전히 이 프로젝트에 기여해 주신 참가자들이 계셨기에 가능한 일이었습니다. 코드를 직접 제공해주신 400여 명의 개발자든, 아니면 Github에서 이 프로젝트에 참여해주신 10,500명의 다른 개발자든, 이 모든 참가자의 기여 덕분에 AMP가 오늘날 이런 위상을 차지할 수 있었습니다. 우리는 또한 다른 조직들도 AMP를 지원하는 데 점점 더 주도적인 역할을 하고 있는 점을 지켜보고 있습니다. 예를 들어, Automattic은 지난 몇 달 동안 WordPress 플러그인의 품질 향상을 위해 우리와 협력하고 있습니다. 커뮤니티 전반적으로 빠르게 증가하는 채택 비율과 더불어, WordPress.com VIP 고객인 The New York Post 및 PMC 등의 업체는 AMP를 구현함으로써 큰 성과를 누렸습니다.


AMP의 미래

AMP의 미래는 밝습니다. 게시자와 전자상거래 웹사이트의 성공을 넘어 AMP 및 PWA(프로그레시브 웹 앱)의 결합, AMP로 전체 사이트를 수많은 기기에 걸쳐 빌드하는 등, 웹사이트에서 AMP를 활용하는 방법이 점점 늘어나고 있다는 점을 확인했습니다. Mynet과 같은 웹사이트는 AMP 페이지를 활용한 PWA를 개발하여, 빠른 페이지 로드를 구현하였습니다. Spiegel Daily와 같은 다른 웹사이트도 AMP를 사용하여 전체 사이트를 빌드함으로써 모든 기기에 걸쳐 뛰어난 사용자 환경을 보장합니다.

좀 더 나은 디자인의 AMP 페이지를 쉽게 만들 수 있도록, 우리는 AMP Start를 만들었습니다. 완벽하게 설계되어 바로 사용할 수 있는 AMP 템플릿과 구성 요소를 제공하는 공급원 역할을 할 것입니다. 지난주, AMP Start에서는 심층적인 제품 소개 사이트와 소매 환경을 모두 지원하는 전자상거래 템플릿을 새롭게 발표했습니다. 지역 비즈니스 및 디지털 잡지를 비롯한 다양한 사용 사례에 활용할 수 있는 더 많은 템플릿이 곧 출시될 예정입니다.

ampstart_home@2x

여기서 AMP가 성공을 거두도록 도움을 준 모든 분, 특히 이 프로젝트에 직접 코드를 제공해주신 400여 명의 개발자께 감사의 마음을 전합니다. 우리가 웹에서 사용자 환경의 품질을 계속 향상해 나감에 따라 이 프로젝트의 미래가 어떻게 펼쳐질지 정말 기대됩니다. 2월에 암스테르담에서 많은 개발자를 뵐 수 있길 기대합니다. 계속 앞으로 나아갑시다!

게시자: David Besbris, Google 검색 부사장, Google AMP 프로젝트 책임자
¹상승 폭은 광고 구현에 따라 다를 수 있습니다.

AMP_Infographic_2017_Full

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 전태균(Machine Learning GDE)님이 참여해 주셨습니다.>
게시자: Chunhui Gu와 David Ross, 소프트웨어 엔지니어
동영상 속 인간 행동을 이해하도록 기계를 교육하는 것은 컴퓨터 비전의 근본적 연구 과제로서, 맞춤형 동영상 검색, 스포츠 분석 및 동작 인터페이스와 같은 애플리케이션에 필수적입니다. 지난 몇 년 동안 이미지에서 객체를 분류하고 찾는 기술이 흥미롭고도 획기적인 발전을 이루었지만, 인간 행동을 인식하는 것은 여전히 큰 해결 과제로 남아 있습니다. 이는 동영상 내에서 인간 행동이 그 본질상 물체에 비해 명확히 한정되지 않으므로, 섬세하게 레이블 지정된 액션 비디오 데이터세트를 구성하기 어렵기 때문입니다. 다수의 벤치마킹 데이터세트(예: UCF101, ActivityNet 및 DeepMind의 Kinetics)에서 이미지 분류에 대한 레이블 지정 체계를 채택하고 이러한 데이터세트에서 각각의 동영상 또는 동영상 클립마다 하나의 레이블을 할당하고 있지만, 각기 다른 행동을 취할 수 있는 여러 사람을 포함하는 복잡한 장면을 다루는 데이터세트는 존재하지 않습니다.

인간 행동 인식에 대한 향후 연구를 용이하게 하기 위해 우리는 긴 동영상 시퀀스에 포함된 각 사람의 여러 가지 행동 레이블을 제공하는 새로운 데이터세트인, '원자성 시각적 행동'을 기반으로 구축된 AVA를 출시했습니다. AVA는 YouTube를 통해 공개적으로 시청할 수 있는 동영상의 URL로 구성되어 있습니다. 이는 공간-시간적으로 국부화된 80가지의 원자성 행동(예: '걷기', '(물체를) 발로 차기', '악수하기')으로 구성된 세트로 주석 처리되어 있어, 동영상 세그먼트 57,600개, 레이블 지정된 인간 행동 9,600가지, 그리고 총 21만 개의 행동 레이블로 분류됩니다. 웹사이트를 탐색하여 데이터세트를 살펴보면서 주석을 다운로드할 수 있으며, 데이터세트의 설계 및 개발에 대해 설명하는 arXiv 문서를 읽어볼 수 있습니다.

다른 행동 데이터세트와 비교하여 AVA는 다음과 같은 주요 특징을 갖추고 있습니다.
  • 사람 중심적 주석. 각 행동 레이블은 동영상 또는 클립이 아니라 사람과 연결되어 있습니다. 따라서 꽤 흔한 경우지만, 같은 장면에서 각기 다른 행동을 하는 여러 명의 사람에게 각기 다른 레이블을 할당할 수 있습니다.
  • 원자성 시각적 행동. 행동 레이블을 제한하여 시간적 척도를 세분화합니다(3초). 이 경우 행동은 기본적으로 물리적 특성이므로 뚜렷한 시각적 특징을 가지게 됩니다.
  • 사실적인 동영상 자료. 다양한 장르와 제작 원산지에서 추출한 동영상을 AVA의 소스로 활용합니다. 그 결과, 광범위한 인간 행동이 데이터에 나타납니다.
각 동영상 세그먼트의 가운데 프레임에 경계 상자 주석이 있는 3초짜리 동영상 세그먼트(출처: 동영상 소스)의 예. (명확히 보여주기 위해 각 예제마다 하나의 경계 상자만 표시되어 있습니다.)

AVA를 만들기 위해, 우리는 먼저 YouTube에서 수많은 다양한 국적의 전문 배우가 출연하는 '영화'와 '텔레비전' 범주에 집중하여 장편의 다양한 콘텐츠 세트를 수집했습니다. 각 동영상에서 15분짜리 클립을 분석했으며 각각을 300개의 서로 겹치지 않는 3초짜리 세그먼트로 균일하게 분할했습니다. 이 샘플링 전략에 따라 일관성 있는 시간적 컨텍스트에서 행동 시퀀스를 유지할 수 있었습니다.

다음으로, 각 3초짜리 세그먼트의 가운데 프레임에 있는 사람의 경계 상자를 전부 수동으로 레이블 지정했습니다. 경계 상자에 있는 각각의 사람에 대해 주석 처리자는 세그먼트 내에서 사람의 행동을 설명하는, 미리 정의된 원자성 행동 어휘(80개 클래스 포함)에서 레이블(개수는 가변적)을 선택했습니다. 이러한 행동은 포즈/움직임 행동, 사람과 물체의 상호 작용, 사람과 사람의 상호 작용이라는 세 그룹으로 나뉘었습니다. 모든 행동을 취하는 모든 사람들에 대해 철저히 레이블을 지정했으므로 아래 요약된 것과 같이 AVA 레이블의 빈도는 롱테일(long-tail) 분포를 따랐습니다.
AVA 원자성 행동 레이블의 분포. x축에 표시되어 있는 레이블은 전체 어휘 중 일부에 불과합니다.

AVA의 고유한 디자인에 따라 기존의 다른 데이터세트에서는 사용할 수 없는 몇 가지 흥미로운 통계량을 도출할 수 있습니다. 예를 들어, 둘 이상의 레이블이 지정된 다수의 사람이 있다고 가정할 경우, 행동 레이블의 동시 발생 패턴을 측정할 수 있습니다. 아래 그림에서는 AVA에서 가장 많이 동시 발생하는 행동 쌍과 해당 동시 발생 점수를 보여줍니다. 여기서는 사람들이 노래를 부를 때 악기를 자주 연주하고, 아이들과 놀 때 아이를 안아 올리고, 키스할 때 포옹하는 등의 예상되는 패턴을 확인했습니다.
AVA에서 가장 많이 동시 발생하는 행동 쌍.

AVA 데이터세트에 대한 인간 행동 인식 시스템의 유효성을 평가하기 위해 훨씬 더 작은 JHMDB 데이터세트에서는 고도의 경쟁력 있는 성능을 획득하는 기존의 기준 딥 러닝 모델을 구현했습니다. 확대/축소, 어수선한 배경 요소, 영화 촬영술, 모양 변화와 관련한 까다로운 변화 때문에, 이 모델은 AVA에서 행동을 정확히 식별할 때 상대적으로 그다지 높지 않은 수준의 성능을 실현합니다(18.4% mAP). 이는 AVA가 앞으로 수년간 새로운 행동 인식 아키텍처와 알고리즘을 개발하고 평가하는 데 사용할 수 있는 유용한 시험대가 될 것임을 시사합니다.

AVA 출시가 인간 행동 인식 시스템 개발을 향상시키는 데 도움이 되고 개인의 행동 수준에서 공간적-시간적으로 세분화된 레이블을 기반으로 복잡한 활동을 모델링할 수 있는 기회를 제공하기를 바랍니다. 우리는 계속해서 AVA를 확장하고 향상할 것이며, 향후 나아갈 방향을 안내하는 데 도움이 되도록 커뮤니티의 의견을 듣고 싶습니다. AVA 사용자 메일링 리스트에 가입하여 데이터세트 관련 업데이트를 받고 이메일을 보내 피드백을 제공해 주시기 바랍니다.

감사의 말

AVA를 담당한 핵심 팀에는 Chunhui Gu, Chen Sun, David Ross, Caroline Pantofaru, Yeqing Li, Sudheendra Vijayanarasimhan, George Toderici, Susanna Ricco, Rahul Sukthankar, Cordelia Schmid, Jitendra Malik 등이 참여하고 있습니다. 많은 Google 동료와 주석 처리를 맡아주신 분들께 이 프로젝트에 헌신적으로 지원해주신 데 대한 감사 인사를 드립니다.