OmniAICreator/Qiita-1.07M huggingface dataset:
Amazon S3のバケットにあるファイルから最新のファイル名を1つ取得


### AWS SDK (Kotlin)

最大1000件（デフォルト1000件）のリストを取得して、`lastModified`でソートしてインデックス`0`のデータを取得。
取得できるデータは1000件な名前の昇順であるため、1000件以上のデータがある場合には、正しいデータを得られない。

```kotlin
        fun getLatestUploadObject(context: Context, bucketName: String, objectPrefix: String): S3ObjectSummary? {
            val request = ListObjectsV2Request().also {
                it.bucketName = bucketName
                it.prefix = objectPrefix
            }
            val credentialsProvider = <CredentialsProvider>

            /** Create S3 Client */
            val s3 = AmazonS3Client(credentialsProvider, Region.getRegion(Regions.AP_NORTHEAST_1))
            val result = s3.listObjectsV2(request);
            if (result.objectSummaries.size > 0) {
                val sortedObjects = result.objectSummaries.sortedByDescending {
                    it.lastModified
                }
                return sortedObjects[0]
            }
            return null
        }
```




### AWS CLI

```shell
> aws s3api list-objects-v2 \
  --bucket "<BucketName>" \
  --query 'reverse(sort_by(Contents, &LastModified))[:1].Key' \
  --output=text
```
ε-greedy で新材料や新薬を開発する？

ただのアイディアメモです。
新材料や新手法の発見などは、「途中で手順を間違った」、「途中で材料を間違った」などでしばしば発見されることが多いですよね。

ということで、それなら最初から「わざと間違わせてみればいい」という発想になるかと思います。
そこで使えるのが　ε-greedy 法ですね。

スーパーマリオ攻略を例にすると、普通ならまっすぐ進めばいいだけの場所でわざとジャンプさせたりする。
そうすると「隠された１UPキノコのボックスをたまたま下からパンチ」できるかもしれない。

ジャンプしないまま通り過ぎれば、この１UPキノコのボックスは一生発見することができない。
わざと無駄な行動などをしてみて新発見をすればいい。
そんなアイディアでした。

そんなこと誰でも知ってる？とか言わないでくださいネ。
初心者がAIチャレンジやってみた (3)：2つ目の障害物の回避（パラメータチューニング）

# 概要
「初心者がAI Challengeやってみた」シリーズの第3弾です。
今回はlongitudinal関連や、path interval関連のパラメータを調整して回避動作がシャープになったので共有します。

前回と前々回の記事はこちら：
* 第1弾：[初心者がAIチャレンジやってみた(1)](https://qiita.com/h_bog/items/86fba5b94b2148c4d9da)：Autowareを動かしてみる
* 第2弾：[初心者がAIチャレンジやってみた(2)](https://qiita.com/h_bog/items/a36df3042a342bd2a0c5)：1つ目の障害物の回避成功

:::note warn
筆者はautoware初心者です。
説明等が正確でない可能性があるので本記事だけではなく他の記事や[autowareのドキュメント](https://autowarefoundation.github.io/autoware-documentation/main/)も確認するようにしてください。
:::

# パラメータ調整
## Longitudinal関連
車両の進行方向の距離関連のパラメータ。
多分障害物を避け始めるタイミングとかを設定しており、デフォルト値だと障害物の十分前から回避をするように計画するため、かなり緩やかな回避経路が生成される。
逆に言うとAI Challengeのように障害物を連続で回避しないといけない場合は1つ目の障害物を緩やかに回避しすぎて2つ目が回避できなくなってしまう。

```avoidance.param.yaml
avoidance:
# （省略）
longitudinal:
  prepare_time: 0.0                             # [s]   元々2.0
  longitudinal_collision_safety_buffer: 0.0     # [m]
  min_prepare_distance: 0.0                     # [m]   元々1.0
  min_avoidance_distance: 0.0                   # [m]   元々10.0
  min_nominal_avoidance_speed: 1.0              # [m/s] 元々7.0
  min_sharp_avoidance_speed: 1.0                # [m/s]
```

前回に比べて1つ目の障害物を直前で回避するようになった。

<iframe width="560" height="315" src="https://www.youtube.com/embed/64Px3quMKHk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

## Path Interval関連
経路を生成する時の解像度に関するパラメータ。
大きいと荒すぎる経路が生成されるが、小さすぎると計算コストが高くなってしまう。

上の動画を見ると経路が荒くて2つ目の障害物が回避できていないように見えたので調整してみた。

```behavior_path_planner.param.yaml
path_interval: 0.1   #元々2.0
```

```avoidance.param.yaml
resample_interval_for_planning: 0.05       # [m]   元々0.3
resample_interval_for_output: 0.1          # [m]   元々4.0
```

確かに生成される経路のshift pointの数は増えたように見えるが、経路自体はそんなに変わらなかった印象。

<iframe width="560" height="315" src="https://www.youtube.com/embed/YJRU8YNc6Bc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

## obstacle_check_force_avoidance_clearance
あんまよく分からないけど、ここで設定したclearance先に障害物があると車両が一時停止して、回避経路を生成してくれる気がする。下の例だと障害物の1m手前で車両が一時停止して、回避動作をし始めてくれる。

``` avoidance.param.yaml
object_check_force_avoidance_clearance: 1.0    # [m]
object_check_forward_distance: 10.0            # [m]
object_check_backward_distance: 0.0             # [m]
object_check_goal_distance: 20.0                # [m]
```

<iframe width="560" height="315" src="https://www.youtube.com/embed/MjlMjyDrC3o" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
paiza.ioでelixir その237

# 概要
paiza.ioでelixirやってみた。
練習問題、やってみた。
構想編。

# 練習問題
regexインタープリターを実装せよ。

# 参考にしたページ。

https://qiita.com/yyu/items/84b1a00459408d1a7321

https://qiita.com/_akira19/items/09d1fc458e0551cf0d2d


# 方針
- vm方式で、やる。
- バイトコード
/abc/の場合:
0: char a
1: char b
2: char c
3: match
/(ab|cd)/の場合:
0: para 1 4
1: char a
2: char b
3: jmp 6
4: char c
5: char d
6: match
/ab*(c|d)/の場合:
0: char a
1: para 2 4
2: char b
3: jmp 1
4: para 5 7
5: char c
6: jmp 8
7: char d
8: match
- 意味
char: 		
文字のマッチングを行います。
指定された文字と一致するまで、読み飛ばします。
最後まで、一致しない場合、終了。
match: 		
正規表現の一致を確認します。
指定されたパターンと現在の文字列が一致したので、終了します。
jmp: 		
指定された位置にジャンプします。
命令の実行位置を変更します。
para: 		
分岐を行います。
2つの命令へのジャンプ先を指定し、それぞれの方向を試します。

- 最初の呼び出し

```

defmodule Main do
    def run(0) do
        Sim.print()
    end
    def run(pc) do
        m = Src.getn(pc)
        IO.puts(m)
        s = String.split(m, " ")
        cond do
	    Enum.at(s, 1) == "char" ->
    	    Sim.char(Enum.at(s, 2))
	    Enum.at(s, 1) == "jmp" ->
    	    Sim.jmp(Enum.at(s, 2))
	    Enum.at(s, 1) == "para" ->
    	    Sim.para(Enum.at(s, 2), Enum.at(s, 3))
	    Enum.at(s, 1) == "match" ->
		    Sim.match()
	    true ->
    	    Sim.char(Enum.at(s, 2))
	    end
	    IO.inspect Sim.test
        run(Sim.pc)
	end
	def start(vm, str) do
	    Src.set(vm)
	    run(1)
	end
end

Va.start_link
Sim.start_link
Src.start_link

str = "abc"

vm = """
1: char a
2: char b
3: char c
4: match
"""

Main.start(vm, str)




```


以上。
【超便利】タグ１つでwebのチャート機能

# 背景
google chart、chart.jsなどwebで利用するチャート機能がよくありますが、javaScriptをよく携われないと利用できません。個人差によっては、ハードル高いと思われる人もいるでしょう。

また、Excelのチャートを利用するとき、データや表、グラフの種類を選ぶだけでチャートができます。このようなやり方をwebで出来たらいいですよね。
それらを行うには、以下のjspの例をご覧ください。
# 例
jspとはいえ、ほとんどhtmlばかりで、javaに関わるのは4行だけです。
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="efw" uri="efw" %>
<!DOCTYPE HTML>
<HTML>
<HEAD>
	<title>chart テスト</title>
	<efw:Client lang="jp"/>
</HEAD>
<BODY>
<table>
<tr><td>
<!--ここはデータ表-->
	<table border=1 id="chart1_data" data-format="$#,##0" data-legend="bottom">
		<caption>Chart Caption</caption>
		<tr><th>Row0Col0</th><th>col1</th><th>col2</th><th>col3</th></tr>
		<tr><td>row1</td><td>$1,000</td><td>$700</td><td>$300</td></tr>
		<tr><td>row2</td><td>$900</td><td>$700</td><td>$600</td></tr>
		<tr><td>row3</td><td>$800</td><td>$600</td><td>$500</td></tr>
		<tr><td>row4</td><td>$700</td><td>$500</td><td>$400</td></tr>
		<tr><td>row5</td><td>$1,000</td><td>$800</td><td>$700</td></tr>
	</table>
</td><td>
<!--ここは縦棒グラフ-->
	<efw:Chart id="char1" data="chart1_data" type="column"/>
</td></tr></table>
</BODY>
</HTML>
```
この4行のjavaプログラムで以下のエビデンスのようにgoogleチャートが表示されます。
簡単でしょう？色合いもExcelぽいですよね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476221/2d77db8c-58a7-b710-4dfb-da953501f0b4.png)
# jarを入手
mavenからダウンロードできます。
```xml
<dependency>
    <groupId>io.github.efwgrp</groupId>
    <artifactId>efw</artifactId>
    <version>4.07.024</version>
</dependency>
```
# efwのChartタグ
上記説明の使い方は、efwの``Chartタグ``です。複雑なチャートはできないですが、よく利用されるExcel風のものならタグ１つで実現できます。詳細のAPIは、以下のリンクです。
https://github.com/efwGrp/efw4.X/blob/master/help/tag.chart.md

　
チャート種類、データ設定、タイトル、凡例、目盛り、フォーマットなど。実現できる機能は以下の図のような感じで表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476221/ce450baf-68bc-fc04-9a7d-5cebe09eda65.png)
また、google chartはオンラインではない場合使えないので、オフラインで使えるchart.jsも取り込んでいます。モードで切り替えます。

ご興味があれば試してください。上記エビデンスのプログラムは以下のリンクかダウンロードできます。

https://github.com/efwGrp/qittaSamples

[【超便利】タグ１つでwebのファイル管理](https://qiita.com/changkejun/items/d79127e27b49bfc8a847)
[【超便利】タグ１つでwebのチャート機能](https://qiita.com/changkejun/items/b563570df2036f5fa7da)
[【超便利】タグ１つでwebのQRコード作成](https://qiita.com/changkejun/items/106f2734dd319e9b1201)
週一でPython勉強会やってみる⑩

前回の続き

https://qiita.com/Waddy675/items/96217c5b4ff1f374dc4d

罫線辺りはややこしくなってきそうだな・・・

## 表示形式の設定
セルに対し`number_format`を設定することで可能
```py
sheet["A1"].number_format = "0.0" // 小数点第一まで
```
日時フォーマットも設定可能だが、セルの値がdatetimeでないとうまくいかなかった。
```py
sheet["A1"].value = datetime.datetime(year = 2023, month = 4, day = 5, hour = 11, minute = 22, second = 33)
sheet["A1"].number_format = "yyyy/mm/dd
```

日時フォーマットについては`dd`と`d`で0埋め二桁と一桁といった形で、他の言語と同様のフォーマットが扱える。
日本語の場合（和暦や曜日）は頭に`[$-411]`（$-ja-JP）をつける
※コラボラトリーだと平成35年と表示されたがライブラリのアップデートがされてないとか？

`data_type`でセル内の中身を判定できる。`n`はnumber、`s`は文字列、`d`はdatetimeを表している。

## セルのスタイル
### 横幅と縦幅
セルの横幅と縦幅は`column_dimentions`を使う。
```py
cell.column_dimentions['B'].width = 40
cell.column_dimentions[2].height = 60
```

### テキストの配置位置
`from openpyxl.styles.alignment import Alignment`でAlignmentを使えるようにする。
セルのalignmentにhorizontal(水平)/vertical(垂直)を指定する。
```py
from openpyxl.styles.alignment import Alignment
cell.alignment = Alignment(horizontal="center", vertical="center")
```

### 罫線の設定
Alignmentと同様にBorderを取得する。上下左右の設定が必要。
```py
from openpyxl.styles.borders import Border, Side
cell.border = Border(
    top=Side(style="thin", color="000000"),
    right=Side(style="thin", color="000000"),
    bottom=Side(style="thin", color="000000"),
    left=Side(style="thin", color="000000")
)
```

### max_rowとmaxColumn
この二つは使われているセルの最終行と列を取ってくるが、今回のような罫線が付いているセルも対象となる。
つまり、セルに文字が13行目まであっても、14行目以降のセルに罫線などが付いていると判定されるので注意。
ちなみに選択したセル①の下に罫線を引いた場合と、セル①の下のセル②の上に罫線を引いた場合、見た目は同じになるが、最終行の判定は罫線の対象となったセルの位置が適応される。（前者はセル①の行、後者はセル②の行が取得できる）

## まとめ
セルの罫線問題は結構面倒な気がしている・・・見た目が同じでも取得できる値が違うのは結構イタイ。セルの中で値があるか等一回チェックしてから使う方がよいかもしれない。
気を付けよ・・・
Pythonにおけるtypeとisinstanceの違い

# typeとisinstanceの違い

`Python`組み込みの`type()`と`isinstance()`はオブジェクトの型（クラス）を判定するために使用される関数ですが、微妙な違いがあります。

## 結論

次のユースケースでは基本的に`isinstance()`を使う。

- クラスの継承元のインスタンスか判定
- 複数の型で確認

厳密にオブジェクトの型を調べる時は`type()`を使う。

## 理由

理由としては次のようなことが挙げられる。

- `type()`は厳密に何のインスタンスか返すため、継承元のクラスのインスタンスであることを判定できない
- `type()`では複数の型を同時に調べることができない

## 具体例

継承元のインスタンスかどうか判定したいとき

- `Car`クラスを継承した`MyCar`というクラスがある
- `mycar`を`MyCar`でインスタンス化する
- 継承元の`Car`クラスのインスタンスか`MyCar`のインスタンスか調べる

```python
class Car():
    pass

class MyCar(Car):
    pass

mycar = MyCar()

print(type(mycar) is Car) # False
print(type(mycar) is MyCar) # True

print(isinstance(mycar, Car)) # True
print(isinstance(mycar, MyCar)) # True
```

変数`number`が`int`か`float`の時に条件分岐で処理を進めたいとき
```python
# typeを使った例
number = 42
if (type(number) is int) or (type(number) is float):
    print(f"number: {type(number)}") # number: <class 'int'>

# isinstanceを使った例
number = 42.0
if isinstance(number, (int, float)):
    print(f"number: {type(number)}") # number: <class 'float'>
```

## 要点

厳密さを求めるなら全てにおいて`type()`を使って判定した方が良いが、冗長になる可能性が高い。違いをきちんと理解して使い分けれるようになりたいところ。
【Query Builder：Expression】Try using IsYes statement

This time, I will use the **IsYes** statement from among the many sharperlight expressions.
Launch the `Query Builder` from the [Sharperlight](https://sharperlight.com/) application menu.
Set the filter settings as shown below and prepare a custom dataset.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/95dd5f0e-474e-eea0-8571-d1ea4a248751.png)
A preview returns a dataset like this.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0d086a8d-73b3-2796-816a-df26dd00df6f.png)
Now let's write the **IsYes** statement.
Right-click in the output area and select **Add Expression**.
When the Output Options dialog opens, select `Functions` -> `Data Types` -> `IsYes` from the Functions list.
You can transfer its template to the editor area by double-clicking it.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/bbe9e496-cbc7-7663-d4d9-081bc005c209.png)
You can also search the statement in the list by typing a keyword in the Find box.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/438eae26-5cf4-742c-45b1-135a6ce34b6d.png)
Let's validate the value of the **Status** field.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/39683394-601d-389f-ea81-f43cbbe1014a.png)
Change the **Description** of the added `Expression` like this.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/82783261-e20d-b973-79bf-45b23f0032c0.png)
Preview now! !
If the value of the **Status** field is Y, return True, otherwise return False.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/cf5c5d30-c69e-6eaa-04f2-6bd070d9db53.png)
I hope this will help your work.
PythonでVOICEVOX APIを使ってwavを書きだす

はじめまして。
初めて記事を書く上、学習中の身なので間違い等あると思います。お手柔らかにお願いします。

# 概要
VOICEVOX APIをアプリ経由で使ってみたのでQiitaを使ってみるのも兼ねて使い方を残しておくことにしました。対象者はPython始めたてでrequestsについてよくわかってない人です。私はrequestsの中身をイマイチ知らなくて躓きました。

# VOICEVOXを使う
今回はアプリ版を使います。CPU、GPUどっちでもいい。
OSSのエンジンだけでもできるらしいです。

https://voicevox.hiroshiba.jp/

## リファレンス
アプリを起動状態で50021ポートにアクセスするとローカルの専用サーバにアクセスできます。色々書いてありますが見るべきはメソッドとパラメータ。

http://localhost:50021/docs

# Pythonからrequestを送る
全体のコードは最後にまとめてあります。
## 音素データを生成する
requestsとplaysoundはpipしてください。
playsoundは別に必要ではないです。

定番のrequestsを使います。/audio_queryはJSONで音素情報を返します。
urllib.parse.quote()で日本語を変換してます。
直接文字列を入れてもrequests.post()が変換してくれる？っぽいけど一応パースかけてます。

textは読ませたい文字列で、speakerは話者をintで指定します。1はずんだもん。
結果はresponseで返ってきますが、中身がjsonなので見たい場合は変換必須。

```voicevoxTest.py
import requests
import urllib.parse
import json
from playsound import playsound

# 音素データ生成
text = urllib.parse.quote("これはテスト出力です")
response = requests.post("http://localhost:50021/audio_query?text=" + text + "&speaker=1")

print(json.dumps(response.json(), indent=4))
```

## 音声合成
実際に合成するには/synthesisを指定。ここのspeakerは実際に喋るキャラを指定します。
post()メソッドのjsonにさきほどのresponseが持っているjson()メソッドでjson形式で渡します。
GUIアプリで合成したときと同じくらいの時間がかかるので数秒待ちます。
結果はresp_wavにresponseとして返ってきます。

```voicevoxTest.py
# 音声合成
resp_wav = requests.post("http://localhost:50021/synthesis?speaker=1", json=response.json())
```

## wavデータを書き出す
返ってくるのはresponseで、wavは自分で書きだす必要があります。resp_wav.contentにはバイナリのwavが入っているのでそれを読んでファイルに書き出します。
形式は.wavじゃないと読めなくなると思います。

playsound()は指定パスの位置にある音声ファイルをpython上で再生するライブラリです。

```voicevoxTest.py
# バイナリデータ取り出し
data_binary = resp_wav.content

# wavとして書き込み
path = "test.wav"
wr = open(path, "wb")
wr.write(data_binary)
wr.close()

# 再生
playsound(path)
```

## 全体
うまくいけば実行時に読み上げが同時に行われるはずです。
```voicevoxTest.py
import requests
import urllib.parse
import json
from playsound import playsound

# 音素データ生成
text = urllib.parse.quote("これはテスト出力です")
response = requests.post("http://localhost:50021/audio_query?text=" + text + "&speaker=1")

# responseの中身を表示
# print(json.dumps(response.json(), indent=4))

# 音声合成
resp_wav = requests.post("http://localhost:50021/synthesis?speaker=1", json=response.json())

# バイナリデータ取り出し
data_binary = resp_wav.content

# wavとして書き込み
path = "test.wav"
wr = open(path, "wb")
wr.write(data_binary)
wr.close()

# 再生
playsound(path)
```

# まとめ
ある程度開発経験がある方ならリファレンス読んでパッとコード書けちゃうのかもしれません。
Qiitaの記事作成は便利な機能が揃っていて使いやすいですね。
webエンジニア達よ技術に捉われるな　~テクノロジーからの解放~

# 最初に
バズリそうなタイトル付けたかっただけす。すいま**せん**。スイマ**ソン**、マイクタイ**ソン**、マイケルジャクs

*軽く自己紹介*
webエンジニアとしては７年目ぐらいです。


**今回の記事では**
私自身が、webエンジニア3年目ぐらいの時に陥った罠と、その時の解決方法について書いていこうと思う。

少しビジネス寄りの話になってしまいますがご了承ください


# 時は遡り。。。
**webエンジニアになって3年目の夏。。。**

私は3年目ということもあり、

webフレームワークを手足のように扱え、トレンドのフロントエンド技術も抑え、開発の速度も上がり

**どんな機能も作れるぜ**、私に作れないものはない、どんとこい超常現象、五条悟とは私のこと。　

といった状態でした。


そんな中、開発していたサービスは既存ビジネスモデルの**DX化**でした。

:::note
DX化とは
DX（デジタルトランスフォーメーション)
デジタル技術を活用して、製品やサービス、ビジネスモデルを変革すること

今回の例は、既存のアナログなビジネスモデルをwebサービス化にしました。
昔は株券を証券取引上で買ってたけど、今はネットで買えるよね。みたいなサービスだと思って
:::


### 登場人物紹介
**私**:sunglasses:
自称最強エンジニア、開発系のことは大体できるようになったイキリーマン

**PdM**:bow:
若きPdM、最新の技術トレンドに詳しく、イケてるサービスを作りたい

**ユーザー**:speaking_head:
実際にサービスを使ってもらっているユーザー

 
### ある日のMTG

私:sunglasses:
「うーん、私の考えた最強の機能、リリースしたはいいものの、全然使われてへんなぁ」

PdM:bow:
「ほなら**ユーザーインタビュー**してみよか」

:::note
ユーザーインタビューとは
サービスに対する意見をユーザーに直接聞く
今回のインタビューでは、使ってくれているユーザーを自社に招いて
実際にサービスを操作している画面を見ながらインタビューを行った
:::

<hr>

### ユーザーインタビュー開始！

私:sunglasses:
「先日リリースした最強機能ですが、なぜ使われていないんですか？」


ユーザー:speaking_head:
「うーん、そもそも紙ですら難しくてで**やりかたのわからない業務**だったんだよね。
今までは**専門の人に任せてた**けど、とんでもない値段がかかってたから、今回webサービスでそれが完結するってことで使ってみたけど、結局使い方がわからなくてね」

私:sunglasses:
「ではどのような機能であれば使いたくなる、使えるようになりそうでしょうか？」

ユーザー:speaking_head:
「そうだねぇ、**もっと直感的にわかりやすく**なっていれば使うかなぁ」


### ユーザーインタビュー後

私:sunglasses:
「**直感的に**かぁ、今の機能は確かにボタンの位置が分かりづらかったり、入力して欲しい項目が分かりづらかったり、**使いやすくはない**よなぁ」

PdM:bow:
「そうやねぇ、フロントがダサいなぁ、項目が多かったりごちゃごちゃしていて分かりづらいなぁ、私さんはreact使えるみたいやし、そこら辺のUXの改善やってみよかぁー」

<hr>

### UXを改善した機能をリリース

**直感的に分かりやすく**を意識し、フロントエンド技術も取り入れ、フォーム周りもスッキリさせ、
入力がサクサクと進むような、超おしゃれハイパー最強リッチデザインの機能にアップデートしました。

私:sunglasses:
「はぁ　はぁ、めっちゃ大変やったけどUX改善したで！これなら完璧に使えるやろ！！！なぁ！！！！？！！めっちゃオシャレやし分かりやすいで！！！！トレンドの技術やで！！！なぁ！！！」

PdM:bow:
**【悲報】利用率伸びず**

私:sunglasses:
「ぐにゃあー、どうして！酷すぎる！死んじまう！」


## 再度ユーザーインタビュー.....

私:sunglasses:
「なんで使ってくれないんですか！泣」

ユーザー:speaking_head:
「確かにオシャレですごいかっこいいサービスだけど、**そもそもアナログな業務もわからんねん**、オシャレになってるけど、このXXXXってフォームには何を入れればいいかわからんねん、**XXXXって言葉の意味もわからへん**、ワイはそのレベルや」

私:frowning:
「えっ」


## 結果的に。。。。

複数の顧客インタビューを行い、入力を行えてないユーザーの大半が
現在の**アナログな業務ですら行えていない状態**だった。

結果的にはフォーム自体はシンプルにし、**入力項目それぞれの説明を直接書く**ことで利用率は向上した。
具体的にはこんな感じで全ての入力項目に長い説明を追加しました。
![スクリーンショット 2023-06-26 16.06.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396288/58f46d66-664d-40ea-2f60-a9be6478d047.png)

## 原因と対策

原因
- 技術力が上がり、新しい技術を実装するのが目的になっていた
- 革新性の高いプロダクトということでPdM含めチーム全体でダサいUI UXになるのを毛嫌いしていた
- ユーザーインタビューで出てきた**課題の表面だけしか見えていなかった**
- 結果的に顧客ファーストではなく、技術ファーストになっていた

対策
- 技術を念頭にするのではなく使ってもらう顧客を常に考えるべき
- 革新性が高ければ高いほど市場にないということ、導入段階では使い方等のフォローは必要
- ユーザーインタビューではユーザー自身も課題がわかっていない可能性があるため、入念に行う
- 顧客ファーストで行う。不必要な機能は実装しない


## まとめ

エンジニアとして経験を積んでいくと、知識も技術力も増え、**できること**が増えます。
それに伴い、**やりたいこと**もたくさん出てくるかと思います。

しかし、サービスを開発するエンジニアとして考えるべきことは、
**技術をどう使うか**ではなく、**どのように提供するか**です。
顧客が求めているものは、必ずしも**リッチなUIや派手なデザイン**に限られるわけではない。

ユーザーインタビューを通じて顧客の声に耳を傾け、彼らが抱える、**本当の課題**を考えることが重要です。
私たちエンジニアは**課題を解決することにフォーカス**すべきであり、技術やデザインはその手段に過ぎない。


以上が私が経験した罠と教訓でした。
技術力の向上も大切ですが、常に**顧客の価値提供**を念頭に置くことも大事！　坂東は　英二
C#とVB.NETでPDFをフレキシブル構造のWord文書に変換する

PDFは比較的安定した固定フォーマットであり、直接編集や修正が困難な一方、Word文書はより柔軟で編集や組版が可能です。PDFをWordに変換することで、文書のテキスト、画像、書式を簡単に変更、調整することができます。前に、PDF を固定形式の Word 文書に変換する方法を説明しました。この記事では、PDF をフレキシブル構造の Word 文書に変換する方法を紹介します。 このタイプの文書は通常、報告書、提案書、契約書、仕様書など、頻繁に編集や改訂が必要な状況で使用されます。詳細な手順は次のとおりです。

## プログラム環境
* [Free Spire.PDF for .NET](https://www.e-iceblue.com/Introduce/free-pdf-component.html#.ZH_ihWdByUk)
* Visual Studio 2022

## DLLファイルのインポート
* Visual Studioを開いて新しいプロジェクトを作成します。
* 「Solution Explorer」で「References」を右クリックします。
* 「NuGet Manage Packages」を選択します。
* Free Spire.PDF for .NETを検索してインストールします。

または、この[リンク](https://www.e-iceblue.com/Download/download-pdf-for-net-free.html)から直接ダウンロードすることもできます。
* Visual Studioを開いて新しいプロジェクトを作成します。
* 「Solution Explorer」で「References」を右クリックします。
* 「Add Reference」を選択します。
* 「Browse」をクリックします。
* DLLを検索してインストールしてプロジェクトにインポートします。

コード
C#:
```c#
using Spire.Pdf;

namespace ConvertPdfToFlexibleLayoutWord
{ 
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentオブジェクトを作成する
            PdfDocument doc = new PdfDocument();

            //サンプルPDFファイルを読み込む
            doc.LoadFromFile("sample.pdf");

            //変換オプションを指定する
            doc.ConvertOptions.SetPdfToDocOptions(true, true);

            //PDFをDocに変換して保存する
            doc.SaveToFile("output/ToDoc.doc", FileFormat.DOC);

            //PDFをDocxに変換して保存する
            doc.SaveToFile("output/ToDocx.docx", FileFormat.DOCX);
            doc.Close();
        }
    }
}
```
VB.NET:
```vb
Imports Spire.Pdf
 
Namespace ConvertPdfToFlexibleLayoutWord
    Class Program
        Shared  Sub Main(ByVal args() As String)
            'PdfDocumentオブジェクトを作成する
            Dim doc As PdfDocument =  New PdfDocument() 
 
            'サンプルPDFファイルを読み込む
            doc.LoadFromFile("sample.pdf")
 
            '変換オプションを指定する
            doc.ConvertOptions.SetPdfToDocOptions(True, True)
 
            'PDFをDocに変換して保存する
            doc.SaveToFile("output/ToDoc.doc", FileFormat.DOC)
 
            'PDFをDocxに変換して保存する
            doc.SaveToFile("output/ToDocx.docx", FileFormat.DOCX)
            doc.Close()
        End Sub
    End Class
End Namespace
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/f46451be-f74b-bf02-cd6b-a7822dd5c9d4.png)
このコードでは、Spire.Pdf ライブラリが最初に導入されます。 次に、PdfDocument オブジェクトを作成し、PDF ドキュメントを読み込みます。 SetPdfToDocOptions メソッドを使用して変換オプションを設定します。 最後に、PDF ファイルは、SaveToFile メソッドによって .doc および .docx 形式の Word 文書に変換されます。
上記の方法を参考にして、[PDFをExcelに変換](https://www.e-iceblue.com/Tutorials/Spire.PDF/Program-Guide/Conversion/Convert-PDF-to-Excel-in-C-VB.NET.html)したり、[PDFを画像に変換](https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Convert-PDF-Page-to-Image-with-C-code.html)したりすることもできます。
Are Deep Neural Networks SMARTer Than Second Graders?


# 1. 概要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/f48176a8-b213-69f5-6bb0-b6cdcbecb5ab.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/83773ce1-fc20-6a3e-ccdc-d157ceac18a9.png)

小学2年生でも解ける問題が、ChatGPTに代表されるような大規模モデルで解けるかを試したところ全く性能が出なかったことから、汎用性があると言われている大規模学習モデルが学習していないデータ(Out-Of-Distribution: OOD)について如何に脆弱かを課題視している論文。
ICCV2023でこのチャレンジに対してWorkshopを開催することが決定している。

---

# 2. 新規性
米国の数学オリンピック協会と協力してSMART-101(a Simple Multimodal Algorthmic Reasoning Task)データセットを作成し公開した。データセットには、6-8歳児向けの101個のパズルの課題があり、言語問題・図形問題・言語と図形の融合問題から構成されている。オリジナルの数学オリンピックの問題をベースに自動で類似問題を生成している。
また、数学的な問題の解き方を学ぶアルゴリズムを開発している。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/4e72220d-6a29-570d-d043-09dc2b2e43fe.png)
テキストと画像の入力に対して数学的解法を学べるようメタラーニングのアーキテクチャが提案されている。ここで、ネットワーク構造はSiamese Networkではなく、それぞれ独立したフローとなっている。画像系のバックボーンには、Vision Transformers(ViTs)、ResNets、Masked Autoencoder(MAE)などを使用し、言語系のバックボーンにはBERT/GPT/GloVeなどのモデルを使用している。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/ae8a8005-d623-5f2b-296d-48869447be5f.png)
各種バックボーンとの比較に加え、CLIPやFLAVAなどのテキストと画像をペアで学習させた大規模モデルとの比較も実施している。CLIPやMAE＋BERTなどよく使われるモデルでも、実際の小学2年生(3000人)の平均スコアと比べて圧倒的に低い正答率しかないことに驚かされる。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Cherian_Are_Deep_Neural_Networks_SMARTer_Than_Second_Graders_CVPR_2023_paper.pdf>

last updates: June 21 2023
VoxFormer: Sparse Voxel Transformer for Camera-Based 3D Semantic Scene Completion


# 1. 概要
2D画像を入力として、セマンティックセグメンテーションされた3Dボクセルを出力する新たなTransformerの研究。

---

# 2. 新規性
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/2cbcd7e3-73da-cb99-6864-2c75d5edd320.png)
前段で2D画像から深度推定を行い、疎なボクセルを生成してクエリの入力にする。後段で疎なボクセルから密な3Dボクセルを生成する。2D画像に映っている各ピクセル情報は、3Dシーンでも見えているところの表現になっていることを利用し、画像特徴が得られたところから伝播させて3Dボクセルを生成することで精度を向上させている。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/271a2d13-41dd-eb20-da70-02a9c923604d.png)
前段では軽量な2D-CNNを使って見えている範囲の特徴を3Dのボクセルに与えながら疎なボクセルを生成する。後段では、Masked Autoencoder(MAE)のようにマスクトークンを見えていないボクセル領域へ埋め込み、このマスクを学習させることでセマンティックセグメンテーション付きの3Dボクセルが得られる。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/e0c37903-a637-de1f-84ad-bf4347bb3237.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/6ffdeb82-086b-5b4c-089f-67adf4d1d112.png)
SemanticKITTIデータセットで評価したところ、シーンを補完する性能が20%向上し、セマンティックセグメンテーションの精度が18.1%向上した。また、メモリ使用量が少なく学習でのメモリは16GB以下に抑えている。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Li_VoxFormer_Sparse_Voxel_Transformer_for_Camera-Based_3D_Semantic_Scene_Completion_CVPR_2023_paper.pdf>

last updates: June 21 2023
GigaGAN: Scaling Up GANs for Text-to-Image Synthesis


# 1. 概要
テキストから画像を生成するタスク(text-to-image)はここ最近で劇的に成功例が増えているが、画像を生成するモデルのアーキテクチャの進化によるところが大きい。以前は、敵対的ネットワーク(Generative Adversarial Networks:GANs)がデファクトとなっていたが、昨今は拡散モデル(diffusion model)と自己回帰モデル(autoregressive)を用いたDALL・E2などの大規模画像生成モデルが主流になっている。
この研究では、敵対的ネットワーク(GANs)がこうした大規模ネットワークに比べてパラメータが少ないことが原因で精度に差が出ているのではないかと考え、10億(1B)のパラメータを持つGigaGANを提案している。

---

# 2. 新規性
GANsのパラメータは高々200M程度に留まりスケーラビリティがないことが問題であったため、以下のような工夫を加えて学習可能なパラメータを圧倒的に増やすことに成功した。
1) L2 self/cross-attention(著者はこの項が一番重要だと述べている)
2) Adaptive kernel selection
3) Multi-scaling training
4) Matching-aware Loss
5) Clip contrastive Loss(著者によれば次に重要な項は対照学習のロスとのこと)
6) Vision-aided adversarial Loss

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/a2ceb4c6-3f67-d98e-734b-6b7001a46bf0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/135507f7-b396-0074-1587-e6eab8cee031.png)
Generatorのアーキテクチャは荒い画像の多重ピラミッド(8x8-64x64)から学習して徐々に高解像度化していくcoarse-to-fineの戦略を取っており、事前学習にCLIPを採用することでテキストから画像が生成できるように調整を加えている。Discriminatorの学習時にも多重解像度で学習が進む。興味深いことに、一度低解像度で学習しておいたGeneratorのネットワークの入力に512x512の画像を入れるとマルチスケールで2Kの解像度の画像が高解像度で出力される。つまり、高解像度化において追加学習は含まれていない。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/3cb41eff-ee5f-c6bb-b542-34e414debcdf.png)
LAIONデータセット(20億枚:2B)の大規模ネットワークを使ってGANsの学習を実施したが、1エポック学習するのに2－3週間かかったため学習を打ち切り生成結果を見てみたところ、クオリティが非常に高く著者も驚きの結果となった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/e0262bf1-9f82-d88b-8cdd-02f66530bace.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/c67bf49c-32e2-76d9-c0a9-aac0b277f5b5.png)

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Kang_Scaling_Up_GANs_for_Text-to-Image_Synthesis_CVPR_2023_paper.pdf>

last updates: June 21 2023
What Can Human Sketches Do for Object Detection?


# 1. 概要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/3edc44a3-c008-902b-afde-9c6297274600.png)
これまでのコンピュータビジョンの研究の流れを振り返ってみると、自動で物体を検出する研究に終始しており、人間とのインタラクションはスケッチによる画像検索に限定されていた。この研究では、人間のスケッチ能力が個人の抽象レベルの差はあれ、物体検出をするのに非常に有効であることに着目し、スケッチベースの物体認識システムを構築した。

*Award Candidate

---

# 2. 新規性
”草を食べている”群れの中の”シマウマ”といった特定の物体をスケッチで指定して検出ができたり、”シマウマの頭”のようなより具体的な部分をスケッチで表現して検出が可能となる。
スケッチが描かれるまでどのカテゴリが検出対象か知らなくてもよいのでゼロショットで推論が可能で、追加の教師情報や弱教師有のクラスラベルなどは一切必要としない。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/d799645e-6867-85cd-7d76-ea76797534eb.png)
前段では、テキストと画像をペアで学習したCLIPをVision Transformerのバックボーンに用いて、ViTの重みを凍結した状態でスケッチと入力画像とのTriplet Lossを求めて各物体のクラス分類ができるように学習する。大規模モデルを凍結して特徴量抽出器として利用することで、効率よくパラメータの学習を進めることができまた学習の収束が速くなる。後段では、検出された物体領域とスケッチの特徴をペアで合わせこみ画像とスケッチの対応付けを行う。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/d04de734-34c5-3747-30d1-379d8e0367ac.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/5a2c49aa-6d11-13f9-407e-7ccb735639f3.png)
PASCAL-VOCやMS-COCOなどのデータセットで評価実験を行っており、ゼロショット推論で教師有手法や弱教師有りの物体検出手法の精度を上回った。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Chowdhury_What_Can_Human_Sketches_Do_for_Object_Detection_CVPR_2023_paper.pdf>

last updates: June 21 2023
Aligning Step-by-Step Instructional Diagrams to Video Demonstrations

# 1. 概要
家具の組み立てなどを行う際に図面をもとに組み立てを行うシーンの動画を自動でタグ付けする研究。図面と動画の組み立てシーンがペア付けされることでより直感的にユーザーに組み立て工程を示すことができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/be5b25b0-cfe2-a8e4-3739-079270fabe57.png)

---

# 2. 新規性
IKEAの家具のマニュアルとその組み立て動画をYoutubeから集め、IKEA Assembly in the Wild(IAW)というデータセットを公開した。アノテーションはAmazon Mechanical Turkなどを利用し、420の家具に対して1005本の組み立て動画を含んでいる。また、新たなConstructive Lossを提案している。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/933ba8d6-24e0-6697-9a36-6c65d2742011.png)
組み立て動画とマニュアル画像の二つを入力として高次元特徴量を抽出し、対照学習(contrastive learning)を用いて1)動画と画像に対する共通する特徴、2)動画間に共通する特徴、3)画像間に共通する特徴をそれぞれ求める。
動画と画像の双方向と、共通する特徴を求めておくことで、図面を入力としたときの動画中の正しい位置が推定できるようにしている。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/2bbcf56a-4535-48f8-daf1-8d55a5fc2597.png)
タスクが特殊なので評価は手動で行っている。既存手法に対して、動画から対応するマニュアル図を探すタスクと、マニュアル図から動画を探すタスクのいずれにおいても高い精度で検索できることを示した。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Zhang_Aligning_Step-by-Step_Instructional_Diagrams_to_Video_Demonstrations_CVPR_2023_paper.pdf>

last updates: June 20 2023
PLIKS: A Pseudo-Linear Inverse Kinematic Solver for 3D Human Body Estimation


# 1. 概要
人を撮影した2D画像から3Dメッシュを自動生成する手法としてPLIKS(Pseudo-Linear Inverse Kinematic Solver)を提案している。

---

# 2. 新規性
既存手法では、画像から人体のメッシュを再構成する過程でカメラ位置に依存する問題や人体の体系に依存する問題などに適応できなかったが、この研究では画像の各ピクセルが3D座標とマッピングされたベクトルとして表現されることでカメラ位置や体系に依存せずに3Dの人体モデルを再構築することができる。カメラのキャリブレーション情報がある場合は補正情報を使ってより正確に3Dメッシュを再構成可能となっている。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/37d241f5-2a71-1fa8-69cb-aa0e97fca9fe.png)
人体の形状と姿勢を表現するためのパラメトリックモデルとしてSMPL(Skinned Multi-Person Model)が知られている。一般的なSMPLでは、人体を3Dでメッシュ表現するために、骨格構造を司る各関節の回転と位置情報を含むパラメータを含んでいるが、提案手法では人体のポーズ・形状・移動量のそれぞれを最適化することで2D画像にフィットする3Dメッシュモデルを生成する。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/11fc6696-19d1-0a3b-ab78-324e06d1989d.png)
定量評価の結果、従来手法と比べて10%以上の改善が見られ、特にAGORAデータセットにおいては再構築の際の誤差を12.9mm改善している。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Shetty_PLIKS_A_Pseudo-Linear_Inverse_Kinematic_Solver_for_3D_Human_Body_CVPR_2023_paper.pdf>

last updates: June 20 2023
Magic3D: High-Resolution Text-to-3D Content Creation


# 1. 概要
NeRF(Neural Radiance Fields)を使った3Dモデルの生成は数多く提案されているが、先行研究の”DreamFusion”では事前学習済みのテキストから画像への拡散モデル(diffusion model)を使用してNeRFを最適化することで高精度な3Dモデルを自動生成することに成功している。
一方、1)NeRFの最適化が非常に遅い、2)NeRFの学習に低解像度(64x64)を用いたため生成クォリティが低い、といった問題があった。

---

# 2. 新規性
低解像度の画像を生成しておいて徐々に高解像度化する技術(coarse-to-fine)を利用して高速化と高解像度化に成功した。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/4a104e8b-27f9-74ed-1046-997ca7378374.png)
まず、疎な3Dモデルの特徴量を用いて低解像度な画像で学習されたNeRFのモデル最適化を高速に行い、低解像度の画像で学習されたNeRFで構築されたテクスチャ付きの荒いメッシュモデルを求める。次に、微分可能レンダラーを用いて高解像度の画像を参照しながらパラメータの最適化を行う。荒く求めておいたメッシュに高解像度のテクスチャがマッピングされることで高品質な3Dモデルが得られる。カメラ位置はランダムな位置に配置されることで多面的な見かけに対応している。
*SDS(Score Distillation Sampling) Loss

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/a5e3ce3c-c660-79e0-ee7e-09c95dbd57fa.png)
先行研究であるDreamFusionに対して2倍高速に512x512の高解像度な3Dモデル生成に成功している。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Lin_Magic3D_High-Resolution_Text-to-3D_Content_Creation_CVPR_2023_paper.pdf>

last updates: June 20 2023
【Flutter】環境構築/エラーメモ

# はじめに
Windows11にFlutterを導入しました

その際エラー対処で戸惑ったので、もし同じエラーが出た方が今後いた場合に参考になれば…と思い記事を書きました

## 発生したエラー
表示されたエラーメッセージ
```powershell
Unhandled exception:
Exception: Cannot find the executable for `where`. This can happen if the System32 folder (e.g. C:\Windows\System32 ) is removed from the PATH environment variable. Ensure that this is present and then try again after restarting the terminal and/or IDE.
#0      throwToolExit (package:flutter_tools/src/base/common.dart:10:3)
#1      _WindowsUtils._which (package:flutter_tools/src/base/os.dart:488:7)
#2      OperatingSystemUtils.whichAll (package:flutter_tools/src/base/os.dart:101:43)
#3      AndroidSdk.locateAndroidSdk.findAndroidHomeDir (package:flutter_tools/src/android/android_sdk.dart:124:46)
#4      AndroidSdk.locateAndroidSdk (package:flutter_tools/src/android/android_sdk.dart:148:36)
#5      AppContext._generateIfNecessary.<anonymous closure> (package:flutter_tools/src/base/context.dart:104:42)
#6      _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:535:23)
#7      AppContext._generateIfNecessary (package:flutter_tools/src/base/conte
```

## 原因
<font color="Red">Pathの設定ミス</font>

Flutter/binへのPathしか設定していなかったのですが、Flutterはwhere.exeとgit-cmd.exeも連動して動くので、where.exeとgit-cmd.exeへのPathも一緒に設定する必要がありました

## 解決策
where.exeへのPath 　
```C:\Windows\System32```

git-cmd.exeへのPath　　
```C:\Program Files\Git\git-cmd.exe```

を追加する

以下の写真のように、設定したらエラーが解消されました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649974/487ab790-ee2f-89e3-9653-ecd8242acb3a.png)
※Flutter/binへのPathは、Flutterのファイルを置いた場所によって異なるので注意してください

## さいごに
自分でエラーを解消できて嬉しかったです
（エラーを出さないのに越したことはないのですが…）

今回Flutterがとても良いと聞いて導入したので、これから使いこなしていけるように頑張りたいと思います
まだまだ理解度が低いですし技術力も低いので、もっと成長できるように努力します
Neural Volumetric Memory for Visual Locomotion Control


# 1. 概要
四足自律歩行型ロボットを使って、舗装されていない道路で自律移動させる研究。ロボットの前方に取り付けた深度カメラ一つのみを用いて障害の多い道を歩かせるために、過去に走行した地形情報を利用して現在の地形を推定する手法を提案している。

---

# 2. 新規性
単一の深度カメラのみを使って自律走行型のロボットを実世界の走行が難しい場所で歩かせることに成功した。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/f3f21d66-05e1-0912-0aae-8be715663d19.png)
過去に走行した複数のカメラビューの深度情報を使って、カメラ位置とロボットの移動や回転などの変更量を学習して現在の観測情報に反映することで、過去の知見からうまく動作した行動パターンを現在でも再現できるようにする。
アーキテクチャは一つ前のフレーム情報を使って現在のシーンを予測し、予測マップと現在観測した深度マップをReconstruction Lossを使って自己教師有り学習を使って学習しており、シーンを再構築するのに十分な幾何情報が学習できるようにしている。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/b43b9b50-2829-9c7c-b1ac-6d322b05caf9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/e4f3c33c-00da-c4c5-d1b8-7803ea34ca14.png)
走行の難しい地形においても従来手法よりも精度よく移動できている。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Yang_Neural_Volumetric_Memory_for_Visual_Locomotion_Control_CVPR_2023_paper.pdf
>
last updates: June 20 2023
GLIGEN: Open-Set Grounded Text-to-Image Generation


# 1. 概要
言語から画像を生成するタスク(text-to-image)における事前学習済みの拡散モデル(diffusion model)に対して、追加の制約を与えることでタスクごとにコントロールしやすいようにした研究。

---

# 2. 新規性
事前学習済みモデルは重みを更新せず(frozen)、トランスフォーマーのアーキテクチャの中に学習可能なパラメータを埋め込むことで、大規模モデル自体の再学習を必要とせずに対象物体のポーズを自由に変えたり同じ物体で異なるシーンの画像を生成できたりするようになった。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/56571915-20f9-0d2a-6577-fc5c6731cfb7.png)
画像のパッチを予測する部分をVisual、画像のパッチから説明文を予測する部分をCaptioning、与えられた説明文から対応する画像領域を予測するGroundingの3つの予測を同時に行う。
特に、Groundingの予測を学習可能な層であるGated Self-Attentionで行うことで言語から想起される多様なバリエーションと入力となる画像の制約情報をうまく融合させている。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/63d40b52-b11c-8885-5346-449c2d1d3cd2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/6a5ff43e-1d4d-6969-78a3-265a324d8188.png)
COCOとLVISを用いて構図を入力として画像生成を行うタスク(layout-to-image)で、Zero-shotで性能を評価したところ、既存手法を大幅に上回る性能を示している。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Li_GLIGEN_Open-Set_Grounded_Text-to-Image_Generation_CVPR_2023_paper.pdf>

last updates: June 19 2023
Python環境構築

# 目次


# 1 Pythonの導入

Windowsの人はこちらを参考にしてください
https://www.python.jp/install/windows/install.html

Macの人はこちらを参考にしてください
https://www.python.jp/install/macos/index.html

# 2 VSCodeの導入

ここからDLしましょう
https://code.visualstudio.com/

# 3 VSCodeの拡張機能

次の2つを導入しましょう

https://marketplace.visualstudio.com/items?itemName=ms-python.python

https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter

# 4 いろいろ使えるようにする

コマンドライン（ターミナル）で，次を実行しましょう．

```sh
pip install jupyter
```
```sh
pip install numpy
```
```sh
pip install pandas
```
HandsOff: Labeled Dataset Generation With No Additional Human Annotations


# 1. 概要
敵対的生成ネットワーク(GANs)の利活用の一つとして、獲得した表現力を活かして自動でラベル付きのデータセットを生成する研究が提案されている。しかし、従来手法では合成画像用の新しいアノテーションを必要としているため、アノテーターを雇って新規のデータセットを作り出すためのアノテーション作業をしなければならず、生成されたデータセットの品質を担保するためにも人手の作業が減らずにコストダウンを図ることが難しかった。

---

# 2. 新規性
提案手法では、50枚未満の既存のラベル付きの画像セットで学習しておくことで、無尽蔵に新たなデータセット用の画像を生み出す技術を開発した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/1ff7b2aa-20db-23a1-9918-b159b80c4db6.png)

---

# 3. 実現方法
特に、人の顔や車、全身が映った人物像や都市部で車を運転するシーンなど、これまで再現が難しかったドメインにおいて、ピクセル単位でラベル付きのデータセット画像を自動生成することに成功している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/60341df0-6169-3e3b-8df0-ca2ff8430903.png)

---

# 4. 結果
画像の領域分割を推定するセマンティックセグメンテーション(semantic segmentation)や特徴点を予測するキーポイント検出(key-point detection)、対象までの距離を推定する深度測定(depth estimation)といった様々なラベルを自動で生成することができ、かつ転移学習や画像生成技術を用いた従来技術に比べて最高性能を達成している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/fee58cdc-ef0d-4b8e-1998-2df0a68920b9.png)

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Xu_HandsOff_Labeled_Dataset_Generation_With_No_Additional_Human_Annotations_CVPR_2023_paper.pdf>

last updates: June 19 2023
GitHub PagesによるWebページ公開方法


## GitHub Pagesの公開手順

:::note warn
GitHubのアカウントを既にお持ちの場合を想定しています。
まだアカウントを作成していない場合は作成してから拝読ください。
:::


### 1.リポジトリの作成
画面右上の＋ボタンをクリックし、「New repository」を選択します。
<img width="５00" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491284/1379e755-e15b-94ca-70df-ce7906facc68.png">

すると、次のような画面に遷移するので「Repository name*」の欄にリポジトリ名を入力してください。なお、公開範囲はPublicを選択してください。

そして画面下部の「Create repository」を押下してください。

<img width="５00" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491284/63e69a10-04fa-bafc-9fc7-ef1a15578d80.png">

次のような画面が表示されるので「creating a new file」をクリックしてください。

<img width="５00" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491284/0fcc8d07-29d4-196d-d6d6-5812d2319200.png">

### 2.公開するファイルの作成
例えばファイル名に「test.html」と入力し、ファイル内容を「test」とだけ入力したファイルを作成します。そして「Commit changes...」ボタンを押下します。
もちろんローカルの既存ファイルをアップロードする形でも問題ありません。
<img width="５00" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491284/077cf484-0fe0-a288-4274-2d4ddde9bf76.png">

次のようなダイアログが表示されるのでコミットメッセージを入力し「Commit changes」ボタンを押下します。
<img width="５00" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491284/0a42d043-1006-7274-3963-631bfc262959.png">

### 3.ページの公開

次のような画面が表示されるので「Settings」をクリックします。
<img width="５00" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491284/0221e4c9-39a3-54d2-8f67-f43ab1e742c0.png">

次のような画面が表示されるので「Pages」をクリックします。
<img width="５00" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491284/ddc1b09d-7e2a-0843-1288-5f05e68a63bd.png">

次のような画面が表示されます。
<img width="５00" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491284/1da55c35-ea08-d983-5e84-f0c9d6e7b057.png">

初期表示では「Branch」の項目が「None」に設定されていると思いますので、デフォルトブランチ「master」または「main」に変更して「Save」ボタンをクリックすると下画像の赤枠部分にURLが表示されます。
<img width="５00" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491284/9c55a963-2856-ca83-ee6e-9dda88a0adf1.png">


URLにアクセスしても何も表示されない場合、ページを表示する処理に時間がかかっている可能性があるため少し待ってから再度ページを再表示してください。



### 参考サイト

https://docs.github.com/ja/pages/getting-started-with-github-pages/creating-a-github-pages-site

https://prog-8.com/docs/github-pages
Understanding Masked Autoencoders via Hierarchical Latent Variable Models

# 1. 概要
マスク付きオートエンコーダー(Masked Autoencoder: MAE)は、入力画像をあえてマスクしてその復元パターンを学習させることで汎化性を得る技術のことで、そのシンプルな構造から自己教師有り学習(self-supervised learning)を用いたコンピュータビジョンの様々なタスクで効果が確認され注目を集めている。MAEを用いた研究は実験的にうまくいっているが、なぜ意味のある表現力が得られるのかなどその理論は未だ解明されていない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/40606937-e81c-d916-df07-c32f0a50a0f3.png)

---

# 2. 新規性
この研究では、画像を生成するプロセス自体を階層構造で表し、物体の各パーツなどの部分集合を葉に、物体全体の概念情報を根に持つように表現することで、MAEはピクセル単位の情報から根に当たる物体全体の概念情報を特徴量として獲得できることを明らかにした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/2d8eb6cd-4d11-60b6-db68-3bc867303439.png)

---

# 3. 実現方法
MAEの主要なハイパーパラメータであるマスキング比率とパッチサイズが、どの高次元特徴量に紐づいてノイズから元の画像パッチを復元する能力に寄与しているのかを解析的に明らかにしている。その結果、極端に大きかったり小さかったりするマスキングの比率を採用すると木構造の葉に当たる低次元の表現力に作用することが分かった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/ef580dfe-1dec-f99e-e80b-31d7424bd43d.png)

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/207b34f2-e2c5-aeba-12d0-c1d9382d1a0d.png)
MAEのオリジナル論文のように入力画像の75％をマスクすると階層構造的にオリジナルの入力画像と近くなったことから画像全体の情報を特徴量として獲得できていることが分かった。
一方、画像の90%をマスクした場合、物体の局所的な部位を学習してしまい汎化性が得られないことが分かった。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Kong_Understanding_Masked_Autoencoders_via_Hierarchical_Latent_Variable_Models_CVPR_2023_paper.pdf>

last updates: June 19 2023
Understanding Masked Image Modeling via Learning Occlusion Invariant Feature


# 1. 概要
マスク付き画像モデリング(Masked Image Modeling: MIM)とは、マスク付きオートエンコーダー(Masked Autoencoder: MAE)で解いていたような画像の一部をマスクしてそのマスク領域を元の画像から再構築することを学習するだけでなく、再構築された画像と元の画像の類似性を評価して学習にフィードバックする技術のことを指す。MIMでは、マスクされた領域とマスクされていない領域の関係性を学習することで、画像全体の特徴を獲得することを目指している。しかし、MAE同様、実験的にコンピュータビジョンのタスクでうまくいっているが、MIMの動作原理はまだ未解明である。

---

# 2. 新規性
この研究では、MIMが物体が他の物体で遮蔽されて一部見えなくなるオクルージョンに対して頑健な特徴を得ることができるために汎化性が高まるのではないかという仮説を立て検証している。

---

# 3. 実現方法
従来研究として対照学習(contrustive learning)を用いたSiamese Network(入力が二系統に分かれたネットワーク)による手法が多く研究されており、この研究ではSiamese Networkの構造に加えて、物体の見かけに不変になる特徴の獲得と復元後の画像と入力画像との類似度の評価を新たな制約として取り入れている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/6a7acf34-8a19-3d36-0e6c-6b0b13891a79.png)

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/8ece6a5d-102e-7d03-a0a3-a47600b7f317.png)
既存の表現学習(representation learning)の手法と比べて少ない学習回数で高精度化に成功している。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Kong_Understanding_Masked_Image_Modeling_via_Learning_Occlusion_Invariant_Feature_CVPR_2023_paper.pdf>

last updates: June 19 2023
SIEDOB: Semantic Image Editing by Disentangling Object and Background


# 1. 概要
画像中にあるすべての物体を個別に編集するためのツールを提案している。物体を一つずつ検出して領域する技術をセマンティックセグメンテーションといい、この研究では物体をセグメンテーションマップを使ってユーザーが自由に切り貼りしたり移動させたり柔軟に編集することを可能にしている。

---

# 2. 新規性
既存研究では、物体と背景とを同一のニューラルネットワークを使って分離していたため、編集後の画像の背景が歪んでいたり前景の物体のテクスチャの一貫性がなくなったりしていた。この研究は前景の物体と背景とで専用のサブネットワークを構築することで、複数物体が集まっているシーンや一貫した背景を持つシーンの生成に成功している。

---
# 3. 実現方法
- 背景の生成モデル
既知の背景領域から生成対象の領域に特徴をマッピングすることで、空や木々などの背景を個別に分離してそれぞれの領域を予測する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/54cfcb42-d0aa-ea9b-0aea-704daedba4aa.png)

- 前景物体の生成モデル
対象物体を画面から消すインペインティング編集と、物体を増やすジェネレーション編集の用途に分けてネットワークを構築している。各物体は個別にクロッピングされ、部分的にオクルージョンなどで欠けている物体はインペインティング用のネットワークを用いて物体領域を予測し、全部見えている場合はスタイルに頑健な物体生成用のネットワークを用いて物体を生成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/c9e020ba-f48c-a473-bb91-8e572d84c02f.png)

- 前景物体と背景の合成モデル
個別に生成した物体を元の位置に埋め込み、周辺領域や背景とシームレスに合成することで合成後の画像のクオリティを向上させる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/3e52e4b3-eb73-48ff-2fea-a4f67204cdad.png)

---
# 4. 結果
CityscapesとADE20K-Roomのデータセットで既存手法と比較実験を行っており、提案手法ではより多様な物体が編集可能になり、より背景のテクスチャに一貫性を持たせることができるようになっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/d948a878-0d7e-8746-8adc-1f66fe1dc0a1.png)

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Luo_SIEDOB_Semantic_Image_Editing_by_Disentangling_Object_and_Background_CVPR_2023_paper.pdf>

last updates: June 18 2023
MaskSketch: Unpaired Structure-Guided Masked Image Generation


# 1. 概要
画像生成時に条件を与えて所望の結果を得る手法として条件付き画像生成手法が多く提案されているが、既存手法では主にラベルやテキストのプロンプトのみを条件対象としていた。この研究ではMask Sketchというスケッチを条件付けの情報として用いることで、生成される画像を空間的に制約することを可能にしている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/a0efb1eb-5f7d-432d-9085-a19b1545f3df.png)

---

# 2. 新規性
事前学習されたトランスフォーマー(Masked Generative Transformer)を用いることで、追加学習やマスクと画像のペア学習などを一切必要とせず、異なる抽象度のマスクを入力としても画像を生成することができるようになった。Masked Generative Transformerの中間ブロックのSelf-Attentionがシーンのレイアウト構造や物体の形状などの入力画像の重要な構造情報を色濃く反映していることを発見し、これを用いた新たなサンプリング方式を提案している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/7f58e16f-15d9-de87-991d-c23111090f3d.png)


---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/0cfe408d-0abb-7966-fafe-352e64433f2c.png)
入力画像と生成画像の各レイヤーのAttentionの自己相似性(self-similarity)を求め、類似度が高いほど構造が似通っていることを利用してサンプリングを行う。

---

# 4. 結果

Mask Sketchは入力のスケッチ画のコンテクストや画像の構造情報をよりよく反映して画像生成できていることがわかる。ImageNetSketch、Pseudosketchでそれぞれ評価実験を行っており、既存手法よりもスケッチから画像への変換精度が高いことを確認している。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Bashkirova_MaskSketch_Unpaired_Structure-Guided_Masked_Image_Generation_CVPR_2023_paper.pdf>

last updates: June 18 2023
Multi-Concept Customization of Text-to-Image Diffusion

# 1. 概要
拡散モデル(diffusion model)を用いて言語から画像を生成するタスク(text-to-image)では、入力言語(prompts)から写真のように現実味のある画像が生成可能となったが、人間の創造性を考慮すると新しい概念(例えばペットや家具)をどう獲得するかや異なる概念をどうマージするかといった高度な編集が望まれる。この研究では、複数の概念の共同学習やわずかな例示によるファインチューニング(Few shot Fine-tuning)を実現している。

---

# 2. 新規性
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/b39aacd1-31c2-c59d-8286-f3b510b9dd9c.png)
異なるコンセプトのファインチューニングされた重みを合成して複数の概念情報を組み合わせる。言語から画像を生成するネットワークの一部を条件付けして変更することで効果的に新しいコンセプトを獲得でき、かつ高速なファインチューニングを実現している。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/971a5548-d72b-bc7e-0704-e4130a6306f1.png)
ネットワークのすべての重みを更新する際の重みの変化を調べた結果、クロスアテンション(Cross-Attention)層の平均変化量が他の層と比べて極めて高く、また全パラメータのうち5%と変更量が少なくてよいことが分かった。
これを利用して、新たな概念の追加やファインチューニングの変更をクロスアテンション層のKeyとValueで更新することで、学習時間の短縮と複数コンセプトの共同学習を実現した。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/f4092bff-a891-cac2-75e5-4ae4a78105a0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/243e6ef1-7dce-26c1-6adb-3e3a55b4f789.png)
Custom Concept101データセットで評価した結果、メモリ量を抑えて計算コストを削減しつつ従来研究に比べて精度の向上を実現できたことが分かった。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Kumari_Multi-Concept_Customization_of_Text-to-Image_Diffusion_CVPR_2023_paper.pdf>

last updates: June 18 2023
DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation

# 1. 概要
言語から画像を生成するタスク(text-to-image)では数多くのモデルが提案され入力したテキスト(prompts)から写真のような高品質な画像を、多様なバリエーションで生成することに成功している。一方、これらのモデルは与えられた学習セットの外見的な見かけを模倣したり、全く異なる文脈で特定の物体を再合成したりすることができなかった。こうした問題を”Subject-driven generation”という。

*Award Candidate: Honorable Mention (Student)

---

# 2. 新規性
提案手法では、テキストから画像へ変換する拡散モデル(Diffusion model)の”個別最適化”を実現することでSubject-driven generationを解決する方法を提案した。生成対象のわずかな画像例(Few shot examples)を入力として与え、事前学習済みのテキストから画像への変換モデルをファインチューニングし、入力で与えた特定の対象物と一意に関連付けさせるように学習を行うことで異なるシーンに特定の対象物を自然に合成することができる。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/a717e040-00fe-042a-ecb9-3d36f99590b6.png)
Few shot examplesとして3－5枚の画像を入力すると、一意な識別器が生成され事前学習ずみのtext-to-imageの大規模モデルが入力の対象物体でファインチューニングされる。推論時には、対象物は同一でも全く異なるシーンや文脈で画像生成することが可能になる。
ここで事前学習モデルに組み込まれた意味的な事前知識と新たに追加される個別最適化用のクラスの知識が保たれるようにロスを設計することで、参照画像には存在しない多様なシーンやポーズ、任意の視点や照明条件で対象物体を合成することが可能となった。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/de46462d-667b-3934-3844-740f7463f633.png)
DreamBooth Dataset(30個の対象物がそれぞれ3-6枚含まれる)を公開しており、合成対象物体の特徴を保持しながらテキストによる任意視点合成やレンダリング、異なるシーンや文脈での画像合成などを実現した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/85fc1cd2-67e7-e7a6-3d83-ba4747ea607a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/99ff2963-0aef-3de8-cb07-ac7d4fc9a54f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/89475919-f6fc-7473-8490-e4d09d1c4faa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/8f0f0a15-27e5-c443-c04f-b6bf24960f67.png)

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Ruiz_DreamBooth_Fine_Tuning_Text-to-Image_Diffusion_Models_for_Subject-Driven_Generation_CVPR_2023_paper.pdf>

last updates: June 18 2023
MySQLでのテーブル最適化について

MySQLデータベースでは、テーブルの効率を維持するために定期的な最適化が必要となることがあります。そのための重要なツールの一つが`OPTIMIZE TABLE`コマンドです。

# OPTIMIZE TABLEとは

`OPTIMIZE TABLE`は、未使用のスペースを回収し、データファイルをデフラグメントするためのMySQLコマンドです。これは、大量の行が削除されてテーブル内に多くの未使用スペースが生じた場合などに特に有効です。

# コマンドの使用方法

このコマンドは次の構造に従います：

```sql
OPTIMIZE TABLE テーブル名;
```

ただし、このコマンドを実行する際には注意点があります。この操作はテーブルをロックする可能性があるため、ビジーシステムや大きなテーブルでは注意が必要です。また、本番環境での適用前には、必ず安全な環境でテストしてください。

# テーブルタイプによる違い

また、全てのテーブルタイプがこの操作をサポートしているわけではありません。InnoDBテーブルの場合、`OPTIMIZE TABLE`は完全なデフラグメンテーションを行わない代わりに、`ALTER TABLE`コマンドにマッピングされます。これは、インデックスの統計を更新し、クラスタインデックスの未使用スペースを解放するためのテーブルの再構築を行います。

# まとめ

MySQLのパフォーマンスを維持するためには、適切なテーブル管理が不可欠です。`OPTIMIZE TABLE`コマンドを使用することで、テーブルのパフォーマンスを向上させ、データベースの効率を維持することができます。ただし、テーブルのタイプやシステムの状況によっては、このコマンドの影響を十分に理解し、適切に適用することが重要です。